3.9 二进制加法器
一个算术电路就是一个组合电路,它对二进制数或用二进制编码表示的十进制数执行加、减、乘、除运算。我们将采用层次、迭代的设计方法实现算术电路。首先从最底层开始,设计一个电路实现两个一位二进制数相加。这个简单的加法包含4个可能的基本操作:0+0=0,0+1=1,1+0=1,1+1=10。前三个运算产生的和只需要一位表示,但是当加数和被加数都等于1的时候,和就需要两位表示。正因为如此,运算的结果需要两位表示:进位与和。由两位加法产生的进位将加到下一个高位的有效位中。实现两位相加的组合电路称为半加器(half adder)。实现三个位(两个有效位和一个先前位产生的进位)相加的电路称为全加器(full adder)。两个半加器可以用来实现一个全加器,半加器和全加器的命名就是基于这个原因。在算术电路设计中,半加器和全加器是基本的算术模块。
3.9.1 半加器
半加器是一个产生两位二进制数的和的算术电路,这个电路有两个输入和两个输出。输入变量是加数和被加数,输出变量是产生的和与进位。用X和Y表示两个输入,用S(和)和C(进位)表示输出。半加器的真值表如表3-11所示。输出C只有当两个输入都为1时才为1,输出S表示和的最低有效位。从真值表可以很容易得到两个输出的布尔表达式:
S=XY+XY=XY
C=XY
如图3-40所示,半加器可以用一个异或门和一个与门来实现。
3.9.2 全加器
全加器是实现三位数相加的组合逻辑电路。除了三个输入,全加器还有两个输出。输入变量中的两个用X和Y表示,代表相加的两个有效位,第三个输入Z表示来自前一个低位产生的进位。两个输出是必不可少的,因为三位相加的和在0~3之间变化,而2和3需要两位二进制数表示。同样,两个输出用S(和)与C(进位)来表示。二进制变量S表示相加的和,C表示产生的进位输出。全加器的真值表如表3-12所示。输出值由三位输入的算术和决定。当所有输入都为0时,输出均为0。当输入仅有一个为1或三个全为1时,输出S为1。当输入有两个或三个为1时,输出C为1。图3-41给出了全加器的两个输出的卡诺图。两个输出的积之和的最简表达式为:
全加器的两级实现需要七个与门和两个或门。但是,输出S的卡诺图可看作奇函数,此类函数在2.6节中已讨论过,输出C的表达式可进一步处理包含X和Y的异或运算。全加器的布尔表达式用异或运算表示又可写成:
3.9.3 二进制行波进位加法器
一个并行加法器是一个仅采用组合逻辑计算出两个二进制数算术和的数字电路。并行加法器并行地连接n个全加器,所有的输入位同时加载至全加器以产生和。
并行加法器中的所有全加器用级联的方式连接在一起,一个全加器的进位输出连接到下一个全加器的进位输入。由于加法器最低有效位产生的进位1可能经过多个全加器传递到最高有效位,就好像一个小卵石丢入池塘激起的波浪一样,因此这种并行加法器又称为行波进位加法器(ripple carry adder)。图3-43给出了由4个全加器级联形成的一个4位行波进位加法器。被加数A和加数B的下标从右至左依次递增,下标0表示最低有效位。进位位将整个全加器链式地连接起来。并行加法器的进位输入为C0,进位输出为C4。一个n位的行波进位加法器需要n个全加器,每个进位输出连接到下一个高位全加器的进位输入。例如,考虑两个二进制数A=1011与B=0011。它们的和S=1110,采用4位行波进位加法器的计算过程如下所示:
最低有效位的进位输入置为0。每个全加器接收A和B的相应位和进位输入,产生和S与进位输出。每个全加器的进位输出是下一个高位全加器的进位输入,如灰线所示。
4位加法器是数字部件作为基本模块实现系统的典型实例。它可用于包括算术运算在内的许多应用领域。如果采用常规设计方法设计4位加法器,由于电路有9个输入,则真值表有512行。而采用4个全加器的级联,可以简单、直接地实现该电路,而不需要构建512行的真值表。迭代电路和电路重用的魅力在此例中得到了诠释。