解释一:
在组合逻辑中,由于门的输入信号通路中经过了不同的延时,导致到达该门的时间不一致叫竞争。产生毛刺叫冒险。如果布尔式中有相反的信号则可能产生竞争和冒险现象。解决方法:一是添加布尔式的(冗余)消去项,但是不能避免功能冒险,二是在芯片外部加电容。三是增加选通电路。 在组合逻辑中,由于多少输入信号变化先后不同、信号传输的路径不同,或是各种器件延迟时间不同(这种现象称为竞争)都有可能造成输出波形产生不应有的尖脉冲(俗称毛刺),这种现象成为冒险。
解释二:
竞争与冒险是数字电路中存在的一种现象。由于元器件质量和设备工艺已达到相当高的水平,因而数字电路的故障往往是竞争与冒险引起的,所以要研究它们。在一个复杂的数字电路的设计阶段,就完全预料电路中的竞争与冒险是困难的,有一些要通过实验来检查。下面将说明组合数字电路中竞争与冒险的基本概念和确定消除它的一些基本方法。
竞争:在组合电路中,信号经由不同的途径达到某一会合点的时间有先有后,这种现象称为竞争。
冒险:由于竞争而引起电路输出发生瞬间错误现象称为冒险。表现为输出端出现了原设计中没有的窄脉冲,常称其为毛刺。
竞争与冒险的关系:有竞争不一定会产生冒险,但有冒险就一定有竞争。
在组合逻辑中,由于门的输入信号通路中经过了不同的延时,导致到达该门的时间不一致叫竞争。 产生毛刺叫冒险。如果布尔式中有相反的信号则可能产生竞争和冒险现象。 解决方法:一是添加布尔式的消去项,二是在芯片外部加电容。
当组合逻辑电路存在冒险现象时,可以采取修改逻辑
当一个门的输入有两个或两个以上的变量发生改变时,由于这些变量是经过不同路径产生的,使得它们状态改变的时刻有先有后,这种时差引起的现象称为竞争(Race)。竞争的结果若导致冒险或险象(Hazard)发生(例如毛刺),并造成错误的后果,那么就称这种竞争为临界竞争。若竞争的结果没有导致冒险发生,或虽有冒险发生,但不影响系统的工作,那么就称这种竞争为非临界竞争。 组合逻辑电路的险象仅在信号状态改变的时刻出现毛刺,这种冒险是过渡性的,它不会使稳态值偏离正常值,但在时序电路中,冒险是本质的,可导致电路的输出值永远偏离正常值或者发生振荡。 组合逻辑电路的冒险是过渡性冒险,从冒险的波形上,可分为静态冒险和动态冒险。 输入信号变化前后,输出的稳态值是一样的,但在输入信号变化时,输出信号产生了毛刺,这种冒险是静态冒险。若输出的稳态值为0,出现了正的尖脉冲毛刺,称为静态0险象。若输出稳态值为1,出现了负的尖脉冲毛刺,则称为静态1冒险。 输入信号变化前后,输出的稳态值不同,并在边沿处出现了毛刺,称为动态险象(冒险)。 从引起冒险的具体原因上,冒险可以分为函数冒险和逻辑冒险。函数冒险是逻辑函数本身固有的,当多个输入变量发生变化时,常常会发生逻辑冒险。避免函数冒险的最简单的方法是同一时刻只允许单个输入变量发生变化,或者采用取样的办法。 单个输入变量改变时,不会发生函数冒险,但电路设计不合适时,仍会出现逻辑冒险。通过精心设计,修改电路的结构,可以消除逻辑冒险。
解释三:
当一个门的输入有两个或两个以上的变量发生改变时,由于这些变量是经过不同组合逻辑路径产生的,使得它们状态改变的时刻有先有后,这种时差引起的现象称为竞争(Race)。竞争的结果若导致冒险或险象(Hazard)发生(例如毛刺(glitch)),并造成错误的后果,那么就称这种竞争为临界竞争。若竞争的结果没有导致冒险发生,或虽有冒险发生,但不影响系统的工作,那么就称这种竞争为非临界竞争。
组合逻辑电路的险象仅在信号状态改变的时刻出现毛刺(glitch),这种冒险是过渡性的,它不会使稳态值偏离正常值,但在时序电路中,冒险是本质的,可导致电路的输出值永远偏离正常值或者发生振荡。
组合逻辑电路的冒险是过渡性冒险,从冒险的波形上,可分为静态冒险和动态冒险。
输入信号变化前后,输出的稳态值是一样的,但在输入信号变化时,输出信号产生了毛刺,这种冒险是静态冒险。若输出的稳态值为0,出现了正的尖脉冲毛刺,称为静态0险象。若输出稳态值为1,出现了负的尖脉冲毛刺,则称为静态1冒险。
输入信号变化前后,输出的稳态值不同,并在边沿处出现了毛刺,称为动态险象(冒险)。
从引起冒险的具体原因上,冒险可以分为函数冒险和逻辑冒险。函数冒险是逻辑函数本身固有的,当多个输入变量发生变化时,常常会发生逻辑冒险。避免函数冒险的最简单的方法是同一时刻只允许单个输入变量发生变化,或者采用取样的办法。
单个输入变量改变时,不会发生函数冒险,但电路设计不合适时,仍会出现逻辑冒险。通过精心设计,修改电路的结构,可以消除逻辑冒险。
如何解决
1.通过改变设计,破坏毛刺产生的条件,减少毛刺发生。例如,数字电路设计中,常常采用Gray Code计数器取代普通计数器,因为Gray Code 计数器的 输出每次只有一位跳变,消除了竞争冒险发生的条件,避免了毛刺的产生。
2.毛刺并不是对所有的输入都有危害,例如:D触发器的D输入端,只要毛刺不出现在时钟的上升沿且满足数据的建立和保持时间,就不会对系统造成危害,因此可以说D触发器的D输入端对毛刺不敏感。因此,在系统中尽可能采用同步电路,因为同步电路信号的变化都发生在时钟沿,只要毛刺不出现在时钟的沿口并且不满足数据的建立和保持时间,就不会对系统造成危害。(由于毛刺一般都很短,多为几纳秒,基本上都不可能满足数据的建立和保持时间)
3. 以上方法可以大大减少毛刺,但它并不能完全消除毛刺,有时,我们必须手工修改电路来去除毛刺。我们通常使用"采样"的方法。 一般说来,冒险出现在信号发生电平转换的时刻,也就是说在输出信号的建立时间内会发生冒险,而在输出信号的保持时间内是不会有毛刺信号出现的。如果在输出信号的保持时间内对其进行"采样",就可以消除毛刺信号的影响。
有两种基本的采样方法:一种方法是在输出信号的保持时间内,用一定宽度的高电平脉冲与输出信号做逻辑"与"运算,由此获取输出信号的电平值。图1说明了这种方法,采样脉冲信号从输入引脚"SAMPLE"引入。从图2的仿真波形上可以看出,毛刺信号出现在"TEST"引脚上,而"OUT"引脚上的毛刺已被消除了。
图1 消除毛刺信号的方法之一
图2 图1所示电路的仿真波形
上述方法的一个缺点是必须人为的保证sample信号必须在合适的时间中产生,另一种更常见的方法是利用D触发器的D输入端对毛刺信号不敏感的特点,在输出信号的保持时间内,用触发器读取组合逻辑的输出信号,这种方法类似于将异步电路转化为同步电路。 图3给出了这种方法的示范电路,图4是仿真波形。
图3 消除毛刺信号方法之二
图4 图3所示电路的仿真波形
利用冗余项法
利用冗余项消除毛刺有2种方法:代数法和卡诺图法,两者都是通过增加冗余项来消除险象,只是前者针对于函数表达式而后者针对于真值表。以卡诺图为例,若两个卡诺圆相切,其对应的电路就可能产生险象。因此,修改卡诺图,在卡诺图的两圆相切处增加一个圆,以增加多余项来消除逻辑冒险。但该法对于计数器型产生的毛刺是无法消除的。 在仿真时,我们也可能会发现在FPGA器件对外输出引脚上有输出毛刺,但由于毛刺很短,加上PCB本身的寄生参数,大多数情况下,毛刺通过PCB走线,基本可以自然被虑除,不用再外加阻容滤波。
|