第3章 组合逻辑电路   内容提要:本章讨论了组合逻辑电路的5种描述方式及组合逻辑电路的分析和设计方法;分别介绍了编码器、译码器、数据选择器、数据分配器、加法器等常用的组合逻辑功能器件;以全加器为例,讨论了组合逻辑电路实现的多样性与灵活性;简要介绍了组合逻辑电路中的竞争冒险。   学习提示:组合逻辑电路作为数字电路的核心内容之一,学习中要明确组合逻辑电路的有关概念;熟练掌握组合逻辑电路的分析和设计方法;熟悉常用组合逻辑功能器件的定义、工作原理、常用芯片、功能扩展等。 3.1 概述   数字电路按其逻辑功能可分为两大类,即组合逻辑电路和时序逻辑电路。本章重点讨论组合逻辑电路的分析与设计方法,介绍常用组合逻辑功能器件的概念及应用。 3.1.1 组合逻辑电路的特点   组合逻辑电路是指在任何时刻,逻辑电路的输出状态只取决于该时刻各输入状态的组合,而与电路原来的状态无关。   组合逻辑电路的结构特点是:电路由各种门电路构成,不存在反馈。   如图3.1所示电路由反相器、与门、或门构成,电路中没有反馈,它符合组合逻辑电路的结构特点,因此,该电路是一个简单的组合逻辑电路。 图3.1 组合逻辑电路   如图3.1所示电路的逻辑表达式为:      在任何时刻,只要输入变量A、B取值确定,则输出L的值也随之确定。 3.1.2 组合逻辑电路逻辑功能描述方式及各种描述方式的相互关系   描述组合逻辑电路功能的主要方式有以下几种。   1. 逻辑函数表达式   逻辑函数表达式通常以与或表达式表示,并且化简为最简与或表达式。这种表达形式的优点是便于进行逻辑推导,但往往不具备唯一性。   2. 逻辑电路图   逻辑电路图简称为逻辑图,组合逻辑电路图是由各种门电路的逻辑符号及相互连线组成。逻辑电路图最接近数字系统的硬件电路。   3. 真值表   以表格的形式描述输入变量的各种取值组合与输出函数值的对应关系。输入变量取值组合的顺序通常以对应二进制数的顺序表示。逻辑功能的真值表表示主要优点是直观并且具有唯一性。   4. 波形图   波形图是以数字波形的形式表示逻辑电路输入与输出的逻辑关系。在数字系统的仿真或者硬件电路调试时,通常采用测量仪器以波形的形式显示该系统的输入输出关系。   5. 卡诺图   卡诺图不仅可以作为化简逻辑函数的工具,也是描述逻辑函数的一种方式。卡诺图中的每一个小方格与真值表中每一组输入变量取值组合事实上存在一一对应的关系。在某种意义上说,卡诺图是真值表的图形表示。   逻辑函数表达式、逻辑电路图、真值表、卡诺图、波形图是描述特定逻辑功能的不同表达形式,各种表达形式可以相互转换,部分内容曾经在1.5节中从逻辑函数不同的描述方式的角度进行了讨论。组合逻辑电路分析主要讨论在已知逻辑电路图的条件下,通过求解逻辑函数表达式、真值表来确定所给逻辑电路的逻辑功能。组合逻辑电路设计是在给定逻辑功能的条件下,通过列写真值表、逻辑函数表达式,作出实现所给逻辑功能的逻辑电路图。因此,组合逻辑电路的分析与设计事实上是在特定的已知条件下,分析和讨论逻辑函数不同表示形式的相互转换问题。   例3.1 已知一逻辑函数的逻辑关系如图3.2所示波形图,其中A,B,C,D为输入变量,L为输出函数。试分析列写出其真值表、逻辑函数表达式,画出逻辑电路图。    图3.2 例3.1 波形图   解:分析如图3.2所示波形,可以依据表示输入变量波形的高、低电平变化规律,采用虚线对相同取值组合进行分段,找出输入与输出的对应关系,具体分析如图3.3所示。    图3.3 分析例3.1输入与输出的对应关系   依据图3.3的对应关系,列写真值表如表3.1所示。 表3.1 例3.1的真值表 输 入 输 出 A B C D L 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1      对于使输出函数值为1的一组变量取值组合,各个变量之间的关系是与的关系,当某个变量取值为0时用反变量表示,取值为1时用原变量表示。例如,变量取值组合ABCD=0000时,输出函数值为1,则表明各个变量以反变量的形式相与,即;变量取值组合ABCD=0010时,输出函数值为1,则表明变量A、B、D以反变量的形式,变量C以原变量的形式相与,即,其余组合以此类推,见表3.1。多组变量取值组合使输出函数值为1,则它们之间的关系是或的关系。按照这一原则,结合表3.1中的分析可写出输出函数的表达式如下:   求输出函数表达式时,也可以由图3.1的输入输出对应关系直接作出所对应的卡诺图,并在卡诺图上进行化简,进而写出输出函数表达式。例3.1所表示的逻辑函数对应的卡诺图如图3.4所示。      图3.4 例3.1的卡诺图   在卡诺图上进行化简,得到简化的逻辑函数表达式如式(3.1)所示。    (3.1)   式(3.1)可以由反相器、与门、或门组成的逻辑电路实现,其逻辑电路图如图3.5所示。      图3.5 例3.1的逻辑电路图   例3.1的分析过程可用下述流程图表示,它以实例说明了各种描述方式之间的相互转换过程。      事实上,组合逻辑函数的各种描述方式之间的相互转换关系,可概括如图3.6所示。熟悉各种描述方式并能熟练地进行各种描述形式之间的相互转换,是掌握组合逻辑电路分析与设计的必要条件。      图3.6 各种描述形式之间的相互转换关系   思考与讨论题:   (1)依据组合逻辑电路的特点,判断如图1.8及图1.9所示逻辑图是否属于组合逻辑电路。   (2)在例3.1中,分别以真值表、卡诺图、表达式、逻辑图作为已知条件,求出其他的描述方式。 3.2 组合逻辑电路的分析方法   组合逻辑电路分析,就是根据已知的逻辑电路图,分析确定其逻辑功能的过程。分析过程一般按下列步骤进行。   (1)写出逻辑函数表达式。   根据已知的逻辑电路图,从输入到输出逐级写出逻辑电路的逻辑函数表达式。   (2)化简逻辑函数表达式。   一般情况下,由逻辑电路图写出的逻辑表达式不是最简与或表达式,因此需要对逻辑函数表达式进行化简或者变换,以便用最简与或表达式来表示逻辑函数。   (3)列写真值表。   根据逻辑表达式列出反映输入输出逻辑变量相互关系的真值表。   (4)分析并用文字概括出电路的逻辑功能。   根据逻辑真值表,分析并确定逻辑电路所实现的逻辑功能。   例3.2 已知逻辑电路如图3.7所示,分析确定该电路的逻辑功能。   解:由图3.7可见,此逻辑电路由反相器和与门组成,电路中不存在反馈,属于组合逻辑电路。电路有两个输入变量A、B,4个输出函数L0、L1、L2、L3。   (1)由图3.7写出逻辑函数表达式:   (2)由逻辑函数式列出真值表,如表3.2所示。    图3.7 例3.2的逻辑电路图 表3.2 例3.2的真值表 输 入 输 出 A B L0 L1 L2 L3 0 0 0 1 1 0 1 1         1 ??0 ?0 ?0         0 ??1 ?0 ?0         0 ??0 ?1 ?0         0 ??0 ?0 ?1   (3)由真值表可知:   AB = 00时,L0=1,其余的输出端均为0;   AB = 01时,L1=1,其余的输出端均为0;   AB = 10时,L2=1,其余的输出端均为0;   AB = 11时,L3=1,其余的输出端均为0。   由此可以得知,此电路对应每组输入信号只有一个输出端为1,因此,根据输出状态即可以知道输入的代码值,故此逻辑电路具有译码功能,称为2线-4线译码器,输出端是高电平有效。   对于比较简单的组合逻辑电路,也可通过其波形图进行分析。即根据输入信号的波形,逐级画出输出信号的波形,根据输入与输出波形的关系确定其电路的逻辑功能。   如果将如图3.7所示的逻辑电路中的与门用与非门替代,则其逻辑函数式可以写为:   在这种情况下,电路的逻辑功能仍然为2线4线译码器,只是其输出为低电平有效。   例3.3 一个2输入,2输出的组合逻辑电路如图3.8所示,分析该电路的逻辑功能。   解:(1)根据图3.8逐级写出逻辑函数式:      (2)对S表达式进行化简 图3.8 例3.3的逻辑电路图   (3)根据逻辑函数式列出其相应的真值表,如表3.3所示。 表3.3 例3.3的真值表 输 入 输 出 输 入 输 出 A B S C A B S C 0 0 0 1 0 0 1 0 1 0 1 1 1 0 0 1   (4)由真值表3.3可知:   当A、B都是0时,S为0,C为0;   当A、B中有一个为1时,S为1,C为0;   当A、B都是1时,S为0,C为1。   如图3.8所示电路的逻辑功能,满足一位二进制数相加原则,A、B分别表示加数与被加数,S为和数,C为向高位的进位。由于输入仅是两个加数,而没有低位来的进位,故称其为半加逻辑,能实现半加逻辑的电路叫作半加器。读者可以思考,如果不仅考虑加数和被加数,而且考虑低位的进位时,其二进制加法又如何实现?   (5)根据其逻辑函数式或真值表,可以画出其相应的波形图,如图3.9所示。 图3.9 例3.3波形图      例3.4 一组合逻辑电路如图3.10所示,试分析该电路的逻辑功能。 图3.10 例3.4电路图   解:(1)由图3.10可写出输出函数表达式如下:   (2)由表达式列写真值表如表3.4所示。 表3.4 例3.4的真值表 输 入 输 出 B3 B2 B1 B0 ?G3 ? G2 G1 ??G0       0 ?0 0 ??0       0 ?0 0 ??1       0 ?0 1 ??0       0 ?0 1 ??1       0 ?1 0 ??0       0 ?1 0 ??1       0 ?1 1 ??0       0 ?1 1 ??1       1 ?0 0 ??0       1 ?0 0 ??1       1 ?0 1 ??0       1 ?0 1 ??1       1 ?1 0 ??0       1 ?1 0 ??1       1 ?1 1 ??0       1 ?1 1 ??1       0 ?0 0 ?0       0 ?0 0 ?1       0 ?0 1 ?1       0 ?0 1 ?0       0 ?1 1 ?0       0 ?1 1 ?1       0 ?1 0 ?1       0 ?1 0 ?0       1 ?1 0 ?0       1 ?1 0 ?1       1 ?1 1 ?1       1 ?1 1 ?0       1 ?0 1 ?0       1 ?0 1 ?1       1 ?0 0 ?1       1 ?0 0 ?0   (3)真值表3.4表明,在4位二进制码输入的情况下,输出是4位格雷码(参见表1.3)。因此,如图3.10所示电路能够实现4位二进制码到4位格雷码的转换。   组合逻辑电路分析的目的是确定已知电路的逻辑功能。方法是首先需要从电路的输入到输出逐级写出逻辑函数表达式并进行适当的化简,再由表达式列写真值表,然后依据真值表分析确定电路的逻辑功能。这种分析方法具有一般性,因此,只要掌握了组合逻辑电路的分析方法,任何组合逻辑电路的分析都应该能从容应对。但在实际分析过程中,由真值表确定逻辑功能需要熟悉常见组合逻辑电路的功能及分析经验的积累。   思考与讨论题:   (1)如果在图3.10电路中,把每个异或门都换成同或门,其连接形式不变。试分析所形成电路的逻辑功能。   (2)你认为分析组合逻辑电路的难点是什么?如何解决? 3.3 组合逻辑电路设计的一般方法   组合逻辑电路的设计是其分析的逆过程。设计问题的已知条件是给出了欲实现的逻辑功能,设计的目的是确定实现所给逻辑功能的组合逻辑电路。   组合逻辑电路设计的基本步骤如下。   (1)列写真值表。   分析欲实现的逻辑功能的因果关系,把引起事件的原因作为输入逻辑变量,把事件的结果作为输出逻辑变量,并把输入输出变量分别用字母表示,每个输入变量可以取值1或者0,根据输入输出的因果关系列出真值表。   (2)写出逻辑函数表达式。   依据已经列出的真值表写出逻辑函数表达式。   (3)简化或变换逻辑函数表达式。   (4)画出逻辑电路图。   根据化简或变换后的逻辑函数表达式以及所选用的逻辑器件画出逻辑电路图。在工程实际中,一般还应标出所选择的器件型号。   实现组合逻辑电路的逻辑器件有多种类型,比如各种基本的逻辑门电路、译码器和数据选择器、可编程逻辑器件等。本节主要讨论由各种门电路实现组合逻辑电路的设计问题,利用其他器件设计组合逻辑电路的方法,将在后续章节中介绍。   对于一个特定的逻辑函数,实现其逻辑功能的电路不是唯一的。当实现途径有多种选择时,设计者应考虑在保证逻辑功能的前提下,在多种可能的实现途径中,选择较好的电路实现形式。比如说所选用的逻辑器件数量及种类最少,而且器件之间的连线最简单;级数尽量少,以利于提高其工作速度;功耗低,工作稳定性好。   例3.5 试设计一个三变量表决器,表决规则是少数服从多数。   解:(1)定义输入、输出变量,根据题意列出真值表。   设A、B、C分别代表参加表决的逻辑变量,L为表决结果。A、B、C为1表示赞成,为0表示反对。L = 1表示通过,L = 0表示被否决。依据表决规则列真值表如表3.5所示。 表3.5 例3.5的真值表 输 入 输 出 输 入 输 出 A B C L A B C L 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 1 0 0 1 0 1 1 1 0 1 1 1 0 1 1 1   (2)写出逻辑函数式。   根据真值表可写出逻辑函数表达式为:    (3.2)   对式(3.2)进行化简可得:    (3.3)   (3)画出逻辑电路图。   式(3.3)可以用三个与门、一个或门实现,电路如图3.11(a)所示。   利用摩根定律对式(3.3)进行变换,得到与非与非表达式(3.4),用与非门实现的电路如图3.11(b)所示。    (3.4)    图3.11 例3.4的逻辑电路图   例3.6 试设计一逻辑电路,实现4位格雷码到4位二进制码的转换。   解:(1)设用G3,G2,G1,G0表示输入的4位格雷码,用B3,B2,B1,B0表示输出的4位二进制码,依据格雷码与二进制码的对应关系(参见表3.4),列写真值表如表3.6所示。    表3.6 例3.6的真值表 输 入 输 出 ?G3 ??G2 G1 ?G0 ?B3 ??B2 B1 ??B0       0 ?0 0 ?0       0 ?0 0 ?1       0 ?0 1 ?1       0 ?0 1 ?0       0 ?1 1 ?0       0 ?1 1 ?1       0 ?1 0 ?1       0 ?1 0 ?0       1 ?1 0 ?0       1 ?1 0 ?1       1 ?1 1 ?1       1 ?1 1 ?0       1 ?0 1 ?0       1 ?0 1 ?1       1 ?0 0 ?1       1 ?0 0 ?0       0 ?0 0 ?0       0 ?0 0 ?1       0 ?0 1 ?0       0 ?0 1 ?1       0 ?1 0 ?0       0 ?1 0 ?1       0 ?1 1 ?0       0 ?1 1 ?1       1 ?0 0 ?0       1 ?0 0 ?1       1 ?0 1 ?0       1 ?0 1 ?1       1 ?1 0 ?0       1 ?1 0 ?1       1 ?1 1 ?0       1 ?1 1 ?1   (2)求输出函数表达式。   真值表表明,B3=G3,借助卡诺图求解其他的输出函数表达式如图3.12所示。 图3.12 例3.6的卡诺图   所以                                                  (3)用异或门实现,画出电路图如图3.13所示。 图3.13 例3.6的电路图   组合逻辑电路设计的目的是确定实现已知逻辑功能的电路图。方法是首先分析所给的逻辑功能,定义输入输出变量,列写真值表;其次由真值表求出输出函数表达式,并进行适当的化简;最后依据化简后的逻辑表达式选择适当的门电路画出逻辑电路图。在组合逻辑电路设计中,正确列写真值表是关键,也是设计过程中较为困难的一步,需要多练习,在设计实践中积累经验,以便熟练掌握组合逻辑电路设计的方法。   思考与讨论题:   (1)如果在3变量表决逻辑中,规定A具有否决权,试设计实现其逻辑功能的电路。   (2)图3.10实现二进制代码到格雷码的转换,图3.13可实现格雷码到二进制码的转换。试设计一个代码转换电路,能分时实现图3.10及图3.13的功能。 3.4 编码器与译码器   编码器和译码器是常见的组合逻辑基本单元电路,已有标准化的集成电路功能器件可供选用,本节着重介绍编码器和译码器的定义与分类、工作原理及应用。 3.4.1 编码器   在数字系统中,用特定代码(比如BCD码、二进制码等)表示各种不同的符号、字母、数字等有关信息的过程称为编码。编码建立了输入信息与输出代码之间的一一对应关系,具有编码功能的电路称为编码器。   编码器分为二进制编码器、优先编码器、8421BCD码编码器等多种类型。   1.二进制编码器   能够实现用n位二进制代码对N = 2n 个一般信号进行编码的电路,称为二进制编码器,这种编码器又称为普通编码器。   普通编码器的主要特点是:任何时刻只允许一个输入信号有效,否则输出代码将会发生混乱。   现以图3.14两位二进制编码器为例,分析编码器的工作原理。此处n=2,N = 22= 4,对I0~I3 4个输入信号分别进行编码,输出A1、A0为一组相应的二进制代码,这种编码器习惯上称为4线-2线编码器。 图3.14 4线-2线编码器电路图   对照图3.14,依据组合逻辑电路的分析方法,可写出其输出函数表达式如下:    (3.5)   在4个输入端中,每次仅令一个输入高电平,其余输入低电平,共有4种情况,分别代入式(3.5)确定输出函数的值,可见仅当I0 = 1时,A1A0 = 00;仅当I1 = 1时,A1A0 = 01;仅当I2 = 1时,A1A0 =10;仅当I3 = 1时,A1A0 = 11。结果如表3.7所示,即实现了对输入信号的二进制编码。 表3.7 两位二进制编码器功能表 输 入 输 出 I0 ??? I1 ?? I2 I3       A1 A0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 0 1 1   注意表3.7的名称不是真值表,而叫作功能表,它清楚地描述了4线-2线编码器的功能,输入信号仅考虑有效的几种情况,而不是输入变量的所有取值组合。在后续内容中经常用到功能表,希望读者注意功能表与真值表的区别。   如果每次有两个或者多于两个输入端为高电平,例如I1I2同时输入高电平,把I0I1I2 I3 =0110代入式(3.5),可得A1A0 = 00,显然编码出现错误,因为表3.7表明输出00表示输入端I0 = 1。因此,图3.14属于普通的4线-2线编码器,每次仅允许一个输入端有效(此电路输入高电平有效)。   普通编码器任何时刻只允许一个输入端有效这一特点,限制了其应用场合。为了解决这一问题,有必要对电路进行改进。   2.优先编码器   在优先编码器电路中,允许两个以上的输入信号同时输入有效,为了保证输出代码与输入信号的一一对应关系,即每次只对一个输入信号进行编码,因此,在设计优先编码器时,将所有输入信号按优先顺序排好了队,当N个输入信号同时输入有效时,只能对其中优先权最高的一个输入信号进行编码。这种编码器广泛应用于计算机系统的中断请求和数字控制的排队逻辑电路中。   图3.15是典型的8线-3线优先编码器74LS148的逻辑符号图,其逻辑功能表如表3.8所示。在如图3.15 所示的74LS148逻辑符号图中,I0~I7为编码信号输入端,A0~A2为编码输出端,CS为优先编码工作状态标志,EO为输出使能端,CS、EO主要用于级联和扩展。EI为输入使能端。框图中输入端的小圆圈表示输入信号低电平有效,输出端的小圆圈表示反码输出。74LS148功能表(见表3.8)则更清楚地表明了这一点。 图3.15 74LS148逻辑符号图 表3.8 74LS148功能表 序号 输 入 输 出  EI ???? I7 ?? I6 ?I5 ?I4 ?I3 ??I2 I1 I0 A2 A1 A0 CS EO 1 2 3 4 5 6 7 8 9 10 1 × × × × × × × × 0 1 1 1 1 1 1 1 1 0 0 × × × × × × × 0 1 0 × × × × × × 0 1 1 0 × × × × × 0 1 1 1 0 × × × × 0 1 1 1 1 0 × × × 0 1 1 1 1 1 0 × × 0 1 1 1 1 1 1 0 × 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 1 1 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1   由功能表3.8可知:   (1)输入信号低电平有效,输出代码是输入信号下标所对应的二进制数的反码。   (2)当EI = 1时,电路处于禁止编码工作状态,输出A2A1A0 = 111,EO = CS = 1。   (3)当EI = 0时,电路允许编码。若电路各输入端I0~I7均无有效输入,即I0~I7均为高电平,则CS =1,EO=0,A2A1A0 = 111;若I0~I7中存在输入有效信号,即输入有低电平,则CS = 0,EO = 1,A2A1A0以反码形式输出对输入有效信号中级别最高的输入有效信号的编码。   (4)在所有输入端中,I7优先级别最高,I0优先级别最低。   (5)A2A1A0 = 111总共出现三次,但每次表明的含义不同。   ① EI = 1,A2A1A0 = 111,电路禁止编码;   ② EI = 0,CS = 1,A2A1A0 = 111,电路允许编码,但输入信号均处于无效状态;   ③ EI = 0,CS = 0,A2A1A0 = 111,I0的编码输出。   3.二-十进制编码器   将表示十进制数0、1、2、3、4、5、6、7、8、9的10个信号分别转换成4位二进制代码的电路,称为二-十进制编码器。输出所用的代码是8421BCD码,故也称之为8421BCD码编码器。   以键盘输入8421BCD码编码器为例,其逻辑功能如表3.9所示。 表3.9 10个按键8421BCD码编码器功能表 十进制数 输 入 输 出 N S9 ?S8 S7 ?? S6 ? S5 ?S4?? S3 ? ?S2 ?S1 ?S0 A3 A2 A1 A0 CS x 0 1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1   分析表3.9可知:   (1)CS为编码状态输出标志。CS = 0表示编码器处于禁止工作状态,CS = 1表示编码器工作。   (2)S0~S9代表10个按键,与十进制数0~9的输入键相对应。S0~S9均为高电平时,表示无编码申请。当按下S0~S9其中任一键时,表示有编码申请,相应的输入以低电平的形式出现,故此编码器为输入低电平有效。   (3)A3A2A1A0为编码器的输出端。在两种情况下,会出现A3A2A1A0= 0000,当CS = 0时,出现A3A2A1A0= 0000,表示无信号输入,即无编码申请;当CS = 1时,出现A3A2A1A0 = 0000,表示十进制数0(S0)的编码输出。   由表3.9得到各输出端逻辑函数表达式为:    ? (3.6)            10个按键8421BCD编码器如图3.16所示。 图3.16 8421BCD编码器电路   例如,当键盘输入7时,即S7接地,其他输入均为高电平,CS = 1,编码输出为 A3A2A1A0= 0111。此电路每次只允许有一个输入信号有效。   在如图3.16所示电路中,与非门的输入端通过电阻接电源,当按键没有闭合时,使各个输入端确定是高电平,此类电阻叫作上拉电阻。它防止门电路输入端悬空而产生干扰。 3.4.2 译码器   译码是编码的逆过程。它的功能是对具有特定含义的代码进行辨别,并转换成相应的输出信号。具有译码功能的组合逻辑电路称为译码器。   译码器根据输入代码的形式及用途可以分为二进制译码器、二-十进制译码器、显示译码器等。   1.二进制译码器   二进制译码器输入是n位二进制码,输出有2n条线。译码器的输出每次只有一个输出端为有效电平,与当时输入的二进制码相对应,其余输出端为无效电平。此类译码器又称为基本译码器或唯一地址译码器。例如,在计算机和其他数字系统中进行数据读写时,每输入一组二进制代码,则会输出与此对应的一个存储地址,从而选中对应的存储单元,以便对该单元的数据进行读或者写操作。   由于二进制译码器有n个输入端,2n条输出线,习惯上称之为n线-2n线译码器。常见的中规模集成二进制译码器有2线-4线译码器(74139)、3线-8线译码器(74138)、4线-16线译码器(74154)等。现以74138译码器为例,分析讨论其工作原理和应用。   图3.17是集成译码器74138的逻辑电路图及逻辑符号。译码器74138有三个输入端A2、A1、A0,8个输出端Y0~Y7,故称为3线-8线译码器。S3、S2、S1为三个控制输入端(使能控制端)。只有控制输入端处于有效状态时,输入与输出之间才具有相应的逻辑关系。 (a)逻辑电路图 (b)逻辑符号 图3.17 74138的逻辑电路图及逻辑符号   分析74138的逻辑电路图,可得其输出函数表达式如下:               上述各式可归纳为如式(3.7)所示的通式:    i = 0 ~ 7 (3.7)   依据74138的逻辑电路图或者输出函数表达式分析可得其功能表,如表3.10所示。 表3.10 3线-8线译码器74138的功能表 控 制 输 入 译 码 输 入 输 出 S1 S2+ S3 A2 A1 A0 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 × 1 × × × 1 1 1 1 1 1 1 1 0 × × × × 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0      功能表3.10表明:   (1)当S1 = 0或S2+ S3 = 1时,译码器处于禁止工作状态,无论输入A2、A1、A0为何种状态,译码器输出全为1(输出低电平为有效电平),即无译码输出。   (2)当S1 = 1且S2 + S3 = 0时,译码器处于工作状态。此时,输出Y0~Y7分别对应着二进制码A2A1A0相应最小项的非,即: i = 0 ~ 7 (3.8)   2.74138应用举例   74138的基本功能是3线-8线译码器,但由于它具有三个使能控制端S1、S2、S3及能提供最小项的与非门电路结构,使74138译码器的扩展及灵活应用比较方便。具体应用通过举例说明。   例3.7 试用两片3线-8线译码器74138接成4线-16线译码器。   解:74138只有三个代码输入端(即地址输入端),而4线-16线译码器应有4个代码输入端,故选用一个使能控制端作为第4位地址A3输入端。应用两片74138扩展为4线-16线译码器,如图3.18所示。 图3.18 例3.7的电路图   由图可见,74138(Ⅰ)的S1接高电平,74138(Ⅱ)的S2、S3接地,A3分别与74138(Ⅰ)的S2、S3和74138(Ⅱ)的S1相连接,A3的状态直接决定两片74138的工作状态。当A3 = 0时,74138(Ⅰ)处于译码工作状态,74138(Ⅱ)处于禁止工作状态;当A3 = 1时,74138(Ⅰ)处于禁止工作状态,74138(Ⅱ)处于译码工作状态。   (1)74138(Ⅰ)输出为Z0~Z7,74138(Ⅱ)输出为Z8~Z15。   (2)当A3A2A1A0为0000~0111时,74138(Ⅰ)译码,74138(Ⅱ)被禁止;当A3A2A1A0为1000~1111时,74138(Ⅱ)译码,74138(Ⅰ)禁止。   上述分析表明,图3.18能够实现4线-16线译码电路的功能。如果设计要求改为利用74138实现5线-32线译码器,读者试分析给出其连接方式。   图3.17(a)的译码器电路结构在控制输入端处于有效工作状态时,各个输出端如果外接反相器则可得到输入地址变量对应的全部最小项。由于任何组合逻辑函数都可以表示为最小项之和的形式,因此,译码器配合适当的门电路就可以实现任一组合逻辑函数。   例3.8 图3.19是一个加热水容器的示意图。图中A、B、C为水位传感器。当水面在AB之间时,为正常状态,绿灯G亮;当水面在BC之间或者在A以上时,为异常状态,黄灯Y亮;当水面在C以下时,为危险状态,红灯R亮。现要求用中规模集成译码器设计一个按上述要求控制三种灯亮或暗的逻辑电路。          图3.19 加热水容器的示意图   解:设水位传感器A、B、C为输入逻辑变量,它们被浸入水中时为逻辑1,否则为0。指示灯G、Y、R为输出逻辑函数,灯亮为逻辑1,灯暗时为逻辑0。   根据题意可列出真值表,如表3.11所示。 表3.11 例3.8的真值表 输 入 输 出 输 入 输 出 A B C G Y R A B C G Y R 0 0 0 0 0 0 1 1 0 1 0 1 0 0 × 1 0 1 × 0 1 0 × 0 1 1 1 1 0 0 1 1 0 1 0 1 × × × 0 × × × 1 × × × 0      根据真值表可写出G、Y、R的逻辑函数表达式:      由于输入是三个变量,故采用3线-8线译码器74LS138实现。选取A2A1A0=ABC,S1=1,S2=S3=0。考虑到式(3.7)则有:   按照上述选择采用74LS138和反相器、与非门设计的电路如图3.20所示。 图3.20 例3.8的电路图   基本译码器实际上是一个最小项发生器,利用译码器和门电路可以构成各种多变量逻辑函数发生器,产生各种逻辑函数。   例3.9 试用74LS138译码器和适当的门电路实现下述逻辑函数。   解:(1)把所给逻辑函数转换为最小项表达式。   (2)确定函数的输入变量与74LS138地址变量的对应关系。   选取A2A1A0=ABC,S1=1,S2=S3=0。考虑到式(3.7)则有:   (3)作图。   采用74LS138和与非门实现所给逻辑函数的电路图如图3.21所示。    图3.21 例3.9的电路图   集成译码器的应用可概括为基本应用,即器件设计时所考虑的译码器功能;扩展应用,即利用使能端的控制作用,通过多片译码器的适当连接扩展译码器的输入地址变量数;译码器用作逻辑函数发生器,即利用译码器和适当的门电路实现一般的组合逻辑函数。   3.二-十进制译码器   二-十进制译码器也称BCD译码器,它的逻辑功能是将输入的一组BCD码译成10个高低电平输出信号。BCD码的含义是用4位二进制码表示十进制数中的0~9这10个数码,因此,BCD译码器又称为4线-10线译码器。图3.22是二-十进制译码器74LS42的逻辑符号,其输入是8421BCD码,其功能如表3.12所示。 图3.22 二-十进制译码器的逻辑符号 表3.12 4线-10线译码器功能表 序号 输 入 输 出 A3 A2 A1 A0 0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 0 0 1 1 0 0 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0   若输入信号A3A2A1A0在0000~1001之间时,相应的输出端产生一个低电平有效信号。如果A3A2A1A0=1010~1111时,则输出Y0~Y9均为高电平输出,即译码器处于无效工作状态。      4.数字显示译码器   数字显示译码器不同于上述的译码器,它的主要功能是译码驱动数字显示器件。数字显示的方式一般分为三种:①字型重叠式,即将不同字符的电极重叠起来,使相应的电极发亮,则可显示需要的字符;②分段式,即在同一个平面上按笔画分布发光段,利用不同发光段组合,显示不同的数码;③点阵式,由一些按一定规律排列的可发光的点阵组成,通过发光点组合显示不同的数码。数字显示方式以分段式应用最为广泛,现以驱动七段数码管显示的译码器为例,介绍显示译码器的工作原理。   1)七段数码管的结构及工作原理   七段数码管的结构如图3.23所示,它有7个发光段,即a、b、c、d、e、f、g,数码显示与发光段之间的对应关系如表3.13所示。七段数码管内部由发光二极管组成。在发光二极管两端加上适当的电压时,就会发光。发光二极管有两种接法:即共阴极接法和共阳极接法,如图3.24所示。 (a)共阳极接法 (b)共阴极接法 图3.24 发光二极管的两种接法 表3.13 BCD码与显示发光段对应关系 BCD码 显 示 数 码 发 光 段 BCD码 显 示 数 码 发 光 段 0000 abcdef 0101 acdfg 0001 bc 0110 cdefg 0010 abdeg 0111 abc 0011 abcdg 1000 abcdefg 0100 bcfg 1001 abcfg      当选用共阳极数码管时,应选用低电平输出有效的七段译码器驱动;当选用共阴极数码管时,应选用高电平输出有效的七段译码器驱动。在实际应用数码管时,应考虑接入限流电阻。   2)七段显示译码器7447   7447七段显示译码器输出低电平有效,用于驱动共阳极数码管。图3.25给出了7447七段显示译码器的逻辑符号,其功能表如表3.14所示。 表3.14 7477七段显示译码器功能表 十 进 制 数 输 入 输 出 显示字型 A3 A2 A1 A0 a b c d e f g 0 × 1 × × 0 1 0 1 × × 0 × × 0 × × 0 × × 0 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1熄灭 熄灭 0 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 × 1 0 0 0 1 1 0 0 1 1 1 1 2 1 × 1 0 0 1 0 0 0 1 0 0 1 0 3 1 × 1 0 0 1 1 0 0 0 0 1 1 0 4 1 × 1 0 1 0 0 1 0 0 1 1 0 0 5 1 × 1 0 1 0 1 0 1 0 0 1 0 0 6 1 × 1 0 1 1 0 1 1 0 0 0 0 0 7 1 × 1 0 1 1 1 0 0 0 1 1 1 1 8 1 × 1 1 0 0 0 0 0 0 0 0 0 0 9 1 × 1 1 0 0 1 0 0 0 1 1 0 0 10 1 × 1 1 0 1 0 1 1 1 0 0 1 0 11 1 × 1 1 0 1 1 1 1 0 0 1 1 0 12 1 × 1 1 1 0 0 1 0 1 1 1 0 0 13 1 × 1 1 1 0 1 0 1 1 0 1 0 0 14 1 × 1 1 1 1 0 1 1 1 0 0 0 0 15 1 × 1 1 1 1 1 1 1 1 1 1 1 1 熄灭      、、是7447七段显示译码器的辅助控制输入端,其作用是实现灯测试和灭零功能。   (1)试灯输入 。试灯输入主要用于检测数码管的各个发光段能否正常发光。当=0,=1时,七段数码管的每一段都被点亮,显示字型:。如果此时数码管的某一段不亮,则表明该段已经烧坏。正常工作时,应使=1。   (2)灭零输入 。灭零用于取消多位数字中不必 要的0的显示。例如,在6位数字显示中,如果不采用灭零控制,则数字15.2可能被显示为015.200。把整数有效数字前面的0熄灭称为头部灭零,把小数点后面数字尾部的0熄灭称为尾部灭零。注意,只是把不需要的0熄灭。比如数字030.080将显示为30.08(需要的0仍然保留)。      当=1,= 0时,若输入代码为A3A2A1A0 = 0000,则相应的零字型不显示,即灭零,此时输出0。当=1,=1时,若输入代码为A3A2A1A0 =0000,则显示零字型,此时,?输出1。   (3)熄灯输入/灭零输出。是特殊控制端。输出和输入共用一根引脚与外部连接。也就是说,引脚既可以用作输入也可以用作输出。当把它作为输入(熄灯输入)且为低电平时,它优先于所有其他的输入,使得所有段输出为高电平(无效状态)即数码管处于熄灭状态。(熄灯输入)功能与灭零控制无关。当把作输出端使用时,是动态灭零输出。常与相邻位的相连,通知下一位如果出现零,则熄灭。图3.26给出了灭零控制的应用举例。 图3.26 显示系统动态灭零控制举例   整数部分最高位和小数部分最低位的灭零输入接地,以便灭零。整数最高位的与次高位的连接;小数位的最低位的与高一位的相连,以便去掉多余的零。即整数最高位是零,并且被熄灭时,次高位才有灭零信号。同理,小数最低位是零,并且被熄灭时,高一位才有灭零输入信号。整数个位和小数最高位没用灭零功能。   思考与讨论题:   (1)参照表3.7的4线2线编码器的功能表,列写出8线3线编码器的功能表,求出输出函数表达式并适当化简,画出逻辑电路图。   (2)如果有4片74138译码器,你能够组成多少种译码器?   (3)译码器与适当的门电路结合,能够形成逻辑函数发生器。如果有两片74138和一个与非门(输入端个数自选),举例说明你能够分别实现多少个输入变量的组合逻辑函数。 3.5 数据分配器与数据选择器 3.5.1 数据分配器   在数据传输过程中,常需要把一条通道上的数据分配到不同的数据通道上,实现这一功能的电路称为数据分配器(也称多路数据分配器,多路数据调节器)。图3.27为数据分配器功能示意图。   数据分配器可以直接用译码器来实现。例如,用3线-8线74138译码器,可以把三个控制端中的一个控制端作为数据输入通道,根据地址码A2A1A0不同组合,将输入数据D分配到8个(Y0~Y7)相应的输出通道上去,如图3.28所示。 图3.27 数据分配器示意图 图3.28 74138构成的数据分配器   选择S2作为数据输入通道,从图3.28可见,S1?=?1,S2?=?D,S3?=?0,由式(3.7)有 其中,mi为与地址A2A1A0 对应的最小项。例如,当A2A1A0 = 011时,选择Z3通道,m3=1,则有Z3=D。当地址A2A1A0 =?111时,选择Z7通道,m7=1,则有Z7=D。根据输入地址的不同,可将输入数据分配到8路数据输出中的任一通道。 3.5.2 数据选择器   数据选择器(MUX)的逻辑功能是在地址选择信号的控制下,从多路数据中选择出一路数据作为输出信号,相当于多输入的单刀多掷开关,其示意图如图3.29所示。   1. 数据选择器的功能描述   图3.30是四选一数据选择器的电路图。D0~D3是数据输入端,即数据输入通道;A1A0是地址输入端;Y是输出端;E是使能端,低电平有效。依据图3.30可写出数据选择器的逻辑函数表达式:    (3.9) 式中,是地址变量A1A0所对应的最小项,Di表示对应的输入数据。   式(3.9)表明:当使能端E = 1时,地址输入端A1A0 无论为何值,输出Y = 0,数据选择器处于禁止工作状态;当使能端E = 0 时,根据地址输入端A1A0的组合,从数据输入端D0~D3中选择出相应的一路输出。四选一数据选择器的逻辑功能如表3.15所示。   图3.29 数据选择器示意图 图3.30 四选一数据选择器的电路图 表3.15 四选一数据选择器功能表 E A1 A0 Y E A1 A0 Y 1 0 0 × 0 0 × 0 1 0 D0 D1 0 0 1 1 0 1 D2 D3   二位地址码可以有4个输入通道,三位地址码可选数据通道数为8个。若地址码是n位,则数据通道数为2n个,故2n选一数据选择器的逻辑表达式为: (3.10)   常用集成数据选择器有双四选一数据选择器74LS153、74LS253等;八选一数据选择器有74LS152、74LS151等;十六选一数据选择器有74LS150、74850、74851等。   2. 数据选择器的扩展   如需要选择的数据通道较多时,可以选用八选一或十六选一数据选择器,也可以把几个数据选择器连接起来扩展数据输入端。   如图3.31所示的是利用使能端将四选一数据选择器扩展为八选一数据选择器的实例。 图3.31 双四选一MUX扩展为八选一MUX   当A2?=?0时,E1?=?0,E2?=?1,Y1对应的四选一数据选择器工作,即,Y2对应的四选一数据选择器处于禁止工作状态,即Y2 = 0。所以,Y = Y1,即从D0~D3中选一路输出。   当A2 = 1时,E1?=?1,E2?=?0,Y1对应的四选一数据选择器处于禁止工作状态,即Y1?= 0,Y2对应的四选一数据选择器处于工作状态,所以,Y = Y2=,即从D4~D7中选一路输出。   上述扩展过程给出的启示是,利用高位地址进行片选,当选定工作芯片后,再利用其余地址对工作芯片的数据进行选择输出。这种规律对芯片的功能扩展具有一般性。   3. 数据选择器的应用   数据选择器的应用很广泛,它不仅可以实现有选择地传递数据,还可以作为逻辑函数发生器,实现所要求的逻辑函数功能,也可以将并行数据转换为串行数据进行传输。   数据选择器能够实现任一组合逻辑函数的基础在于反映其逻辑功能的表达式(3.10)是一个可控最小项表达式,而任何一个逻辑函数都可以表示为最小项表达式。因此,数据选择器经常被用来设计组合逻辑电路。   例3.10 试分析写出如图3.32所示电路的逻辑表达式。   解:由如图3.32所示电路的连接关系可知:   A2 A1A0 = ABC,D0 = D1 = D2 = D4 = 0,D3 = D5 = D6 = D7 = 1,E = 0   代入八选一数据选择器的公式并整理有:    图3.32 例3.10电路图      利用数据选择器设计组合逻辑电路有三种方法,即比较系数法、真值表法、卡诺图法。下述举例分别说明这三种方法的具体应用。   例3.11 应用八选一数据选择器实现下述逻辑函数:   解:通过配项,将L展开为最小项表达式有: (3.11)   由于有三个输入变量,选用八选一数据选择器。根据数据选择器的通式(3.10),选取A2A1A0?=?ABC,当使能输入E?=?0时,有: (3.12) 比较式(3.11)和式(3.12),若要求L = Y,则应满足: D0= D2 = D4 = D5 = D6 = D7 = 1 D1 = D3 = 0   根据上述分析,可画出实现所给逻辑函数的逻辑电路图如图3.33所示。 图3.33 例3.11的电路图   例3.12 已知一逻辑函数的真值表如表3.16所示,利用数据选择器实现此逻辑函数。 表3.16 例3.12的真值表 输 入 输 出 A B C F 0 0 ?0 0 0 ?1 0 1 ?0 0 1 ?1 1 0 ?0 1 0 1 1 1 ?0 1 1 ?1 0 1 1 0 1 0 0 1 解:如果令数据选择器的地址变量与题目中给定的逻辑函数的输入变量相对应,即A2A1A0?=?ABC,对于每一组输入变量的取值组合,数据选择器的输出数据与逻辑函数值相对应,即F = Di。由此可确定Di的取值,并列表如表3.17所示。 表3.17 例3.12输出函数值与Di的对应关系表 输 入 输 出 A B C F Di 0 0 ?0 0 0 ?1 0 1 ?0 0 1 ?1 1 0 ?0 1 0 1 1 1 ?0 1 1 ?1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0 1   依据上述分析及表3.17给出的Di值,作电路图如图3.34所示。 图3.34 例3.12的电路图   上述举例中,逻辑函数的输入变量数与数据选择器的地址输入端个数恰好相同,通过逻辑函数的最小项表达式与数据选择器的表达式比较系数或者利用真值表,容易确定各个数据输入端的输入值,且Di的值是常数1或者0。   当逻辑函数的输入变量数大于数据选择器的地址输入数时,某些输入变量就要通过Di反映其对输出逻辑函数的作用。换句话说,Di是多余输入变量的函数。因此,问题的关键是如何确定Di。此时,同样可以利用比较系数法、真值表法。但采用卡诺图法更直观方便。   采用数据选择器实现所给逻辑函数,用卡诺图法确定Di连接关系的一般步骤如下。   (1)画出所给逻辑函数的卡诺图;   (2)确定逻辑函数输入变量与数据选择器地址输入变量的对应关系;   (3)在卡诺图上确定地址变量的控制范围,即输入数据区;   (4)由输入数据区确定每一数据输入端的连接关系;   (5)依据分析所得的连接关系作图。   例3.13 试用四选一数据选择器实现三变量多数表决器。   解:由例3.5已知,三变量多数表决器的逻辑表达式为:   画出逻辑函数L的卡诺图如图3.35(a)所示,若令BC = A1A0作为地址输入变量,则可确定地址输入变量的控制范围如图3.35(b)所示,并由此得出D0 = 0,D1 = D2 = A,D3 = 1。用四选一数据选择器实现三变量多数表决器的电路如图3.35(c)所示。 图3.35 例3.13的图   用数据选择器实现逻辑函数,关键在于地址变量和数据输入端连接方式的确定。当地址变量确定之后,Di的连接方式可通过比较系数法、真值表法、卡诺图法分析确定。   思考与讨论题:   (1)译码器可作为数据分配器使用,如果希望利用两片74138实现一路输入数据D到16路输出的数据分配器,试分析画出电路图。如果希望在实现数据分配的同时,前8路输出数据反相,即输出,后8路输出数据保持D不变,如何实现?   (2)利用数据选择器实现给定的逻辑函数时,所给函数的变量与数据选择器的地址输入变量的对应关系具有一定的灵活性。在例3.13中,试令AB = A1A0或者AC = A1A0作为地址输入变量,通过卡诺图确定Di的连接方式,画出相应的电路图。 3.6 算术运算电路 3.6.1 加法器   1.半加器和全加器   1)半加器   如果不考虑来自低位的进位而将两个一位二进制数相加,称作半加。实现半加运算的逻辑电路叫作半加器。   若用A、B表示输入,S、C分别表示和与进位输出。根据半加器的逻辑功能,可做出其真值表如表3.18所示。 表3.18 半加器真值表 输 入 输 出 输 入 输 出 A B S C A B S C 0 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1      由真值表可求出输出函数的表达式如下: (3.13)   式(3.13)可用一个异或门和与门实现,如图3.36所示。半加器的逻辑符号如图3.37所示。其中,A、B分别表示加数和被加数输入,S表示和数输出,C表示输送到相邻高位的进位。 ? 图3.36 半加器的逻辑电路图 图3.37 半加器的逻辑符号   2)全加器   如果不仅考虑两个一位二进制数相加,而且考虑来自低位的进位的加法运算称作全加。实现全加运算的逻辑电路叫作全加器。   全加器的逻辑符号如图3.38所示,其中,Ai、Bi分别为加数和被加数,Ci–1是相邻低位的进位,Si为本位和,Ci是向相邻高位的进位。    图3.38 全加器的逻辑符号   反映全加器逻辑功能的真值表如表3.19所示。 表3.19 全加器真值表 输 入 输 出 输 入 输 出 Ai Bi Ci–1 Si Ci Ai Bi Ci–1 Si Ci 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0 1 1 0 0 1 0 1 1 1      从表3.19出发,写出全加器的逻辑函数表达式并进行整理可得: (3.14)   请读者按式(3.14)画出全加器的逻辑电路图。   2.多位二进制加法器   实现多位二进制数加法运算的电路称为多位加法器。按各数相加时进位方式不同,多位加法器分为串行进位加法器和超前进位加法器。   1)串行进位并行加法器   图3.39是一个4位串行进位并行加法器。由图可见,全加器的个数等于相加数的位数,高位的运算必须等低位运算结束,送来进位信号以后才能进行。它的进位是由低位向高位逐位串行传递的,故称为串行进位并行加法器。其优点是电路简单,连接方便,缺点是运算速度低。   2)超前进位并行加法器   为了提高运算速度,通常使用超前进位并行加法器。图3.40是中规模4位二进制超前进位加法器74LS283的逻辑符号。其中,A0~A3、B0~B3分别为4位加数和被加数的输入端,S0~S3为4位和数输出端,CI为最低进位输入端,CO向高位输送进位的输出端。 图3.39 4位串行进位并行加法器 图3.40 74LS283的逻辑符号   这种超前进位加法电路的运算速度高的主要原因在于,进位信号不再是逐级传递,而是采用超前进位技术。超前进位加法器内部进位信号Ci可写为如下表达式: Ci = fi (A0,, Ai, B0,, Bi, CI)   各级进位信号仅由加数、被加数和最低进位信号CI决定,而与其他进位无关。这就有效地提高了运算速度。位数越多,超前进位电路越复杂。目前,中规模集成超前进位加法器多为4位,常用的型号有74LS283、54283等。 3.6.2 二进制减法运算   二进制减法运算可采用不同的实现途径。一是类似于二进制加法的处理方式,采用门电路设计半减器和全减器;二是利用变补相加法的运算规则,用加法器实现减法运算。为了讨论问题的方便,这里把前者称为二进制减法的直接电路实现。   1. 全减器的直接电路实现   不仅考虑减数和被减数,而且考虑低位借位的1位二进制减法运算称为全减,能够实现全减运算的电路称为全减器。   设A、B、C分别表示被减数、减数、低位借位信号,D、V分别表示差及向高位的借位信号。依据二进制减法的运算规则,可列写真值表如表3.20所示。 表3.20 全减器真值表 输 入 输 出 输 入 输 出 A B C D V A B C D V 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 0 1 1 1 1 1 1 1 0 0 1 1 0 1 0 1 1 0 0 1 0 0 0 1      从表3.20出发,写出全减器的逻辑函数表达式并进行整理可得: (3.15) 依据式(3.15)画出全减器的电路图如图3.41所示。    图3.41 全减器电路图   2. 利用变补相加法实现减法运算   在数字系统中,为了简化系统结构,通常不另设减法器,而是利用补码将减法运算变为加法运算来处理,使运算器既能够实现加法运算,又可以实现减法运算。   1)原码、反码、补码   自然二进制码称为原码,它不包含二进制数的正负号,属于无符号数。例如,采用4位二进制码时,,。   反码由原码逐位取反而得到,反码加1可获得补码。规定正二进制数的补码与其原码相同。例如:      为了方便数值在数字系统的运算、存储与传输,在二进制数的最高位前增加一位符号位,用来区分正二进制数和负二进制数,符号位为0表示正数,符号位为1表示负数。例如:      2)用补码完成减法运算   设:有A、B两个数,则减法运算便可以用A – B = A +(– B)的补码加法完成。   例3.14 求9 – 3和3?–?9的值。   解:先求9 – 3的值: 可以看出正数的二进制数原码和其补码是一致的。   再求3 – 9的值:   由上述例题可以看出:用原码表示有符号的数简单、直观,但运算并不方便。   例如,两个数相加或者相减,首先要判断两者的符号位和比较两者绝对值的大小。若是两个符号位不同的数相加,或是两个符号位相同的数相减,就需要比较其绝对值的大小,用绝对值大的数减去绝对值小的数,求得计算结果的绝对值,而计算结果的符号位应与绝对值较大的数的符号位相同。   因此,用原码进行运算将会使数字逻辑系统变得非常繁杂,因为数字逻辑系统除了正常的运算功能外,还需要具备判别逻辑功能,使得系统硬件增多,运算时间增加。   补码运算则是将绝对值的运算和符号的判断合二为一,从而简化了系统,提高了运算速度。   利用补码加法运算时应该注意以下几点。   (1)补码运算时,符号位被看成一位数码,参与运算。   (2)两补码相加如有溢出,则舍去。   (3)当符号位为0时,运算结果为正数,补码即为原码。当符号位为1时,说明运算结果为负数,应该对补码(运算结果)再次求补得到原码。   3)原码输出二进制减法电路   按照补码运算规则设计的原码输出4位二进制减法电路,如图3.42所示。下面以A–B≥0和A–B<0两种情况用实例说明其工作过程。   (1)A–B≥0的情况,设:A?= 0100,B = 0001。   (2)A–B<0的情况,设:A = 0001,B = 0101。   A – B<0时和A – B≥0时的减法演算过程分别如下。      A – B≥0的情况是4 – 1 = +3,A – B<0的情况是1 – 5 = –?4,可见运算结果正确。 图3.42 利用补码加法实现减法运算的电路 3.6.3 加法器应用举例   例3.15 利用加法器74LS283将5421BCD码转换为2421BCD码。   解:为了便于完成所要求的两种编码之间的转换,首先应该列出两种编码表,如表3.21所示。 表3.21 5421BCD码与2421BCD码对照表 5421BCD码 2421BCD码 十进制数 5421BCD码 2421BCD码 十进制数 0000 0001 0010 0011 0100 0000 0001 0010 0011 0100 0 1 2 3 4 1000 1001 1010 1011 1100 1011 1100 1101 1110 1111 5 6 7 8 9      分析两种编码可以发现:   (1)在十进制数的0~4之间,两种编码完全相同。   (2)在十进制数的5~9之间,5421BCD码加上0011后,即得到相应的2421BCD码。   这就是说,只要用适当的数与5421BCD码相加,则可将5421BCD码转换成2421BCD码。即当输入5421BCD码在0000~0100之间时,加上0000;当输入5421BCD码在1000~1100之间时,加上0011。   根据以上分析,并且利用输入的5421BCD码的最高位来控制全加器的加数,即可得出符合题意的逻辑电路,如图3.43所示。