You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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._

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 00:22:01