什么时候用VHDL分配信号?

时间:2011-10-10 21:18:43

标签: vhdl

考虑此代码:

architecture synth of my_entity is
    signal a : std_logic;
begin

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

end synth;

第二行是否尊重a在另一个进程中发生了变化,或者仅在架构结束时发出了所有信号?

2 个答案:

答案 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

此线程也可能具有指导意义:

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