在verilog测试台中循环使用...陷入循环...需要知道我的错误

时间:2014-11-10 03:07:29

标签: verilog

我在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 

1 个答案:

答案 0 :(得分:1)

我猜你宣布ij这样的事情:

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。因此,内循环是无限的,永远不会让外循环进展。同样,如果内环是固定的,外环也会有同样的问题。

有许多可能的解决方案,但最简单的方法是将ij 3位向量而不是2位向量。如果您想要精确,可以设置AB,如下所示:

A = i[1:0];
B = j[1:0];
相关问题