非门被称为反向器,也可称为“气泡”(bubble)。
所谓“推气泡”,其实就是“移动非门”。
我们做一下直观感受: 推一个气泡通过一个门使它从门一边输出,在另一边输出,可以将与门替换成或门,反之亦然。
上图与非门是在输出端包含气泡的与门。推一个气泡到左边会使得每一个输入端带有气泡,并将与门换成或门。 下图是或非门的转换:
推气泡的规则:
向后推输出端的气泡或者向前推输入端的气泡,需要将与门换成或门,反之亦然。从输出端推气泡到输入端,把气泡放置在门的输入端。从门的所有输入端向前推气泡,把气泡放置在门的输出端。这里的知识,依据德摩根公式就不难理解了。
下面继续介绍“推气泡”在处理多级组合逻辑中的作用。
在CMOS电路中,其与非门和或非门的实现优于与门和或门。但是从与非门和或非门电路中读取布尔表达式,可能会相当头痛。难以通过观察法直接得到下图中舵机电路的布尔表达式。这时,推气泡可以帮助我们重画这些电路,消除气泡,比较容易地确定逻辑功能。
根据上面介绍的“推气泡”规则,具体的方法如下:
电路的输出端开始向输入方向推;将气泡从最后的输出端向输入端推,可以读出输出(Y)的布尔表达式,而非输出的补(Y’)的布尔表达式。继续向后推,以消除每一个气泡。如果当前门有一个输入的气泡,则在当前门的输出加上气泡;如果当前门不带输入气泡,前面的门也不带输入气泡。下面三个图显示了如何根据推气泡规则重画上图:
从输出Y开始,与非门输出带有气泡,我们希望去除它。将输出气泡向后推,而产生一个带反向输入的或门,如上图所示。
继续向左看,最右面的门一个输入的气泡,从而可以删除中间与非门的输出气泡,因此这个与非门就不需要变化,如下图所示:
上图中,中间的门没有带输入气泡,于是可以将最左边的门转换成不带输出气泡的,如下图所示:
现在电路中除了所有输入以外的气泡都删除,于是可以通过观察产生基于输入原值或者互补值并采用AND或OR方式构成表达式,即Y=A’B’C+D’。
为强调最后一点,下图与上图逻辑等价。气泡是串联删除的,可以忽略中间门的输出气泡和最后边门的输入气泡,从而产生一个等价逻辑电路:
例题:
用CMOS实现下图所示逻辑电路
分析:将与门和或门转化成与非门、或非门、非门
方案一: 用与非门+非门替换每一个与门、用或非门+非门替换每一个或门。 这需要8个门,会有一定的浪费,不是很好的方法,如下图:
方案二(较优): 气泡可以添加到门的输出和下一个门的输入而不改变逻辑功能,如下图:
最后一个与门被改成一个与非门+非门的话,如下图所示:
这种解决方案需要5个门,可见已经进行了一定的优化。
