2.3 常用的组合逻辑电路
在人们的实践中,有一些组合逻辑电路经常被使用,如编码器、译码器、数据选择器、数值比较器、加法器等。下面分别介绍这些常用的组合逻辑电路的工作原理和设计方法。
2.3.1 编码器
1. 编码原理
编码是指用代码表示文字、符号或数字等特定对象的过程。在日常生活中,诸如身份证号码、学生的学号等都是编码。在数字系统中,由于使用的是二进制数,因此编码的结果是一些二进制代码。
编码器就是实现编码操作的电路。编码器的结构框图如图2-4所示。其中I0~Im-1对应于m个需要编码的信号,它们是输入信号,Yn-1~Y0对应n位的编码输出。
图2-4 编码器结构框图
通常情况下,为了保证编码的位数最短(输出最少),且每一个输入信号都对应一个唯一的编码,n和m之间的关系应满足如下关系式
2n-1<m≤2n
设计编码器的关键在于编码规则,编码规则不同,设计的结果也完全不同。
2. 二进制普通编码器
用n位二进制代码对m=2n个信号进行编码的电路称为二进制编码器。二进制编码器分为普通编码器与优先编码器两种类别,其中普通编码器中的输入信号为一组互相排斥的输入信号。所谓互相排斥是指在任何时刻,不允许两个或两个以上的输入信号同时出现。下面以3位二进制编码器为例分析二进制编码器的结构。
3位二进制编码器需要进行编码的输入信号有23=8个,输出的是3位二进制代码。因此,3位二进制编码器为8个输入、3个输出的组合逻辑电路,简称8线-3线编码器,或8-3编码器。图2-5所示为8-3编码器示意框图。
图2-5 3位二进制编码器示意框图
根据常用的二进制数规律,其编码规则如下:用000、001、010、011、100、101、110、111这8个编码分别表示输入信号I0、I1、…、I7。
3位二进制普通编码器的输入输出关系已经确定,可列出真值表。但由于编码器有8个输入信号,真值表中8个输入变量的不同取值达28=256种,这样规模的真值表显然是非常烦琐的。通过分析,由于普通编码器中的输入信号为一组互相排斥的输入信号,因此真值表可以采用简化的编码表替代。表2-3所示为3位二进制普通编码器的编码表。
表2-3 3位二进制普通编码器的编码表
由表2-3可得输出信号的最简与或表达式为
由以上逻辑表达式可知,使用或门电路可实现3位二进制普通编码器的逻辑功能,相应的逻辑图如图2-6所示。此逻辑电路实现的功能是:在I0~I7这8个输入端中,当某一输入端输入高电平(即1信号)时,输出端Y2~Y0输出相应的编码值。图中,电路并未从I0输入端接收信号,显然对I0输入信号的编码是隐含的。当I0输入有效信号高电平时,I1~I7均输入低电平(即0信号),编码器输出端Y2~Y0输出000就是I0的编码。
使用与非门也可实现3位二进制普通编码器。将上面输出信号的最简与或表达式变换为与非-与非式。变换过程如下
根据上述各表达式,可画出由与非门实现的3位二进制普通编码器逻辑图,如图2-7所示。与图2-6结果不同的是,输入变量为反变量,意味着输入信号低电平(即0信号)有效,即8个输入信号中仅有一个为0信号,编码器对输入信号为0的输入端编码。
图2-6 用或门实现的二进制普通编码器
图2-7 用与非门实现的二进制普通编码器
3. 二—十进制普通编码器
二—十进制编码器实现的功能是将十进制数0~9转换为二进制代码。在设计二—十进制编码器前首先要选择编码规则。表1-2中给出了常用的二—十进制编码。下面以8421BCD码为例分析二—十进制普通编码器的结构。二—十进制普通编码器需要进行编码的输入信号有10个,输出的是4位二进制代码。因此,二—十进制编码器为10个输入(I0~I9)、4个输出的组合逻辑电路(Y3~Y0)。根据8421BCD码编码规则,可列出如表2-4所示的8421BCD码编码表。
表2-4 8421BCD编码器的编码表
由于I0~I9是一组互相排斥的变量,因此可以直接写出每一个输出信号的最简与或表达式
显然,使用或门可实现8421BCD编码器,根据以上表达式,可得到图2-8所示的逻辑图。
图2-8 用或门实现的8421BCD普通编码器逻辑图
与前面相同,图中的电路并未从I0输入端接收信号,对I0输入信号的编码是隐含的。
4. 优先编码器
前面所介绍的编码器对输入信号的要求是互相排斥,显然是有约束的。优先编码器则无此约束,优先编码器允许多个信号同时输入,但电路只对优先级别最高的信号进行编码,优先级别低的信号不起作用。显然,优先编码器还需设定优先级的顺序。
下面以3位二进制优先编码器为例分析二进制优先编码器的结构。
与3位二进制普通编码器相同,3位二进制优先编码器仍然是8个输入信号(I0~I7)、3个输出信号(Y2~Y0)的组合逻辑电路。编码规则与前面介绍的3位二进制普通编码器的编码规则一致。优先级的设定:假设I0~I7这8个输入信号中,I7的优先级别最高,I0的优先级最低。
表2-5所示为根据3位二进制优先编码器的编码规则和优先规则所制的简化真值表,表中“×”表示此输入信号的值为0或1均可。简化的真值表反映出当级别较高的输入信号值为1时,编码器对级别低的输入信号是屏蔽的,输出结果是多个输入信号中级别最高的信号的编码值。
表2-5 3位二进制优先编码器简化真值表
依据真值表可得到输出函数的表达式
化简表达式可得
由上述表达式可得3位二进制优先编码器的逻辑图,如图2-9所示。
图2-9 3位二进制优先编码器逻辑图
5. 编码器集成电路
集成的74HC系列编码器有8线-3线优先编码器(74HC148)及10线-4线优先编码器(74HC147)等。下面介绍74HC148的功能及使用。
图2-10 8线-3线编码器74HC148引脚图
表2-6所示为集成芯片74HC148的功能表。由功能表可得到以下结论。
表2-6 8线-3线编码器74HC148功能表
注:H——高电平,相当于1信号;L——低电平,相当于0信号;×——无关。
有关74HC148芯片的信息请扫描二维码阅读由芯片生产厂家提供的资料。
一片74HC148只能实现8线-3线的优先编码功能,如要实现16线-4线的优先编码,则需对编码器进行扩展。扩展方法请读者扫描二维码阅读“集成编码器的扩展”。
2.3.2 译码器
1. 译码器原理
译码是编码的逆过程。编码器的输出信号从高位到低位输出了与输入信号相关的特定代码。那么译码器的功能就是将代码输入后,在输出位置翻译为输出信号。
译码器的结构示意框图如图2-11所示。在译码器中,一般情况下,输入信号和输出信号数量的关系为
图2-11 译码器结构示意框图
2n-1<m≤2n
译码器设计的关键也同样在于译码的规则。本小节中将对二进制译码器及显示译码器的结构进行分析。
2. 二进制译码器
二进制译码器与二进制编码器的功能刚好相反,其功能是将所输入的各种二进制代码信号翻译成对应的输出信号。
二进制译码器如有n个输入变量(In-1~I0),对应n位二进制代码,则输出变量(Y0~Ym-1)的个数m=2n。
下面以3位二进制译码器为例分析二进制译码器的逻辑结构。
3位二进制译码器有3个输入变量,23=8个输出变量,又被称为3线-8线译码器。该译码器按照二进制编码器的编码规则进行译码,即当输入变量I2、I1、I0的值分别为000、001、…、111时,对应的输出端Y0、Y1、…、Y7产生输出信号(1信号)。
表2-7所示是3位二进制译码器的真值表。
表2-7 3位二进制译码器真值表
由真值表可写出输出函数的表达式
由上述表达式可见,由与门及非门可构成二进制译码器,逻辑图如图2-12所示。
图2-12 3位二进制译码器逻辑图
图2-12所示的译码器输出的有效信号是高电平(1信号)。在有些情况下,要求二进制译码器输出的有效信号是低电平(0信号),这时只需将与门换成与非门即可,逻辑图如图2-13所示。
图2-13 输出低电平有效的3位二进制译码器
图2-13所对应的输出函数表达式是
3. 数码显示译码器
在数字系统中,常常需要把文字、数字等以人们习惯的符号形式显示出来,这就需要相应的驱动电路去驱动这些显示器件。驱动电路的输入信号就是所需显示的字符或数字的编码,显然这种驱动电路以译码器为主。下面介绍最简单的LED七段数码显示器的驱动电路——数码显示译码器。
数码显示译码器是指直接用于驱动数码显示器的译码器。常见的LED数码显示器是由7个LED发光二极管封装成的显示器件,图2-14所示为共阴极七段数码显示器示意图。所谓共阴极是指显示器中7个LED发光二极管的阴极相连,阳极分别连接端口a~g。若要数码显示器显示出某一数字,应控制好相应的LED发光二极管。
图2-14 共阴极七段数码显示器示意图
数码显示译码器与共阴极数码显示器的连接示意图如图2-15所示,图中的电阻R为限流电阻。下面分析数码显示译码器的逻辑结构。
图2-15 数码显示译码器连接示意图
数码显示译码器的输入信号为数字0~9的编码,如采用8421BCD编码方式,则数字0~9所对应的编码为0000、0001、…、1001,显然输入信号有4位,译码器有4个输入变量(I3、I2、I1、I0)。由于共阴极LED七段数码显示器有7个发光二极管的阳极需要控制,故译码器的输出信号有7个,分别定义为Ya、Yb、Yc、Yd、Ye、Yf、Yg。
由于采用的是共阴极数码显示器,即输出高电平可控制相应的数码段发光,故根据每一个数字需显示出的字形(见图2-16),制订输入信号与输出信号的逻辑关系,列出真值表如表2-8所示,真值表中1010~1111这6种取值为无效值,作约束项处理。
图2-16 数码显示字形
表2-8 数码显示译码器的真值表
根据上述真值表,采用卡诺图化简法,可得到输出函数Ya~Yg的最简与或表达式。
以Ya为例,图2-17所示为输出变量Ya的卡诺图。由卡诺图可得Ya的最简与或表达式
图2-17 Ya的卡诺图
用同样的方法可求出Yb~Yg的最简与或表达式
根据上述表达式,可画出数码显示译码器逻辑图,如图2-18所示。
图2-18 数码显示译码器逻辑图
4. 译码器集成电路
1)集成3线-8线译码器
图2-19所示为集成3线-8线译码器74HC138的引脚图。74HC138的输入端有:3个二进制代码输入端(A2~A0)、3个使能输入端输出端有:8个译码输出端
图2-19 3线-8线译码器74HC138引脚图
表2-9为该集成芯片的功能表,由功能表可得如下结论。
表2-9 3线-8线译码器74HC138功能表
注:H——高电平;L——低电平;×——无关。
(1)为输入使能控制端,当且E3=1时,译码器工作;当或或E3=0时,译码器不工作,所有输出端均输出高电平。利用使能控制端可实现译码器的级联扩展。
(2)译码器工作时,A2~A0为编码信号输入端,为译码信号输出端,输出信号低电平有效,即编码输入时,对应的输出端输出0信号,其余输出端均输出1信号。
有关74HC138芯片的信息请扫描二维码阅读由芯片生产厂家提供的资料。
一片74HC138芯片只能实现3线-8线的译码器功能,如要实现4线-16线译码器,则需对译码器进行扩展。将两片74HC138芯片级联起来,便可实现4线-16线译码器。扩展方法请读者扫描二维码阅读“集成译码器的扩展”。
2)集成数码显示译码器
图2-20所示为集成数码显示译码器74HC4511的引脚图。74HC4511一共有4个二进制代码输入端(A、B、C、D),7个译码输出端(a~g)。此外还有3个控制输入端,分别是锁存使能输入端(LE)、空白输入控制端以及全亮测试控制端
图2-20 数码显示译码器引脚图
表2-10为74HC4511功能表,其基本功能如下。
表2-10 74HC4511功能表
①×:无关;
② *:其值取决于LE由0变为1时的输入编码。
有关74HC4511芯片的信息请扫描二维码阅读由芯片生产厂家提供的资料。
2.3.3 数据选择器
1. 数据选择器原理
数据选择器(MUX)又称多路选择器或多路开关,是一种多路输入、单路输出的组合逻辑电路。其逻辑功能是从多路输入中选择其中一路送至输出端,对多路输入的选择由控制变量进行控制。数据选择器作为一种多路开关通常用于将并行数据转换为串行数据输出。
通常,一个2n路输入1路输出的多路选择器有n个选择控制变量,如图2-21所示,控制变量的每一种取值对应选中一路输入送至输出端。常见的数据选择器有2选1数据选择器、4选1数据选择器、8选1数据选择器、16选1数据选择器等,这些数据选择器对应的选择控制变量的个数分别为1个、2个、3个、4个。
图2-21 2n路选1数据选择器示意图
下面以4选1数据选择器为例分析数据选择器的逻辑结构。
2. 4选1数据选择器
4选1数据选择器有4路数据输入信号、1路输出信号,2位选择控制信号。
4选1数据选择器的输入信号有两类:一是数据输入信号,共22=4个,分别用D0、D1、D2、D3表示;二是选择控制输入信号,有2个,分别用S1、S0表示。输出信号只有1个,用Y表示。图2-22所示为4选1数据选择器的电路逻辑符号。
图2-22 4选1数据选择器符号
对于4路输入数据的控制选择,由选择控制端S1S0的值决定。定义如下:当S1S0=00时,Y=D0;当S1S0=01时,Y=D1;当S1S0=10时,Y=D2;当S1S0=11时,Y=D3。
根据数据选择器的概念和上述对S1S0状态的约定,可列出简化的真值表,如表2-11所示。真值表中的“×”表示不论值为0或1,均对输出结果无影响。
表2-11 4选1数据选择器真值表
由上述真值表可得输出函数的逻辑表达式
由上述逻辑表达式可画出图2-23所示的逻辑图。
图2-23 4选1数据选择器逻辑图
3. 数据选择器的设计规律
由4选1数据选择器输出逻辑函数的与或表达式可见,表达式中包含了选择控制信号的全部最小项,每一个乘积项均为选择控制信号的最小项与相应数据输入信号的乘积,即
其中m0~m3为选择控制变量S1S0的最小项。按此规律可推出其他数据选择器输出函数的逻辑表达式。
8选1数据选择器的逻辑表达式为
16选1数据选择器的逻辑表达式为
2n选1数据选择器的逻辑表达式可归纳为
4. 数据选择器集成电路
集成的74HC系列数据选择器有4选1数据选择器(74HC153)、8选1数据选择器(74HC151)。下面介绍双4选1数据选择器74HC153。
1)数据选择器74HC153
图2-24所示为集成4选1数据选择器74HC153的引脚图。一个74HC153芯片中包含两个4选1的数据选择器。芯片的输入端有:每个数据选择器各有4个数据输入端(nI3~nI0)、1个输出使能控制端两个数据选择器共用数据选择控制端(S1、S0);芯片的输出端有:每个数据选择器各有1个数据输出端(nY)。
图2-24 4选1数据选择器74HC153引脚图
表2-12为74HC153的功能表。由功能表可知该芯片的功能如下。
表2-12 4选1数据选择器74HC153功能表
注:H——高电平;L——低电平;×——无关。
(1)时,数据选择器工作,实现4选1数据选择器功能。
(2)时,数据选择器不工作,不论其他输入信号为何值,输出端Y均输出0信号。
2)由74HC153构造8选1数据选择器
由于一片74HC153芯片包含两个4选1的数据选择器,可由其构造一个8选1的数据选择器。图2-25所示为一片74HC153芯片构成8选1数据选择器的电路连线图。其工作原理如下。
图2-25 用74HC153构造8选1数据选择器
(1)当选择输入端S2S1S0的输入信号为000~011时,由于S2=0,第1个4选1数据选择器工作,其输出端1Y输出I0~I3中的信号,此时第2个4选1数据选择器被禁止,其输出端2Y输出低电平(0信号),故输出端的或门输出1Y的信号。
(2)当选择输入端S2S1S0的输入信号为100~111时,由于S2=1,第2个4选1数据选择器工作,其输出端2Y输出I4~I7中的信号,此时第1个4选1数据选择器被禁止,其输出端1Y输出低电平(0信号),故输出端的或门输出2Y的信号。
2.3.4 数值比较器
1. 数值比较器原理
数值比较器是用于比较两个数的数值大小的逻辑元器件。它的基本功能是,输入2个位数相同的数A和B,比较大小后,输出数值比较的结果:A大于B、A小于B或A等于B。
数值比较器的示意框图如图2-26所示。图中A和B是2组位数相同的输入信号,输出变量G表示A大于B,变量E表示A等于B,变量S表示A小于B。
图2-26 数值比较器示意图
下面首先分析1位二进制数的数值比较器的结构,再对多位数值比较器进行分析。
2. 1位二进制数值比较器
1位二进制数值比较器的输入有2个信号,分别是2个1位二进制数,因而输入变量有2个,分别用A、B表示;输出信号有3个,分别用G、E、S代表大于、等于、小于的比较结果。其中:
G=1表示A>B,G=0表示A≯B;
E=1表示A=B,E=0表示A≠B;
S=1表示A<B,S=0表示A≮B。
根据比较的概念和输出信号的赋值含义,可列出表2-13所示的真值表。
表2-13 1位二进制数值比较器真值表
由以上真值表不难得到输出函数的逻辑表达式
显然S的值也可由其他两个值的输出得到,表达式为
由以上表达式可画出1位二进制数值比较器的逻辑电路图,如图2-27所示。
图2-27 1位二进制数值比较器逻辑图
3. 多位二进制数值比较器
多位二进制数分为两种情况:一是多位无符号二进制数,二是多位有符号二进制数。针对这两种多位二进制数,比较器的结构有所不同。
1)多位无符号二进制数值比较器
多位无符号二进制数值比较器随着被比较的数的位数增加,输入信号成倍增加。比较的方法是从高位向低位逐位依次进行比较,当被比较的两个高位数字不等时,即可得到比较结果,只有当两个高位的数字相同时,才比较较低位的数字。下面分析4位无符号二进制数值比较器的结构。
4位无符号二进制数值比较器的输入信号分别为A数(A3A2A1A0)、B数(B3B2B1B0),输出信号仍然是G、E、S,各自代表的含义与1位数值比较器相同。由于比较的方法是从高位向低位逐位比较,故设定中间变量G3~G0,E3~E0,S3~S0分别对应各相同位置二进制数的比较结果。
依据比较原理,可列出如表2-14所示的真值表。
表2-14 4位无符号二进制数值比较器真值表
在上述真值表中,同位置的输入变量的比较结果各对应一个中间变量,例如A3>B3对应G3,A3=B3对应E3,A3<B3对应S3,以此类推。这样,可得到输出变量G、E、S的逻辑表达式为
由前面介绍的1位比较器可知
则4位无符号数值比较器的输出函数表达式可写成
显然S的值也可由其他两个值的输出得到,表达式为
根据以上表达式,结合1位二进制数值比较器的设计结果,可得到4位无符号二进制数值比较器的逻辑图,如图2-28所示。
图2-28 4位无符号二进制数值比较器逻辑图
2)多位有符号二进制数值比较器
有符号二进制数一般采用补码的形式进行编码。当对两个有符号二进制数进行大小比较时,应首先比较最高位(即符号位),如果两个数的符号位不相同,说明两个数为一个正数一个负数,则可确定符号位为“0”的那个数大;当两个数的符号位相同时,应从高位到低位对符号位之后的数值位进行逐个比较。对于正数来说,数值位所对应的二进制数较大的那个数大;对于负数来说,由于采用补码编码,同样也是数值位所对应的二进制数较大的那个数大。关于有符号二进制数值比较器的结构,读者可以依照前面的方法自己分析。
4. 数值比较器集成电路
集成的数值比较器有4位数值比较器74HC85,图2-29所示为74HC85的引脚图。74HC85的输入端有:A数、B数各4位数据输入端,IA<B、IA=B、IA>B三个级联输入端;输出端有QA<B、QA=B、QA>B三个比较结果输出端。
图2-29 4位比较器74HC85引脚图
表2-15为74HC85的功能表。通过分析功能表可得出以下结论。
(1)当A数(A3A2A1A0)和B数(B3B2B1B0)不相等时,比较器按两数的比较结果输出A>B或A<B的信息。
(2)当A数和B数相等时,由级联输入信号IA<B、IA=B、IA>B决定数值比较器的输出结果。IA<B、IA=B、IA>B通常用于级联扩展时,输入低位数据的比较结果。
表2-15 4位比较器74HC85功能表
注:H——高电平;L——低电平;×——无关。
有关74HC85芯片的内容请扫描二维码阅读由芯片生产厂家提供的资料。
一片74HC85芯片只能实现4位数值的比较,如要实现4位以上的数值比较,则需对数值比较器进行扩展。将两片74HC85芯片级联起来,便可实现8位数值比较器,扩展方法请扫描二维码阅读“集成数值比较器的扩展”。
2.3.5 加法器
1. 加法器原理
加法器是进行算数加法运算的逻辑元器件,其功能是实现2个二进制数的加法操作。因而加法器是一个具有多个输入信号、多个输出信号的组合逻辑电路。
图2-30所示为加法器的示意框图。图中可见,加法器的输入信号是2个位数相同的加数A和B;输出信号有2种,一个是和S(位数与加数A、B相同),一个是向高位的进位C。
图2-30 加法器示意框图
加法器的加法原理与数学上的加法运算方法相同,即从低位向高位逐位进行加法运算。显然,1位二进制数的加法是多位二进制数加法的基础。这里,首先分析1位二进制加法器,进而对多位二进制加法器进行分析。
2. 1位二进制加法器
两个1位二进制数的加法运算有两种:一种只考虑两个加数本身,而不考虑由低位来的进位,这种加法运算称为半加运算;另一种除了考虑两个加数外,还考虑由低位来的进位,这种加法运算称为全加运算。实现半加运算的逻辑电路称为半加器;实现全加运算的逻辑电路称为全加器。
1)半加器
半加器有2个输入信号,分别是2个加数A和B;输出信号也有2个,分别是和S和进位Cout。
加法法则:0+0=0,0+1=1,1+0=1,1+1=10。
依据加法法则,可列出表2-16所示的真值表。
表2-16 半加器真值表
根据上述真值表,可写出输出变量S及Cout的函数逻辑表达式
依据上述逻辑表达式,可画出逻辑图,图2-31所示是半加器的逻辑图及逻辑符号。
图2-31 半加器逻辑图及逻辑符号
2)全加器
全加器有3个输入信号,分别是2个加数A和B及来自低位的进位Cin;输出信号有2个,分别是和S和进位Cout。
根据加法法则,可列出全加器的真值表如表2-17所示。
表2-17 全加器真值表
根据表2-17所示的真值表可分别画出S和Cout的卡诺图,如图2-32所示。
图2-32 全加器输出函数的卡诺图
由图可得到输出函数的逻辑表达式
S函数的表达式可变换为
用与门、或门及异或门实现,可画出上述表达式对应的逻辑图及逻辑符号,如图2-33所示。
图2-33 全加器逻辑图及逻辑符号
3. 多位二进制进位加法器
1)串行(行波)进位加法器
在1位加法器的基础上,可实现多位二进制数的加法运算。由于两个多位数相加时,每1位置上的数都是带进位相加的,因此须使用全加器。线路连接时,只需将低位全加器的进位输出端Cout接到高位全加器的进位输入端Cin,就可以构成多位二进制进位加法器了。这种结构的加法器被称为串行进位加法器(也称行波进位加法器)。图2-34所示的是根据上述原理连接的4位串行加法器电路,图中加数A(A3A2A1A0)、加数B(B3B2B1B0)以及低位进位Cin是输入信号,和S(S3S2S1S0)及向高位的进位Cout是输出信号。
图2-34 4位串行进位加法器电路
串行进位加法器的优点是电路简单、连接方便。但由于高位相加必须等到低位相加完成,形成进位后才能进行,因而会导致运算速度较慢,特别是位数较多时,这个缺点尤其突出。为了提高加法器的运算速度,可采用超前进位的方式。
2)超前进位加法器
所谓超前进位,是指来自低位的进位信号直接通过逻辑电路获得,无需再从最低位开始向高位逐位传递进位信号,这样就可以大大提高运算速度。下面以4位超前进位加法器为例介绍超前进位信号的原理。
设加法器的两个加数分别为A(A3A2A1A0)及B(B3B2B1B0),低位向0位的进位为Cin,相加后的和为S(S3S2S1S0),进位为Cout,再设各个位置上的数相加后所输出的进位为C3、C2、C1、C0,显然C3也就是Cout。
由之前所学的全加器逻辑表达式可写出第i位上的全加器的逻辑表达式
将上式中的AiBi定义为生成函数Gi,Ai⊕Bi定义为进位传送函数Pi,则上述表达式可写为
对于4位加法器,可按上式展开得到各进位的逻辑表达式
由上述表达式可看出,只要输入了两个加数A(A3A2A1A0)、B(B3B2B1B0)和Cin后,通过门电路,便可实现进位Cout及和S(S3S2S1S0)的逻辑运算,这样可以大大提高加法器的运算速度。但从表达式也可看出,使用超前进位的方式实现加法运算,电路会比较复杂。图2-35所示为4位二进制超前进位加法器的结构示意图。其中超前进位逻辑电路部分的逻辑图省略,读者只需正确理解设计思想即可。
图2-35 4位二进制超前进位加法器结构示意图
3)有符号二进制数加法器
加法分无符号数加法和有符号数加法两种。
无符号数加法往往以原码进行运算,将进位作为结果的最高位即可,前面介绍的加法器,处理的就是无符号数。
而有符号数的加法往往以补码进行运算,因为补码可以将减法转换为加法,所以利用补码可以统一加减法运算。
(1)当A和B的符号相异时,|A+B|(A+B的绝对值)必小于|A|、|B|中的大者,求和结果S的值总是正确的。
例如,4位有符号二进制补码数1101(-3)与0110(+6)相加时,由于
即S=0011,对应的十进制数为+3,结果是正确的。
(2)A和B的符号相同(同为正数或同为负数)时,由于|A+B|比|A|和|B|中的大者还大,所以结果有可能是正确的,也有可能不正确。
例如,4位有符号二进制数1110(-2)与1101(-3)相加时,由于
即S=1011,对应的十进制数为-5,此结果是正确的。类似的,二进制补码数0011+0100=0111,即3+4=7,运算结果也是正确的。
再例,4位有符号二进制数1010(-6)与1001(-7)相加时,由于
即S=0011,对应的十进制数为+3,此结果显然是不正确的。类似的,二进制补码数0110+0101=1011,及6+5=-5,结果也是不正确的。
结果不正确的原因是溢出造成的。所谓溢出是指运算结果超出了固定的位数所能表达的数值范围。由于4位二进制补码数所能表示的数值范围为 -8~+7,显然(-6)+(-7)的结果 -13和6+5的结果11均超出了此范围,故产生溢出,运算结果不正确。
那么如何判断是否有溢出呢?
对于n位有符号二进制补码数加法器,令Cn-2表示符号位低一位向符号位的进位,Cn-1表示符号位向符号位高一位的进位,定义
则溢出标志OF定义为:OF=Cn-2⊕Cn-1。
① Cn-2Cn-1=(00)或(11),OF=0,表示无溢出;
② Cn-2Cn-1=(01)或(10),OF=1,表示有溢出。
在加法运算中,没有溢出时,加法结果一定是正确的。但是,当有溢出时,结果如何就要看针对溢出的处理方法。当产生溢出时,如果和的位数可以扩展,即扩大了和的数值范围,则结果是正确的。如果和的位数不能扩展,运算结果一定是不正确的。在设计电路的时候,应根据不同的溢出处理规则进行设计。
对于溢出的处理方法有以下几种。
(1)扩展和S的位数。如果可以扩展加法器和的位数,可保证运算结果正确。图2-36所示为扩展和的位数的4位有符号加法器逻辑图。注意和S是二进制补码形式,S4为和的符号位。
图2-36 扩展位数的有符号加法器
【例2-3】 用图2-36所示电路计算:(a)7+5;(b)-6-2。设图中Cin输入0。
解 (a)将A=+7、B=+5转换为二进制补码数,得A3A2A1A0=0111,B3B2B1B0=0101。
将A数、B数及Cin代入图中,得:S3S2S1S0=1100,C3=0,C2=1。
计算溢出标志OF=C3⊕C2=0⊕1=1。
则图中2选1数据选择器输出S4=C3=0。
则求和的结果是S4S3S2S1S0=01100(+12),显然结果是正确的。
(b)将A=-6、B=-2转换为二进制补码数,得A3A2A1A0=1010,B3B2B1B0=1110。
将A数、B数及Cin代入图中,得:S3S2S1S0=1000,C3=1,C2=1。
计算溢出标志OF=C3⊕C2=1⊕1=0。
2选1数据选择器输出S4=S3=1。
则求和的结果是S4S3S2S1S0=11000(-8),显然结果也是正确的。
(2)如果不能扩展加法器和S的位数,则常用的处理方法有以下几种。
① 饱和(saturation)法:溢出时计算结果为最大值(2n-1-1)或最小值(-2n-1),电路逻辑图如图2-37所示。
图2-37 饱和法处理溢出的加法器
【例2-4】 用图2-37所示电路计算:(a)6-3;(b)6+5;(c)-6-5。设图中Cin输入1。
解 (a)将A=+6、B=-3转换为二进制补码数,得A3A2A1A0=0110,B3B2B1B0=1101。
将A数、B数及Cin代入图中,得:S'3S'2S'1S'0=0100,C3=1,C2=1。
计算溢出标志OF=C3⊕C2=1⊕1=0,无溢出。
由于OF=0,图中4个2选1数据选择器输出S'3S'2S'1S'0的值,即S3S2S1S0=S'3S'2S'1S'0=0100(+4)。
(b)将A=+6、B=+5转换为二进制补码数,得A3A2A1A0=0110,B3B2B1B0=0101。
将A数、B数及Cin代入图中,得:S'3S'2S'1S'0=1100,C3=0,C2=1。
计算溢出标志OF=C3⊕C2=0⊕1=1,有溢出。
由于A3=0,图中4个2选1数据选择器输出为0111,即求和的结果是S3S2S1S0=0111(+7),也就是4位有符号二进制数的最大值。
(c)将A=-6、B=-5转换为二进制补码数,得A3A2A1A0=1010,B3B2B1B0=1011。
将A数、B数及Cin代入图中,得:S'3S'2S'1S'0=0110,C3=1,C2=0。
计算溢出标志OF=C3⊕C2=1⊕0=1,有溢出。
由于A3=1,图中4个2选1数据选择器输出为1000,即求和的结果是S3S2S1S0=1000(-8),也就是4位有符号二进制数的最小值。
② 移位法:溢出时,将进位及和依次右移作为加法的结果,电路逻辑图如图2-38所示。
图2-38 右移法处理溢出的加法器
【例2-5】 用图2-38所示电路计算:(a)6-3;(b)6+5;(c)-6-5。设图中Cin输入1。
解 (a)将A=+6、B=-3转换为二进制补码数,得A3A2A1A0=0110,B3B2B1B0=1101。
将A数、B数及Cin代入图中,得:S'3S'2S'1S'0=0100,C3=1,C2=1。
计算溢出标志OF=C3⊕C2=1⊕1=0,无溢出。
由于OF=0,图中4个2选1数据选择器输出S'3S'2S'1S'0的值,即S3S2S1S0=S'3S'2S'1S'0=0100(+4)。
(b)将A=+6、B=+5转换为二进制补码数,得A3A2A1A0=0110,B3B2B1B0=0101。
将A数、B数及Cin代入图中,得:S'3S'2S'1S'0=1100,C3=0,C2=1。
计算溢出标志OF=C3⊕C2=0⊕1=1,有溢出。
由于OF=1,图中4个2选1数据选择器输出C3S'3S'2S'1,即S3S2S1S0=C3S'3S'2S'1=0110(+6)。
(c)将A=-6、B=-5转换为二进制补码数,得A3A2A1A0=1010,B3B2B1B0=1011。
将A数、B数及Cin代入图中,得:S'3S'2S'1S'0=0110,C3=1,C2=0。
计算溢出标志OF=C3⊕C2=1⊕0=1,有溢出。
由于OF=1,图中4个2选1数据选择器输出C3S'3S'2S'1,即S3S2S1S0=C3S'3S'2S'1=1011(-5)。
需要说明的是,为了便于理解,这里仅在串行进位加法器的基础上介绍有符号数加法器的结构,如果设计有符号数的超前进位加法器,原理是相同的。
4. 加法器集成电路
常用的74HC系列加法器有74HC83、74HC283,它们都是4位二进制超前进位加法器。图2-39所示为74HC283的引脚图,该芯片实现了2个4位二进制数求和运算的功能。表2-18所示为74HC283的功能应用举例。
图2-39 4位加法器74HC283引脚图
表2-18 4位加法器74HC283功能举例
注:① H——高电平;L——低电平。
② 例1实现的运算为:0+1101+1001=10110,相当于十进制数0+13+9=22。
③ 例2实现的运算为:1+0111+0101=0 1101,相当于十进制数1+7+5=13。
有关74HC283的信息请扫描二维码阅读由芯片生产厂家提供的资料。
一片74HC283芯片只能实现4位二进制加法运算,如要实现4位以上的加法运算,需要对加法器进行扩展。将两片74HC283芯片级联起来,便可实现8位加法器,扩展方法请扫描二维码阅读“集成加法器的扩展”。
在加法器的基础上,可以设计出乘法器,关于乘法器的原理及实现方法,请扫描二维码阅读“乘法器”。