【发布时间】: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
考虑这段代码:
architecture synth of my_entity is
signal a : std_logic;
begin
a <= c and d;
b <= a and c;
end synth;
第二行是要尊重 a 在其他进程中的更改,还是仅在 架构 结束时分配所有信号?
【问题讨论】:
标签: vhdl
小心你的术语。当你说a在另一个“进程”中发生了变化,这在VHDL中具有特定的含义(进程是VHDL中的关键字),并且你的代码没有任何进程。
合成器会将您的代码视为:
a <= c and d;
b <= (c and d) and c;
模拟器通常会在第一遍中分配 a,然后在第二遍中分配 b 一个“delta”。增量是在与初始分配相同的模拟时间发生的无限小的时间延迟。
请注意,这是对实际情况的粗略概括...如果您想了解完整的详细信息,请阅读工具链随附的文档。
【讨论】:
第二行是否会尊重另一行的更改 进程还是仅在架构结束时分配所有信号?
当您这么说时,听起来您正在考虑单个进程中的信号行为。在这种情况下,信号直到进程结束才会更新,因此b 更新将使用a 的“旧”值
但是,不在process 语句中的信号分配是连续执行的,没有什么可以“触发”架构“运行”。或者,它们都是单独的独立隐含过程(正如您所评论的那样),在“右侧”的所有内容中都隐含了敏感度列表。
在您的特定情况下,b 分配将使用 a 的新值,并且分配将在 a 分配之后发生一个增量周期。
有关 VHDL 中仿真时间如何工作的可读说明,请参阅此处的 Jan Decaluwe 页面:
http://www.sigasi.com/content/vhdls-crown-jewel
而且这个帖子可能很有启发性:
【讨论】: