5数字设计:原理与实践(第5版)

组合逻辑实践

常用电路

译码器编码器多路选择器比较器

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第5章 组合逻辑实践(常用电路)

一、导读

1.1 本章学习目标

掌握译码器(Decoder)的工作原理、典型结构和应用场景

理解编码器(Encoder)和优先编码器(Priority Encoder)的区别与设计方法

熟练掌握多路选择器(Multiplexer)的功能及其在逻辑实现中的灵活应用

掌握比较器(Comparator)的级联方法和多位比较器设计

了解加法器、三态缓冲器和总线结构的基本概念

理解常用中规模集成(MSI)组合逻辑模块的功能和使用方法

能够根据实际需求选择合适的标准模块并正确应用于系统设计中

1.2 为什么本章如此重要

在前一章中,我们学习了组合逻辑设计的理论方法——从真值表到卡诺图再到门级电路。但在实际的数字系统设计中,工程师很少从最基本的与门和或门开始搭建电路。相反,大量经过验证的标准功能模块(如译码器、编码器、多路选择器等)被广泛使用。这些模块就像数字设计中的"积木块",通过合理组合这些模块,可以高效地构建复杂的数字系统。

掌握这些标准模块的重要性体现在多个方面。首先,这些模块通常以集成电路的形式提供,具有经过验证的可靠性和一致性。其次,理解这些模块的内部结构有助于在系统级设计中做出正确的选择。再者,许多标准模块具有超出其基本功能的灵活应用方式——例如,多路选择器不仅可以用于数据选择,还可以用来实现任意逻辑函数。

从系统设计的角度来看,这些标准模块对应着数字系统中常见的功能需求。地址译码需要译码器,键盘输入需要编码器,数据路由需要多路选择器,数值比较需要比较器。理解每种模块的特点和限制,能够帮助你在面对具体设计问题时快速找到合适的解决方案。

此外,这些标准模块也是学习更复杂数字系统的基础。在计算机体系结构中,CPU的指令译码器、ALU中的数据通路、总线仲裁逻辑等核心组件,都是基于本章介绍的基本模块构建的。深入理解这些模块的工作原理,将为后续学习计算机组成和嵌入式系统打下坚实基础。

1.3 核心问题引导

译码器和多路选择器之间有什么对偶关系?能否用译码器实现多路选择器的功能?

为什么优先编码器比普通编码器更实用?在什么场景下多个输入可能同时有效?

如何用2选1多路选择器实现任意二变量逻辑函数?如何用4选1多路选择器实现任意三变量逻辑函数?

比较器的级联方式是什么?如何用多个四位比较器构建一个十六位比较器?

三态缓冲器在总线结构中起什么作用?为什么普通逻辑门的输出不能直接并联?

什么是使能端(Enable)?使能端如何扩展标准模块的功能?

在实际设计中,选择使用标准模块(如74系列IC)与使用门级实现相比,各有什么优缺点?


二、核心概念详解

2.1 译码器

译码器(Decoder)是将n位二进制输入转换为2^n个输出之一激活的组合逻辑电路。一个n-to-2^n译码器有n个输入、2^n个输出和可能的使能端。对于每一个输入编码,恰好有一个输出为有效状态(通常为低电平有效),其余输出为无效状态。

以3-to-8译码器(如74HC138)为例,三个输入A2A1A0可以表示0至7共八个编码,对应八个输出Y0至Y7。当输入为101(十进制5)时,Y5输出为低电平(有效),其余输出为高电平(无效)。使能端(通常有三个:G1、G2A'、G2B')用于控制译码器的工作状态,只有当使能条件满足时,译码器才正常工作。

译码器的应用非常广泛。在存储器系统中,译码器用于地址译码,将CPU发出的地址信号转换为选中特定存储单元的选通信号。在指令执行中,译码器用于指令译码,将操作码转换为对应的控制信号。在显示驱动中,BCD-to-七段译码器将BCD码转换为七段显示器的段控制信号。

译码器还可以用作逻辑函数发生器。由于译码器的每个输出对应一个最小项,通过将所需最小项对应的输出用与门组合,可以实现任意组合逻辑函数。这种方法虽然不一定是最经济的实现方式,但具有通用性和模块化的优势。

2.2 编码器与优先编码器

编码器(Encoder)执行与译码器相反的功能:将2^n个输入中的一个有效信号转换为n位二进制编码输出。一个基本的8-to-3编码器有8个输入和3个输出,当第i个输入为有效时,输出为i的三位二进制编码。

基本编码器有一个重要限制:它假设任何时刻只有一个输入是有效的。如果多个输入同时有效,基本编码器的输出将是不确定的(多个编码的"或"结果),这通常不是期望的行为。

