本章目录 22 节

← 返回课程首页

第 8 章 组合逻辑模块

1. 本章要解决的问题

第 7 章能把一个小型逻辑功能写成真值表、化简表达式并连接逻辑门。当系统变大后,逐项处理门电路会迅速失去结构。例如,“从八路数据中选一路”“把三位编号转换成八根独热选择线”“判断两个多位数谁更大”,都可以由门构成,但工程师通常先把它们看成具有明确接口的功能模块。

本章学习六类基础组合逻辑模块:译码器、编码器、优先编码器、多路选择器、解复用器和比较器。重点是理解模块解决什么问题、输入输出怎样定义、内部逻辑如何得到,以及怎样把小模块级联成更大的模块。

2. 与第 7 章的联系

第 7 章的真值表和布尔化简仍然是本章的底层方法。区别在于观察尺度发生了变化:

本章主要位于门级与模块级。模块内部仍是组合逻辑门,输出只取决于当前输入;模块外部先用功能名称和端口关系描述,不必每次展开全部门电路。

3. 前置知识快速检查

  1. 3 bit 输入有多少种输入组合?
  2. 最小项为什么只在一行真值表中为 1?
  3. \(A\oplus B\) 在什么条件下为 1?
  4. 一个组合逻辑输出会不会记住上一个时刻的输入?
前置检查答案
  1. \(2^3=8\) 种。
  2. 最小项包含全部变量;目标行中的 1 写原变量,0 写反变量,所以只有目标行能让全部文字同时为 1。
  3. \(A,B\) 不同时为 1。
  4. 理想组合逻辑没有记忆,稳定输出只由当前输入决定。真实门电路存在传播延迟,这将在第 10 章集中讨论。若前两题不熟悉,先复习第 6 章第 7 章

4. 学习目标

学完本章后,你应当能够:

5. 先定义接口,再设计内部逻辑

一个组合逻辑模块可以看成从当前输入向量到当前输出向量的映射:

\[ \mathbf{Y}=F(\mathbf{X}). \]

\(\mathbf{X}\) 表示一组输入信号,\(\mathbf{Y}\) 表示一组输出信号,\(F\) 表示模块规定的组合逻辑关系。这个写法只描述功能,不包含内部门数和传播时间。

从规格到电路可以按图 8-1 的顺序进行。观察每一步新增了什么信息。

图 8-1 组合逻辑模块从文字规格到门级实现的设计链

文字规格首先回答“什么情况下输出什么”;接口表固定端口方向、位宽和有效电平;真值表或功能关系消除歧义;逻辑化简减少冗余;模块框图保留连接关系;门级实现才决定具体结构。验证则把实际结果与规格逐项比较。

5.1 规格中至少要说清楚什么

设计一个模块前,先写清楚:

  1. 每个输入和输出的含义;
  2. 每个总线的位宽和位序;
  3. 输出是有效高还是有效低;
  4. 是否有使能端;
  5. 多个请求同时出现时怎样处理;
  6. 非法输入出现时输出怎样定义。

这些条件决定真值表。若它们含糊,后面的化简再正确也可能实现错误功能。

6. 有效高、有效低与使能端

信号处于“有效”状态,表示它正在表达所命名的动作或条件。有效高(active-high)信号在逻辑 1 时有效;有效低(active-low)信号在逻辑 0 时有效。

本讲义用后缀 _n 表示低有效。例如:

逻辑图中的端口小圆圈也常表示反相或低有效。不能只根据名称猜测,必须结合端口定义和真值表。

使能(enable)端决定模块是否工作。禁用时输出取什么值由模块规格规定,常见选择包括全 0、全 1 或保持为无效编码。组合逻辑本身不会“保持上一次输出”;若规格要求保存旧值,就需要第 11、12 章的存储元件。

7. 译码器:把二进制编号展开成独热选择线

译码器(decoder)接收一个 \(n\) bit 二进制编号,并在 \(2^n\) 个输出中选中一个。高有效译码器通常让被选输出为 1,其余输出为 0。

一个 2 线—4 线译码器有输入 \(A_1,A_0\),输出 \(Y_0\)\(Y_3\)。图 8-2 展示编号与输出线的对应关系。

