如果我在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
会有什么问题?
答案 0 :(得分:2)
会有什么问题?
问题是您只能在仿真中使用代码。也就是说:您将无法合成代码并由此产生硬件。
综合起来,将for循环展开,并为循环中的每个步骤生成硬件。为此,综合工具必须在编译时知道执行循环的频率。
答案 1 :(得分:1)
for
可以写为do-while
循环
for(<Initialization>;<Condition>;<Iteration>) <Statement>;
<Initialization>;
do
begin
<Statement>;
<Iteration>;
end
while (<Condition>);
因此,一旦i=k
子句执行完毕,k
的值将发生什么都无关紧要。
综合要求在编译时计算循环迭代的总数。您必须提供可以在编译时求值的表达式。因此,最有可能的是,如果起始和结束迭代值不是常数,则循环将无法合成。