优先编码器(Priority Encoder)解决了这个问题。当多个输入同时有效时,优先编码器只对优先级最高的输入进行编码。通常,编号较大的输入具有较高的优先级。例如,在8-to-3优先编码器(如74HC148)中,如果I5和I7同时为低电平(有效),输出将是7的编码(111),因为I7的优先级高于I5。

优先编码器还有一个重要的输出——组信号端(Group Signal)。当至少有一个输入有效时,组信号端为有效状态,表示当前输出是有效的编码。当所有输入都无效时,组信号端为无效状态。组信号端可以用于级联多个优先编码器以扩展输入数量。

优先编码器的典型应用包括键盘扫描电路(多个按键可能同时按下)、中断优先级管理(多个中断源需要确定优先级)和数据压缩(将稀疏的独热编码转换为密集的二进制编码)。

2.3 多路选择器

多路选择器(Multiplexer,MUX)根据选择信号从多个数据输入中选择一个作为输出。一个2^n-to-1多路选择器有2^n个数据输入、n个选择输入和1个输出。选择输入的二进制值决定了哪个数据输入被传送到输出端。

2选1多路选择器是最基本的形式,有一个选择输入S、两个数据输入D0和D1。当S=0时,输出Y=D0;当S=1时,输出Y=D1。其逻辑表达式为Y = S'D0 + SD1。

多路选择器最重要的特性之一是它可以用来实现任意逻辑函数。一个n变量逻辑函数可以用2^(n-1)选1的多路选择器实现,将n-1个变量连接到选择输入端,数据输入端根据真值表设置0或1。更灵活的方法是使用2^n选1的多路选择器,将n个变量全部连接到选择端,数据输入直接对应真值表的输出列。

多路选择器还可以用于数据格式转换。例如,将并行数据转换为串行数据:使用一个8选1 MUX,将8位并行数据分别接到8个数据输入端,然后用一个三位计数器的输出作为选择信号,依次读出每一位,实现并-串转换。

使能端的存在使得多路选择器可以级联使用。例如,两个4选1 MUX加一个2选1 MUX可以构成一个8选1 MUX。更大的MUX可以通过多级级联来构建。

2.4 比较器

比较器(Comparator)用于比较两个二进制数的大小关系。一位比较器比较两个一位二进制数A和B,输出三个信号:A>B(A大于B)、A=B(A等于B)和A<B(A小于B)。

多位比较器通过从最高位到最低位逐位比较来确定两个数的大小关系。两个n位二进制数A和B的比较规则是:首先比较最高位,如果不相等,则最高位大的数更大;如果最高位相等,则比较次高位,以此类推。只有当所有位都相等时,两个数才相等。

级联比较器(如74HC85四位比较器)具有级联输入端,可以方便地扩展为更多位的比较器。级联输入端接收来自低位的比较结果(A>B、A=B、A<B),与当前位的比较结果综合后产生输出。将多个四位比较器级联,可以构建八位、十二位、十六位甚至更多位的比较器。

比较器在数字系统中有广泛的应用:算术逻辑单元(ALU)中的条件判断、排序电路中的大小比较、地址匹配检测、以及模数转换器中的逐次逼近逻辑等。


三、深入分析与讨论

3.1 多路选择器实现逻辑函数的系统方法

多路选择器实现逻辑函数是一种系统化的方法,特别适合于变量较多的函数。基本思路是:将函数的部分变量连接到MUX的选择输入端,剩余变量的函数关系体现在数据输入端。

以用8选1 MUX实现四变量函数F(A,B,C,D)为例:将A、B、C连接到选择输入端S2、S1、S0,则每个数据输入Di对应于A、B、C的一个特定组合下F关于D的函数。对于每个Di,它可能是0、1、D或D'。这种方法将组合逻辑设计问题转化为数据输入端的函数确定问题,系统性强且易于扩展。

3.2 总线结构与三态逻辑

在数字系统中,多个设备经常需要共享同一组信号线(总线)。普通逻辑门的输出不能直接并联,因为如果两个门输出不同的电平,将产生短路电流,可能损坏器件。

三态缓冲器(Tri-state Buffer)解决了这个问题。三态缓冲器除了数据输入和输出外,还有一个使能端。当使能有效时,输出正常反映输入值(高电平或低电平);当使能无效时,输出进入高阻抗状态(High-Z),相当于输出端与总线断开连接。

通过控制各个三态缓冲器的使能信号,可以确保任何时刻只有一个设备驱动总线,其余设备处于高阻抗状态。这种机制实现了多个设备对共享资源的安全分时复用。总线结构在计算机系统的地址总线、数据总线和控制总线中被广泛使用。