图 8-2 2 线—4 线译码器把两位编号转换成四根独热输出

输入 10 的无符号值为 2,因此 \(Y_2=1\),其余输出为 0。四个输出分别是四个最小项:

\[ \begin{aligned} Y_0&=\overline{A_1}\,\overline{A_0},\\ Y_1&=\overline{A_1}A_0,\\ Y_2&=A_1\overline{A_0},\\ Y_3&=A_1A_0. \end{aligned} \]

在合法输入下,四个输出恰有一个为 1,因此它们构成独热码。

7.1 带使能的译码器

若加入高有效使能 \(EN\),每个输出都再与 \(EN\) 相与:

\[ Y_i=EN\cdot m_i. \]

\(m_i\) 是输入编号 \(i\) 对应的最小项。\(EN=0\) 时全部输出为 0;\(EN=1\) 时按输入编号选中一路。

7.2 用译码器实现逻辑函数

译码器已经产生全部最小项。若函数为

\[ F(A,B,C)=\Sigma m(1,3,6,7), \]

就可以使用 3 线—8 线译码器,再把 \(Y_1,Y_3,Y_6,Y_7\) 送入 OR 门:

\[ F=Y_1+Y_3+Y_6+Y_7. \]

这种结构直观、规则,适合小型控制译码。实际实现是否比化简后的专用逻辑更合适,要结合门数、负载和器件库判断。

7.3 译码器的常见用途

8. 编码器:把独热输入压缩成二进制编号

编码器(encoder)完成译码器的反方向映射:若 \(2^n\) 根输入中恰有一根有效,就输出这根输入的 \(n\) bit 编号。

以高有效 4 线—2 线编码器为例,输入 \(D_0\)\(D_3\) 中恰有一个为 1,输出为 \(Y_1Y_0\)

有效输入 \(Y_1Y_0\)
\(D_0=1\) 00
\(D_1=1\) 01
\(D_2=1\) 10
\(D_3=1\) 11

由表可得:

\[ Y_1=D_2+D_3, \]

\[ Y_0=D_1+D_3. \]

编码器通常还提供有效输出 \(V\)

\[ V=D_0+D_1+D_2+D_3. \]

\(V=1\) 表示至少有一个输入有效。没有 \(V\) 时,“无输入有效”和“\(D_0\) 有效”都会产生 00,接收端无法区分。

8.1 普通编码器的输入约束

上面的方程建立在“最多一个输入为 1”的条件上。若 \(D_1=D_2=1\),方程给出 \(Y_1Y_0=11\),这会被误读为 \(D_3\) 有效。普通编码器需要上游保证独热输入,或者把多输入有效定义为非法状态。

9. 优先编码器:多个请求同时出现时选择最高优先级

优先编码器(priority encoder)允许多个输入同时有效,并按预先规定的优先级输出其中一个编号。例如规定 \(D_3>D_2>D_1>D_0\),只要 \(D_3=1\),输出就表示 3;只有 \(D_3=0\) 时才继续检查 \(D_2\)

图 8-3 对比普通编码器和优先编码器面对 D2=1、D1=1 时的行为。

图 8-3 普通编码器要求独热输入,优先编码器能处理多个同时请求

4 线—2 线高有效优先编码器的压缩真值表可以写成:

\(D_3\) \(D_2\) \(D_1\) \(D_0\) \(Y_1Y_0\) \(V\) 被接受输入
1 X X X 11 1 \(D_3\)
0 1 X X 10 1 \(D_2\)
0 0 1 X 01 1 \(D_1\)
0 0 0 1 00 1 \(D_0\)
0 0 0 0 00 0

表中的 X 表示该输入不影响本行结果,因为更高优先级已经决定输出。它是输入条件中的无关项,不表示电路输出不确定。

一个可用的逻辑表达式是:

\[ Y_1=D_3+D_2, \]

\[ Y_0=D_3+\overline{D_2}D_1, \]

\[ V=D_3+D_2+D_1+D_0. \]

\(D_3=1\) 时,\(Y_1Y_0=11\);当 \(D_3=0,D_2=1\) 时输出 10;只有 \(D_3=D_2=0\) 时,\(D_1\) 才能让 \(Y_0=1\)

