第3章组合逻辑电 路 数字电路分成组合逻辑电路和时序逻辑电路两类。组合逻辑电路比时序逻辑电路简单得多。本章 首先讨论组合逻辑电路的分析和设计方法,并给出用门电路、门阵列实现组合逻辑电路的实例;然后介 绍常用的中规模组合逻辑电路功能模块的基本原理和逻辑器件,并对组合逻辑电路存在的竞争与险象 进行简单分析;最后介绍组合逻辑电路的VHDL 描述方法。 3.1 组合逻辑电路概述 组合逻辑电路不仅能够独立地实现各种复杂的逻辑功能,而且还是各种时序逻辑电路的重要组成 部分,因此组合逻辑电路是各种逻辑电路的基本电路单元。 3.1 组合逻辑电路模型及特点 1. 1. 组合逻辑电路模型 图3-1给出了组合逻辑电路的基本模型,由以下3部分组成。 (1)输入信号:x2,…, n 个输入变量, n 种输入。 x1,xn ;可以有2 (2)输出信号:Z1,Z2,…,Zm 。 fi(x2,…,i1,…,。 (3)输出函数:Zi=x1,xn ),= m 从组合逻辑电路的模型可以看出,组合逻辑电路是布尔函数的图3- 1 组合逻辑电路基本模型 图 直接电路实现 。 2. 组合逻辑电路的特点 组合逻辑电路的模型决定了组合逻辑电路的特点,电路在任意时刻的稳定输出,仅仅取决于当前的 输入组合,而与过去的输入无关,即布尔函数的真值表直接决定了组合逻辑电路的逻辑关系。 3.2 组合逻辑电路的描述方法 1. 由组合逻辑电路模型可知,组合逻辑电路完全可以由布尔函数表示,因此布尔函数的表示方法均可 用于描述组合逻辑电路,如前面章节已介绍的真值表、布尔函数表达式、原理图、HDL 都可以用于描述 组合逻辑电路。在此介绍另一种数字电路描述方法———时序图描述法。 时序图(iigdigr是数字电路的输入信号和输出信号之间关系的图形表示方式。时序图一 tmnaam) 般采用电路实验或者逻辑仿真的方法得到。在一段时间里,将一组输入序列信号接入到电路的输入端, 在示波器或者逻辑分析仪的屏幕上或者逻辑仿真程序的输岀中,即可观察到与输入信号相对应的输出 信号,输出信号能够完全反映电路的逻辑关系,时序图和真值表之间可以直接转换。 通过分析时序图,能够得到电路所实现的逻辑函数的真值表;反之,利用布尔函数的真值表也可以 绘制电路工作的时序图。一个完整的组合逻辑电路时序图,应该完整描述输入信号在各种取值组合情 况下对应的电路输出波形。 例如,函数F(A,B,C)=AB+BC 的真值表如表3-1所示。 92 表3- 1 F=AB+BC 的真值表 A B C F 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 0 1 1 0 1 1 1 1 1 描述其逻辑功能的典型时序图如图3-2(a)所示。图3-2中给出了信号A、B、 C 的所有取值组合对 应的输入的波形,然后给出了对应的电路输出 F 的波形。可以看到,当AB=11 、BC=11 时,函数值取 值为1;其他情况下,函数值取值为0,与真值表描述完全一致。 图3- 2 F=AB+BC 的时序图 (a)不考虑门延迟的时序图;(b)考虑门延迟的时序图 如果在时序图中不仅考虑电路的逻辑功能,而且考虑各个门电路的延迟,这样的时序图更接近于实 际电路的工作过程。例如布尔函数F(A,B,C)=AB+BC,如果用与门和或门实现,并且假设与门和 或门的门延迟均为tpd,则考虑门延迟的时序图如图3-2(b)所示。图中不仅考虑了输入和输出的逻辑关 系,而且考虑了实际电路的门延迟。 93 3.2 组合逻辑电路设计 组合逻辑电路设计的基本任务是按照电路的功能描述,设计组合逻辑电路。组合逻辑电路的设计 过程主要包括两个环节,首先根据电路的功能描述建立其逻辑函数模型,然后选择合适的逻辑器件实现 组合逻辑电路。 3.1 组合逻辑电路设计过程 2. 1. 建立组合逻辑电路模型 电路模型的建立是电路设计最关键的环节,电路模型建立好之后,后面的步骤才会有章可循。建立 组合逻辑电路模型主要包括以下工作。 (1)分析功能描述,确定输入输出信号。 (2)建立真值表,写出布尔函数表达式。 在实际的电路设计中,功能描述是多种多样的,可以是直接的真值表、函数表达式,也可以是时序 图、表格、文字等。无论什么样的描述方法,关键是要理解功能描述表达的意思,建立正确的电路模型, 才能够设计出符合功能描述的电路。 2. 用集成逻辑器件实现组合逻辑电路 (1)用门电路实现组合逻辑电路。用门电路实现组合逻辑电路,首先需要把函数表达式化简为最 简形式,然后把表达式变换为所选用门电路器件对应的表达式形式,最后用门电路画出电路原理图。 (2)用基于标准积项的门阵列实现组合逻辑电路。用基于标准积项的门阵列实现组合逻辑电路, 首先需要写出函数的标准积之和形式,然后再画出与门阵列固定、或门阵列可编程的门阵列电路原 理图。 (3)用基于最简积项的门阵列实现组合逻辑电路。用基于最简积项的门阵列实现组合逻辑电路, 首先需要把函数表达式化简为最简与或式,然后再画出与门阵列可编程、或门阵列也可编程的门阵列电 路原理图。 (4)用HDL 描述组合逻辑电路。当使用CPLD/FPGA 器件实现组合逻辑电路时,需要借助HDL 编程,用HDL 描述组合逻辑电路。 2.组合逻辑电路设计举例 3.2 1. 用门电路实现组合逻辑电路 例3- 1 设计能够实现如图3-3所示时序图的逻辑电路,其中波形A、B、 C 为输入信号,波形 F 为 输出信号。要求用与非门、或非门设计此逻辑电路,并比较电路的复 杂性。 解: (1)由题意可知,电路的输入为A、B、C,输出为F。 (2)根据时序图的描述,可以建立电路真值表,如表3-2所示 。 按照真值表,可以写出函数表达式F(A,B,C) = Σm(5,6,7) 。 (3)卡诺图化简布尔函数,如图3-4所示。由于题目要求用与非、 或 非门实现布尔函数,因此直接给出了原函数和反函数的卡诺图化简过程 , 以便于得到函数的最简与或式和最简或与式 。 图3-3例3-1的时序图 94 表3- 2 例3-1真值表 A B C F 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 图3- 4 例3-1原函数与反函数的卡诺图 根据卡诺图,可以得到原函数和反函数的最简与或表达式 。 F =AB +AC;....B .. F = A +.. C 对反函数取非,利用德·摩根定理容易得到函数的或与表达式:F=A·(B+C)。 将与或表达式和或与表达式分别两次取非,再利用德·摩根定理,即可得到函数的与非-与非表达 F= .. 图3-5为与非门及或非门实现的逻辑电路 。 式和或非-或非表达式:F=AB·AC, A +(B+C)。 图3- 5 例3-1用与非门、或非门实现的原理图 (a)与非门实现;(b)或非门实现 比较发现,用与非门和或非门实现该电路需要的逻辑门数量和电路复杂度均相同。 例3- 2 为某水坝设计一个水位报警控制器,设水位高度用4位二进制数表示,当水位上升到8m 时,白色指示灯开始亮;当水位上升到10m 时,黄色指示灯开始亮;当水位上升到12m 时,红色指示灯开 始亮,其他颜色的灯灭。若水位不可能上升到14m,要求用与非门、或非门设计此逻辑电路,并比较电路 的复杂性。 解: (1)分析题意,首先建立电路的外部模型。 输入:水位高度,0~13m(水位不可能上升到14m), 用4位二进制数表示,设为B4B3B2B1。 95 输出:3个指示灯,定义灯亮为1,灯灭为0,白色指示灯设为Fw ,黄色指示灯设为Fy ,红色指示灯 设为Fr 。 电路的外部模型如图3-6所示。 图3- 6 例3-2的电路模型 (2)按照功能描述,建立电路真值表,如表3-3所示。由于水位不可能达到14m,因此输入为 14m 、15m 时,3个指示灯输出为任意值(用“×”表示)。 表3- 3 例3-2的真值表 B4 B3 B2 B1 Fw Fy Fr 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 1 0 0 1 0 0 1 1 0 0 1 0 1 0 1 1 0 1 0 1 1 1 1 0 1 1 0 0 0 0 1 1 1 0 1 0 0 1 1 1 1 0 × × × 1 1 1 1 × × × 根据真值表,可写出如下函数表达式 : Fw = Σm(8,9,10,11) + Σd(14,15) ; Fy =Σm(10,11) + Σd(14,15) ; Fr = Σm(12,13) + Σd(14,15) (3)用与非门实现。将函数化简为最简与或表达式,原函数卡诺图如图3-7所示,由此可得Fw = B4B3;Fy =B4B2;Fr =B4B3。 变换为与非-与非表达式为Fw =B4B3;Fy =B4B2;Fr =B4B3 。 与非门实现的电路如图3-8所示 。 (4)用或非门实现。将函数化简为最简或与式,首先要获得最简反函数,其卡诺图如图3-9所示。 96 图3- 7 例3-2的卡诺图 图3- 8 例3-2用与非门实现的原理图 由此可得Fw =B4+B3;Fy =B4+B2;Fr =B4+B3。 图3- 9 例3-2中原函数的卡诺图 将其变换为或非-或非表达式Fw =B4+B3;Fy =B4+B2;Fr =B4+B3 。 或非门实现的电路如图3-10 所示 。 (5)比较复杂性。比较两个电路可以看出,用或非门实现比用与非门实现减少了一个门,相对比较 简单。 2. 用SPLD 实现组合逻辑电路 例3- 3 设计8421BCD 编码转换为七段数码管编码的码制转换电路,并用基于标准积项的门阵列、 基于最简积项的门阵列实现该电路。 分段式半导体数码管是一种数码显示器件,是将多个发光二极管封装在一个器件内,组成特定形 状。八段半导体数码管符号及内部原理结构如图3-11 所示,其内部由8个发光二极管组成,其中7段 97 图3-10 例3-2用或非门实现的原理图 为数码段a~g,1段为小数点DP,其电平高、低的不同组合就构成了不同数码的显示。根据电路的结 构,可以分为共阳极和共阴极数码管。 图3-11 LED 数码管 (a)共阳极;(b)共阴极 半导体数码管目前主要用于电子计算器和数字仪表的显示部分中。七段数码管的a~g分段及数 字字符组成如图3-12 所示。 图3-12 例3-3中数码管的七段数字字符 解:建立电路的模型。图3-13 所示为BCD 转七段数码管编码模块的外部模型。 根据电路的功能描述可知。 输入:4位8421BCD 编码,设为B8、B4、B2、B1,0~9有意义,大于9无意义。 输出:a~ g 七段数码管编码信号。 这是一个多输出布尔函数形成的电路,真值表如表3-4所示。 98 图3-13 例3-3的电路模型 表3- 4 使用8421BCD 码的七段数码管编码真值表 B8 B4 B2 B1 a b c d e f g 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 0 1 1 0 0 0 0 0 0 1 0 1 1 0 1 1 0 1 0 0 1 1 1 1 1 1 0 0 1 0 1 0 0 0 1 1 0 0 1 1 0 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 0 0 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 0 0 1 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 × × × × × × × 根据真值表可以写出布尔函数表达式: a= Σm(0,2,3,5,6,7,8,9) + Σd(10,11,12,13,14,15) b= Σm(0,1,2,3,4,7,8,9) + Σd(10,11,12,13,14,15) c= Σm(0,1,4,7,9) + Σd(11,13,15) 3,5,8,10,12,14, d= Σm(0,2,3,5,6,8) + Σd(10,11,12,13,14,15) e= Σm(0,2,6,8) + Σd(10,11,12,13,14,15) f= Σm(0,5,8,9) + Σd(10,11,12,13,14,15) 4,6, g= Σm(2,3,4,5,6,8,9) + Σd(10,11,12,13,14,15) (1)用基于标准积项的门阵列实现该电路,电路图如图3-14 所示。其中的与阵列是固定不变的, 99 用于产生函数的16 个最小项m0~m15,通过对或阵列编程即可实现上述函数表达式的电路。其中大于 或等于10 的最小项,对应的函数值统一取值为0。 图3-14 例3-3基于标准积项的门阵列电路图 (2)用基于最简积项的门阵列实现该电路。需要将函数表达式变换为最简与或式,才能使电路的 规模最小。对上述函数表达式进行卡诺图化简,如图3-15 所示。 图3-15 例3-3的卡诺图 七段编码的最简函数表达式为 a=B8+B2+B4B1+B4B1 100 b=B4+B2B1+B2B1 c=B2+B1 d=B4B1+B4B2+B2B1+B4B2B1 e=B4B2B1+B4B2B1+B4B2B1 f=B8+B4B1+B4B2+B2B1 g=B8+B4B1+B4B2+B4B2 为了减少与门个数,达到整体最简,可以产生如下最简积项: P1=B4B2B1;P2=B4B2B1;P3=B4B2B1;P4=B4B2; P5=B4B2; P6=B4B1; P7=B4B1; P8=B4B1; P9=B2B1; P10=B2B1; P11=B2B1; P12=B8; P13=B4; P14=B2; P15=B1 然后可以得到如下七段编码的或门表达式: a=P6+P8+P10+P11+P12 b=P9+P11+P13 c=P14+P15 d=P2+P4+P6+P10 e=P1+P2+P3 f=P5+P7+P9+P12 g=P4+P5+P7+P12 基于最简积项的门阵列实现的电路如图3-16 所示。 图3-16 例3-3基于最简积项的门阵列电路图 101 3.3 组合逻辑电路分析 组合逻辑电路分析的基本任务是,根据组合逻辑电路的实现分析电路实现的功能。分析组合逻辑 电路的功能,最直接的方法就是分析其真值表,因此无论使用什么样的电路实现都要首先设法得到其真 值表。 实际的电路实现可以有电路原理图、VHDL 电路描述或两者混合的形式。对于原理图实现,可以 根据原理图写出函数表达式,进而得到真值表;对于VHDL 电路描述,也可以根据描述方式的不同获得 电路的函数表达式,或者直接得到真值表。 门电路和门阵列器件实现的组合逻辑电路都采用了电路原理图的描述方法,所以它们都可以用原 理图分析的方法进行电路分析。这里只给出门电路实现的组合逻辑电路分析方法,其他形式的电路也 都是通过分析其真值表获得电路的功能,在此不再赘述。 原理图分析法的基本步骤如下。 (1)确定电路的外部模型,包括输入输出信号。 (2)写出每个门电路的函数表达式。 (3)用代入规则写出输出函数的表达式,并化简为最简与或表达式。 (4)列出函数真值表。 (5)描述电路功能 。 例3- 4 分析图3-17 所示逻辑电路的逻辑功能 。 图3-17 例3-4的电路图 解: (1)确定电路的外部模型,电路输入为A、B、C,电路输出为F。 (2)写出每个门电路的函数表达式。 O=ABC;L=AO; M =BO; N =CO;F=LMN (3)用代入法写出输出函数的表达式,并化简为最简与或式。 F=LMN ..M+ .. = L +.. N =AO +BO +CO =AABC +BABC +CABC ..B+..A+....B+.. A+....B+..A+.. =A(C)+B(C)+C(C) =AB..+AC..+..C+..BC AB +B..AC +.. 卡诺图如图3-18 所示,出现了非必要质蕴含项,用最少的质蕴含项表示函数的最小覆盖,最简函数 102 B+..C。 表达式为F=A..AC+B.. 图3-18 例3-4的卡诺图 (4)列出函数真值表,如表3-5所示。 表3- 5 例3-4的真值表 A B C F 0 0 0 0 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 (5)描述电路功能。由真值表可知,电路的功能是,若输入A、B、 C 的值不一样,则输出 F 就为1; 否则, F 为0。可进一步总结为,这是一个三变量非一致电路。 3.4 常用组合逻辑电路的分析与应用 常用组合逻辑电路是指在实际工程应用中,经常使用的组合逻辑电路功能单元电路。这些电路完 全可以使用门电路自行设计实现,但由于在实际中频繁使用,器件生产厂家把这些功能单元电路制作成 标准集成电路器件供电路设计人员选择使用。 常用组合逻辑电路主要包括二进制运算电路、编码器、译码器、数据选择器、数据分配器及数值比较 器等,本节讨论这些功能单元电路的原理、器件及应用。 在讲解具体器件之前有一点需要说明,本书主要讲解这些常用器件的基本原理,以及通过查阅手册 了解集成逻辑器件功能的一般方法,集成逻辑器件种类繁多不可能一一讲解,读者应该培养自行查阅器 件手册学习新器件的能力。 4.二进制加法器 3.1 数字计算机能进行各种信息处理,最常用的是各种算术运算,二进制加法是最基本的算术运算。实 现二进制加法运算的逻辑电路,通常称为加法器。下面围绕加法器的设计进行较为详细的讨论,主要包 括半加器、全加器、串行进位的4位二进制并行加法器及先行进位的4位二进制并行加法器。 103 1. 半加器 对两个1位二进制数进行算术加法运算,求得和及进位的逻辑电路, 称为半加器。 1)半加器模型 按照组合逻辑电路设计方法,首先给出它的外部模型,如图3-19 所示。图3半加器模型 -19 图3-19 中,A、 B 分别为两个1位二进制数输入;SH、CH 分别为加法 运算产生的本位和及向高位的进位。根据半加器的功能要求,可列真值表如表3-6所示。 表3- 6 半加器的真值表 A B SH CH 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 由真值表可写出函数表达式:SH=..B;CH=AB 。 2)用集成逻辑门电路实现 AB+A .. (1)直接用与、或、非门实现半加器。其实现方法比较简单,就是用门电路直接替换函数表达式中 的逻辑关系。 (2)直接用与非门实现半加器。需要将函数表达式直接变换为与非-与非形式,并用与非门实现。 AB+AB..=A..B=..B;CH=AB 。读者可自行设计电路。 SH=..AB·A.. (3)用异或门实现半加器。由于该函数中明显包含了异或关系,因此函数表达式可变换为如下比 较简单的形式:SH=AB..+A..CH=AB 。电路实现如图320 所示。 B=A..B; (4)用无反变量输入的与非门实现半加器。观察发现,CH=AB 表达式中必须要用到与非项AB,同 时..B、A..因此,多输出布尔函数可以共用与非项AB,函数表达式可以变换为 AB=AB·B=AB·A, SH =.. B =AB·B·AB·A;CH AB +A.. B +AB· A =AB·=AB =AB 由函数表达式可以看出,该表达式不仅不用非门,而且与非门个数最少。实际应用中,这种表达式 是用与非门实现无反变量输入的常用方式。电路实现如图3-21 所示。 图3-20 基于自选门电路实现的半加器图3-21 基于与非门实现的半加器 104 2. 全加器 对两个一位二进制数进行算术加法运算,并考虑低位进位,相当于3个一位二进制数相加,得到和 及进位的逻辑电路,称为全加器。 1)全加器模型 全加器外部模型如图3-22 所示。 图3-22 中,Ai 和Bi 分别为两个一位二进制数的输入,Ci-1为低位进 图3-22 全加器模型位输入,Si 和Ci 分别为加法运算产生的本位和及向高位的进位。根据功 能要求可列真值表如表3-7所示。 表3- 7 全加器的真值表 Ai Bi Ci- 1 Si Ci 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 由真值表写出函数表达式:Si= Σm(1,2,4,7);Ci= Σm(3,5,6,7) 。 2)用集成逻辑门电路实现全加 器 画出Si 和Ci 的卡诺图,如图3-23 所示 。 由卡诺图可得 Si = AiBiCi-1+AiBiCi-1+AiBiCi-1+AiBiCi-1 Ci = AiBi +AiCi-1+BiCi (1)直接用与、或、非门电路实现全加器。从全的函数表达式中可以看到,选用与、或、非门直 接实现全加器,需要用到3个非门、3个两输入与门、4个三输入与门、1个三输入或门、1个四输入或门, 共需12 个门电路,读者可以自行设计。加器(1) 图3-23 全加器的卡诺图 (2)直接用与非门、或非门、与或非门实现全加器。由组合逻辑电路的门电路实现可以看出,用不 同的逻辑器件实现布尔函数的关键是函数形式的变换。用与非门、或非门、与或非门实现全加器,首先 要把布尔函数变换为与非-与非、或非-或非、与或非表达式,然后用不同的逻辑器件替换布尔函数中的 逻辑关系,即可形成相应的逻辑电路。这些电路实现方法是组合逻辑电路实现必须要掌握的基本的方 法,作为练习由读者自行设计这部分电路。 (3)用半加器实现全加器。如果将全加器Ai+Bi+Ci-1看成两个半加器,则其计算表达式可以表 105 示为半加器(Ai+Bi), 与半加器(Ai+Bi)+Ci-1的加法运算。 第一个半加器(Ai+Bi)表达式可以表示为SiH=Ai..Bi;CiH=AiBi。 第二个半加器实现(SiH+Ci-1), 表达式为Si=SiH..Ci-1;Ci=CiH+SiHCi-1。 电路实现如图3-24 所示。图中用两个异或门实现的半加器实现了全加器电路。 如果将上面表达式中的异或关系都用与非门实现,则可得到另一种半加器实现的全加器: SiH =AiBi ·Bi ·AiBi ·Ai;CiH =AiBi; Si=SiHCi-1·Ci-1·SiHCi-1·SiH;Ci=CiH·SiHCi-1 其电路实现如图3-25 所示。这实际上是一种用与非门实现的全加器方案。 图3-24 半加器实现的全加器(异或门) 图3-25 半加器实现的全加器(与非门) 3. 串行进位的4位二进制并行加法器 对两个 n 位二进制数进行算术加法运算,并考虑最低位进位,得到和及最高位进位的逻辑电路,称 为二进制加法器。计算机的算术运算单元就是加法器。由于二进制加法器的两个 n 位二进制数和最低 位进位同时输入,和及最高位进位也同时产生,因此也称为二进制并行加法器。 按照进位方式和电路结构的不同,二进制并行加法器可分为行波进位(或串行进位)的二进制并行 加法器和先行进位(或并行进位)的二进制并行加法器两种。 1)行波进位的二进制并行加法器 行波进位的二进制并行加法器的逻辑框图如图3-26 所示。 将 n 位二进制数加法器看成由 n 个全加器的简单连接而成,只要把各位全加器串联起来,低位全加 器的进位输出连到相邻的高位全加器的进位输入,即可构成行波进位的 n 位二进制并行加法器。其函 数表达式为各个全加器的简单组合,输入为An ~A1、Bn ~B1、最低位进位C0,输出为Sn ~S1、最高位 进位Cn 。各个全加器的函数表达式如下: S1=A1..B1..C0,C1=A1B1+ (A1..B1)C0 . Si=Ai ..Bi ..Ci-1,Ci=AiBi+ (Ai ..Bi)Ci-1 . Sn =An ..Bn ..Cn-1,Cn =AnBn + (An ..Bn )Cn-1 106 图3-26 行波进位的二进制并行加法器 由函数表达式可见,这样构成的加法器,两个 n 位二进制数An 到A1、Bn 到B1 和最低位进位C0 是同时输入的,加法运算结果Sn ~S1、最高位进位Cn 也是同时产生的,但其“正确”结果产生的时间并 不一致,每一位全加器的结果依赖于其低位全加器进位信号的时间延迟。 行波进位的二进制并行加法器的进位链是由低位向高位逐级传递的,好像行波一样。正确的高位 和及进位,需要等低位的进位形成后才能确定。如做手算加法那样,要从低位逐级求出进位,最后才能 求得高位的和及进位。因此,这种加法器进位是串行的,形成进位的速度很慢,加法器的速度受进位传 递时间的限制。 若每级全加器形成进位的延时为2tpd,则在最坏情况下,从最低位全加器的输入产生最高位进位 Cn 需要时间为2tpd。当位数 n 增大时,完成一次加法所需时间也随之增加。在速度要求不高的场合, 这是一种快速构成(n) 加法器的方法。在实际的计算机系统中,采用的是速度较快的先行进位二进制并行 加法器。 2)先行进位的二进制并行加法器 为了提高加法速度,在逻辑设计上采用先行进位的方法,即每位二进制加法的进位是同时产生的, 不需要等到低位的进位送来后才形成。从全加器进位函数表达式Ci =AiBi +(Ai ..Bi )Ci-1可以看 出,每个高位进位输出都依赖于低位进位输入,要想使各个进位同时产生,必须消除这种依赖关系。 分析进位函数表达式Ci=AiBi+(Ai..Bi)Ci-1可以知道,产生进位有两种可能。 (1)本位产生进位:当AiBi=11 时,进位Ci=1,它只与本位的输入Ai、Bi 有关,与低位来的进位 Ci-1无关。 (2)低位进位Ci-1向高位传递:当Ai..Bi=1时,低位进位信号Ci-1=1就会向高位传递,即Ci= Ci-1=1。令 Gi=AiBi,Pi=Ai..Bi 其中,Gi 为第 i 位的进位生成项,Pi 为进位传递条件,则Ci =AiBi +(Ai ..Bi)Ci-1=Gi +PiCi-1,进 而可以把Si 写成Si=Pi..Ci-。 为便于讲解,这里只以4位全(1) 加器为例,由这两个公式写出各位全加器的表达式: S1=P1..C0,C1=G1+P1C0 S2=P2..C1,C2=G2+P2C1 S3=P3..C2,C3=G3+P3C2 107 S4=P4..C3,C4=G4+P4C3 从上面表达式中可以看出,各个全加器之间仍然存在进位依赖关系,为了消除这种依赖关系,将上 面表达式中的每一级Ci-1的表达式代入上一级Ci 表达式中,可以得到 S1=P1..C0,C1=G1+P1C0 S2=P2..C1,C2=G2+P2C1=G2+P2G1+P2P1C0 S3=P3..C2,C3=G3+P3C2=G3+P3G2+P3P2G1+P3P2P1C0 S4=P4..C3,C4=G4+P4C3=G4+P4G3+P4P3G2+P4P3P2G1+P4P3P2P1C0 在上面表达式中,各个全加器的进位Ci 不再依赖于低位的进位,各级Ci 变成了Gi 到G1、Pi 到 P1、C0 的函数。其中,C0 与Ai、Bi 同时输入,Gi 到G1、Pi 到P1 是Ai 与Bi 的函数也同时产生,则理 论上Ci 到C1 会同时产生,进而Si 到S1 也会同时产生,如此即实现了先行进位二进制并行加法器。 图3-27 给出了先行进位的二进制并行加法器的逻辑图。由图可见,利用先行进位方法,各位进位 都只经过三级门延时(约4tpd,假定异或门延时为2tpd), 而形成各位和Si 需经四级门延时(约6tpd), 即 先形成进位,再形成加法的和。 图3-27 先行进位的二进制并行加法器 显然,进位传递时间的节省是以逻辑电路的复杂性为代价的。随着位数的增加,所需电路元件也迅 速增加,而且门电路的输入端数目也会增大。因此,当位数较多时,通常采用折中的办法,即将字长 n 位 分为若干组。例如,一个16 位并行加法器,可分为4组,每组4位。每组内采用先行进位,组间采用串 行进位,这样比较节省器件。 108 4. 先行进位的4位二进制并行加法器 4位二进制并行加法器是一种典型的中规模集成电路(MSI)逻辑部件,在标准TTL 系列中,4位二 进制并行加法器器件型号有7483 、74283 、74181,其中74283 器件引脚排列如图3-28(a)所示,其原理图 符号如图3-28(b)所示。 图3-28 74283 的引脚排列和原理图符号 (a)引脚排列;(b)原理图符号 在TTL 系列中还有专门的先行进位器件,如7482 、74182 等,利用这些器件,可以构成16 、64 位等 n 位并行进位加法器,在此不再赘述。 4位二进制并行加法器不仅用于实现二进制算术加法运算,也可以用它们实现与加法相关的逻辑 电路。下面举例说明4位二进制并行加法器的应用。 例3- 5 用4位二进制并行加法器设计一个4位二进制加法/减法器。 解:加法器只能做加法运算,用加法器设计加法/减法器,可以使用补码运算规则[A±B]补= [A]补+[±B]补,将减法算术运算变换为加法运算,但需要计算负数的补码。 设 A 和 B 分别为4位二进制数,并令 A =a4a3a2a1,B=b4b3b2b1,其加减运算通过选择变量 M 加以控制,当 M =0时,执行A+ B 运算;当 M =1时,执行[A]补+[-B]补运算。 根据设计要求,加法运算时加 B 的原码,并使进位输入C0=0;减法运算时,取 B 的反码,并使 C0=1,即加 B 的补码。上述逻辑功能可用图3-29 表示。 由图3-29 可以看出,4位二进制数 A 直接加到全加器输入端,而4位二进制数 B 需求补后,同时 也加到并行加法器的进位输入端。 求补运算利用了正数补码是自身、负数补码求反加1的运算规则。加法时 M =0, B 不取反不加1 (C0= M =0); 减法时 M =1, B 与选择变量 M 进行异或运算实现取反功能,同时末尾加1(C0= M =1)。 4.编码器 3.2 在数字系统中,常需将有特定意义的多个不同的信号,编码成相应的二进制编码,实现编码的电路 称为编码器(encoder)。 n 位二进制编码器最多可以对2n 个输入信号进行编码。 图3-30 为3位二进制编码器的外部模型。 8个信号输入端:I0~I7,用于输入不同物理含义的8个信号I0~I7(物理含义可由用户定义)。 3个编码输出端:A0~A2,用于输出8个输入信号对应的二进制编码A0~A2。 109 图3-29 例3-5的原理图 图3-30 编码器的外部模型 1. 普通编码器的基本原理 普通编码器的基本功能是,在正常情况下,8个输入信号中只有一个输入信号为1,其余输入信号为 0,输出二进制编码对应于该信号的编号。其功能表如表3-8所示。 表3-88-3线编码器功能表 I0 I1 I2 I3 I4 I5 I6 I7 A2 A1 A0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 1 1 1 1 按照功能表,可以得到二进制输出编码A0~A2 的布尔函数表达式: A2=I4+I5+I6+I7,A1=I2+I3+I6+I7,A0=I1+I3+I5+I7 110 根据编码器的函数表达式,读者很容易设计自己的编码器电路。 2. 优先编码器原理 实际电路中,不能保证8个输入信号中只有一个输入信号为1,当多个输入信号都为1时,将产生编 码混乱,为了避免这种情况的发生,需要为输入信号设置优先级,这种编码器称为优先编码器(priorityencoder)。对于优先编码器,假设优先级从I7 到I0 依次降低,则其功能表应如表3-9所示。 表3-98-3线优先编码器的功能表 I0 I1 I2 I3 I4 I5 I6 I7 A2 A1 A0 1 0 0 0 0 0 0 0 0 0 0 × 1 0 0 0 0 0 0 0 0 1 × × 1 0 0 0 0 0 0 1 0 × × × 1 0 0 0 0 0 1 1 × × × × 1 0 0 0 1 0 0 × × × × × 1 0 0 1 0 1 × × × × × × 1 0 1 1 0 × × × × × × × 1 1 1 1 功能表定义了对输入信号I进行编码输出的条件是I输入有效(为1), 且比Ii 优先级高的输入 信号都无效(为0), 比Ii 优先级低(i) 的输入信号可任意。按照(i) 功能表,可以得到编码输出A0~A2 的布尔 函数表达式: A2=I4I5I6I7+I5I6I7+I6I7+I7 A1=I2I3I4I5I6I7+I3I4I5I6I7+I6I7+I7 A0=I1I2I3I4I5I6I7+I3I4I5I6I7+I5I6I7+I7 化简后可得 A2=I4+I5+I6+I7 A1=I2I4I5+I3I4I5+I6+I7 A0=I1I2I4I6+I3I4I6+I5I6+I7 根据编码器的函数表达式,可以很容易地设计编码器电路。 为了方便应用,器件生产厂商提供了常用的编码器集成电路芯片,如8-3线优先编码器74148 和二 十进制优先编码器74147 等。 3.8-3线优先编码器74148 74148 是一个8-3线优先编码器,其引脚排列和原理图符号如图3-31(a)、图3-31(b)所示。 74148 与优先编码器基本原理相同,不同之处如下。 (1)采用了反变量输入输出的逻辑规定,图中输入输出变量上的“ 是表示反变量有效,并不表 示非运算,这种表示方法在其他集成电路符号中也非常常见。只(”) (2)增加了反变量有效的使能端。 (3)增加了反变量有效的扩展输出,用于扩展多于8输入的信号编码 。 74148 的输入输出端如下 。