当我使用变量作为结束条件时,for 循环进入无限循环
For loop goes into infinite loop when I use a variable as ending condition
我有一个在 Verilog 中运行良好的 for 循环。它看起来像这样:
for(j=0; j<=5; j=j+1)begin
...
end
但一旦我将 5 更改为变量:
for(j=0; j<=m; j=j+1)begin
...
end
我收到此错误:
Error (10119): Verilog HDL Loop Statement error at alu.v(95): loop with non-constant loop condition must terminate within 250 iterations
我将 m 作为 reg 初始化为:
reg [3:0] m = 5;
我需要使用一个变量的原因是我有另一个变量我希望这个循环计数。我遇到了同样的错误,所以我使用了应该始终等于 5 的测试值 'm'。我不确定为什么会这样。我认为循环将在 5 之后结束,但由于某种原因它没有。请帮忙!
Verilog HDL 不是编程语言,例如C 或 Python,而是一种硬件描述语言 (HDL)。因此综合工具会将 for
循环展开到固定的硬件电路,为此它需要知道循环中的(最大)迭代次数。
在您的情况下,当结束条件基于 m
作为寄存器时,综合工具(Altera Quartus II/Prime)似乎无法解决这个问题,因此您必须将其重写为每个循环都有一个恒定的结束条件,允许综合工具将其展开为固定的硬件电路。
我有一个在 Verilog 中运行良好的 for 循环。它看起来像这样:
for(j=0; j<=5; j=j+1)begin
...
end
但一旦我将 5 更改为变量:
for(j=0; j<=m; j=j+1)begin
...
end
我收到此错误:
Error (10119): Verilog HDL Loop Statement error at alu.v(95): loop with non-constant loop condition must terminate within 250 iterations
我将 m 作为 reg 初始化为:
reg [3:0] m = 5;
我需要使用一个变量的原因是我有另一个变量我希望这个循环计数。我遇到了同样的错误,所以我使用了应该始终等于 5 的测试值 'm'。我不确定为什么会这样。我认为循环将在 5 之后结束,但由于某种原因它没有。请帮忙!
Verilog HDL 不是编程语言,例如C 或 Python,而是一种硬件描述语言 (HDL)。因此综合工具会将 for
循环展开到固定的硬件电路,为此它需要知道循环中的(最大)迭代次数。
在您的情况下,当结束条件基于 m
作为寄存器时,综合工具(Altera Quartus II/Prime)似乎无法解决这个问题,因此您必须将其重写为每个循环都有一个恒定的结束条件,允许综合工具将其展开为固定的硬件电路。