VHDL中自依赖信号b的取值变化逻辑咨询
关于VHDL自依赖信号b的循环逻辑确认
你的理解完全正确,当信号a为'1'时,这段代码确实会让信号b陷入无限的delta循环,具体过程如下:
- 初始状态:
b作为bit类型信号,默认初始值为'0'。当a变为'1'后,第一个delta周期内计算not b and a,结果为'1',模拟器会安排b在下一个delta延迟后更新为'1'。 - 下一个delta周期:
b的值更新为'1',此时重新计算not b and a得到'0',模拟器又会安排b在下一个delta延迟后更新为'0'。 - 上述过程会无限重复:每次
b的更新都会触发新的赋值计算,而delta延迟是模拟中的零时间延迟,这会导致模拟器卡在当前时间步,无法推进到下一个实际时间点,最终进入死循环。
补充说明
这种组合逻辑里的自依赖是典型的设计错误,实际工程中绝对要避免。如果你的目标是实现类似翻转或锁存的功能,应该使用时序逻辑(比如带时钟沿的process块),而不是组合逻辑里的自依赖赋值。
你的代码示例:
entity Sklop is port ( x : in bit; y : in bit; z : out bit ); end Sklop; architecture Beh2 of Sklop is signal a, b : bit; begin a <= x; b <= not b and a; z <= (a or b) xor y; end Beh2;
内容的提问来源于stack exchange,提问作者pat._
相关产品推荐
相关产品推荐

