我正在尝试用VHDL-AMS编写一个代码,用于C语言中的for循环。
for (i=0; i<m; i*=k)
在上面的例子中,我增加了特定的步骤`i = i * k&#34;。我无法在VHDL-AMS中找到解决方案。
答案 0 :(得分:2)
在VHDL中for
循环的行为与C中的循环行为略有不同。在C中,数学是在循环变量(在您的示例中为i
)上完成的,在VHDL中{{1} }循环遍历for
中的每个值。通常,VHDL中的循环变量将是range
,因此您可以跨越整数范围中的每个值。但你必须跨过每个值 - 你不能错过它们。
那么,如何解决您的问题?一种方法是按照建议使用integer
循环;另一种方法是使用while
循环,但循环遍历整数范围并对循环变量进行一些计算。所以,在VHDL中你可以这样做:
for
VHDL-AMS是VHDL-93的超集,因此可以合理地假设for some_other_variable in some_minimum to some_maximum loop
i := -- some function of your some_other_variable
-- the rest of your code within the loop
end loop;
循环的行为方式相同。
答案 1 :(得分:0)
如果m
是k
的倍数,则可以使用for循环执行此操作。例如:
for i in 0 to (m/k)-1 loop
-- j = 0, k, 2k, ...
j := i*k;
...
-- Do something with j
...
end loop;
现在,即使m
不是k
的倍数,您也可以使用以下方法解决:
for i in 0 to integer(ceil(real(m)/real(k)))-1 loop
-- j = 0, k, 2k, ...
j := i*k;
...
-- Do something with j
...
end loop;
当然这假定m
和k
具有静态范围(即非信号)。