【问题标题】:$display not working properly in testbench$display 在测试台中无法正常工作
【发布时间】:2020-12-01 16:01:20
【问题描述】:

我正在研究 4 位加法器/减法器(取决于我的输入)。我使用 4 位纹波进位加法器方法来实现这一点。我正在测试所有 4 位数字,因此在某些情况下会出现溢出。每当溢出在输出上显示为 1 时,我希望测试台为 $display("overflow")。我在这里附上测试台代码。


                end
        A = 4'b0000; B = 4'b0000; #10
        A = 4'b0000; B = 4'b0001; #10
        A = 4'b0000; B = 4'b0010; #10
        A = 4'b0000; B = 4'b0011; #10
        A = 4'b0000; B = 4'b0100; #10
        A = 4'b0000; B = 4'b0101; #10
        A = 4'b0000; B = 4'b0110; #10
        A = 4'b0000; B = 4'b0111; #10
        A = 4'b0000; B = 4'b1000; #10
        A = 4'b0000; B = 4'b1001; #10
        A = 4'b0000; B = 4'b1010; #10
        A = 4'b0000; B = 4'b1011; #10
        A = 4'b0000; B = 4'b1100; #10
        A = 4'b0000; B = 4'b1101; #10
        A = 4'b0000; B = 4'b1110; #10
        A = 4'b0000; B = 4'b1111; #10
        A = 4'b0001; B = 4'b0000; #10
        A = 4'b0001; B = 4'b0001; #10
        A = 4'b0001; B = 4'b0010; #10
        A = 4'b0001; B = 4'b0011; #10
        A = 4'b0001; B = 4'b0100; #10
        A = 4'b0001; B = 4'b0101; #10
        A = 4'b0001; B = 4'b0110; #10
        A = 4'b0001; B = 4'b0111; #10
        A = 4'b0001; B = 4'b1000; #10
        A = 4'b0001; B = 4'b1001; #10
        A = 4'b0001; B = 4'b1010; #10
        A = 4'b0001; B = 4'b1011; #10
        A = 4'b0001; B = 4'b1100; #10
        A = 4'b0001; B = 4'b1101; #10
        A = 4'b0001; B = 4'b1110; #10
        A = 4'b0001; B = 4'b1111; #10
        A = 4'b0010; B = 4'b0000; #10
        A = 4'b0010; B = 4'b0001; #10
        A = 4'b0010; B = 4'b0010; #10
        A = 4'b0010; B = 4'b0011; #10
        A = 4'b0010; B = 4'b0100; #10
        A = 4'b0010; B = 4'b0101; #10
        A = 4'b0010; B = 4'b0110; #10
        A = 4'b0010; B = 4'b0111; #10
        A = 4'b0010; B = 4'b1000; #10
        A = 4'b0010; B = 4'b1001; #10
        A = 4'b0010; B = 4'b1010; #10
        A = 4'b0010; B = 4'b1011; #10
        A = 4'b0010; B = 4'b1100; #10
        A = 4'b0010; B = 4'b1101; #10
        A = 4'b0010; B = 4'b1110; #10
        A = 4'b0010; B = 4'b1111; #10
        A = 4'b0011; B = 4'b0000; #10
        A = 4'b0011; B = 4'b0001; #10
        A = 4'b0011; B = 4'b0010; #10
        A = 4'b0011; B = 4'b0011; #10
        A = 4'b0011; B = 4'b0100; #10
        A = 4'b0011; B = 4'b0101; #10
        A = 4'b0011; B = 4'b0110; #10
        A = 4'b0011; B = 4'b0111; #10
        A = 4'b0011; B = 4'b1000; #10
        A = 4'b0011; B = 4'b1001; #10
        A = 4'b0011; B = 4'b1010; #10
        A = 4'b0011; B = 4'b1011; #10
        A = 4'b0011; B = 4'b1100; #10
        A = 4'b0011; B = 4'b1101; #10
        A = 4'b0011; B = 4'b1110; #10
        A = 4'b0011; B = 4'b1111; #10
        A = 4'b0100; B = 4'b0000; #10
        A = 4'b0100; B = 4'b0001; #10
        A = 4'b0100; B = 4'b0010; #10
        A = 4'b0100; B = 4'b0011; #10
        A = 4'b0100; B = 4'b0100; #10
        A = 4'b0100; B = 4'b0101; #10
        A = 4'b0100; B = 4'b0110; #10
        A = 4'b0100; B = 4'b0111; #10
        A = 4'b0100; B = 4'b1000; #10
        A = 4'b0100; B = 4'b1001; #10
        A = 4'b0100; B = 4'b1010; #10
        A = 4'b0100; B = 4'b1011; #10
        A = 4'b0100; B = 4'b1100; #10
        A = 4'b0100; B = 4'b1101; #10
        A = 4'b0100; B = 4'b1110; #10
        A = 4'b0100; B = 4'b1111; #10
        A = 4'b0101; B = 4'b0000; #10
        A = 4'b0101; B = 4'b0001; #10
        A = 4'b0101; B = 4'b0010; #10
        A = 4'b0101; B = 4'b0011; #10
        A = 4'b0101; B = 4'b0100; #10
        A = 4'b0101; B = 4'b0101; #10
        A = 4'b0101; B = 4'b0110; #10
        A = 4'b0101; B = 4'b0111; #10
        A = 4'b0101; B = 4'b1000; #10
        A = 4'b0101; B = 4'b1001; #10
        A = 4'b0101; B = 4'b1010; #10
        A = 4'b0101; B = 4'b1011; #10
        A = 4'b0101; B = 4'b1100; #10
        A = 4'b0101; B = 4'b1101; #10
        A = 4'b0101; B = 4'b1110; #10
        A = 4'b0101; B = 4'b1111; #10
        A = 4'b0110; B = 4'b0000; #10
        A = 4'b0110; B = 4'b0001; #10
        A = 4'b0110; B = 4'b0010; #10
        A = 4'b0110; B = 4'b0011; #10
        A = 4'b0110; B = 4'b0100; #10
        A = 4'b0110; B = 4'b0101; #10
        A = 4'b0110; B = 4'b0110; #10
        A = 4'b0110; B = 4'b0111; #10
        A = 4'b0110; B = 4'b1000; #10
        A = 4'b0110; B = 4'b1001; #10
        A = 4'b0110; B = 4'b1010; #10
        A = 4'b0110; B = 4'b1011; #10
        A = 4'b0110; B = 4'b1100; #10
        A = 4'b0110; B = 4'b1101; #10
        A = 4'b0110; B = 4'b1110; #10
        A = 4'b0110; B = 4'b1111; #10
        A = 4'b0111; B = 4'b0000; #10
        A = 4'b0111; B = 4'b0001; #10
        A = 4'b0111; B = 4'b0010; #10
        A = 4'b0111; B = 4'b0011; #10
        A = 4'b0111; B = 4'b0100; #10
        A = 4'b0111; B = 4'b0101; #10
        A = 4'b0111; B = 4'b0110; #10
        A = 4'b0111; B = 4'b0111; #10
        A = 4'b0111; B = 4'b1000; #10
        A = 4'b0111; B = 4'b1001; #10
        A = 4'b0111; B = 4'b1010; #10
        A = 4'b0111; B = 4'b1011; #10
        A = 4'b0111; B = 4'b1100; #10
        A = 4'b0111; B = 4'b1101; #10
        A = 4'b0111; B = 4'b1110; #10
        A = 4'b0111; B = 4'b1111; #10
        A = 4'b1000; B = 4'b0000; #10
        A = 4'b1000; B = 4'b0001; #10
        A = 4'b1000; B = 4'b0010; #10
        A = 4'b1000; B = 4'b0011; #10
        A = 4'b1000; B = 4'b0100; #10
        A = 4'b1000; B = 4'b0101; #10
        A = 4'b1000; B = 4'b0110; #10
        A = 4'b1000; B = 4'b0111; #10
        A = 4'b1000; B = 4'b1000; #10
        A = 4'b1000; B = 4'b1001; #10
        A = 4'b1000; B = 4'b1010; #10
        A = 4'b1000; B = 4'b1011; #10
        A = 4'b1000; B = 4'b1100; #10
        A = 4'b1000; B = 4'b1101; #10
        A = 4'b1000; B = 4'b1110; #10
        A = 4'b1000; B = 4'b1111; #10
        A = 4'b1001; B = 4'b0000; #10
        A = 4'b1001; B = 4'b0001; #10
        A = 4'b1001; B = 4'b0010; #10
        A = 4'b1001; B = 4'b0011; #10
        A = 4'b1001; B = 4'b0100; #10
        A = 4'b1001; B = 4'b0101; #10
        A = 4'b1001; B = 4'b0110; #10
        A = 4'b1001; B = 4'b0111; #10
        A = 4'b1001; B = 4'b1000; #10
        A = 4'b1001; B = 4'b1001; #10
        A = 4'b1001; B = 4'b1010; #10
        A = 4'b1001; B = 4'b1011; #10
        A = 4'b1001; B = 4'b1100; #10
        A = 4'b1001; B = 4'b1101; #10
        A = 4'b1001; B = 4'b1110; #10
        A = 4'b1001; B = 4'b1111; #10
        A = 4'b1010; B = 4'b0000; #10
        A = 4'b1010; B = 4'b0001; #10
        A = 4'b1010; B = 4'b0010; #10
        A = 4'b1010; B = 4'b0011; #10
        A = 4'b1010; B = 4'b0100; #10
        A = 4'b1010; B = 4'b0101; #10
        A = 4'b1010; B = 4'b0110; #10
        A = 4'b1010; B = 4'b0111; #10
        A = 4'b1010; B = 4'b1000; #10
        A = 4'b1010; B = 4'b1001; #10
        A = 4'b1010; B = 4'b1010; #10
        A = 4'b1010; B = 4'b1011; #10
        A = 4'b1010; B = 4'b1100; #10
        A = 4'b1010; B = 4'b1101; #10
        A = 4'b1010; B = 4'b1110; #10
        A = 4'b1010; B = 4'b1111; #10
        A = 4'b1011; B = 4'b0000; #10
        A = 4'b1011; B = 4'b0001; #10
        A = 4'b1011; B = 4'b0010; #10
        A = 4'b1011; B = 4'b0011; #10
        A = 4'b1011; B = 4'b0100; #10
        A = 4'b1011; B = 4'b0101; #10
        A = 4'b1011; B = 4'b0110; #10
        A = 4'b1011; B = 4'b0111; #10
        A = 4'b1011; B = 4'b1000; #10
        A = 4'b1011; B = 4'b1001; #10
        A = 4'b1011; B = 4'b1010; #10
        A = 4'b1011; B = 4'b1011; #10
        A = 4'b1011; B = 4'b1100; #10
        A = 4'b1011; B = 4'b1101; #10
        A = 4'b1011; B = 4'b1110; #10
        A = 4'b1011; B = 4'b1111; #10
        A = 4'b1100; B = 4'b0000; #10
        A = 4'b1100; B = 4'b0001; #10
        A = 4'b1100; B = 4'b0010; #10
        A = 4'b1100; B = 4'b0011; #10
        A = 4'b1100; B = 4'b0100; #10
        A = 4'b1100; B = 4'b0101; #10
        A = 4'b1100; B = 4'b0110; #10
        A = 4'b1100; B = 4'b0111; #10
        A = 4'b1100; B = 4'b1000; #10
        A = 4'b1100; B = 4'b1001; #10
        A = 4'b1100; B = 4'b1010; #10
        A = 4'b1100; B = 4'b1011; #10
        A = 4'b1100; B = 4'b1100; #10
        A = 4'b1100; B = 4'b1101; #10
        A = 4'b1100; B = 4'b1110; #10
        A = 4'b1100; B = 4'b1111; #10
        A = 4'b1101; B = 4'b0000; #10
        A = 4'b1101; B = 4'b0001; #10
        A = 4'b1101; B = 4'b0010; #10
        A = 4'b1101; B = 4'b0011; #10
        A = 4'b1101; B = 4'b0100; #10
        A = 4'b1101; B = 4'b0101; #10
        A = 4'b1101; B = 4'b0110; #10
        A = 4'b1101; B = 4'b0111; #10
        A = 4'b1101; B = 4'b1000; #10
        A = 4'b1101; B = 4'b1001; #10
        A = 4'b1101; B = 4'b1010; #10
        A = 4'b1101; B = 4'b1011; #10
        A = 4'b1101; B = 4'b1100; #10
        A = 4'b1101; B = 4'b1101; #10
        A = 4'b1101; B = 4'b1110; #10
        A = 4'b1101; B = 4'b1111; #10
        A = 4'b1110; B = 4'b0000; #10
        A = 4'b1110; B = 4'b0001; #10
        A = 4'b1110; B = 4'b0010; #10
        A = 4'b1110; B = 4'b0011; #10
        A = 4'b1110; B = 4'b0100; #10
        A = 4'b1110; B = 4'b0101; #10
        A = 4'b1110; B = 4'b0110; #10
        A = 4'b1110; B = 4'b0111; #10
        A = 4'b1110; B = 4'b1000; #10
        A = 4'b1110; B = 4'b1001; #10
        A = 4'b1110; B = 4'b1010; #10
        A = 4'b1110; B = 4'b1011; #10
        A = 4'b1110; B = 4'b1100; #10
        A = 4'b1110; B = 4'b1101; #10
        A = 4'b1110; B = 4'b1110; #10
        A = 4'b1110; B = 4'b1111; #10
        A = 4'b1111; B = 4'b0000; #10
        A = 4'b1111; B = 4'b0001; #10
        A = 4'b1111; B = 4'b0010; #10
        A = 4'b1111; B = 4'b0011; #10
        A = 4'b1111; B = 4'b0100; #10
        A = 4'b1111; B = 4'b0101; #10
        A = 4'b1111; B = 4'b0110; #10
        A = 4'b1111; B = 4'b0111; #10
        A = 4'b1111; B = 4'b1000; #10
        A = 4'b1111; B = 4'b1001; #10
        A = 4'b1111; B = 4'b1010; #10
        A = 4'b1111; B = 4'b1011; #10
        A = 4'b1111; B = 4'b1100; #10
        A = 4'b1111; B = 4'b1101; #10
        A = 4'b1111; B = 4'b1110; #10
        A = 4'b1111; B = 4'b1111;       
    
                  
$monitor($time, ": %b + %b = %b, %b", A, B, S, Op, V);
    end


endmodule

【问题讨论】:

    标签: vivado


    【解决方案1】:

    您的测试台目前仅检查 V 在时间 0 是否为 1,因为检查仅在 initial 块中完成一次。将代码从initial 块中移出到它自己的always 块中:

    always @* if (V == 1) $display($time, " overflow");
    

    每次V 更改时,都会进行检查。我在您的消息中添加了$time,因为它有助于调试。


    您可以使用for 循环来简化您的测试平台:

    integer i, j;
    
    initial begin
        for (i=0; i<16; i=i+1) begin
            for (j=0; j<16; j=j+1) begin
                A = i;
                B = j;
                #10;
            end
        end
    end
    

    【讨论】:

      猜你喜欢
      • 2013-03-08
      • 2017-01-24
      • 1970-01-01
      • 2022-01-20
      • 2019-09-06
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多