如果VHDL或Verilog代码中的for循环变量是变量,会发生什么?

时间:2018-08-06 09:32:10

标签: vhdl verilog

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

会有什么问题?

2 个答案:

答案 0 :(得分:2)

  

会有什么问题?

问题是您只能在仿真中使用代码。也就是说:您将无法合成代码并由此产生硬件。

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

答案 1 :(得分:1)

for可以写为do-while循环

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

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

因此,一旦i=k子句执行完毕,k的值将发生什么都无关紧要。

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