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

Verilog always块敏感列表多信号同步变化及单时间步执行规则问询

Verilog Always块常见问题解答

1. 当Verilog always块敏感列表中的多个变量在同一时间步发生变化时,会产生何种行为?

  • 同一时间步内,敏感列表里多个变量发生变化时,always块只会执行一次。
  • 仿真器会先收集同一时间步内所有的信号变化,只要这些变化满足敏感列表的触发条件(比如电平敏感的@*、边沿敏感的@(posedge clk or negedge rst)),就会调度一次always块的执行,不会因为多个信号变化而触发多次执行。
  • 举个实际例子:如果有always @(a or b)块,当a和b在同一个时间步同时从0跳变到1,这个always块只会执行一次,执行过程中会使用a、b变化后的最新值来完成逻辑计算。

2. always块是否可能在一个时间步内执行多次?即敏感列表中的信号每次变化时立即执行?若不能,该场景下的行为规则是什么?

  • 正常设计中,一个时间步内always块最多执行一次,不会随敏感列表内信号的多次变化而重复执行。
  • 仿真的时间步分为信号更新、事件调度、执行三个核心阶段:同一时间步内所有信号的变化会先完成更新,之后仿真器检查所有always块的敏感列表,将需要触发的块加入执行队列,最后按顺序执行队列里的任务,每个任务仅执行一次。
  • 特殊情况:如果always块内部逻辑导致敏感列表中的信号再次变化(比如组合逻辑出现循环赋值,如a = ~b; b = ~a;),这种错误设计可能会触发多次执行,甚至导致仿真进入无限循环,硬件实现中也会出现亚稳态或逻辑混乱,属于必须避免的设计问题。

内容的提问来源于stack exchange,提问作者chen zhang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 10:24:57