我似乎把自己写进了一个无限循环,或者说这个或者说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的灵敏度列表。
答案 0 :(得分:2)
您需要在while循环中使用阻塞分配而不是非阻塞分配(请参阅How to interpret blocking vs non blocking assignments in Verilog?)。
在活动事件处理完成后要更新的非阻塞分配计划i
。但是,活动事件处理永远不会完成,因为while
条件将继续评估为真。
或者,您可以在while循环中添加延迟:@(posedge clk) i <= i + 1
。