如果我在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
会有什么问题?
发布于 2018-08-06 09:20:13
for
可以写成do-while
循环。
for(<Initialization>;<Condition>;<Iteration>) <Statement>;
<Initialization>;
do
begin
<Statement>;
<Iteration>;
end
while (<Condition>);
因此,一旦执行i=k
子句,k
的值发生什么并不重要。
综合要求在编译时计算循环迭代的总数。您必须提供可以在编译时计算的表达式。因此,最有可能的情况是,如果起始和结束迭代值不是常量,则循环将无法综合。
发布于 2018-08-06 01:59:56
会有什么问题?
问题是您只能在模拟中使用代码。也就是说:你将无法合成代码并从中产生硬件。
在综合中,反循环是展开和硬件生成的每一个步骤,通过循环。为此,综合工具必须在编译期间知道循环执行的频率。
https://stackoverflow.com/questions/51704524
复制相似问题