第5章 组合逻辑电路 内容提要 本章将以中规模集成电路(MSI)为主,介绍几种常用的组合逻辑电路芯片的逻辑功 能与用法,其中包括译码器、编码器、数据选择器、数据分配器、数值比较器、算术运算器、 奇偶校验器等,同时介绍基于中规模集成电路的数字电路的分析与设计方法。 5.1 译 码 器 关键词: . 译码:把特定含义的输入代码翻译成对应的输出信号。 . 译码器(Decoder):实现译码功能的逻辑电路。 . 二进制译码器(BinaryDecoder):输入是一组二进制代码,输出是一组高、低电平 信号的译码器电路。 . 二-十进制译码器(BinaryDecoder):输入是BCD码中的10个代码之一,输出是 10个高低电平信号的译码器。 . 半导体数码管:用发光二极管LED组成的字形来显示数字的器件,7个条形发光 二极管排列成“8”字形,也称为七段数码管。 . 七段字形译码器:可以实现将BCD码翻译成字形码的组合逻辑电路。 译码是要把特定含义的输入代码翻译成对应的输出信号。实现译码功能的逻辑电 路称为译码器(decoder)。译码器是一种多输入、多输出的常用组合逻辑电路,其输入与 输出之间存在一一对应的映射关系。译码器有许多不同类型和不同型号的中规模集成 电路产品,常用的有二进制译码器、二-十进制译码器、七段字形码译码器等。 5.1.1 二进制译码器 二进制译码器(binarydecoder)的输入是一组二进制代码,输出是一组高、低电平信号。 若译码器有n个输入端,则最多有2n 个输出端,这种译码器被称为n线-2n 线译码器。 第5章视频 ◆ 第 5 章 组合逻辑电路105 最简单的译码器为2线-4线译码器,1为该译码器的真值表和电路,E为 图5.其中, 译码器的使能控制端。 .当E=1时,所有与门禁止,电路输出Y0~Y3 均为0。 .当E=0时,所有与门打开,可以将输入信号B、A组成的编码(B为高位,A为低 位)翻译成信号Y0~Y3 输出,从而实现译码的功能。 图5.基于与门的2线4线译码器电路 1 二进制译码器有多种集成电路产品,如双2线-4线译码器74HC139 、3线-8线译码 器74HC138,4线-其逻辑图如图5. 16 线译码器74HC154 等,2所示。 图5.常用的三种二进制译码器逻辑图 2 需要说明的是,集成电路芯片的逻辑图不同于引脚图,逻辑图是为了绘制原理图而 设计的符号图,逻辑图的符号通常用矩形框及其附加引脚表示集成电路芯片,引脚是按 逻辑功能分类的需要来绘制的,通常将输入引脚绘制在矩形框的左侧,输出引脚绘制在 矩形框的右侧,在引脚上方有引脚编号,在矩形框内与引脚对应的位置有引脚名称,若引 脚信号为低电平有效,则在引脚与矩形框连接处用一个圆圈表示。图5. 2给出了三种常 用的译码器集成芯片: .74HC139 由两个2线-4线译码器构成,左侧的E、B、A为输入引脚,右侧的Y0~ Y3为输出引脚,其中,引脚E为使能(Enable)输入信号,低电平有效,引脚B和A 是译码输入端,引脚Y0~Y3是译码输出端,全是低电平有效。 .74HC138 为3线-8线译码器,其左侧引脚E1、E2、E3、C、B、A为输入脚,右侧的Y0~ ◆ 106 数字逻辑与数字系统设计——基于Proteus VSM 和Verilog HDL (第 2 版) Y7为输出引脚,其中,引脚E、E2和E3为使能输入端,E1是高电平有效,E2和E3是低 电平有效,C、B、A为译码输入(1) 端,引脚Y0~Y7是译码输出端,都是低电平有效。 .74HC154 为4线-16 线译码器,其左侧引脚E1、E2、D、C、B、A为输入脚,右侧的 0~15 为输出引脚,其中,引脚E1、E2为使能输入端,低电平有效,D、C、B、A为译 码输入端,引脚0~15 是译码输出端,都是低电平有效。 集成电路芯片的封装形式不同,其引脚的编号规则也不同,对于DIP(DualIn-line Package,双列直插式)封装,引脚分成左右两列,引脚编号为左上角是1号,左侧从上到下、 右侧从下往上顺序编号。附录D列出了74 系列部分中规模集成电路常用芯片的引脚图。 需要说明的是,不同的原理图绘制工具,其逻辑图中的引脚名称不一定相同,但其含 义是相同的。逻辑图符号中常常省略了芯片的电源和地引脚。在绘制原理图时,可以对 逻辑图符号做旋转或镜像变动。 下面以74HC138 为例说明译码器设计原理及使用方法,理解了74HC138,就很容易 掌握另外两种译码器的用法。74HC138 的功能表如表5. 1所示。 表5. 1 74HC138 的功能表 输入输出 E1 E2+E3 C B A Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 0 × × × × 1 1 1 1 1 1 1 1 × 1 × × × 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 1 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 1 1 0 0 1 1 1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 由功能表可见,只有当使能输入E1 为高电平,E2 和E3 均为低电平时,译码器才可正 常工作。在译码器正常工作的情况下,其输出函数如下。 Y0=CBA, Y1=CBA, Y2=CBA, Y3=CBA (1) 5.Y4=CBA,Y5=CBA,Y6=CBA,Y7=CBA 通过以上对74HC138 的分析和式(1)可见,其输出Y0~Y7分别对应着三个逻辑变 5. 量C、B、A的所有最小项(其中,C为高位、A为低位)的非。即 Yi=mi(mi为C、B、A组成的最小项) (5.74HC138 也可以用如下的VerilogHDL 描述: 2) 第◆5 章 组合逻辑电路1 07 74HC138 的Verilog HDL 程序 module decoder138(e1,e2,e3,c,b,a,Y); input e1,e2,e3,c,b,a; //输入端口:e1,e2,e3 为使能输入,c,b,a 为需译码的三位二进制数输入 output[0:7]Y; //8 个输出端口,正常工作时只有一个端口输出有效的低电平,其他均为高电平 reg[0:7]Y; //寄存器变量说明,在过程中赋值的变量必须说明成reg 型 always @(e1,e2,e3,c,b,a) begin //过程语句开始,当敏感信号有变化,过程就执行 if((e1==1)&&(e2|e3==0)) //如果使能输入信号有效 case({c,b,a}) //case 语句开始,根据需译码的二进制数输入值 3'b000:Y=8'b01111111; //若为0,则译码器输出Y[0]有效 3'b001:Y=8'b10111111; //若为1,则译码器输出Y[1]有效 3'b010:Y=8'b11011111; //若为2,则译码器输出Y[2]有效 3'b011:Y=8'b11101111; //若为3,则译码器输出Y[3]有效 3'b100:Y=8'b11110111; //若为4,则译码器输出Y[4]有效 3'b101:Y=8'b11111011; //若为5,则译码器输出Y[5]有效 3'b110:Y=8'b11111101; //若为6,则译码器输出Y[6]有效 3'b111:Y=8'b11111110; //若为7,则译码器输出Y[7]有效 default:Y=8'b11111111; //否则,译码器无有效信号输出 endcase //case 语句结束 else Y=8'b11111111; //输入使能信号无效,译码器无有效信号输出 end //过程语句结束 endmodule 二进制译码器用得最多的是实现存储器地址空间或I/O 端口地址空间的分配,这将 在计算机组成原理及单片机技术等后续课程中应用,除此之外,还可以将译码器用到一 些其他组合电路中。回顾第4章,在例4.4设计一位全加器时,一位全加器的本位和F2 及向高位的进位F1 都是三个逻辑变量的部分最小项的或运算结果,因此有理由相信,通 过对二进制译码器74HC138的输出的合理应用,也可以实现一位全加器的功能。 由式(4.7)和式(4.8)可知,一位全加器的逻辑表达式如下。 一位全加器向高位的进位: F1 =ABC+ABC+ABC+ABC 一位全加器的本位和: F2 =ABC+ABC+ABC+ABC 以上两个逻辑表达式均是由A、B、C 组成的最小项表达式(A 为高位、C 为低位),而 74HC138的编码输入端C为高位、A 为低位。在图5.3中,用74HC138设计全加器时, 将全加器的输入C、B、A 与74HC138的编码输入端C、B、A 对接,因此需将上述两个表 达式变换为由C、B、A 组成的最小项表达式,然后利用式(5.2)对其进行如下变换: F1 =CBA+CBA+CBA+CBA=m6 +m5 +m3 +m7 =Y6 +Y5 +Y3 +Y7 =Y3Y5Y6Y7 F2 =CBA+CBA+CBA+CBA=m4 +m2 +m1 +m7 =Y4 +Y2 +Y1 +Y7 =Y1Y2Y4Y7 ◆ 108 数字逻辑与数字系统设计——基于Proteus VSM 和Verilog HDL (第 2 版) 由此可得用74HC138 和两个四输入的与非门实现的一位全加器的逻辑电路如 图5. 3所示。 图5.用74HC138 实现一位全加器 3 当需要4线-16 线译码器时,可利用74HC138 的使能输入端,实现对译码器功能的 扩展。图5.-16 线译码器的电路。 4为用两片74HC138 构成4线 图5.用两片74HC138 实现4线16 线译码器 4 其中: (1)第(片实现对输入编码0000~对应Y0~Y7), 2) ~ 1) 0111 译码( 第(片实现对10001111 译码(对应Y8~Y15 )。 (2)4线-16 线译码器输入的最高位D,控制第(1)片的使能输入E1(高电平有效), 同 时也控制第(2)片的使能输入E2(低电平有效)。 .如果D=0,则第(1)片译码器工作,而第(2)片译码器禁止。 .如果D=1,则第(1)片译码器禁止,而第(2)片译 码 器工作 。 5.2 二十进制译码器 1. 二-十进制译码器按输入、输出线数可称为4线-10 线译 码器,其输入是BCD 码的10 个代码之一,输出是10 个高低 电平信号。图5.图5.二十进制译码器 5为二-十进制译码器74HC42 的逻辑图, 5BCD 码从高位到低位依次由左侧的D、C、B、A4 个引脚输74HC42 的逻辑图 ◆ 第 5 章 组合逻辑电路109 入,译码信号从图中右侧的10个引脚输出,2所示。 低电平有效。其功能表如表5. 表5. 2 74HC42的功能表 输入输出 D C B A Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 1 1 1 1 1 1 0 1 0 0 1 1 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 0 5.3 半导体数码管和七段字形码译码器 1. 1.半导体数码管 半导体数码管是用发光二极管(LightEmitingDiode,LED)组成的字形来显示数 字,7个条形发光二极管排列成8字形,故称为七段数码管。显示时,通过编码驱动相应 的发光二极管发光实现0~9的数码显示。 根据发光二极管连接方式的不同,半导体数码管有共阴极和共阳极两种类型,其连 接方式及其在Prtu6所示。共阴极半导体数码管的7个发光 oesISIS中的逻辑图如图5. 二极管的阴极连接在一起形成公共端,由7个阳极接收字形码,在显示时,需要发光的二 极管的阳极为高电平,而公共端为低电平。共阳极半导体数码管的7个发光二极管的阳 极连接在一起形成公共端,由7个阴极接收字形码,显示时,需要发光二极管的阴极为低 电平,而公共端为高电平。由此可见,显示同一数码的字形码,对于共阴极和共阳极数码 管来说,是互为反码的。 图5.半导体七段数码管 6 ◆ 110 数字逻辑与数字系统设计——基于Proteus VSM 和Verilog HDL (第 2 版) 半导体数码管除了有共阴极和共阳极两种不同类型外,数码管的大小规格也是多种 多样的。小型数码管的每一个段可用一个发光二极管控制,相应的驱动电流也比较小, 而大型的数码管每一段可能由多个发光二极管串接而成,相应的驱动电流也要大些,不 同大小的数码管所需驱动发光的电压和电流是不同的,使用时需查看产品使用说明书设 计相应的驱动电路。此外,为了显示小数点,还有代表小数点的段,通常用字母h或dp 表示,这样就成了八段数码管。 2. 七段字形码译码器 数字系统中使用的是二进制数,利用半导体数码管显示时,需要提供相应的字形码, 这就需要有一个译码器,将BCD 码翻译成字形码。可以实现将BCD 码翻译成字形码的 组合逻辑电路称为七段字形码译码器。常用的共阴极数码管七段字形译码器有7448 和 74LS248 等,其逻辑图如图5. 7所示。而共阳极数码管七段字形译码器有7447 和 74LS247 等,其逻辑图如图5. 8所示。 图5.7 7448 、74LS图5.74LS247 逻辑图 248 逻辑图 8 7447 、 以74LS247 为例,其功能表如表5.应用时需注意的主要事项有以下几点。 3所示, (1)BCD 码从高位到低位依次由D、C、B、A4 个引脚输入,字形码高位到低位依次 从QG 、QF 、QE 、QD 、QC 、QB 、QA7 个引脚输出。 (2)74LS247 与74LS47 的差别仅在于对数字6和数字9的译码输出上,前者的字形 码比后者的多了一段,6多了a段,9多了d段,同样的差别也出现在74LS248 与 74LS48 中。 (3)测试输入LT(LampTest)的目的是检查数码管各段是否能正常工作。无论输 入D、C、B、A为何种状态,只要LT 端输入为0、BI 端输入为1,译码器输出均为低电平, 其驱动的数码管若正常,则应显示数字8, 3最后一行的功能。 对应表5. (4)灭灯输入BI(BlankingInput)是为了控制数码管显示的熄灭而设置的。只要 BI 端入为0,译码器的输出就均为高电平,3的倒数 从而使共阳极数码管熄灭。对应表5. 第3行功能。 (5)灭0输入RBI(Ripple-BlankingInput)是专为多位数字显示时,熄灭不需要显示 的0而设定的。该功能是在译码器工作情况下,如果RBI=0且DCBA=0000,则译码器 输出全为高电平,从而使共阳极数码管的0熄灭,3的倒数第二行功能。 对应表5. (6)灭0输出RBO(Ripple-BlankingOutput)与熄灭输入BI 共用一条引脚。RBO 是为了和灭0输入RBI 配合使用,可以实现多位数码显示的灭0控制。比如一个4位整 数显示,若只有个位的0是必需的,则高位的0不必显示。可将千位的RBI 接0,千位的 BRO 接百位的BRI,百位的RBO 接十位的RBI,个位的RBI 接1。 第◆5 章 组合逻辑电路1 11 表5.3 七段共阳数码管字形码译码器74LS247功能表 输 入输 出 LT RBI D C B A BI/RBO g f e d c b a 显示数码 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 1 × 0 0 0 1 1 1 1 1 1 0 0 1 1 1 × 0 0 1 0 1 0 1 0 0 1 0 0 2 1 × 0 0 1 1 1 0 1 1 0 0 0 0 3 1 × 0 1 0 0 1 0 0 1 1 0 0 1 4 1 × 0 1 0 1 1 0 0 1 0 0 1 0 5 1 × 0 1 1 0 1 0 0 0 0 0 1 0 6 1 × 0 1 1 1 1 1 1 1 1 0 0 0 7 1 × 1 0 0 0 1 0 0 0 0 0 0 0 8 1 × 1 0 0 1 1 0 0 1 0 0 0 0 9 × × × × × × 0 1 1 1 1 1 1 1 熄灭 1 0 0 0 0 0 0 1 1 1 1 1 1 1 灭0 0 × × × × × 1 0 0 0 0 0 0 0 8,测试 利用74LS247驱动共阴极数码管的显示电路在ProteusISIS环境下的仿真如图5.9 所示,由于灭灯输入BI和灭零输出RBO 共用一个端子,但同一时间两者只能有一个信 号有效,因此采用两个三态门U1和U2实现以上两个信号的切换。 . 当BI=0有效时,三态门U1打开,U2禁止,灭灯输入BI起作用,BRO='Z'不起 作用。 . 当BI=1无效时,三态门U1禁止,U2打开,灭零输出RBO 起作用。 图5.9给出了不同情况下七段字形译码器驱动数码管输出显示的结果,具体分析见 表5.4。 表5.4 七段字形译码器的灭灯和灭零过程 BI U1 U2 DCBA RBI 数码管RBO 图5.9(a) 0 打开禁止XXXX 1 全灭'Z' 图5.9(b) 1 禁止打开0000 1 “0” 1无效 图5.9(c) 1 禁止打开0000 0 全灭0有效 图5.9(d) 1 禁止打开0110 0 “6” 1无效 ◆ 112 数字逻辑与数字系统设计——基于Proteus VSM 和Verilog HDL (第 2 版) 图5.利用74LS248 驱动共阴极数码管的显示电路 9 图5.11 为利用7448 的灭零输入RBI 和灭零输出RBO 配合, 10 和图5.实现多位数 码管的灭零功能电路。 图5.10 为除前置零电路,最高位的RBI=0,同时高位的RBO 控制次高位的RBI, 这样: .最高位DCBA=0000,该数码管不显示,其灭零输出RBO=0。 .次高位DCBA=0101,该数码管正常显示“5其灭零输出RBO=1。,(”) .第三位DCBA=0110,该数码管正常显示“6其灭零输出RBO=1。,(”) .最低位DCBA=0000,由于其RBI=1,则该数码管显示“0”,同时其灭零输出 RBO=1。 图5.多位数码管的灭零电路除前置零 10 第◆5 章 组合逻辑电路1 13 图5.11为除尾部零电路,最低位的RBI=0,同时低位的RBO 控制次低位的RBI。 图5.11 多位数码管的灭零电路-除尾部零 5.2 编 码 器 关键词: . 编码:以文字、符号和数码等方式来表示某种信息的过程。 . 编码器(encoder):实现编码的数字电路称为编码器。 . 二进制编码器(binaryencoder):将表示信息的多个输入信号转换成对应的二进 制编码输出的组合逻辑电路,其输入端同时只允许有一个有效信号。 . 二进制优先编码器(binarypriorityencoder):允许输入端同时出现多个有效信 号,而输出只对优先级别最高的一个进行编码的编码器。 . 二-十进制优先编码器:将表示十进制数的10个输入信号转换成对应的BCD码 输出的组合逻辑电路。 编码是指用以文字、符号和数码等方式来表示某种信息的过程。在数字系统中,由 于数字设备只能处理二进制代码信息,因此对需要处理的其他信息要转换成符合一定规 则的二进制代码。实现编码的数字电路称为编码器(encoder)。常用的编码器通常是将 输入的每一个高或低电平信号编成一组对应的二进制代码或BCD 码,输出为二进制编 码的编码器被称为二进制编码器,输出为BCD码的编码器被称为二-十进制编码器。 5.2.1 二进制编码器 二进制编码器是常用编码器之一。由于n位二进制编码有2n 个取值组合,可以表示 2n 种信息,因此,二进制编码器的输入信号个数N 与输出二进制数位数n的关系满足 N≤2n,故通常编码器的输入端比输出端多。如一个输入信号个数为8的编码器,其输出 可以只有3位,因为23=8,从3位全0到3位全1正好8个编码,输入信号任一有效位都 有一个有效编码与之对应。 根据输入信号是否互斥,可将编码器分为输入互斥的编码器和优先级编码器。输入 互斥的编码器是指编码器在任何时刻只有一个输入信号有效,所以其输出的编码与输入 信号之间有唯一的对应关系。优先级编码器是指输入的有效信号可以有多个,但编码器 只对优先级别最高的一个信号进行编码。输入信号可以是低电平有效,也可以是高电平