我在verilog中编写了以下代码来为我的设计生成测试用例,但代码存在问题,我得到了奇怪的测试用例。我需要在我写的2个循环中总共获得16个不同的情况,但我只能得到4个测试用例。循环中的“i”只迭代一次,但必须迭代4次。我只获得了A的00但是对于B我能够得到所有的值“00”“01”“10”“11”...我可以指出一个错误吗?
// test generation
initial begin
for(i=2'b00;i<=2'b11;i=i+2'b01) begin
for(j=2'b00;j<=2'b11;j=j+2'b01) begin
if(i==2'b00) begin
#30 A=i; B=j;
end
else begin
#20 A=i; B=j;
end
end
end
end
答案 0 :(得分:1)
我猜你宣布i
和j
这样的事情:
reg [1:0] i, j;
并且您的测试不会自行终止(即,您必须自行停止模拟)。这是因为如果你看一下如何定义变量j
,它只能取值2&#39; b00,2&#39; b01,2&#39; b10,2&#39; b11。内循环的循环终止条件是j <= 2'b11
。但是,这始终是正确的,因为j
最多可以是2&b; b11并且添加2&#39; b01到2&#b; b11为2位向量产生2&#b; b00。因此,内循环是无限的,永远不会让外循环进展。同样,如果内环是固定的,外环也会有同样的问题。
有许多可能的解决方案,但最简单的方法是将i
和j
3位向量而不是2位向量。如果您想要精确,可以设置A
和B
,如下所示:
A = i[1:0];
B = j[1:0];