搜索
bottom↓
回复: 11

verilog 程序写好以后,硬件不布线

[复制链接]

出0入0汤圆

发表于 2014-6-19 17:51:32 | 显示全部楼层 |阅读模式
写了一个DDS的程序,用bdf文件是可以实现的。如下图:



但是写成verilog文件以后(DDS_BLOCK.v),编译发现文件编译后,RTL图,逻辑都是对的,但是就是不在CPLD上面布线。用到的逻辑单元也只有6个。实在是疑惑不解。
module DDS_BLOCK
(
DATABUS,
ADDR,
WRITE,
READ,
CLK,
DDS_SINE,
PD_SINE
);
inout [7:0]DATABUS;
input [7:0]ADDR;
input WRITE,READ;
input CLK;
output [7:0] DDS_SINE;
output [2:0] PD_SINE;
wire CLK_DIV_N;
wire [8:0] ADDRBUS;
parameter addr_N_H=8'h0b;
parameter addr_N_L=8'h0c;
parameter addr_M=8'h0d;
parameter addr_PHASE=8'h0e;

reg [7:0] reg_N_H,reg_N_L,reg_M,reg_PHASE;

always @ (ADDR)
begin
        case(ADDR)
        addr_N_H:        reg_N_H=DATABUS;
        addr_N_L:        reg_N_L=DATABUS;
        addr_M:                reg_M=DATABUS;
        addr_PHASE:        reg_PHASE=DATABUS;
        default:;
        endcase
end

CLK_DIV CLK_DIV_entity
(
.CLK(CLK),  
.N(16),
.CLK_div_N(CLK_DIV_N)
);

ADDR_COUNT ADDR_COUNT_entity
(
.CLK(CLK_DIV_N),
.M(M),
.EN(reg_PHASE[7]),
.ADDR(ADDRBUS)
);
DDS_512 DDS_512_entity
(
.ADDR_i(ADDRBUS),
.DATA_o(DDS_SINE)
);

DDS_8 DDS_8_entity
(
.ADDR_i(ADDRBUS),
.PHASE_i(reg_PHASE[1:0]),
.DATA_o(PD_SINE)
);
endmodule




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2014-6-19 18:18:29 | 显示全部楼层
quartus可以自己将bpf转换为v文件

你先试下这个

出0入0汤圆

发表于 2014-6-20 13:04:34 | 显示全部楼层
verilog不叫程序,布线不成功会有提示。撸主不会强悍到不需要仿真就可以直接跑吧

出0入0汤圆

发表于 2014-6-20 14:07:52 | 显示全部楼层
7802848 发表于 2014-6-20 13:04
verilog不叫程序,布线不成功会有提示。撸主不会强悍到不需要仿真就可以直接跑吧 ...

不会写testbench的飘过。
改下程序就烧到FPGA里面试。。。。。
感觉testbench比写程序还难。

出0入0汤圆

发表于 2014-6-20 15:10:01 | 显示全部楼层
biansf2001 发表于 2014-6-20 14:07
不会写testbench的飘过。
改下程序就烧到FPGA里面试。。。。。
感觉testbench比写程序还难。 ...

复杂的可能难,简单的也不是很难,就是模拟一下输入信号

出0入0汤圆

发表于 2014-6-20 19:02:14 | 显示全部楼层
前仿真不要省,返工更麻烦

出0入0汤圆

发表于 2014-6-20 21:04:09 | 显示全部楼层
RTL图就是布线后的等效逻辑图啊! 估计是哪里出问题,不起实际作用,被优化掉了。

出0入0汤圆

 楼主| 发表于 2014-6-22 13:38:17 | 显示全部楼层
本帖最后由 zhxshseu 于 2014-6-22 13:41 编辑

后来找到原因了~是因为输入端口不能用reg变量给值。
always @ (ADDR)
begin
        case(ADDR)
        addr_N_H:        reg_N_H=DATABUS;
        addr_N_L:        reg_N_L=DATABUS;
        addr_M:                reg_M=DATABUS;
        addr_PHASE:        reg_PHASE=DATABUS;
        default:;
        endcase
end
DDS_8 DDS_8_entity
(
.ADDR_i(ADDRBUS),
.PHASE_i(reg_PHASE[1:0]),
.DATA_o(PD_SINE)
);
如标红的代码处,这里PHASE_i是输入端口,不能用寄存器变量赋值,需要用一个输出线来驱动,后来写了一个三态8位寄存器,用它的输出来给定值就可以了

module Bus8
(
EN,
READ,
WRITE,
DATABUS,
DATA_FROM_BUS//这里将该输出连接到之前代的输入端口,替换原来的reg变量就可以布线了。可能是因为输入口没有驱动,布线的时候就被软件忽略掉了吧
);
input EN,READ,WRITE;
inout [7:0] DATABUS;
output [7:0]DATA_FROM_BUS;
reg [7:0] Data_reg;
reg [7:0] State;

assign DATA_FROM_BUS=State;
assign DATABUS=(~EN & READ & ~WRITE)?Data_reg:8'bz;

always @(EN or READ or WRITE or DATABUS or State)
if(~EN & READ & ~WRITE)//output to Databus
                Data_reg=State;
else
        if(~EN & ~READ & WRITE)//Databus input to State
                State=DATABUS;
endmodule

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-6-22 13:45:06 | 显示全部楼层
not_at_all 发表于 2014-6-20 21:04
RTL图就是布线后的等效逻辑图啊! 估计是哪里出问题,不起实际作用,被优化掉了。 ...

是的~所以当时也很奇怪~后来发现是输入口用寄存器变量给定值,就不能布线。后来用一个3态寄存器实现,用一个输出口给定值,就能布线了

出0入0汤圆

 楼主| 发表于 2014-6-22 13:47:35 | 显示全部楼层
mcupro 发表于 2014-6-20 19:02
前仿真不要省,返工更麻烦

都仿真过,硬件单独测试的时候也都是OK的,就是没太搞懂为什么输入端口用reg变量给值就不能布线。

出0入0汤圆

 楼主| 发表于 2014-6-22 13:49:12 | 显示全部楼层
7802848 发表于 2014-6-20 13:04
verilog不叫程序,布线不成功会有提示。撸主不会强悍到不需要仿真就可以直接跑吧 ...

仿真和硬件测试都用bdf那个文件测试过了,是ok哒~
后来结果就像我下面说的,输入口用reg变量给值就不能布线了,很奇怪,没搞懂

出0入0汤圆

 楼主| 发表于 2014-6-22 13:49:57 | 显示全部楼层
wangjun403 发表于 2014-6-19 18:18
quartus可以自己将bpf转换为v文件

你先试下这个

找到原因了~多谢~
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 00:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表