项目展示

数电竞争冒险现象

2025-12-17

这是一个在实际电路设计中必须考虑的问题,因为它可能导致系统出现瞬时错误甚至完全失效。

1. 什么是竞争-冒险?

我们可以把这两个词拆开来理解:

* 竞争:指在组合逻辑电路中,当输入信号发生变化时,由于通往输出端的路径不同(即经过的逻辑门种类和数量不同),导致这些变化的信号到达输出端的时间有先后快慢的差异

* 简单比喻:就像两个运动员从起点跑到终点,但他们走的路径长度不一样,所以到达时间有竞争关系。

* 冒险:由于这种“竞争”的存在,在输出端可能会产生一个不应有的、短暂的错误脉冲(通常是一个很窄的尖峰脉冲,俗称“毛刺”)。

* 这个毛刺就是“冒险”的具体表现,它意味着电路存在潜在的风险。

竞争-冒险的整体含义是: 在组合逻辑电路中,由于信号传输路径的延时不同,当输入信号状态发生改变时,在输出端产生瞬时错误输出的现象。

2. 为什么会产生竞争-冒险?(根本原因)

其最根本的原因是 门电路的传输延迟

理想情况下,我们认为信号的跳变是瞬间完成的。但在现实中,信号通过任何一个与非门、或非门等逻辑器件时,都会有一个微小的、纳秒级别的延迟。虽然每个门的延迟很短,但当多个信号通过不同数量的门到达同一个点时,累积的延迟差就可能变得显著。

3. 竞争-冒险的分类

主要分为两类:

A. “1”型冒险

* 表现:在输出本应保持为稳定的高电平“1”的情况下,出现了瞬时的低电平“0”尖峰。

* 产生条件:常出现在与-或结构的电路中。

* 经典例子

考虑一个简单的电路 `F = A · A‘` (一个信号A和它的反相信号A’ 接入一个与门)。理论上,无论A是什么,`A` 和 `A‘` 总是一个0是一个0一个1,输出F应该恒为0。

* 过程分析

1. 初始状态:`A=0`, `A'=1` -> `F=0`

2. A从0变为1。

3. A的变化有两路:一路直接到与门,另一路经过一个非门变成A‘再送到与门。

4. 非门有延迟t~pd~。所以在极短的时间内,A已经变成了1,但A’还没有从1变成0(它还是1)。

5. 在这个短暂瞬间,与门的两个输入 `A=1`, `A'=1` -> `F=1`!

6. 等到A‘也稳定变为0后,F才恢复为0。

* 结果:在输出端F产生了一个正向的尖峰脉冲(毛刺)。

*(这是一个简化的示意图,帮助理解)*

B. “0”型冒险

* 表现:在输出本应保持为稳定的低电平“0”的情况下,出现了瞬时的高电平“1”尖峰。

* 产生条件:常出现在或-与结构的电路中。

* 经典例子

考虑电路 `F = A + A‘` (一个信号A和它的反相信号A’ 接入一个或门)。理论上,无论A是什么,`A` 和 `A‘` 总是一个0一个1,输出F应该恒为1。

* 过程分析

1. 初始状态:`A=0`, `A'=1` -> `F=1`

2. A从0变为1。

3. 同样,A的直接通路很快,而经过非门的通路有延迟。

4. 在这个延迟期间,A已经变成了1,但A‘还没来得及从1变0。或门的两个输入 `A=1`, `A'=1` -> `F=1`(这看起来正常?等一下...)

5. 实际上,更典型的场景是A从1变0:

* 初始:`A=1`, `A'=0` -> `F=1`

* A从1变为0。

* 在非门延迟期间,A已变为0,但A‘仍为0(还没变成1)。

* 或门的两个输入 `A=0`, `A'=0` -> `F=0`!产生了一个负向毛刺。

* 等A‘稳定变为1后,F恢复为1。

4. 判断是否存在竞争-冒险的方法

a) 代数法

检查函数中是否存在某个变量X,它同时以原变量(X)和反变量(X‘)的形式出现在表达式中。如果能将其他变量的取值组合代入后,使函数化简为 `F = X · X‘` 的形式,则存在“0”型冒险;若能化简为 `F = X + X‘` 的形式,则存在“1”型冒险。

例子:`F = A·B + A'·C`

* 令 B=1, C=1,则 `F = A·1 + A'·1 = A + A’`。存在“1”型冒险型冒险。

数电竞争冒险现象

* 令 B=0, C=0,则 `F = A·0 + A'·0 = A·A’`。存在“0”型冒险。(但实际上B=C=0时,两项都为0,这种情况不一定会产生冒险,取决于具体实现。代数法是一个初步筛查。)

b) 卡诺图法(更直观有效)

在函数的卡诺图中,如果存在两个相邻的圈(蕴含项)彼此靠近但不相交,即在它们的过渡边界上,没有第三个圈来覆盖它们之间的缝隙,那么当变量在那个边界上变化时,就可能发生竞争-冒险。

例子:`F = A·B + A'·C` 的卡诺图

BC

00 01 11 10

0 | 0 | 1 | 1 | 0 |

1 | 0 | 0 | 1 | 1 |

可以看到,代表 `A·B` (m6, m7) 的圈和代表 `A'·C` (m1, m3) 的圈在位置m3(011)和m7(111)上是相邻的。当A在B=C=1的条件下变化时,就会穿过这两个圈的边界,但由于中间没有被另一个圈覆盖,就会产生毛刺。

金年金字招牌

5. 如何消除竞争-冒险?

竞争无法避免(因为延迟客观存在),但冒险可以消除。

a) 增加选增加选通脉冲

在输出稳定之后,才用一个选通脉冲(通常是高电平有效)去采样最终的输出结果。在信号变化、可能存在毛刺的阶段,让选通脉冲无效,从而屏蔽掉毛刺。这是一种非常有效的办法。

b) 增加冗余项(修改逻辑设计)

这是基于卡诺图的方法。既然冒险发生在两个不相交的圈之间,那我们就在它们之间再画一个圈,把这个“缝隙”给盖上。

对于上面的例子 `F = A·B + A'·C`,我们在卡诺图上增加一个圈,覆盖m3和m7,这个圈对应的乘积项是 `B·C`。

修改后的逻辑函数为:`F = A·B + A'·C + B·C`

这样,当A变化且B=C=1时,新增的 `B·C` 项始终为1,保证了输出F恒为1,消除了毛刺。这个增加的 `B·C` 项就被称为冗余项

c) 输出端接滤波电容

在输出端并联一个几十到几百皮法的小电容到地。由于毛刺是一个高频分量,电容可以将其吸收滤除,使输出波形边沿变得平缓。这种方法简单,但会恶化输出波形的质量,只适用于对工作频率要求不高的场合。

d) 采用时序逻辑(同步电路)

这是现代数字设计中最常用、最根本的解决方法。使用一个全局的时钟信号,只在时钟的有效边沿(上升沿或下降沿)才对组合电路的输出进行采样和存储(存入触发器)。只要毛刺不出现在时钟边沿附近的一个很小的时间窗口内,就不会被系统捕获,从而避免了冒险的影响。这就是为什么大规模的数字系统(如CPU)都采用同步设计的原因。

| 方面 | 核心要点 |

| :--

  • | :--
  • |
  • | 本质 | 因信号路径延迟不同导致的瞬时逻辑错误。 |

    | 根源 | 逻辑门的传输延迟。 |

    | 表现 | 输出端出现不应有的窄脉冲(脉冲(毛刺)。 |

    | 类型 | “1”型冒险(正毛刺)和“0”型冒险(负毛刺)。 |

    | 判别 | 代数法、卡诺图法(观察是否有相切的圈)。 |

    | 消除 | 最佳实践:采用同步时序电路。
    其他方法:增加冗余项、引入选通脉冲、接入滤波电容。 |

    理解竞争-冒险现象对于设计和调试可靠的数字电路至关重要。