2013-08-17 178 views
2

我写了一个波纹进位加法器的代码。测试台也可用。我如何在Verilog代码上运行这个测试平台?我没有模拟器。我正在使用iverilog编译器。如何在测试台上运行verilog代码?

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 
+0

以下是您在[EDA Playground]上的代码(http://www.edaplayground.com/s/4/81)结果窗格还显示了它运行的命令:'iverilog -Wall design testbench && unbuffer vvp a。出' –

+0

@VictorLyuboslavsky http://www.edaplayground.com/s/45/84输出显示不正确。 – sudeepdino008

+0

这里你的代码修改了'$ monitor':http://www.edaplayground.com/s/4/85。 Icarus和其他模拟器之间似乎存在行为差异。这应该是一个不同的问题。 –

回答

4

用途:

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

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

还有一个名为GTKWave的伴侣程序,允许您绘制波形。

+0

http://www.edaplayground.com/s/45/84输出显示不正确。 – sudeepdino008

+0

没有。 Ummm ...如果灵敏度列表中的某个元素更改了其值,那么如何避免这种情况并在input1和input2被赋值后输出值,并计算实际值和预期值? – sudeepdino008