数字电路设计中竞争冒险的分析与研究
刘军;杨悦;于湘珍
【摘 要】介绍了竞争冒险的概念及产生的原因.就数字电路中出现的竞争冒险问题及解决办法,从理论和实践的角度时其进行了总结归纳,并举例分析了判别竞争冒险的方法和消除方法,提出人们在分析设计数字电路时要根据不同的电路情况采用不同的分析、判别和消除方法. 【期刊名称】《现代电子技术》 【年(卷),期】2007(030)020 【总页数】5页(P182-186)
【关键词】竞争冒险;数字电路;时序逻辑电路;逻辑冒险 【作 者】刘军;杨悦;于湘珍
【作者单位】工程学院,陕西,西安,710086;工程学院,陕西,西安,710086;工程学院,陕西,西安,710086 【正文语种】中 文 【中图分类】TN41;TP33
在半导体技术飞速的发展的今天,数字逻辑电路的容量、计算能力及可靠性已有了很大的提高。凭借高速、灵活的编程功能等优点,数字电路成为当今电路设计、信号处理等领域重要的组成部分。竞争冒险现象直接影响电路工作的稳定性、可靠性,甚至会导致整个数字系统的误动作和逻辑紊乱。因此,如何解决竞争冒险问题就成
为数字电路设计中的关键环节。 1 竞争冒险现象及分类 1.1 现象
在数字电路设计时,无论是在组合、时序还是FPGA电路中,都要考虑竞争冒险现象。由于信号在传输和处理过程中经过不同的逻辑门、触发器或逻辑单元时产生时差,造成信号的原变量和反变量状态改变的时刻不一致,这种现象称为竞争(Race)。由于竞争而引起电路输出信号中出现了非预期信号,产生瞬间错误的现象称为冒险(Competition) ,表现为输出端出现了原设计中没有的窄脉冲,常称其为毛刺(burr)。 1.2 分类
通常竞争可以分为临界竞争和非临界竞争。
当竞争的结果导致冒险或险象(Hazard)发生(例如毛刺)。
产生暂时或永久性错误输出,称为临界竞争。若结果没有导致冒险发生,或虽有冒险发生但不会产生错误输出不影响系统的工作的竞争为非临界竞争。
冒险可分为静态冒险和动态冒险输入信号变化前后,输出的稳态值一样,但在输入信号变化时,输出信号产生了毛刺,这种冒险是静态冒险。在组合逻辑电路中,由于产生冒险的原因不同又分为功能冒险(竞争)和逻辑冒险。
输入信号变化前后,输出的稳态值不同,并在边沿处出现了毛刺,即输入变化输出应变化的情况下,输出在变化过程中产生了短暂的错误输出的现象,称为动态冒险。 2 竞争冒险的成因与分析
2.1 组合电路中产生竞争冒险的原因和分析
在组合电路中,产生竞争冒险的主要原因是时延。当逻辑门有2个互补输入信号同时向相反状态变化时,输出端可能产生过渡干扰脉冲的竞争冒险,通常称为“1”,“0”冒险。
“1”冒险(偏“0”冒险)是由一个变量的原变量和反变量同时加到与门输入端造成的。“0”冒险(偏“1”冒险)是由一个变量的原变量和反变量同时加到一个或门输入端造成的。
组合逻辑电路产生竞争冒险的典型电路与分析:
若输入B=C=1,则有在静态时,无论A取何值,F=1。但当A变化时由高电平变为低电平,A的路径不同,各条路径的时延不同,将出图1中的偏“1”冒险,即负脉冲。 若B=C=0时,恒为0,但当A变化时,由低电平变为高电平,将产生一宽度为正极性的脉冲偏“0”冒险。如图1所示。 图1 电路图与脉冲电平
2.2 时序逻辑电路中产生竞争冒险的原因和分析
在时序逻辑电路中,竞争冒险的产生主要来自2个方面:一是组合逻辑电路部分可能发生的竞争冒险现象;二是存储电路工作过程中发生的竞争冒险。同步时序电路不存在竞争现象。异步时序电路中,当输入信号和时钟信号发生同时改变时,而且是通过不同路径到达同一触发器时,就有可能导致竞争冒险。 时序逻辑电路产生竞争冒险的典型电路与分析
如图2所示,CP3取自Q1,而J3=K3=Q2,且F2的时钟信号取自因而当F1由0→1时,F3的输入信号和CP3同时改变,有可能导致竞争冒险。
图2(a)是一个8进制计数器,其状态转换图如图2(b)实线所示。如果当前状态是011,当Q1由0→1时,若Q2变化先于CP3上升沿完成,则在CP3=1的全过程中,J3=K3=Q2的状态始终不变,此时可根据CP3的下降沿到来时由Q2的状态确定Q3的状态。次态为110但如果Q1由0→1时,CP3上升沿先于Q2状态改变,则在CP3=1时,J3=K3=Q2的状态有可能改变,这时不能由CP3下降沿到达时Q2的状态来决定Q3的状态。如Q1Q2Q3由011→101时,F1由0→1。F1首先变成高电平而Q2的1状态未改变,在极短的时间里出现J3K3CP3同为高
电平的情况,使F3主触发器为0,CP3下降沿到达后,尽管Q2=J3=K3,但由于F3主触发器已为0态,因此CP3下降沿到达后,F3将变为0态,使
Q1Q2Q3=000,如图2(b)虚线所示。这种竞争冒险将使电路的逻辑功能发生彻底的改变(变为4进制计数器)。图2中如果不知CP3和Q2状态改变的先后,就不能确定该电路的逻辑功能。 图2 时序电路中的竞争冒险
3 FPGA中产生竞争冒险的原因和分析
在FPGA (Field Programmable Gate Array)中,延时主要是由连线的长短和逻辑单元的数目决定的,同时还受器件的制造工艺、工作电压、温度等因素的影响。信号的电平转换也需要一定的过渡时间。由于FPGA以及其他的CPLD器件内部的分布电容和电感不能过滤电路中的毛刺,从而使得毛刺逐级传递,对电路造成的影响更加突出。即使是在最简单的逻辑运算中,如果出现多路信号同时跳变的情况,在通过内部走线之后,也一定会产生毛刺。目前,数字电路设计以及数字信号处理中的信号往往是由时钟控制的多数据输入的复杂运算系统产生的,每个数据都由相当多的位数组成。这时,每一级的毛刺都会对结果产生影响,乃至影响电路设计的可靠性和精确性。
FPGA电路产生竞争冒险的典型电路与分析:
图3是一个简单的3人表决电路,当输入信号有二个或二个以上为高电平时,输出就为高电平。图4所示的是该电路的仿真结果。
从图3中可知,在 X1这一 时刻,理想情况下输出应为高电平,由于芯片内部布线较复杂,延时效应就很明显,输出在X2时刻才有高电平产生,仿真结果表明,信号将近延迟了7~8 ns。产生了输出错误。 图3 三人表决电路
图4 3人表决电路的仿真结果
4 竞争冒险的判别方法 4.1 代数法
(1) 静态功能冒险的判断
如果在组合逻辑电路中有n个输入变量,当p{(1
假设在卡诺图中,由不变的(n-p)个输入变量组成的成积项所包含的最小项方格中,既有1又有0,则p个变量发生变化时,就有发生功能冒险的可能。如果这些最小项方格中全部为1或者全部为0,则p个变量发生变化时,不会发生功能冒险。也可以从逻辑函数表达式中进行判断。如果由不变的(n-p)个输入变量组成的成积项不是逻辑函数表达式中的成积项或多余项,则p个变量发生变化时,就有功能冒险的可能。例如,输入变量由0100变化到1101时,稳定时F(0,1,0,0}=F(1,1,0,1),不发生变化的变量组成的成积项,包含最小项,由于其中为0,其余均为1,所以在a,d发生变化时,有功能冒险可能。从函数表达式可见不是逻辑函数的成积项,也不是多余项,所以在a,d发生变化时,有功能冒险的可能。 (2) 逻辑冒险的判断
当p个输入变量发生变化时,如果判断出不会发生功能冒险,但在逻辑函数表达式中没有包含由(n-p)个不变变量组成的成积项,则有逻辑冒险的可能。如中,输入变量abcd由0111变化 到1110时,已判断出不会发生功能冒险,由不变变量组成成积项bc在函数表达式中不包含,所以有逻辑冒险的可能。 4.2 卡诺图法
只要在卡诺图中存在2个相切但不相交的圈(“0”冒险是1构成的圈,“1”冒险是0构成的圈),就会产生冒险。
判断图3所示卡诺图的冒险情况如图5所示。 图5 卡诺图
图5(a)中2个卡诺图圈相切,将产生冒险,相切处A=0,C=1,B变量变化时产生冒险;图5(b)中卡诺圈相交,无冒险。 5 竞争冒险的消除方法
5.1 组合逻辑电路中竞争冒险的消除方法 (1) 加选通脉冲信号
这里分析图6所示的组合电路: 图6 修改逻辑设计
由该电路逻辑图可直接写出输出函数:
假定A=C=1时,该电路的逻辑关系和图5(a)基本相同。函数可以写作:
当B由1变为0时,由于信号传输路径不同,F1先由0变为1,F2后由1变为0,使F1和F2出现同时为1的时刻,故输出产生负向过渡干扰脉冲。
如图5(a)所示,该选通脉冲通常是P=0,使电路处于封锁状态,只有在接收了输入信号并且电路达到了新的稳态之后,才有脉冲P=1,允许电路输出。这就避免了竞争冒险的影响。引入选通脉冲的组合电路,输出信号只有在选通脉冲P=1其间才有效,波形图见图5(b)所示。这就是选通法 (2) 修改逻辑设计(增加乘积项法)
适当修改逻辑电路,可以消除某些竞争冒险现象。例如,上面分析的电路中,当A=C=1时,由于出现了竞争冒险现象。为此,可把表达式变换一下,根据常用布尔公式可知:在增加了AC项以后,函数关系不变,但当A=C=1时,输出F恒为1,不再产生干扰脉冲。所以,把电路按上式修改,即可消除竞争冒险现象。修改后的电路如图7所示。
用增加多余项的方法修改逻辑设计,可以消除一些竞争冒险现象,但是,这种方法
的适用范围是有限的。不过,只有通过逻辑设计使得在转换信号时电路中各个门的输入端只有一个变量改变状态,输出就不会出现过渡脉冲干扰,从而消除了竞争冒险现象。
图7 修改后的电路图
(3) 输出端并联电容器(电容滤出法)
逻辑电路在较慢速度下工作时,为了消去竞争冒险,可以在输出端接一个几百微法的电容,将其滤出掉。如图8所示,由于电路中存在输出电阻Ro,致使输出波形上升沿和下降沿的变化变得比较缓慢,对于很窄的负跳变脉冲起到平滑的作用,这时在输出端便不会出现逻辑错误。 图8 电容滤出法 (4) 卡诺图法
在卡诺图中静态逻辑冒险表现在卡诺图2个圈的相切处。如表达式用卡诺图法判断有无静态逻辑冒险。首先用卡诺图(见图9)表示该逻辑函数。 有2处发生静态逻辑冒险冒险(蓝色标示):
一处是当A=B=1,C=0 时,表达式当+D由由0→1信号变化的过程中发生静态逻辑冒险。另一处是当B=C=D=1时,表达式当A由由1→0 信号变化的过程中发生静态逻辑冒险。
通过增加冗余项的方法,从根本上消除静态逻辑冒险。如图8,卡诺图的相切处用圈链起来,表达式为这是无静态逻辑冒险的最简式。根据电路图,电路的逻辑表达式为该电路的输出级接收3路信号,依次分析任意2路信号可能产生的冒险。分析结果,在A=C=1和D=0时逻辑表达式为:此时信号B由0→1时,发生静态逻辑冒险。 (5) 加封锁脉冲
在输入信号产生竞争冒险的时间内,引入一个脉冲将可能产生尖峰干扰脉冲的门封
锁住。封锁脉冲应在输入信号转换前到来,转换结束后消失,如图10所示。 图9 卡诺图 图10 封锁脉冲
5.2 时序逻辑电路中竞争冒险的消除方法
(1) 在电路中插入适当的可控延迟调整变化速度,保证得到正确的转移结果。 (2) 在电路设计中,状态分配时,通过适当的状态分配避免临界竞争。 5.3 FPGA中竞争冒险的消除方法 (1) 修改电路法(加D触发器法)
当计数器的输出进行相“与”或相“或”时会产生毛刺。随着计数器位数的增加,毛刺的数量和毛刺的种类也会越来越复杂。毛刺在计数器电路输出中的仿真结果如图11所示,从图11中可发现有毛刺出现。此时,可通过在输出端加D触发器加以消除。接D触发器后仿真结果如图12所示。 图11 仿真结果1
从图12可以看到,数据中的毛刺被明显消除。
但用D触发器消除时,有时会影响到时序,需要考虑很多问题。所以要仔细地分析毛刺产生的来源和毛刺的性质,采用修改电路或其他办法来彻底消除。 图12 仿真结果2 (2) 信号同步法
设计数字电路的时候采用同步电路可以大大减少毛刺。另外,由于大多数毛刺都比较短(大概几个ns),只要毛刺不出现在时钟跳变沿,毛刺信号就不会对系统造成危害了。因此只要在整个系统中使用同一个时钟就可以达到系统同步消除毛刺影响的目的。
(3) 信号延时同步法
因为时钟信号在FPGA器件中传递时是有延时的,这样就无法预知时钟跳变沿的
精确位置。也就无法保证在某个时钟的跳变沿读取的数据是一个稳定的数据,尤其是在多级电路设计中,这个问题就更加突出。真正的“同步”就成为去除毛刺信号的关键问题。为此提出信号延时法 。
信号延时法的原理是在2级信号传递的过程中加1个延时环节,从而保证在下一个模块中读取到的数据是稳定后的数据,即不包含毛刺信号。这里所指的信号延时可以是数据信号的延时,也可以是时钟信号的延时。 (4) 灵活运用时钟信号法
和上述方法的原理相似,灵活使用时钟信号的目的也是尽可能的消除竞争冒险。比如在时钟的第一个跳变沿触发模块a,下一个跳变沿控制触发模块b,这样时钟的交替控制也在一定程度上消除了竞争冒险,从而抑制了毛刺信号。但是这些方法不适合使用在比较复杂的设计中。 (5) 状态机控制法
对于大型的数字电路设计,状态机是一种非常理想的选择,能使运行性能和硬件资源的占用达到最佳的优化。另外,灵活的使用状态机也可以实现信号的同步和消除毛刺的目的。在数据传递比较复杂的多模块系统中,由状态机在特定的时刻分别发出控制特定模块的时钟信号或者模块使能信号,状态机的循环控制就可以使得整个系统协调运作,同时减少毛刺信号。那么只要在状态机的触发时间上加以处理,就可以避免竞争冒险,从而抑制毛刺的产生。原理如图13所示。 图13 状态机控制原理 6 结 语
在数字电路领域中,无论是在组合逻辑电路、时序逻辑电路还是在FPGA器件的设计和应用过程中,竞争冒险问题是影响其可靠性和精确性的一个重要因素。有效抑制竞争冒险是数字电路设计中一个非常重要的问题。在设计电路时,首先要对电路设计本身进行优化和改进,明确可能产生竞争冒险的原因和环节,切实掌握各种类
型的竞争冒险的判别、消除方法,多实验、多分析,采取适当的方法,使竞争冒险现象的产生降到最低。从而保证所设计的数字电路具有较高的稳定性和可靠性。 参 考 文 献
[1] 王毓银.脉冲与数字电路 [M].北京:高等教育出版社,1994.
[2] 康华光.电子技术基础数字部分[M].3版.北京:高等教育出版社,1998. [3] 杨颂华.数字电子技术基础[M].西安: 西安电子科技大学出版社,2000. [4] 李舫.自装可编程控制器[M].西安:西安交通大学出版社,2000. [5] 阎石.数字电子技术基础[M].北京:高等教育出版社,2001. [6] 江晓安.数字电子技术[M].西安:西安电子科技大学出版社,2002. [7] 林涛.数字电子技术基础[M].北京:清华大学出版社,2005.