优先编码器常用于中断请求、资源仲裁和前导位检测。优先级是模块规格的一部分,不能由输入编号自行推断。

10. 多路选择器:根据选择信号接通一路数据

多路选择器(multiplexer, MUX)从多路数据输入中选择一路送到输出。一个 2 选 1 MUX 有数据输入 \(D_0,D_1\)、选择输入 \(S\) 和输出 \(Y\)

\[ Y=\overline{S}D_0+SD_1. \]

\(S=0\) 时第一项保留 \(D_0\),第二项为 0;\(S=1\) 时第一项为 0,第二项保留 \(D_1\)

图 8-4 展示 4 选 1 MUX 的数据流。观察选择信号和数据输入承担的不同角色。

图 8-4 4 选 1 多路选择器由两位选择信号接通一路数据

4 选 1 MUX 有四路数据 \(D_0\)\(D_3\) 和两位选择 \(S_1S_0\)

\[ \begin{aligned} Y={}&\overline{S_1}\,\overline{S_0}D_0 +\overline{S_1}S_0D_1\\ &+S_1\overline{S_0}D_2+S_1S_0D_3. \end{aligned} \]

四个选择最小项中只有一个为 1,因此只有对应数据能够到达输出。

10.1 选择信号不是普通数据输入

从布尔函数角度看,所有端口都是输入变量;从模块用途看,选择信号决定“走哪条路”,数据输入提供“传什么值”。区分角色有助于阅读框图和设计数据通路。

10.2 用 MUX 实现任意逻辑函数

一个 \(N\) 变量函数可以直接用 \(2^N\) 选 1 MUX 实现:\(N\) 个变量接选择端,真值表输出逐行接到数据端的常量 0 或 1。

还可以把其中一个变量留在数据端,使 MUX 规模减半。设函数

\[ F(A,B,C)=\Sigma m(1,2,6,7), \]

\(A,B\) 作为 4 选 1 MUX 的选择信号。逐个固定 \(AB\)

\(AB\) \(C=0\) 时的 \(F\) \(C=1\) 时的 \(F\) 数据端应接
00 0 1 \(D_0=C\)
01 1 0 \(D_1=\overline{C}\)
10 0 0 \(D_2=0\)
11 1 1 \(D_3=1\)

于是只需一个 4 选 1 MUX 和一个反相器。

10.3 用小 MUX 级联成大 MUX

一个 4 选 1 MUX可以由三个 2 选 1 MUX 构成:第一级两只 MUX 分别在 \(D_0/D_1\)\(D_2/D_3\) 中选择,第二级一只 MUX 再从两个中间结果中选择。选择位的分配必须与输入编号一致。

级联会增加逻辑级数。功能关系仍然正确,但传播延迟会沿选择路径累积。

11. 解复用器:把一路数据送到被选输出

解复用器(demultiplexer, DEMUX)接收一路数据 \(D\),根据选择信号把它送到某一路输出。2 路解复用器满足:

\[ Y_0=\overline{S}D, \]

\[ Y_1=SD. \]

图 8-5 并列展示 \(S=0\)\(S=1\) 两种状态。有效路径同时用实线、箭头和文字标出。

图 8-5 2 路解复用器根据选择信号把输入数据送到一路输出

\(D=0\) 时,两个输出都是 0;当 \(D=1\) 时,输出成为由 \(S\) 选择的独热码。因此,带使能译码器和解复用器在逻辑结构上关系紧密:把译码器使能端当作数据 \(D\),就得到解复用功能。

DEMUX 常用于控制脉冲分发、片选和简单数据路由。实际总线系统还需要考虑多个驱动器能否同时连接、三态控制和时序协议,本章只讨论单驱动组合逻辑关系。

12. 比较器:从最高位开始判断两个数的大小

数字比较器(magnitude comparator)比较两个二进制数 \(A\)\(B\),通常产生三个互斥输出:

对一位输入:

\[ G=A\overline{B}, \]

\[ E=\overline{A\oplus B}, \]

\[ L=\overline{A}B. \]

对多位无符号数,最高位具有最高权重。只要最高位不同,低位就不能改变比较结果;只有高位相等时,判断权才传递到下一位。

图 8-6 展示四位比较器的“最高不同位决定结果”规则。

