在前面讨论组合电路时,只是关心了输入与输出之间的稳态关系,并没有考虑门电路的延迟时间。实际上,门电路都存在一定的延迟时间,使输入信号的变化存在一个过渡过程,进而影响整个组合电路。在这里,为了方便讨论,假定所有门的延迟时间均相同,且为tpd。下面举例来说明竞争与冒险的形成过程。
如图5-45所示电路,F=AA',若不考虑门电路的延迟,则电路的稳态输出F始终为0。若考虑门电路的延迟时间,则A经非门延迟tpd后才得到A',A和A'相与也要经过延迟tpd后才得到F。其波形图如图5-46所示。
图5-45 某组合逻辑电路图 图5-46 某组合逻辑电路工作波形图
可见,由于非门的延迟,A和A'到达与门的时间不同,它们经过与门延迟后产生了正的尖脉冲,这是一种错误的输出,称其为毛刺。下面再来看一种电路。
如图5-47所示,F=A' C+AB。当B=C=1时,F=A' +A。若不考虑门电路的延迟,电路的稳态输出应始终为1。若考虑门电路的延迟,其电路工作波形如图5-48所示,信号A经过非门延迟tpd后才得到A',A'再和C经过与门延迟tpd后得到E,共延迟了2tpd。A和B相与延迟tpd后得到D,然后D和E相或再延迟tpd后得到F。
图5-47 某电路图 图5-48 某电路工作波形图
可见,由于前面的延迟造成D和E到达或门的时间不同,它们在经过或门延迟后产生了负尖脉冲的错误输出。
由上面的两个例子可以看出,产生毛刺的输出的原因是信号经过不同途径到达同一个门时有一定的“时差”,把这种时差现象称为竞争。竞争使电路输出产生毛刺,它分为A·A'和A+A' 两种。若一个化简后的逻辑函数的输入的某种取值可以使函数表达式为F=A·A',则称该电路存在A·A' 型竞争;同样,若一个化简后的逻辑函数的输入的某种取值可以使函数表达式为F=A+A',则称该电路存在A+A' 型竞争。
在组合电路中,竞争是一种常见的现象,但并不是所有的竞争都可以使电路输出产生毛刺现象。因为可能在组合电路中,各个输入在中间的门电路产生了时差,但到最后的门电路时刚好没有时差,就不会产生毛刺。不产生错误输出的竞争叫做非临界竞争;产生错误输出的竞争叫做临界竞争,通常也叫做冒险。冒险现象会使电路产生毛刺,降低了逻辑电路的可靠性,因此在设计组合电路时要尽量地发现和消除冒险现象。
冒险一般可以分为逻辑冒险和功能冒险两种。
· 在一个输入变量发生变化的条件下,电路在过渡过程中产生的冒险,一般称为逻辑冒险。
· 在多个输入变量同时发生变化的条件下,它们产生的时差使电路在过渡过程中产生的冒险,一般称为功能冒险。这里只着重介绍一下逻辑冒险的发现和消除。
逻辑冒险可以分为静态逻辑冒险和动态逻辑冒险两种。
· 静态逻辑冒险是指电路在某个输入变量发生变化的前后,输出的稳态值是相同的,在输入信号发生变化时产生了毛刺。动态逻辑冒险是指电路在某个输入变量发生变化的前后,输出的稳态值是不同的,但也在输入信号发生变化时产生了毛刺。
· 动态逻辑冒险以静态逻辑冒险为基础,因此我们防止或消除了静态逻辑冒险后,动态逻辑冒险也就不存在了。我们通常把静态逻辑冒险简称为冒险。下面介绍如何发现和消除冒险。
图5-49 卡诺图
|
如图5-49所示,圈1对应A' C项,圈2对应AB项。当B=C=1时,圈1就代表A',圈2代表A,所以此时函数变为:F=A+A',存在冒险现象。它在卡诺图上的表现形式就是在化简后的卡诺图中,有两个合并圈存在相邻的最小项,而没有合并圈覆盖它们。
在发现了冒险现象后,就来消除它。方法是如图圈3那样将两个合并圈存在的相邻的最小项圈起来。可见圈3所对应的与项与A无关,这时输出函数变为:
F=A' C+AB+BC
可见,当B=C=1时,保证了F=1,使输出不会出现毛刺。这种方法从逻辑代数的角度来看就是在原函数上加了一个添加项,虽然是函数变复杂了,但是提高了电路的可靠性。所以,在设计无冒险的组合电路时,通常是先将函数化简,再准确地找到添加项,一般采用卡诺图法。
【例5-15】 设计组合电路实现如下函数,要求电路无冒险,
F=AB' C'+B' C' D+A' C' D+AB' CD'+A' B' CD'
解:将函数用卡诺图化简如图5-50所示。
用卡诺图化简后得到的最简函数是:
F=AB' C'+B' CD'+A' C' D
但是从卡诺图中可以看出,合并圈之间有最小项相邻,所以存在冒险。于是用圈1和圈2将其圈起来,添加了合并项,将冒险消除。消除了冒险后的逻辑函数表达式为:
F=AB' C'+B' CD'+A' C' D+B' C' D+AB' D'
所以,可以实现题述函数而且无冒险的组合电路的逻辑电路,如图5-51所示。
图5-50 卡诺图 图5-51 无冒险的组合电路的逻辑电路图