1. 基本概念
示例一:
如上图所示的这个电路,使用了两个逻辑门,一个非门和一个与门,本来在理想情况下,gate2的输入端口同时变化, 输出 F 应该是一直稳定为 0 ,但是实际上每个门电路从输入到输出是一定会有时间延迟的,而且信号在互连线的传播也是有延时的,所以就会出现如下情况:
可以看到,输出端 F 出现了短暂的高电平,也就是说会输出端口会出现错误的的输出。
示例二:
在图4.9.1(a)所示的与门电路中,稳态下无论 A=1,B=0 还是 A=0,B=1,输出皆为 Y=0。但是在输入信号A从 1 跳变为 0 时,如果B从0跳变为1,而且 B 首先上升到VIL(输入低电平)以上,这样在极短的时间内将出现A、B同时高于VIL的状态,于是便在门电路的输出端产生了极窄的Y=1 的尖峰脉冲,或称为电压毛刺,如图中所示(在画波形时考虑了门电路的传输延迟时间)。显然,这个尖峰脉冲不符合门电路稳态下的逻辑功能,因而它是系统内部的一种噪声。
同样,在图4.9.1(b)所示的或门电路中,如果 A 从 1 变成 0 的时刻和 B 从 0 变成 1 的时刻略有差异,而且在 A 下降到 VIH (输入高电平)时,B 尚未上升到 VIH ,则在暂短的t时间内将出现 A 、B 同时低于 VIH 的状态,使输出端产生极窄的Y=0的尖峰脉冲。这个尖峰脉冲同样也是违背稳态下逻辑关系的噪声。
根据上述示例,将门电路两个输入信号同时向相反方向的逻辑电平跳变(一个从 1 变为 0,另一个从 0 变为 1 )的现象称为竞争(Competiton)。
由于竞争往往会出现一些不正确的尖峰信号,这些尖峰信号称为“毛刺”。 如果一个组合逻辑电路中有“毛刺”出现,就说明该电路存在“冒险(Hazard)”
由于竞争而在电路输出端可能产生尖峰脉冲的现象就称为竞争-冒险。
需要注意的是,竞争不一会都会产生毛刺。例如,在图4.9.1(a)中所示的与门电路,如果在 B 上升到 VIL 之前,A 已经降到了 VIL 以下(图中的虚线),这时,电路的输出端时不会产生毛刺的。同理,对于或门电路,如果 A 下降到 VIH 之前,B已经上升到 VIH 以上(图中虚线部分),输出端也不会产生毛刺(逻辑门的控制值后变化,这样就不会产生毛刺)。
如果图4.9.1所示的与门和或门是复杂数字系统中的两个门电路,而且 A, B 又是经过不同的传输途径到达的,那么在设计时往往难于准确知道A, B到达次序的先后,以及它们在上升时间和下降时间上的细微差异。因此,我们只能说只要存在竞争现象,输出就有可能出现违背稳态下逻辑关系的尖峰脉冲(毛刺)。
竞争不一定会导致冒险,但是冒险一定会有竞争。
示例三:
对于下图的译码器电路,同样也会存在竞争冒险。由于G4和G5的传输延时不相同,信号到达G0的时间有所差异,这样就会倒是Y0出现毛刺。
如果译码器的负载是一个对尖峰脉冲敏感的电路(如触发器),那么就可能是的负载电路发生错误动作。
2. 冒险的分类
冒险按产生形式的不同可以分为静态冒险和动态冒险。
- 静态冒险:输入有变化,而输出不应变化是产生的单个窄脉冲
- 动态冒险:输入有变化时,输出也应该变化时产生的冒险
动态冒险是由静态冒险引起的,所以存在动态冒险的电路也存在静态冒险。
静态冒险根据产生条件的不同,又可以分为功能冒险和逻辑冒险。
功能冒险:两个或两个以上输入信号同时变化时,在输出端口产生毛刺
逻辑冒险:只有一个变量产生变化时出现的冒险。(同一个输入信号,经过不同路径与延迟到达输入端,产生的竞争引起的冒险。)
3. 静态冒险产生的判断
代数法
在输入变量每次只有一个改变状态的简单情况下,可以通过逻辑函数表达式判断组合逻辑电路中是否存在竞争-冒险。
如果一个组合逻辑函数表达式 F,在某些条件下能化简成 F = A + A'
或 F = A'A
的形式,在 A 产生变化时,就可能产生静态逻辑冒险。(其实就是输出端连接的是一个与门或者是或门,然后输入信号A沿着不同的路径,经过不同的延时之后,到达了该逻辑门的输入端口,这样就有可能产生毛刺。)
示例:
卡诺图法
同一个输入信号,经过不同路径与延迟到达输入端,产生的竞争引起的冒险
4. 毛刺的消除
首先确定竞争和冒险是否影响系统,毛刺并不是对所有的输入都有危害,例如 D 触发器的D 输入端,只要毛刺不出现在时钟的上升沿并且满足数据的建立和保持时间,就不会对系统造成危害,我们可以说D 触发器的 D 输入端对毛刺不敏感。
使用同步电路
根据这个特性,我们应当在系统中尽可能采用同步电路,这是因为同步电路信号的变化都发生在时钟沿,只要毛刺不出现在时钟的沿口并且满足数据的建立和保持时间,就不会对系统造成危害。(由于毛刺很短,多为几纳秒,基本上都不可能满足数据的建立和保持时间)因此我们可以通过改变设计,破坏毛刺产生的条件,来减少毛刺的发生。
使用格雷码计数器
例如,在数字电路设计中,常常采用格雷码计数器取代普通的二进制计数器,这是因为格雷码计数器的输出每次只有一位跳变,消除了竞争冒险的发生条件,避免了毛刺的产生。
在递加的计数中,有时会发生多bits的跳变,例如从11计数到12时,对应二进制数字为4’b1011至4’b1100,后三个bit都需要发生变化,此时各个数据位的转变可能导致延时,举个例子,上述情况下多bit的转变过程可能为 4’b1011 > 4’b1111 > 4’b1110 > 4’b1100。此时则可能会出现尖峰脉冲,从而导致竞争与冒险发生。
而格雷码计数器在计数时相邻数之间只有一个bit会发生变化,因此可以有效避免竞争与冒险。
增加滤波电容
在输出端并接一个很小的滤波电容。
简单易行,但是同时会增加输出电压波形的上升时间和下降时间,使波形变坏。
增加冗余项,消除逻辑冒险
引入选通脉冲
消除竞争冒险选通脉冲是当电路输出端达到新的稳定状态之后,引人选通脉冲,从而使输出信号是正确的逻辑信号而不包含
干扰脉冲。
如图所示,取样脉冲(选通脉冲)通常为0, 使电路处于封锁状态。当接收了输入信号,并且电路达到稳态时,取样脉冲为1,输入信号只有在这时才有效。这就避免了竞争和冒险带来的影响。