第 9 讲:竞争、冒险与毛刺消除

Boolean 表达式只描述稳态。真实门有传播延迟,同一个输入经不同路径到达输出的时间不同,这叫竞争;竞争导致错误窄脉冲时,称为冒险或毛刺。

静态冒险

  • 静态 1 冒险:理论输出应保持 1,却短暂掉到 0;
  • 静态 0 冒险:理论输出应保持 0,却短暂升到 1。

例如

F=AB+AˉC.F=AB+\bar AC.

当 B=C=1B=C=1、AA 从 1 变 0 时,理论上 F=1F=1。但 ABAB 先变 0、AˉC\bar AC 后变 1 的间隙里,输出可能短暂为 0。

由共识定理加入冗余项 BCBC:

F=AB+AˉC+BC.F=AB+\bar AC+BC.

稳态逻辑不变,但 BCBC 在过渡期间提供持续为 1 的路径,消除这类静态 1 冒险。

Karnaugh 图判别

两级与或电路中,输入只改变一位时,若相邻两个 1 没被同一圈覆盖,就可能有静态 1 冒险。补一个同时覆盖这两个 1 的重叠圈即可。

两级或与电路则对相邻两个 0 做同样检查,消除静态 0 冒险。

这个方法假设只有一个输入变量变化。多个输入同时变化时,路径和逻辑状态都可能复杂得多,不能只靠加一个共识项保证无冒险。

动态冒险

理论输出只应翻转一次,却发生多次跳变,称为动态冒险。它常出现在多级逻辑中,一次输入变化经过三条以上不同延迟路径。

把电路化成无静态冒险的两级形式,通常也有助于避免动态冒险;更稳妥的工程方法是同步化,让输出在稳定后才被触发器采样。

功能冒险

多个输入同时变化时,即使每条单变量路径都无冒险,经过中间组合也可能短暂进入非预期输入组合,产生功能冒险。Gray 编码让相邻状态只变一位,能降低这类风险。

消除方法

  1. 增加冗余项:逻辑设计层面消除单变量静态冒险;
  2. 选通:在输入变化期间禁止输出,稳定后再打开;
  3. 锁存/同步采样:用时钟只在规定时刻采样组合结果;
  4. 滤波电容:滤掉很窄毛刺,但会增加延迟和边沿时间,不能滥用;
  5. 平衡路径延迟:使竞争路径到达更接近,但工艺、电压、温度变化下不易保证;
  6. Gray 编码或安全状态编码:减少同时翻转位数。

为什么毛刺危险

若毛刺只进入普通数据端,并在下一个时钟沿前充分稳定,可能不影响同步系统;若进入异步复位、时钟、计数输入、写使能或外部控制,极窄脉冲也可能造成不可逆错误。

因此不能只问“稳态真值对不对”,还要问输出被谁、在什么时候采样。

检查流程

  1. 找出同时出现 AA 与 Aˉ\bar A 的不同路径;
  2. 明确输入变化前后理论输出应保持还是翻转;
  3. 用 Karnaugh 图检查相邻格是否同圈覆盖;
  4. 加共识项后验证稳态函数不变;
  5. 确认电路是两级还是多级、是否多输入变化;
  6. 对时钟和异步控制信号采取比普通数据更严格的无毛刺策略。

评论