菜鸟 求教modelsim一个testbench
时间:10-02
整理:3721RD
点击:
刚开始接触verilog,用modelsim仿真,编了一个程序adder,然后编写了一个testbench来调用adder 最后用$display显示出来最后的结果,我给了具体的输入,但是输出一直是x,为什么?贴上代码,轻喷。
module adder(a,b,cin,count,sum);
input a,b,cin;
output count,sum;
reg count,sum;
initial
begin
{count,sum}=a+b+cin;
end
endmodule
testbench如下
module adder_tb;
wire count,sum;
reg a,b,cin;
initial
begin
a=1'b1;
b=1'b0;
cin=1'b1;
end
adder adder1(a,b,cin,count,sum);
initial
$display(count,sum);
endmodule
我想输出x的原因是不是因为verilog是并行执行的,调用的那个语句adder adder1(a,b,cin,count,sum);一开始在输入赋值之前就已经执行了,但是这时候输入值是不定的,所以他的输出总是x,我想把这个调用语句放在initial里面顺序执行,但是一放进去就报错,说是cant find checker,是不能放进去么?望指导。
module adder(a,b,cin,count,sum);
input a,b,cin;
output count,sum;
reg count,sum;
initial
begin
{count,sum}=a+b+cin;
end
endmodule
testbench如下
module adder_tb;
wire count,sum;
reg a,b,cin;
initial
begin
a=1'b1;
b=1'b0;
cin=1'b1;
end
adder adder1(a,b,cin,count,sum);
initial
$display(count,sum);
endmodule
我想输出x的原因是不是因为verilog是并行执行的,调用的那个语句adder adder1(a,b,cin,count,sum);一开始在输入赋值之前就已经执行了,但是这时候输入值是不定的,所以他的输出总是x,我想把这个调用语句放在initial里面顺序执行,但是一放进去就报错,说是cant find checker,是不能放进去么?望指导。
我,给你个建议,先看一下简单verilog的书。因为我也不知道该咋跟你说,说实在的没见过你这样写加法器的。
肯定是错的。intial错了,还有所有reg变量应该给个初始值。
加法器里面用连续赋值语句。
谢谢,我这就是照着书里面的例子来写的,赋值,最后加个延迟单位就搞定了。谢谢你的建议。
初级自学阶段,先不去想这么多,我只想把这些基本的东西能跑出来 不出错就行。谢谢回复。
加法器里用initial是不能综合的
如果我们记错的话,这段加法器写法为夏宇闻书上的,但是是错误的变种
要明确verilog的并列执行,我觉得我说这一点你就能够自己分析出来原因了
谢谢小编
