【问题标题】:When do signals get assigned in VHDL?什么时候在 VHDL 中分配信号?
【发布时间】:2011-10-10 21:18:43
【问题描述】:

考虑这段代码:

architecture synth of my_entity is
    signal a : std_logic;
begin

    a <= c and d;
    b <= a and c;

end synth;

第二行是要尊重 a 在其他进程中的更改,还是仅在 架构 结束时分配所有信号?

【问题讨论】:

标签: vhdl


【解决方案1】:

小心你的术语。当你说a在另一个“进程”中发生了变化,这在VHDL中具有特定的含义(进程是VHDL中的关键字),并且你的代码没有任何进程。

合成器会将您的代码视为:

a <= c and d;
b <= (c and d) and c;

模拟器通常会在第一遍中分配 a,然后在第二遍中分配 b 一个“delta”。增量是在与初始分配相同的模拟时间发生的无限小的时间延迟。

请注意,这是对实际情况的粗略概括...如果您想了解完整的详细信息,请阅读工具链随附的文档。

【讨论】:

  • 我们了解到上面的那些行被称为隐式进程,它们还有别的名字吗?
  • @GeorgSchölly 你是对的。并发语句被详细说明为过程。因此,您的信号分配可以被指定为进程。
  • @Charles 的行为不依赖于工具,但它由 VHDL 标准很好地定义。这是一篇解释增量周期的博客文章:sigasi.com/content/vhdls-crown-jewel
【解决方案2】:

第二行是否会尊重另一行的更改 进程还是仅在架构结束时分配所有信号?

当您这么说时,听起来您正在考虑单个进程中的信号行为。在这种情况下,信号直到进程结束才会更新,因此b 更新将使用a 的“旧”值

但是,不在process 语句中的信号分配是连续执行的,没有什么可以“触发”架构“运行”。或者,它们都是单独的独立隐含过程(正如您所评论的那样),在“右侧”的所有内容中都隐含了敏感度列表。

在您的特定情况下,b 分配将使用 a 的新值,并且分配将在 a 分配之后发生一个增量周期。

有关 VHDL 中仿真时间如何工作的可读说明,请参阅此处的 Jan Decaluwe 页面:

http://www.sigasi.com/content/vhdls-crown-jewel

而且这个帖子可能很有启发性:

https://groups.google.com/group/comp.lang.vhdl/browse_thread/thread/e47295730b0c3de4/d5bd4532349aadf0?hl=en&ie=UTF-8&q=vhdl+concurrent+assignment#d5bd4532349aadf0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 2011-11-29
    • 2021-09-10
    相关资源
    最近更新 更多