第 9 讲:竞争、冒险与毛刺消除
Boolean 表达式只描述稳态。真实门有传播延迟,同一个输入经不同路径到达输出的时间不同,这叫竞争;竞争导致错误窄脉冲时,称为冒险或毛刺。
静态冒险
- 静态 1 冒险:理论输出应保持 1,却短暂掉到 0;
- 静态 0 冒险:理论输出应保持 0,却短暂升到 1。
例如
当 、 从 1 变 0 时,理论上 。但 先变 0、 后变 1 的间隙里,输出可能短暂为 0。
由共识定理加入冗余项 :
稳态逻辑不变,但 在过渡期间提供持续为 1 的路径,消除这类静态 1 冒险。
Karnaugh 图判别
两级与或电路中,输入只改变一位时,若相邻两个 1 没被同一圈覆盖,就可能有静态 1 冒险。补一个同时覆盖这两个 1 的重叠圈即可。
两级或与电路则对相邻两个 0 做同样检查,消除静态 0 冒险。
这个方法假设只有一个输入变量变化。多个输入同时变化时,路径和逻辑状态都可能复杂得多,不能只靠加一个共识项保证无冒险。
动态冒险
理论输出只应翻转一次,却发生多次跳变,称为动态冒险。它常出现在多级逻辑中,一次输入变化经过三条以上不同延迟路径。
把电路化成无静态冒险的两级形式,通常也有助于避免动态冒险;更稳妥的工程方法是同步化,让输出在稳定后才被触发器采样。
功能冒险
多个输入同时变化时,即使每条单变量路径都无冒险,经过中间组合也可能短暂进入非预期输入组合,产生功能冒险。Gray 编码让相邻状态只变一位,能降低这类风险。
消除方法
- 增加冗余项:逻辑设计层面消除单变量静态冒险;
- 选通:在输入变化期间禁止输出,稳定后再打开;
- 锁存/同步采样:用时钟只在规定时刻采样组合结果;
- 滤波电容:滤掉很窄毛刺,但会增加延迟和边沿时间,不能滥用;
- 平衡路径延迟:使竞争路径到达更接近,但工艺、电压、温度变化下不易保证;
- Gray 编码或安全状态编码:减少同时翻转位数。
为什么毛刺危险
若毛刺只进入普通数据端,并在下一个时钟沿前充分稳定,可能不影响同步系统;若进入异步复位、时钟、计数输入、写使能或外部控制,极窄脉冲也可能造成不可逆错误。
因此不能只问“稳态真值对不对”,还要问输出被谁、在什么时候采样。
检查流程
- 找出同时出现 与 的不同路径;
- 明确输入变化前后理论输出应保持还是翻转;
- 用 Karnaugh 图检查相邻格是否同圈覆盖;
- 加共识项后验证稳态函数不变;
- 确认电路是两级还是多级、是否多输入变化;
- 对时钟和异步控制信号采取比普通数据更严格的无毛刺策略。