Isim没有测试测试夹具中的所有位

时间:2016-10-07 05:31:22

标签: testing verilog simulation hdl xilinx-ise

您好我正在尝试为我的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界限更改为&lt; 7时,它将开始循环通过a,但我必须将界限更改为&lt; 7以循环通过sel。虽然这部分有效,但它会跳过a和b的111和11的情况。

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

1 个答案:

答案 0 :(得分:2)

您有一个无限循环,因为您的结束条件(b < 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

/*
Output:
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 < 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 < 8;b=b+1) begin循环0-7一次,因为b可以增加到8. integer是32位有符号值(参见IEEE Std 1800-2012,第6.11节“整数”数据类型)。