Isim 没有测试测试夹具中的所有位
Isim is not testing all bits in test fixture
我正在尝试为我的 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 bounds 更改为 <7 时,它会开始循环遍历 a,但我必须将 a bounds 更改为 <7 才能循环遍历 sel。尽管这部分有效,但它跳过了 a 和 b 为 111 以及 sel 为 11 的情况。
此外,我决定针对所有情况手动测试这些位,它显示了正确的结果。
您有一个无限循环,因为您的结束条件 (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
输出:
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
) 变为假。
这是一种从 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 标准 1800-2012,第 6.11 节整数数据类型)。
我正在尝试为我的 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 bounds 更改为 <7 时,它会开始循环遍历 a,但我必须将 a bounds 更改为 <7 才能循环遍历 sel。尽管这部分有效,但它跳过了 a 和 b 为 111 以及 sel 为 11 的情况。
此外,我决定针对所有情况手动测试这些位,它显示了正确的结果。
您有一个无限循环,因为您的结束条件 (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
输出:
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
) 变为假。
这是一种从 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 标准 1800-2012,第 6.11 节整数数据类型)。