陷入了循环verilog

时间:2012-12-12 02:32:58

标签: verilog

我似乎把自己写进了一个无限循环,或者说这个或者说Modelsim不知道如何处理这个while循环中的条件:

i = 0;
while(i < 8'b01100100 && !(mem[i] == RC)) begin
   i <= i + 1;
end

模拟只是无法通过这个while循环中的条件行,任何人都可以指出我做错了什么?

-edit: 包含while循环的代码部分:

//if remove credential enable is high
if(RCE == 1'b1) begin
  $display ("%d", RC);
  $display ("%d", mem[i]);
  $display ("%b", !(mem[i] == RC));
    while(i < 8'b01100100 && mem[i] != RC) begin
      i <= i + 1;
    end
    if(i < 8'b01100100) begin
        mem[i] <= 24'b111111111111111111111111;
    end else begin
        //do nothing
    end
    i = 0;
    end else begin
        //do nothing
    end

此部分位于一个始终块内,其中包含posedge clk和posedge rst的灵敏度列表。

1 个答案:

答案 0 :(得分:2)

您需要在while循环中使用阻塞分配而不是非阻塞分配(请参阅How to interpret blocking vs non blocking assignments in Verilog?)。

在活动事件处理完成后要更新的非阻塞分配计划i。但是,活动事件处理永远不会完成,因为while条件将继续评估为真。

或者,您可以在while循环中添加延迟:@(posedge clk) i <= i + 1