如何在VHDL-AMS中编写C for循环?

时间:2016-05-09 00:31:14

标签: vhdl

我正在尝试用VHDL-AMS编写一个代码,用于C语言中的for循环。

for (i=0; i<m; i*=k)

在上面的例子中,我增加了特定的步骤`i = i * k&#34;。我无法在VHDL-AMS中找到解决方案。

2 个答案:

答案 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)

如果mk的倍数,则可以使用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;

当然这假定mk具有静态范围(即非信号)。