【问题标题】:How do I run the verilog code on a testbench?如何在测试台上运行 verilog 代码?
【发布时间】: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 &amp;&amp; unbuffer vvp a.out
  • @VictorLyuboslavsky edaplayground.com/s/45/84 输出显示不正确。
  • 在这里你的代码修改为工作$monitor:edaplayground.com/s/4/85。 Icarus 和其他模拟器之间似乎确实存在行为差异。那应该是一个不同的问题。
  • @VictorLyuboslavsky 为什么实际变量 X 的输出?此外,在某些情况下,即使是期望值也有错误的输出。
  • 请为这个关于您的代码/测试平台的功能行为的新主题创建一个新的 StackOverflow 问题。

标签: verilog system-verilog iverilog


【解决方案1】:

用途:

$ iverilog -o ripple ripple_carry_adder.v ripple_carry_adder_tb.v
$ vvp ripple

在终端中编译和运行您的代码。您可以将$monitor 添加到您的测试平台,以便能够打印更多的结果而不仅仅是错误。

还有一个名为GTKWave 的配套程序允许您绘制波形。

【讨论】:

  • 不。嗯……如果敏感度列表中的一个元素改变了它的值,监视器就会打印值,我怎样才能避免这种情况并在 input1 和 input2 被分配值并计算实际值和预期值之后打印值?跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多