图 8-6 多位无符号比较从 MSB 向 LSB 传递相等条件

对两位无符号数 \(A=A_1A_0\)\(B=B_1B_0\),定义每位相等信号

\[ E_i=\overline{A_i\oplus B_i}. \]

整体相等为

\[ E=E_1E_0. \]

\(A>B\) 的条件是“最高位已经更大”,或者“最高位相等且最低位更大”:

\[ G=A_1\overline{B_1}+E_1A_0\overline{B_0}. \]

同理:

\[ L=\overline{A_1}B_1+E_1\overline{A_0}B_0. \]

这组方程适用于无符号数。二补码有符号比较需要正确处理符号位,不能把所有位直接按普通无符号权重比较。

12.1 比较器级联

较宽比较器可以由较小比较块级联。高位块先产生“大于、等于、小于”;只有高位块给出“相等”,低位块结果才决定最终输出。

级联接口常包含来自低位块或高位块的比较状态输入。阅读具体器件或标准单元时,要先确认级联方向和有效电平,不能只凭端口名称连接。

13. 级联与分层:用小模块构造大模块

级联(cascading)就是把多个较小模块连接成位宽或通道数更大的模块。设计时遵循三步:

  1. 明确每个子模块负责哪一段输入;
  2. 明确哪个信号选择或使能该子模块;
  3. 检查任一输入组合下是否恰好得到正确输出。

13.1 两个 2 线—4 线译码器构成 3 线—8 线译码器

\(A_1,A_0\) 同时接到两只译码器的地址输入。低四路译码器只在 \(A_2=0\) 时使能,高四路译码器只在 \(A_2=1\) 时使能:

\[ EN_L=\overline{A_2},\qquad EN_H=A_2. \]

于是 \(A_2\) 选择输出属于低半区还是高半区,\(A_1A_0\) 决定半区内的具体一路。

13.2 级联时要检查的物理问题

分层结构让功能更清楚,但会引入额外的门级、扇出和内部节点。高位选择信号可能同时驱动多个模块,负载较大;多级 MUX 的数据路径也会变长。功能设计完成后,需要回到第 4 章的方法检查延迟和功耗趋势。

14. 完整例题

例题 1:设计带使能的 2 线—4 线译码器

规格: 输入为 \(EN,A_1,A_0\),输出 \(Y_0\)\(Y_3\) 均为高有效。\(EN=0\) 时全部输出为 0;\(EN=1\) 时按 \(A_1A_0\) 选中一路。

第一步:写输出方程。

\[ \begin{aligned} Y_0&=EN\,\overline{A_1}\,\overline{A_0},\\ Y_1&=EN\,\overline{A_1}A_0,\\ Y_2&=EN\,A_1\overline{A_0},\\ Y_3&=EN\,A_1A_0. \end{aligned} \]

第二步:检查边界状态。

\(EN=0\) 时每个方程都含有因子 0,所以四个输出全为 0。\(EN=1,A_1A_0=10\) 时,只有 \(Y_2=1\)

第三步:检查独热性。

\(EN=1\) 时,\(A_1A_0\) 只会匹配一个最小项,因此恰有一路为 1。

变式: 若输出改为低有效,选中一路应为 0,其余为 1。方程可以写成上述每个高有效输出的反相形式,信号名应改为 Y0_nY3_n

例题 2:分析 4 线—2 线优先编码器

规定 \(D_3\) 优先级最高。给定输入 \(D_3D_2D_1D_0=0111\),求 \(Y_1Y_0\)\(V\)

从最高位开始检查:\(D_3=0\),继续看 \(D_2\)\(D_2=1\),因此接受 \(D_2\),更低的 \(D_1,D_0\) 不再影响编号。

\[ Y_1Y_0=10,qquad V=1. \]

代入方程检查:

\[ Y_1=D_3+D_2=1, \]

\[ Y_0=D_3+\overline{D_2}D_1=0+0\cdot1=0. \]

变式: 输入改成 0000 时输出编号仍可能是 00,但 \(V=0\),表示没有合法请求。

例题 3:使用 4 选 1 MUX 实现三变量函数

实现

\[ F(A,B,C)=\Sigma m(1,2,6,7). \]

选择 \(A,B\) 作为 \(S_1,S_0\),把 \(C\) 留作数据变量。固定 \(AB\) 后观察 \(C=0,1\) 的两行:

连接关系为

\[ S_1=A,\quad S_0=B,\quad(D_0,D_1,D_2,D_3)=(C,\overline{C},0,1). \]

结果检查: 输入 \(ABC=110\) 时选择 \(D_3=1\),对应 \(m_6\);输入 101 时选择 \(D_2=0\),对应不在函数集合中的 \(m_5\)

变式: 也可以选 \(B,C\) 作为选择端,但四个数据端的连接会改变。不同变量分配可能导致不同数量的反相器和额外逻辑。

例题 4:两个小译码器扩展成 3 线—8 线译码器

现有两只带高有效使能的 2 线—4 线译码器,构造输入 \(A_2A_1A_0\)、输出 \(Y_0\)\(Y_7\) 的高有效译码器。

\(A_1,A_0\) 接到两只译码器的地址端。第一只使能接 \(\overline{A_2}\),输出命名为 \(Y_0\)\(Y_3\);第二只使能接 \(A_2\),输出命名为 \(Y_4\)\(Y_7\)

输入 101 时:

变式: 若子译码器是低有效使能,必须重新推导两只使能端的连接,不能直接沿用 \(\overline{A_2}\)\(A_2\)

例题 5:比较两个四位无符号数

比较 \(A=1010_2\)\(B=1001_2\)

从 MSB 开始:

最高不同位上 \(A\) 为 1、\(B\) 为 0,因此

\[ A>B,qquad (G,E,L)=(1,0,0). \]

最低位的 \(A_0=0,B_0=1\) 无法推翻高位结论。十进制检查为 \(10>9\)

变式: 若两组位模式按 4 bit 二补码解释,1010 表示 −6,1001 表示 −7,比较结果仍是 \(A>B\);但这是本例数值碰巧一致,通用有符号比较必须按二补码规则设计。

15. 常见误区与反例

误区 1:认为编码器可以自动处理任意多路有效输入

普通编码器要求输入独热。多个输入可能同时有效时,应使用优先编码器或先定义非法状态处理。

误区 2:没有有效位也能区分“输入 0”和“无输入”

4 线—2 线编码器中,\(D_0=1\) 与全部输入为 0 都可能得到编号 00。有效位 \(V\) 用于区分这两种情况。

误区 3:把译码器的输出编号写反

端口顺序决定输入位权。若 \(A_1\) 是 MSB,输入 10 应选择 \(Y_2\)。改变位序会重排全部输出。

误区 4:看到端口小圆圈仍按高有效理解

小圆圈通常表示反相或低有效。低有效译码器的被选输出是 0,不能按高有效独热码直接读取。

误区 5:MUX 的选择端和数据端可以随意互换

从布尔函数角度可以重新分配变量,但连接表必须重新推导。把端口直接互换而不修改数据端关系会改变功能。

误区 6:DEMUX 在禁用时会记住旧输出

组合 DEMUX 没有存储。若 \(D=0\),方程直接给出全部输出为 0。

误区 7:多位比较可以从最低位开始

无符号数由最高不同位决定大小。低位只有在全部更高位相等时才有判断权。

误区 8:模块框图相同就表示内部实现相同

同一种 MUX 或译码功能可以由不同门结构、传输门或标准单元实现。框图保证接口功能,不固定晶体管级结构和性能。

16. 工程中的实际意义

这些模块是数字系统的数据选择与控制基础:

在 RTL 中,工程师常使用 case、条件运算或比较运算描述这些功能,综合工具再映射成具体门单元。理解模块内部逻辑能帮助你判断位宽、优先级、默认分支、关键路径和输出有效条件是否正确。

17. 本章知识链

文字规格
   ↓ 定义端口、位宽、有效电平和非法情况
模块接口
   ├─ 编号 → 独热线:译码器
   ├─ 独热线 → 编号:编码器 / 优先编码器
   ├─ 多路 → 一路:MUX
   ├─ 一路 → 多路:DEMUX
   └─ 两组数 → 大小关系:比较器
   ↓ 真值表和布尔表达式
门级实现
   ↓ 级联与分层
更宽位数或更多通道
   ↓ 加入负载、路径和输入到达时间
实际面积、延迟与功耗

18. 本章小结

  1. 组合逻辑模块应先定义接口、位宽、有效电平、使能和非法输入行为。
  2. \(n\) 线—\(2^n\) 线译码器把二进制编号展开成独热输出,每个输出对应一个最小项。
  3. 普通编码器要求输入独热;优先编码器能按规定顺序处理多个同时有效的输入。
  4. 有效位用于区分“编号为 0”和“没有有效输入”。
  5. MUX 根据选择信号把一路数据送到输出,也能作为通用逻辑函数实现器。
  6. DEMUX 根据选择信号把一路输入送到一路输出,与带使能译码器关系紧密。
  7. 多位无符号比较从 MSB 开始,只有高位相等时才继续检查低位。
  8. 小模块可以级联成大模块,但额外级数、扇出和内部节点会影响物理性能。

19. 练习

先独立完成,再展开答案。题目 1~6 检查模块概念,7~12 训练方程与连接,13~16 完成小型设计。

19.1 基础题

  1. 说明组合逻辑模块与存储模块在输出依赖关系上的区别。
  2. 一个 3 线—8 线高有效译码器输入为 110 时,哪一路输出为 1?
  3. 普通 8 线—3 线编码器对输入有什么关键约束?
  4. 优先编码器为什么需要规定优先级?
  5. 写出 2 选 1 MUX 的输出方程,并分别代入 \(S=0\)\(S=1\) 解释。
  6. 写出 2 路 DEMUX 的两个输出方程。

19.2 计算与分析题

  1. 写出带高有效使能 \(EN\) 的 2 线—4 线译码器四个输出方程。
  2. 4 线—2 线优先编码器规定 \(D_3\) 最高优先级。输入 1011 时,求 \(Y_1Y_0\)\(V\)
  3. 对普通 4 线—2 线编码器,说明输入 0110 为什么违反规格,并计算直接代入 \(Y_1=D_2+D_3\)\(Y_0=D_1+D_3\) 会产生什么误导结果。
  4. 使用 3 线—8 线译码器实现 \(F(A,B,C)=\Sigma m(0,2,5,7)\),说明输出怎样连接。
  5. 使用 4 选 1 MUX 实现 \(F(A,B,C)=\Sigma m(0,1,3,6)\)。令 \(A,B\) 为选择端,求 \(D_0\)\(D_3\) 应接什么。
  6. 比较无符号数 \(A=01101_2\)\(B=01110_2\),指出最高不同位和 \(G,E,L\)

19.3 综合题

  1. 使用两个带高有效使能的 2 线—4 线译码器和一个反相器构成 3 线—8 线译码器。写出两只译码器的地址输入、使能输入和输出编号范围。
  2. 设计一个 4 路请求优先编码器,规定 \(R_0\) 优先级最高、\(R_3\) 最低。输入为 R3R2R1R0=1110 时应输出哪个编号?这与本章正文的优先级方向有什么不同?
  3. 一个系统要在正常数据 \(N\)、测试数据 \(T\) 和常量 0 之间选择一路送到 \(Y\)。使用一个 4 选 1 MUX,规定选择码 00→N01→T10→011→0。写出连接和输出方程。
  4. 两种 8 选 1 MUX 实现方案如下:方案甲使用一个直接 8 选 1 单元;方案乙使用七个 2 选 1 单元构成三层树。
    1. 两者的稳定逻辑功能是否可以相同?
    2. 方案乙任一数据到输出经过几级 MUX?
    3. 为什么还不能只凭级数断言方案甲一定更快?

20. 练习答案

展开第 8 章练习答案

题 1

组合逻辑的稳定输出只取决于当前输入。存储模块的输出或下一状态还取决于历史状态;它需要锁存器、触发器等存储元件。

题 2

110₂=6₁₀,因此 \(Y_6=1\),其余七路为 0。

题 3

输入必须是独热或最多一路有效,具体取决于模块对“全 0”的定义。若多路同时有效,普通编码器方程可能产生一个不代表任何真实有效输入的编号。

题 4

多个请求同时出现时必须唯一确定接受哪一个。优先级规定了选择顺序,使相同输入组合始终得到同一结果。

题 5

\[ Y=\overline{S}D_0+SD_1. \]

\(S=0\)\(Y=D_0\)\(S=1\)\(Y=D_1\)

题 6

\[ Y_0=\overline{S}D,\qquad Y_1=SD. \]

题 7

\[ \begin{aligned} Y_0&=EN\,\overline{A_1}\,\overline{A_0},\\ Y_1&=EN\,\overline{A_1}A_0,\\ Y_2&=EN\,A_1\overline{A_0},\\ Y_3&=EN\,A_1A_0. \end{aligned} \]

题 8

输入 1011 表示 \(D_3=1,D_2=0,D_1=1,D_0=1\)\(D_3\) 优先级最高,因此接受编号 3:

\[ Y_1Y_0=11,qquad V=1. \]

题 9

0110 表示 \(D_2=D_1=1\),不是独热输入。直接代入普通编码器方程得到

\[ Y_1=1,qquad Y_0=1, \]

即编号 11,看起来像 \(D_3\) 有效,但实际 \(D_3=0\)。这说明输入违反规格后,输出编号没有可靠含义。

题 10

\(A,B,C\) 接到译码器输入,将 \(Y_0,Y_2,Y_5,Y_7\) 接到一个 OR 门:

\[ F=Y_0+Y_2+Y_5+Y_7. \]

题 11

固定 \(AB\) 并观察 \(C\)

  • \(AB=00\)\(m_0,m_1\) 都为 1,所以 \(D_0=1\)
  • \(AB=01\)\(m_2=0,m_3=1\),所以 \(D_1=C\)
  • \(AB=10\)\(m_4,m_5\) 都为 0,所以 \(D_2=0\)
  • \(AB=11\)\(m_6=1,m_7=0\),所以 \(D_3=\overline{C}\)

连接为

\[ (D_0,D_1,D_2,D_3)=(1,C,0,\overline{C}). \]

题 12

\(A=01101_2=13\)\(B=01110_2=14\)。从 MSB 向右,第 4、3、2 位相同,第 1 位首次不同:\(A_1=0,B_1=1\)。因此

\[ A<B,qquad(G,E,L)=(0,0,1). \]

最低位不能改变结论。

题 13

两只译码器的地址输入都接 \(A_1,A_0\)。低半区译码器使能接 \(\overline{A_2}\),输出为 \(Y_0\)\(Y_3\);高半区译码器使能接 \(A_2\),输出为 \(Y_4\)\(Y_7\)。反相器产生 \(\overline{A_2}\)

题 14

输入 R3R2R1R0=1110 表示 \(R_3,R_2,R_1\) 有效,\(R_0\) 无效。规定 \(R_0\) 最高、\(R_3\) 最低,因此在有效请求中选择 \(R_1\),输出编号 1,即 01

正文示例规定 \(D_3\) 最高,编号越大优先级越高;本题规定编号越小优先级越高。优先级方向必须由规格给出。

题 15

连接为

\[ D_0=N,\quad D_1=T,\quad D_2=0,\quad D_3=0. \]

若选择信号为 \(S_1S_0\)

\[ Y=\overline{S_1}\,\overline{S_0}N +\overline{S_1}S_0T. \]

后两项因数据端接 0 而消失。

题 16

  1. 两者可以实现相同的 8 路选择真值表。
  2. 平衡二叉树有三层,任一数据到输出经过 3 级 2 选 1 MUX。
  3. 直接 8 选 1 单元的内部结构、输入电容和驱动能力未知;它也可能在内部使用多级结构。实际延迟还取决于具体库单元、负载、布线和选择信号到达时间。

21. 自测清单

若第 6~8 项不稳定,重新完成例题 3,并为每个选择码逐行写出“当前接通的是哪一路”。若第 9 项不稳定,遮住最低位,只看最高不同位重新判断几组数。

22. 下一章衔接

本章的模块主要负责选择、分发、编码和比较。第 9 章将进入二进制算术电路,从半加器和全加器开始,建立进位、行波进位加法器、溢出判断以及加减法统一电路。第 7 章的异或和第 8 章的模块级连接会在加法器中再次出现。