【问题标题】:Isim is not testing all bits in test fixtureIsim 没有测试测试夹具中的所有位
【发布时间】:2017-02-16 00:43:46
【问题描述】:

我正在尝试为我的 Verilog 代码测试所有可能的输入情况。我用 for 循环设置它。

for(sel = 0;sel < 4;sel=sel+1) begin
            for(a = 0;a < 8;a=a+1) begin
                    for(b = 0;b < 8;b=b+1) begin
                        #50;
                    end
            end
    end

它之前工作过,但我必须更改某些内容,否则 Isim 可能有错误。 我也初始化了 a、b 和 sel。

reg [2:0] a;
reg [2:0] b;
reg [1:0] sel;

当我尝试模拟 tb 文件时,它只会反复循环 b ! 为什么会这样?

另外,当我将 b 边界更改为

此外,我决定手动测试所有情况下的位,它显示了正确的结果。

【问题讨论】:

    标签: testing verilog simulation hdl xilinx-ise


    【解决方案1】:

    您有一个无限循环,因为您的结束条件 (b &lt; 8) 始终为真。您可以使用以下代码轻松地向自己证明这一点。你可以看到 0-7 重复了很多次:

    module tb;
    
    reg [2:0] b;
    initial begin
        for (b = 0;b < 8;b=b+1) begin
            $display(b);
            #50;
        end
    end
    initial #1000 $finish;
    
    endmodule
    

    输出:

    0
    1
    2
    3
    4
    5
    6
    7
    0
    1
    2
    3
    4
    5
    6
    7
    0
    1
    2
    3
    

    由于您将b 声明为 3 位信号,它的取值范围是 0 到 7。因此,b 始终小于 8。当 b=7 时,b+1=0,而不是 8。

    将 8 更改为 7 仅显示 0-6 一次,因为结束条件 (b &lt; 7) 变为 false。

    这是从 0 循环到 7 一次的一种方法:

    module tb;
    
    reg [2:0] b;
    initial begin
        b = 0;
        repeat (8) begin
            $display(b);
            #50;
            b=b+1;
        end
    end
    
    endmodule
    

    另一种常见的方法是将b 声明为integer,而不是3 位reg。然后for (b = 0;b &lt; 8;b=b+1) begin 循环 0-7 一次,因为 b 可以增加到 8。integer 是一个 32 位有符号值(请参阅 IEEE Std 1800-2012,第 6.11 节整数数据类型)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多