【问题标题】:Why is an unconstrained constant vector in GHDL not considered to be static?为什么 GHDL 中的无约束常数向量不被认为是静态的?
【发布时间】:2016-04-06 14:37:21
【问题描述】:

我有以下代码:

entity test is
end entity;

architecture rtl of test is
  type T_TUPLE is record
    A  : NATURAL;
    B  : NATURAL;
  end record;
  type T_VECTOR is array (NATURAL range <>) of T_TUPLE;

  constant LIST : T_VECTOR := ((8, 32), (8, 20), (8, 36));
begin
  genTests : for i in LIST'range generate
    constant LOCAL_A : NATURAL := LIST(i).A;
    constant LOCAL_B : NATURAL := LIST(i).B;
  begin
    -- my tests
  end generate;
end architecture;

我的生成语句收到以下错误消息:

...范围必须是静态离散范围

当我将常量更改为受约束的变体时,它可以工作...

  constant LIST : T_VECTOR(0 to 2) := ((8, 32), (8, 20), (8, 36));

为什么 2. 示例更静态?

编辑:
链接到 GitHub 上的 GHDL Issue discussion

【问题讨论】:

  • 我认为值得一问特里斯坦。

标签: vhdl simulation ghdl


【解决方案1】:

很好奇,如果您执行以下操作,是否仍然会报错:

constant initial_LIST : T_VECTOR := ((8, 32), (8, 20), (8, 36));
constant LIST : T_VECTOR(initial_LIST'range) := initial_LIST ;

我玩过一个类似的游戏来初始化信号以匹配常量的大小。

【讨论】:

  • 是的,错误是一样的:在生成语句处但在第二个常量处没有问题:)。
  • 尽管有赞成票,但这并不是严格的答案。另请注意,通过添加一个空实体声明并使用 ghdl-0.33 的 (llvm) 版本,该示例分析、阐述和模拟(虽然没有做任何有趣的事情)无错误(MCVe 很有用)。这表明这是一个实现错误,注意到 Paebbels 使用发布后的 0.33 开发树构建了他自己的 Windows mcode 版本。它可能应该被报告为一个错误。它是否出现在 ghdl-0.33 Windows 版本中可能也很有趣。
  • @user1155120 这就是它的意图,解决潜在的工具错误。 OTOH,如果 LIST 是一个信号,那么它就是一种语言解决方法。
  • 我在 GHDL GitHub 存储库页面上发布了 issue。根据 Tristan 的说法,GHDL 遵循规则。 @user1155120 补充说 GHDL 在 VHDL-93 模式下编译,但不是在 VHDL-2008 模式下编译。自 93 年以来,这条规则是否发生了变化?你比我更喜欢 LRM……我们应该把这个讨论移到 VHDL 邮件列表吗? LRM 是否需要修改该规则?
猜你喜欢
  • 2011-10-24
  • 1970-01-01
  • 2020-06-18
  • 2020-11-02
  • 1970-01-01
  • 2015-05-30
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多