【问题标题】:Using FOR loop in VHDL with a variable在带有变量的 VHDL 中使用 FOR 循环
【发布时间】:2013-08-31 17:44:54
【问题描述】:

有没有办法在表单中创建一个for循环:

for i in 0 to some_var loop
    // blah,blah
end loop;

如果没有,是否有其他方法可以创建相同的循环?由于 While 循环允许使用变量作为限制,但它们在我的项目中不可合成。

提前致谢,

博扬·马托夫斯基

【问题讨论】:

    标签: loops for-loop while-loop vhdl synthesize


    【解决方案1】:

    该变量适用于测试平台应用程序。

    对于综合,您可以通过使用静态范围和退出条件来获得相同的效果。将范围设置为您需要的最大值。

    for i in 0 to MAX_VALUE loop
      exit when i = some_var ;
      // blah,blah
    end loop;
    

    如果您的综合工具遇到此问题,请提交错误报告。 1076.6-1999 和 1076.6-2004(VHDL RTL 综合标准)都表明支持具有静态范围的“for”循环的退出条件。您可能会发现有关使用循环标签 (1076.6-1999) 的支持问题表明它不受支持。

    如果您发现错误(或缺乏支持)但不报告,您的供应商会认为这是您不关心的功能,因此不会投资更改他们的工具。

    【讨论】:

    • 使用exit 的解决方案在Altera Quartus II 中编译,其中for ... loop 中的可变长度范围失败。如果exit 不适用于某个工具,请按照 Jim 的说法进行报告,但解决方法可能是在 some_var 之后以 if i <= some_var then 为条件进行更新。
    【解决方案2】:

    只有具有静态范围的循环参数是可合成的。

    如果 some_var 具有离散范围,则可以实现 FSM(有限状态机)。然后为每个状态编写一个特定的循环。

    【讨论】:

      猜你喜欢
      • 2014-06-21
      • 1970-01-01
      • 2017-01-04
      • 2014-06-12
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 2019-12-19
      相关资源
      最近更新 更多