考虑此代码:
architecture synth of my_entity is
signal a : std_logic;
begin
a <= c and d;
b <= a and c;
end synth;
第二行是否尊重a
在另一个进程中发生了变化,或者仅在架构结束时发出了所有信号?
答案 0 :(得分:1)
小心你的术语。当你说a
在另一个“进程”中发生了变化时,它在VHDL中具有特定含义(进程是VHDL中的关键字),并且你的代码没有任何进程。
合成器会将您的代码视为:
a <= c and d;
b <= (c and d) and c;
模拟器通常会在第一次传递中分配a,然后在第二次传递时将b分配给'delta'。增量是一个无穷小的时间延迟,它发生在与初始分配相同的模拟时间。
请注意,这是对实际情况的粗略概括......如果您需要完整的详细信息,请阅读工具链随附的文档。
答案 1 :(得分:1)
第二行是否会尊重另一行的变化 过程或仅在指定的架构结束时发出所有信号?
当你这么说时,听起来你正在考虑单个进程中的信号行为 。在此上下文中,信号在流程结束前不会更新,因此b
更新将使用a
的“旧”值
但是,不在process
语句中的信号分配是连续执行的,没有什么可以“触发”架构“运行”。或者,它们都是单独的隐含过程(如您所评论的那样),并且“右侧”的所有内容都隐含着敏感列表。
在您的特定情况下,b
分配将使用a
的新值,分配将在a
分配后的一个增量周期发生。
有关模拟时间如何在VHDL中工作的可读描述,请参阅Jan Decaluwe的页面:
http://www.sigasi.com/content/vhdls-crown-jewel
此线程也可能具有指导意义: