bitGateLab Digital · 学习
中文(简体)
打开模拟器

学习 › 第 8 讲

多路复用器、译码器和编码器详解

阅读约 8 分钟 · bitGateLab 团队

中规模组合逻辑模块是搭建几乎任何数字系统的积木:多路复用器从多个数据中选出一个,多路分配器把一个数据送往某个目的地,译码器根据二进制数使唯一一条输出线有效,编码器则做相反的事。本文将介绍它们的表达式、真值表,以及每次考试都会出现的两种应用:用多路复用器实现逻辑函数,以及设计 7 段显示器的译码器。

多路复用器(MUX)

具有 2n 个数据输入的多路复用器(也叫数据选择器)有 n 个选择输入和一个输出。选择线上的二进制数指明哪一个数据输入被送到输出。最简单的是 2 选 1 MUX:

Y = S·I0 + S·I1

当 S = 0 时,输出等于 I0;当 S = 1 时,输出等于 I1。4 选 1 MUX 使用两条选择线 S1 S0,每个数据输入都与对应的选择最小项相乘:

Y = S1·S0·I0 + S1·S0·I1 + S1·S0·I2 + S1·S0·I3

S1S0Y
00I0
01I1
10I2
11I3

每一项都是数据输入与选择线(原变量或反变量)的 AND,所有项再汇合到一个 OR 门。

用 MUX 实现逻辑函数

由于 MUX 内部已经包含其选择变量的全部最小项,它可以充当“可编程函数”。用一个有 2n 个输入的 MUX,只要在每个数据输入端接 0 或 1,就能实现任意 n 变量函数。更妙的是:如果把多出来的那个变量(或它的反变量)接到数据输入端,同一个 MUX 还能实现 n + 1 个变量的函数。

例:用一个 4 选 1 MUX 实现 F(A, B, C) = Σm(1, 2, 6, 7),以 A 和 B 作为选择信号(A = S1,B = S0)。

  1. 把真值表按 A B 取值相同的行两两分组,看 F 如何随 C 变化。
  2. AB = 00:m0 = 0(C = 0),m1 = 1(C = 1)。F = C,所以 I0 = C。
  3. AB = 01:m2 = 1(C = 0),m3 = 0(C = 1)。F = C,所以 I1 = C。
  4. AB = 10:m4 = 0,m5 = 0。I2 = 0。
  5. AB = 11:m6 = 1,m7 = 1。I3 = 1。

用 A = 0,B = 1,C = 0(最小项 2)验证:选择信号 01 选中 I1 = C = 1。正确,m2 属于该函数。

多路分配器和译码器

1 线-4 线多路分配器(DEMUX)接收一个数据 D,并根据 S1 S0 把它送到四个输出之一;其余输出保持为 0:Y0 = D·S1·S0,Y1 = D·S1·S0,Y2 = D·S1·S0,Y3 = D·S1·S0。

如果把 DEMUX 的 D 固定为 1 并把它称为“使能”端,就得到一个译码器:n 个输入、2n 个输出,其中只有一个输出有效,即与输入的数相对应的那一个。3 线-8 线译码器能产生三变量的全部 8 个最小项。所以任何三变量函数都可以用一个译码器加一个 OR 门来实现,由 OR 门把该函数各最小项对应的输出汇合起来。

例:用 3 线-8 线译码器实现全加器。输入为 A、B 和 Cin。

  • 和 S = Σm(1, 2, 4, 7):4 输入 OR 门,接输出 Y1、Y2、Y4、Y7。
  • 进位 Cout = Σm(3, 5, 6, 7):4 输入 OR 门,接 Y3、Y5、Y6、Y7。

检查一种情况:A = 1,B = 1,Cin = 0 对应的数是 110 = 6。只有 Y6 有效;Y6 不在 S 的 OR 门中(S = 0),但在 Cout 的 OR 门中(Cout = 1)。果然,1 + 1 + 0 的二进制结果是 10。

74HC 系列中典型的 3 线-8 线译码器的输出是低电平有效的:被选中的输出为 0,其余输出为 1。这时,根据德摩根定理,最小项的 OR 就变成了对同样这些输出的 NAND。

优先编码器

编码器执行相反的操作:在 2n 条输入线中,给出有效的那条线的 n 位二进制编号。问题是如果同时有两条线有效该怎么办;实用的解决办法是优先编码器,它给出编号最高的有效线的编号。对于 4 个输入 D3(优先级最高)到 D0:

Y1 = D3 + D2,Y0 = D3 + D2·D1,V = D3 + D2 + D1 + D0

输出 V(“有效”)表示至少有一个输入有效;没有它,你就无法区分“D0 有效”和“没有任何输入有效”,因为两种情况下都是 Y1 Y0 = 00。用 D2 = D1 = 1 试一下:Y1 = 1,Y0 = 0 + 0·1 = 0,即 10 = 2。D2 胜出,本该如此。

BCD-7 段显示译码器

a b c d e f g
7 段显示器各段的名称。

7 段显示器(数码管)的每一段是一个 LED。译码器接收一位 BCD 码(A B C D,A 为最高位),并点亮组成该数字的各段。对于共阴极显示器,1 表示该段点亮:

数字ABCDabcdefg
000001111110
100010110000
200101101101
300111111001
401000110011
501011011011
601101011111
701111110000
810001111111
910011111011

1010 到 1111 这些代码不是有效的 BCD 码,所以在卡诺图中把它们当作无关项(X)处理。这会大大简化每一段的表达式。

a 段:只在数字 1 和 4 时为 0。在 4 变量卡诺图中,把 10 到 15 填上 X,最大的几个圈是:A(连同 X 共 8 格)、C(8 格)、B·D(最小项 5、7、13、15)和 B·D(四个角:0、2、8、10)。

a = A + C + B·D + B·D

验证数字 4(0100):A = 0,C = 0,B·D = 1·0 = 0,B·D = 0·1 = 0。结果为 0:a 段熄灭,正确。

如果显示器是共阳极的,每一段要用 0 点亮,所以所有输出都要取反。

常见错误

在模拟器中试一试

把函数的真值表与用多路复用器实现的版本进行比较。

  1. 新建一个三输入 A、B、C 的真值表,在第 1、2、6、7 行标上 F = 1。
  2. 在编辑器中放置一个 4 选 1 多路复用器(或者用四个 AND 门、两个 NOT 门和一个四输入 OR 门搭出来),并把 A 和 B 接到选择端。
  3. 依次把 C、C 的反、固定的 0 和固定的 1 接到各数据输入端。
  4. 改变输入,遍历八种组合,观察输出与真值表一致。
  5. 对显示器的 a 段重复这一过程:把它那一列输入到 4 变量真值表中,把第 10 到 15 行标为 X,再查看卡诺图给出的圈。

练习

  1. 用 4 选 1 MUX 实现 F(A, B, C) = Σm(0, 3, 5, 6),以 A 和 B 作为选择信号。
    答案

    AB = 00:m0 = 1,m1 = 0,I0 = C。AB = 01:m2 = 0,m3 = 1,I1 = C。AB = 10:m4 = 0,m5 = 1,I2 = C。AB = 11:m6 = 1,m7 = 0,I3 = C。这是偶校验函数(有偶数个 1 时输出 1):F = A ⊕ B ⊕ C。

  2. 16 输入的 MUX 需要几条选择线?它所实现的函数最多可以有几个变量?
    答案

    4 条选择线(24 = 16)。把多出来的变量接到数据端,它可以实现任何不超过 5 个变量的函数。

  3. 把组合 10 到 15 当作无关项,求 e 段的表达式。
    答案

    e 在 0、2、6 和 8 时为 1。圈:B·D(0、2、8、10)和 C·D(2、6、10、14)。结果:e = B·D + C·D = D·(B + C)。

  4. 在 4 输入优先编码器中,D3 = 0,D2 = 0,D1 = 1,D0 = 1 时输出是什么?
    答案

    Y1 = 0 + 0 = 0,Y0 = 0 + 1·1 = 1,V = 1。输出为 01:D1 胜过 D0。