四、实践案例

4.1 基于译码器的地址译码系统设计

在一个简单的微处理器系统中,CPU需要访问四块外设芯片,每块芯片占用256字节的地址空间。地址总线为16位(A15至A0),地址范围为0000H至FFFFH。使用2-to-4译码器(如74HC139)和必要的门电路设计地址译码逻辑。

设计方案:将地址高位A15和A14连接到译码器的两个输入端,译码器的四个输出分别连接到四块外设芯片的片选端。当A15A14=00时,选中第一块芯片(地址范围0000H-00FFH);当A15A14=01时,选中第二块芯片(地址范围4000H-40FFH),以此类推。地址低位A7至A0用于芯片内部的单元选择。

4.2 使用多路选择器实现数据路由

在一个数据采集系统中,需要周期性地监测八个传感器的数据。八个传感器的模拟输出经过各自的ADC转换为8位数字量。使用一个8选1多路选择器(如74HC151)将八路数据选择后送入共用的数据处理单元。

三位计数器(如74HC193)的输出作为MUX的选择信号,在时钟驱动下循环计数0至7,依次选通各路传感器数据。这样,八个传感器的数据被时分复用为一路串行数据流,后续的处理单元只需处理一路输入。这种设计节省了数据处理资源,是多路数据采集系统中的经典方案。


五、常见误区与注意事项

误区一:译码器的输出总是高电平有效。 许多常用的译码器IC(如74HC138)的输出是低电平有效的。这种设计选择与TTL/CMOS电路的电气特性有关——输出低电平时的灌电流能力通常大于输出高电平时的拉电流能力,低电平有效可以提供更大的扇出。在使用时必须注意有效电平,避免逻辑极性错误。

误区二:多路选择器的数据输入只能接0或1。 多路选择器的数据输入可以接任意信号,包括其他逻辑变量或其反变量。这正是MUX能够用来实现逻辑函数的关键。数据输入端接0、1、变量或变量的反,可以灵活地实现各种逻辑功能。

误区三:多个三态门可以同时使能。 三态总线的基本规则是任何时刻最多只有一个驱动源使能。如果两个三态门同时使能且输出不同的电平,将产生从电源到地的低阻通路,导致大电流流过,可能损坏器件。总线冲突是数字系统调试中的常见故障。

误区四:比较器只能比较无符号数。 基本的二进制比较器确实按无符号数规则比较。但通过适当的预处理(如对有符号数取补码后比较,或将符号位单独处理),比较器也可以用于有符号数的比较。某些专用比较器IC直接支持有符号数比较模式。


六、本章小结

本章介绍了四种重要的组合逻辑实用电路模块。译码器将二进制编码转换为对应的独热输出,广泛用于地址译码和显示驱动。编码器执行逆转换,优先编码器能正确处理多个输入同时有效的情况。多路选择器是极其灵活的模块,不仅用于数据选择,还可以实现任意逻辑函数。比较器提供数值大小判断功能,通过级联可以处理任意位宽。三态缓冲器使能总线结构,实现多设备共享信号线。这些标准模块是数字系统设计的基础构件,熟练掌握它们的功能特性和使用方法将大大提高设计效率。


七、思考题与练习

使用3-to-8译码器和必要的门电路实现三变量逻辑函数F(A,B,C) = Sigma m(1,3,5,6)。画出完整的电路连接图。

设计一个将十进制数转换为余3码的编码器。列出真值表,写出每个输出的最简逻辑表达式。

使用4选1多路选择器实现四变量逻辑函数F(A,B,C,D) = Sigma m(0,1,5,7,8,10,12,15)。确定选择输入和数据输入的连接方式。

使用两个8-to-3优先编码器(74HC148)级联构成一个16-to-4优先编码器。画出级联电路图,并说明当输入I10和I3同时有效时,编码器的输出是什么。

使用两个四位比较器(74HC85)级联构成一个八位比较器。说明级联连接方式,并确定当A=10110011、B=10101100时各级比较器的输出。

解释三态缓冲器的高阻抗状态在电气上意味着什么。为什么高阻抗状态不同于逻辑高电平?

设计一个电路,使用一个8选1 MUX和一个反相器实现一个三输入三输出的组合逻辑电路。三个输出分别为:F1 = AB + BC, F2 = A'B + AC, F3 = AB'C'。

查阅74HC151(8选1 MUX)和74HC153(双4选1 MUX)的数据手册,比较两者的功能特点和应用场景。说明在什么情况下你会选择153而不是151。

5/8组合逻辑
0%