【发布时间】:2013-08-17 09:22:56
【问题描述】:
我为波纹进位加法器编写了代码。测试台也可用。如何在我的 Verilog 代码上运行这个测试平台?我没有模拟器。我正在使用iverilog 编译器。
ripple_carry_adder.v
module half_adder(a,b,sum,carry);
input a,b;
output sum,carry;
assign sum=a^b;
assign carry=a&b;
endmodule
module full_adder(a,b,cin,sum,cout);
input a,b,cin;
output sum,cout;
wire t1,t2;
half_adder h(a,b,t1,t2);
assign cout=t1&cin;
assign sum=t1^cin;
assign cout=t2|cout;
endmodule // full_adder
module ripple_carry_adder(input1,input2,answer);
input [31:0] input1,input2;
output [31:0] answer;
wire [31:0] carry;
full_adder f(input1[0],input2[0],1'b0,answer[0],carry[0]);
genvar i;
generate
for(i=1;i<=31;i=i+1)
begin : my_mabel
full_adder f(input1[i],input2[i],carry[i-1],answer[i],carry[i]);
end
endgenerate
endmodule
测试台
module test;
reg [31:0] input1,input2, expected;
wire [31:0] actual;
integer seed;
ripple_carry_adder dut(input1,input2,actual);
initial begin
seed = 0;
repeat(10) begin
input1 = $random(seed);
input2 = $random(seed);
expected = input1 + input2;
#1;
if(actual!=expected) $display("ERROR: %0d+%0d was %0d expected %0d",
input1,input2,actual, expected);
#9;
end
end
endmodule
【问题讨论】:
-
这是您在 EDA Playground 上的代码 结果窗格还显示了它运行的命令:
iverilog -Wall design testbench && unbuffer vvp a.out -
@VictorLyuboslavsky edaplayground.com/s/45/84 输出显示不正确。
-
在这里你的代码修改为工作
$monitor:edaplayground.com/s/4/85。 Icarus 和其他模拟器之间似乎确实存在行为差异。那应该是一个不同的问题。 -
@VictorLyuboslavsky 为什么实际变量 X 的输出?此外,在某些情况下,即使是期望值也有错误的输出。
-
请为这个关于您的代码/测试平台的功能行为的新主题创建一个新的 StackOverflow 问题。
标签: verilog system-verilog iverilog