什么是 Static Hazard(静态冒险)
静态冒险是指:在组合逻辑电路中,当某个输入从一种取值变到另一种取值时,理论上输出应保持不变,但在过渡过程中,输出会短暂地跳到错误电平,然后再回到正确值。在示波器或 LED 上看到的这个短暂错误就是 glitch(毛刺)
Glitch
为什么会出现静态冒险?主要原因是路径延迟不同:
- 同一个输入(例如实验里的 B)经过两条路径到达同一个门:
- 一条路径:B 直接到门;
- 另一条路径:B 先经过反相器再到门。 - 两条路径的传播延迟不同,所以同一时刻门会短暂地“看到”B 和 B’ 处于不一致的状态(一个已变、一个还没变),从而在输出上产生一个短脉冲,即 glitch。
Note
举例
- 两路信号到达 XOR 的时间不同:
- 直连的 A 几乎立刻到 XOR;
- B = Ā 要经过反相器,有传播延迟(如 7404 典型 10ns,最大 22ns)。
- A 从 0→1 或 1→0 跳变时:
- 既 第一拍A=0,第二拍A=1,第二拍会有一瞬间看到B=1(B延迟>A)
- 某一小段时间里,XOR 一端已经是“新 A”,另一端还是“旧 Ā”,
- 即 A 和 B 暂时相同 → XOR 输出 C = 0。
- 等 B 也更新后,又变成 A ≠ B → C 回到 1。
- 所以在输出 C 上会出现一个短暂的 0,这就是 glitch。

glitch做时序分析时用最大延迟,不用典型值;且数据手册通常不保证最小延迟,分析时可按 0 处理。

Note
- T = 0:A 从 0 变为 1。
- B 的未知区 0~22 ns:
- B 是 A 经反相器得到的,反相器最大延迟 22 ns。
- 在 0~22 ns 内,B 可能已经变、也可能还没变,不能保证,所以标成未知。
- 22 ns 之后可以保证 B = 0(已跟上 A=1)。
- C 的未知区 0~52 ns:
- C 依赖 B;B 要到 22 ns 才稳定。
- XOR 最大延迟 30 ns,所以 C 要等到 22 + 30 = 52 ns 才能保证稳定。
- 0~52 ns 内 C 可能为 0 也可能为 1,标成未知。在这 52 ns 内,C 有可能在某一刻变成 0;只要出现过 0,就算产生了 glitch
Glitch不会造成错误,但会增加电路功耗(多一次充放电,功耗增加),Y 上的 glitch 会作为下一级的输入,可能被放大、变宽或再产生新的 glitch
勘误:Glitch不会造成错误
- 在未被采样时可能不改变最终逻辑结果,但一旦被寄存器或敏感电路采样,就会造成错误
两个可以抑制传播从而减少功耗的做法:
1.加寄存器,把glitch截断在这里
2.Gray 码强制不让变

有那么一瞬间,上面的AND和下面的AND同时输出0,因为下面的路径存在延迟,而上面的路径是瞬间完成的,也就是上面是当前状态输出0 + 下面是之前的状态输出0,所以输出会有一瞬间的0
参考
- Wikipedia, Hazard (logic)
Discussion
Loading comments…
Checking sign-in…