面试题16--组合逻辑中的竞争与冒险

1. 什么是竞争冒险?

【1】信号在通过连线和逻辑单元时,都有一定的延时。延时的大小与连线的长短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度等条件的影响;
【2】信号的高低电平转换也需要一定的过渡时间。

由于存在这两方面因素,多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变化,成为“竞争”;往往导致出现一些不正确的尖峰信号,这些尖峰信号称为"毛刺"。

【1】竞争:当一个逻辑门的两个输入端的信号同时向相反方向变化,而变化的时间有差异的现象;
【2】冒险:两个输入端的信号取值的变化方向是相反时,如门电路输出端的逻辑表达式简化成两个互补信号相乘或者相加, 由竞争而可能产生输出干扰脉冲的现象;
【3】有冒险一定存在竞争,有竞争不一定存在冒险!

简言之:在组合逻辑中,由于门的输入信号通路中经过了不同的延时,导致到达该门的时间不一致叫竞争,竞争产生冒险。

2. 竞争冒险产生的原因?

(1)根本原因:延迟;
(2)详细分析:
[1]时间延迟,即信号在传输中受路径、器件等因素影响,输入端信号间出现的时间差异
[2]过渡时间,即脉冲信号状态不会发生突变,必须经历一段极短的过渡时间

时间延迟和过渡时间要素是竞争冒险的产生原因。
面试题16--组合逻辑中的竞争与冒险
更现实一点,对于一个与门:

面试题16--组合逻辑中的竞争与冒险

3. 如何判断有竞争冒险?

3.1 逻辑冒险的判断方法有两种:
1). 代数法:
在逻辑函数表达式中,若某个变量同时以原变量和反变量两种形式出现,例如:逻辑函数在一定条件下可简化为Y=A+A反或Y=A*A反就具备了竞争条件。去掉其余变量(也就是将其余变量取固定值0或1),留下有竞争能力的变量,
如果表达式为F=A+A(用A表示A的反变量,以下同),就会产生0型冒险(F应该为1而实际却为0);如果表达式为F=AA~,就会产生1型冒险。
例:表达式 F=AB+CB,当A=C=1时,F=B+B,在B发生跳变时,可能出现0型冒险。

2). 卡诺图法:将函数填入卡诺图,按照函数表达式的形式圈好卡诺圈
A\BC| 00 01 11 10
-----------------------
0 | 0 0 0 1
1 | 0 1 1 1

F=AC+BC~的卡诺图(将101和111的1圈一起,010和110的1圈一起)
通过观察发现,这两个卡诺圈相切。则函数在相切处两值间跳变时发生逻辑冒险。(前提是这两个卡诺圈没有被其他卡诺圈包围)
3.2 功能冒险的判断:
功能冒险是当多个输入信号同时变化的瞬间,由于变化快慢不同而引起的冒险。

卡诺图法:依然用上面的卡诺图,按同样函数圈好。举例F=AC+BC~中,ABC从111变为010时,A和C两个变量同时发生了跳变,若A先变化,则ABC的取值出现了过渡态011,由卡诺图可以知道此时函数输出F为0,然而ABC在变化的前后的稳定状态输出值为1,此时就出现了0型冒险。这种由过渡态引起的冒险是由于电路的功能所致,因此成为功能冒险。

3.3 综合逻辑冒险和功能冒险:
例 :F=CD+BD+AC,自己画及圈卡诺图,可以发现信号ABCD从0100变化到1101可能存在0型功能冒险,不存在逻辑冒险。从0111变化到1110不存在功能冒险,而可能存在逻辑冒险。

3.4 总结判断竞争-冒险的方法:
1、逻辑函数在一定条件下可简化为Y=A+A`反或Y=A*A反;
2、真值表卡诺图法;
3、计算机辅助分析。

4. 如何消除竞争冒险?

消除竞争-冒险的方法:
1、引入*脉冲;
2、引入选通脉冲;
3、修改逻辑设计,增加冗余乘积项;
4、接入滤波电容。
顺便提一句:时序逻辑中的竞争冒险可以用D触发器,格雷码计数器,同步电路等优秀的设计方案消除

【3】修改逻辑设计:增加冗余项或消掉互补变量,将卡诺图中相切的两项用一个多余的圈连接起来;
面试题16--组合逻辑中的竞争与冒险
【4】加滤波电容
面试题16--组合逻辑中的竞争与冒险
在电路输出端对地加小电容的方法,一般容量为4~20pF之间。利用电容的积分效应,足以把尖峰脉冲的幅度削弱到门电路的阈值以下。这种方法简单易行,缺点是导致了输出波形的边沿变坏,因此只适用于低速逻辑电路中。

【2】引入选通脉冲

以上两种方法对FPGA来说并不适用,真正设计中常用的方法是选通法;其基本思路是通过选通脉冲对输出门加以控制,令选通脉冲在电路稳定后出现,则可使输出避开险象脉冲,送出稳定输出信号
面试题16--组合逻辑中的竞争与冒险
【1】利用D触发器打一拍

对于D触发器的D输入端,**只要毛刺不出现在时钟的上升沿并且不满足数据的建立和保持时间,就不会对系统造成危害,因此可认为D触发器的D输入端对毛刺不敏感。**根据这个特性,应当在系统中尽可能采用同步电路,因为同步电路信号的变化都发生在时钟沿,只要毛刺不出现在时钟的沿口并且不满足数据的建立和保持时间,就不会对系统造成危害。

参考文献:
【1】https://www.cnblogs.com/asic/archive/2011/05/22/2053384.html
【2】https://blog.csdn.net/bleauchat/article/details/85288345