如果 VHDL 或 verilog 代码中的 for 循环变量是变量会怎样?

What happens if for loop variable in VHDL or verilog code is variable?

如果我在VHDL或Verilog中为for循环变量的初始值赋一个非常量值,在仿真或综合中会出现什么问题? 例如-如果我写一个测试用例:

module dut(input clk, d, output reg [5:0] q);
 integer i, j, k, l;
always @(posedge clk)
 begin
for(i =k;j < 4;k++, l++) begin
q[i] <= d;
end
end
 endmodule

会出现什么问题?

What will be the issue?

问题是您只能在模拟中使用代码。也就是说:您将无法合成代码并从中生产硬件。

在综合过程中,展开 for 循环并为循环中的每一步生成硬件。为此,综合工具必须在编译时知道循环执行的频率。

一个for可以写成一个do-while循环

for(<Initialization>;<Condition>;<Iteration>) <Statement>;

<Initialization>;
do
 begin
 <Statement>;
 <Iteration>;
end
while (<Condition>);

所以一旦 i=k 子句执行,k.

的值发生什么变化都无关紧要

综合要求在编译时计算循环迭代的总数。您必须提供可以在编译时求值的表达式。因此,如果开始和结束迭代值不是常量,则很可能无法合成循环。