zz竞争和冒险

  • 当一个门的输入有两个或两个以上的变量发生改变时,由于这些变量是经过不同组合逻辑路径产生的,使得它们状态改变的时刻有先有后,这种时差引起的现象称为竞争(Race)。竞争的结果若导致冒险或险象(Hazard)发生(例如毛刺(glitch)),并造成错误的后果,那么就称这种竞争为临界竞争。若竞争的结果没有导致冒险发生,或虽有冒险发生,但不影响系统的工作,那么就称这种竞争为非临界竞争。
  • 组合逻辑电路的险象仅在信号状态改变的时刻出现毛刺(glitch),这种冒险是过渡性的,它不会使稳态值偏离正常值,但在时序电路中,冒险是本质的,可导致电路的输出值永远偏离正常值或者发生振荡。
  • 组合逻辑电路的冒险是过渡性冒险,从冒险的波形上,可分为静态冒险和动态冒险。
  • 输入信号变化前后,输出的稳态值是一样的,但在输入信号变化时,输出信号产生了毛刺,这种冒险是静态冒险。若输出的稳态值为0,出现了正的尖脉冲毛刺,称为静态0险象。若输出稳态值为1,出现了负的尖脉冲毛刺,则称为静态1冒险。
  • 输入信号变化前后,输出的稳态值不同,并在边沿处出现了毛刺,称为动态险象(冒险)。
  • 从引起冒险的具体原因上,冒险可以分为函数冒险和逻辑冒险。函数冒险是逻辑函数本身固有的,当多个输入变量发生变化时,常常会发生逻辑冒险。避免函数冒险的最简单的方法是同一时刻只允许单个输入变量发生变化,或者采用取样的办法。
  • 单个输入变量改变时,不会发生函数冒险,但电路设计不合适时,仍会出现逻辑冒险。通过精心设计,修改电路的结构,可以消除逻辑冒险。
  • 如何解决
  • 1.通过改变设计,破坏毛刺产生的条件,减少毛刺发生。例如,数字电路设计中,常常采用Gray Code计数器取代普通计数器,因为Gray Code 计数器的 输出每次只有一位跳变,消除了竞争冒险发生的条件,避免了毛刺的产生。
  • 2.毛刺并不是对所有的输入都有危害,例如:D触发器的D输入端,只要毛刺不出现在时钟的上升沿且满足数据的建立和保持时间,就不会对系统造成危害,因此可以说D触发器的D输入端对毛刺不敏感。因此,在系统中尽可能采用同步电路,因为同步电路信号的变化都发生在时钟沿,只要毛刺不出现在时钟的沿口并且不满足数据的建立和保持时间,就不会对系统造成危害。(由于毛刺一般都很短,多为几纳秒,基本上都不可能满足数据的建立和保持时间)
  • 3. 以上方法可以大大减少毛刺,但它并不能完全消除毛刺,有时,我们必须手工修改电路来去除毛刺。我们通常使用"采样"的方法。 一般说来,冒险出现在信号发生电平转换的时刻,也就是说在输出信号的建立时间内会发生冒险,而在输出信号的保持时间内是不会有毛刺信号出现的。如果在输出信号的保持时间内对其进行"采样",就可以消除毛刺信号的影响。

有两种基本的采样方法:一种方法是在输出信号的保持时间内,用一定宽度的高电平脉冲与输出信号做逻辑"与"运算,由此获取输出信号的电平值。图6.23说明了这种方法,采样脉冲信号从输入引脚"SAMPLE"引入。从图6.24的仿真波形上可以看出,毛刺信号出现在"TEST"引脚上,而"OUT"引脚上的毛刺已被消除了.

 


图6.23 消除毛刺信号的方法之一

 


图6.24 图6.23所示电路的仿真波形

上述方法的一个缺点是必须人为的保证sample信号必须在合适的时间中产生,另一种更常见的方法是利用D触发器的D输入端对毛刺信号不敏感的特点,在输出信号的保持时间内,用触发器读取组合逻辑的输出信号,这种方法类似于将异步电路转化为同步电路。 图6.25给出了这种方法的示范电路,图6.26是仿真波形。

 


图6.25 消除毛刺信号方法之二


图6.26 图6.25所示电路的仿真波形

  • 利用冗余项法

  利用冗余项消除毛刺有2种方法:代数法和卡诺图法,两者都是通过增加冗余项来消除险象,只是前者针对于函数表达式而后者针对于真值表。以卡诺图为例,若两个卡诺圆相切,其对应的电路就可能产生险象。因此,修改卡诺图,在卡诺图的两圆相切处增加一个圆,以增加多余项来消除逻辑冒险。但该法对于计数器型产生的毛刺是无法消除的。


在仿真时,我们也可能会发现在FPGA器件对外输出引脚上有输出毛刺,但由于毛刺很短,加上PCB本身的寄生参数,大多数情况下,毛刺通过PCB走线,基本可以自然被虑除,不用再外加阻容滤波。

 

posted on 2011-12-06 19:42  itravel  阅读(280)  评论(0编辑  收藏  举报

导航