第 8 章 组合逻辑模块
1. 本章要解决的问题
第 7 章能把一个小型逻辑功能写成真值表、化简表达式并连接逻辑门。当系统变大后,逐项处理门电路会迅速失去结构。例如,“从八路数据中选一路”“把三位编号转换成八根独热选择线”“判断两个多位数谁更大”,都可以由门构成,但工程师通常先把它们看成具有明确接口的功能模块。
本章学习六类基础组合逻辑模块:译码器、编码器、优先编码器、多路选择器、解复用器和比较器。重点是理解模块解决什么问题、输入输出怎样定义、内部逻辑如何得到,以及怎样把小模块级联成更大的模块。
2. 与第 7 章的联系
第 7 章的真值表和布尔化简仍然是本章的底层方法。区别在于观察尺度发生了变化:
- 第 7 章主要问:“这个输出函数怎样化简?”
- 第 8 章主要问:“这个模块的接口是什么,怎样连接它完成更大的任务?”
本章主要位于门级与模块级。模块内部仍是组合逻辑门,输出只取决于当前输入;模块外部先用功能名称和端口关系描述,不必每次展开全部门电路。
3. 前置知识快速检查
- 3 bit 输入有多少种输入组合?
- 最小项为什么只在一行真值表中为 1?
- \(A\oplus B\) 在什么条件下为 1?
- 一个组合逻辑输出会不会记住上一个时刻的输入?
前置检查答案
4. 学习目标
学完本章后,你应当能够:
- 从文字规格确定组合逻辑模块的输入、输出和有效条件;
- 解释 \(n\) 线—\(2^n\) 线译码器为什么产生独热输出;
- 区分普通编码器与优先编码器;
- 使用多路选择器选择数据或实现任意小型逻辑函数;
- 解释解复用器与译码器的联系;
- 使用比较器判断多位无符号数的大小关系;
- 正确解释使能端、有效高和有效低信号;
- 使用级联方法扩大模块的输入位数或通道数量;
- 从功能、逻辑和物理三个层次比较不同实现。
5. 先定义接口,再设计内部逻辑
一个组合逻辑模块可以看成从当前输入向量到当前输出向量的映射:
\[ \mathbf{Y}=F(\mathbf{X}). \]
\(\mathbf{X}\) 表示一组输入信号,\(\mathbf{Y}\) 表示一组输出信号,\(F\) 表示模块规定的组合逻辑关系。这个写法只描述功能,不包含内部门数和传播时间。
从规格到电路可以按图 8-1 的顺序进行。观察每一步新增了什么信息。
文字规格首先回答“什么情况下输出什么”;接口表固定端口方向、位宽和有效电平;真值表或功能关系消除歧义;逻辑化简减少冗余;模块框图保留连接关系;门级实现才决定具体结构。验证则把实际结果与规格逐项比较。
5.1 规格中至少要说清楚什么
设计一个模块前,先写清楚:
- 每个输入和输出的含义;
- 每个总线的位宽和位序;
- 输出是有效高还是有效低;
- 是否有使能端;
- 多个请求同时出现时怎样处理;
- 非法输入出现时输出怎样定义。
这些条件决定真值表。若它们含糊,后面的化简再正确也可能实现错误功能。
6. 有效高、有效低与使能端
信号处于“有效”状态,表示它正在表达所命名的动作或条件。有效高(active-high)信号在逻辑 1 时有效;有效低(active-low)信号在逻辑 0 时有效。
本讲义用后缀 _n 表示低有效。例如:
EN=1:高有效使能打开;EN_n=0:低有效使能打开;RESET_n=0:低有效复位被触发。
逻辑图中的端口小圆圈也常表示反相或低有效。不能只根据名称猜测,必须结合端口定义和真值表。
使能(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 展示编号与输出线的对应关系。
输入 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
时的行为。
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 的数据流。观察选择信号和数据输入承担的不同角色。
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\) 两种状态。有效路径同时用实线、箭头和文字标出。
当 \(D=0\) 时,两个输出都是 0;当 \(D=1\) 时,输出成为由 \(S\) 选择的独热码。因此,带使能译码器和解复用器在逻辑结构上关系紧密:把译码器使能端当作数据 \(D\),就得到解复用功能。
DEMUX 常用于控制脉冲分发、片选和简单数据路由。实际总线系统还需要考虑多个驱动器能否同时连接、三态控制和时序协议,本章只讨论单驱动组合逻辑关系。
12. 比较器:从最高位开始判断两个数的大小
数字比较器(magnitude comparator)比较两个二进制数 \(A\) 和 \(B\),通常产生三个互斥输出:
- \(G=1\):\(A>B\);
- \(E=1\):\(A=B\);
- \(L=1\):\(A<B\)。
对一位输入:
\[ G=A\overline{B}, \]
\[ E=\overline{A\oplus B}, \]
\[ L=\overline{A}B. \]
对多位无符号数,最高位具有最高权重。只要最高位不同,低位就不能改变比较结果;只有高位相等时,判断权才传递到下一位。
图 8-6 展示四位比较器的“最高不同位决定结果”规则。
对两位无符号数 \(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)就是把多个较小模块连接成位宽或通道数更大的模块。设计时遵循三步:
- 明确每个子模块负责哪一段输入;
- 明确哪个信号选择或使能该子模块;
- 检查任一输入组合下是否恰好得到正确输出。
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_n~Y3_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\) 的两行:
- \(AB=00\):输出依次为 0、1,所以 \(D_0=C\);
- \(AB=01\):输出依次为 1、0,所以 \(D_1=\overline{C}\);
- \(AB=10\):输出始终为 0,所以 \(D_2=0\);
- \(AB=11\):输出始终为 1,所以 \(D_3=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 时:
- \(A_2=1\),低半区译码器禁用,高半区译码器启用;
- \(A_1A_0=01\),高半区的第 1 路被选中;
- 全局编号为 \(4+1=5\),因此 \(Y_5=1\)。
变式: 若子译码器是低有效使能,必须重新推导两只使能端的连接,不能直接沿用 \(\overline{A_2}\) 与 \(A_2\)。
例题 5:比较两个四位无符号数
比较 \(A=1010_2\) 和 \(B=1001_2\)。
从 MSB 开始:
- 第 3 位:\(A_3=B_3=1\),继续;
- 第 2 位:\(A_2=B_2=0\),继续;
- 第 1 位:\(A_1=1,B_1=0\),第一次出现不同。
最高不同位上 \(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. 工程中的实际意义
这些模块是数字系统的数据选择与控制基础:
- 译码器把地址或状态编号转换成局部使能;
- 编码器把稀疏请求压缩成编号;
- 优先编码器解决同时请求的选择顺序;
- MUX 构成数据通路中的选择节点;
- DEMUX 分发数据或控制信号;
- 比较器产生分支、范围判断和排序条件。
在 RTL 中,工程师常使用
case、条件运算或比较运算描述这些功能,综合工具再映射成具体门单元。理解模块内部逻辑能帮助你判断位宽、优先级、默认分支、关键路径和输出有效条件是否正确。
17. 本章知识链
文字规格
↓ 定义端口、位宽、有效电平和非法情况
模块接口
├─ 编号 → 独热线:译码器
├─ 独热线 → 编号:编码器 / 优先编码器
├─ 多路 → 一路:MUX
├─ 一路 → 多路:DEMUX
└─ 两组数 → 大小关系:比较器
↓ 真值表和布尔表达式
门级实现
↓ 级联与分层
更宽位数或更多通道
↓ 加入负载、路径和输入到达时间
实际面积、延迟与功耗
18. 本章小结
- 组合逻辑模块应先定义接口、位宽、有效电平、使能和非法输入行为。
- \(n\) 线—\(2^n\) 线译码器把二进制编号展开成独热输出,每个输出对应一个最小项。
- 普通编码器要求输入独热;优先编码器能按规定顺序处理多个同时有效的输入。
- 有效位用于区分“编号为 0”和“没有有效输入”。
- MUX 根据选择信号把一路数据送到输出,也能作为通用逻辑函数实现器。
- DEMUX 根据选择信号把一路输入送到一路输出,与带使能译码器关系紧密。
- 多位无符号比较从 MSB 开始,只有高位相等时才继续检查低位。
- 小模块可以级联成大模块,但额外级数、扇出和内部节点会影响物理性能。
19. 练习
先独立完成,再展开答案。题目 1~6 检查模块概念,7~12 训练方程与连接,13~16 完成小型设计。
19.1 基础题
- 说明组合逻辑模块与存储模块在输出依赖关系上的区别。
- 一个 3 线—8 线高有效译码器输入为
110时,哪一路输出为 1? - 普通 8 线—3 线编码器对输入有什么关键约束?
- 优先编码器为什么需要规定优先级?
- 写出 2 选 1 MUX 的输出方程,并分别代入 \(S=0\)、\(S=1\) 解释。
- 写出 2 路 DEMUX 的两个输出方程。
19.2 计算与分析题
- 写出带高有效使能 \(EN\) 的 2 线—4 线译码器四个输出方程。
- 4 线—2 线优先编码器规定 \(D_3\)
最高优先级。输入
1011时,求 \(Y_1Y_0\) 和 \(V\)。 - 对普通 4 线—2 线编码器,说明输入
0110为什么违反规格,并计算直接代入 \(Y_1=D_2+D_3\)、\(Y_0=D_1+D_3\) 会产生什么误导结果。 - 使用 3 线—8 线译码器实现 \(F(A,B,C)=\Sigma m(0,2,5,7)\),说明输出怎样连接。
- 使用 4 选 1 MUX 实现 \(F(A,B,C)=\Sigma m(0,1,3,6)\)。令 \(A,B\) 为选择端,求 \(D_0\)~\(D_3\) 应接什么。
- 比较无符号数 \(A=01101_2\) 与 \(B=01110_2\),指出最高不同位和 \(G,E,L\)。
19.3 综合题
- 使用两个带高有效使能的 2 线—4 线译码器和一个反相器构成 3 线—8 线译码器。写出两只译码器的地址输入、使能输入和输出编号范围。
- 设计一个 4 路请求优先编码器,规定 \(R_0\) 优先级最高、\(R_3\) 最低。输入为
R3R2R1R0=1110时应输出哪个编号?这与本章正文的优先级方向有什么不同? - 一个系统要在正常数据 \(N\)、测试数据 \(T\) 和常量 0 之间选择一路送到 \(Y\)。使用一个 4 选 1 MUX,规定选择码
00→N、01→T、10→0、11→0。写出连接和输出方程。 - 两种 8 选 1 MUX 实现方案如下:方案甲使用一个直接 8 选 1
单元;方案乙使用七个 2 选 1 单元构成三层树。
- 两者的稳定逻辑功能是否可以相同?
- 方案乙任一数据到输出经过几级 MUX?
- 为什么还不能只凭级数断言方案甲一定更快?
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
- 两者可以实现相同的 8 路选择真值表。
- 平衡二叉树有三层,任一数据到输出经过 3 级 2 选 1 MUX。
- 直接 8 选 1 单元的内部结构、输入电容和驱动能力未知;它也可能在内部使用多级结构。实际延迟还取决于具体库单元、负载、布线和选择信号到达时间。
21. 自测清单
若第 6~8 项不稳定,重新完成例题 3,并为每个选择码逐行写出“当前接通的是哪一路”。若第 9 项不稳定,遮住最低位,只看最高不同位重新判断几组数。
22. 下一章衔接
本章的模块主要负责选择、分发、编码和比较。第 9 章将进入二进制算术电路,从半加器和全加器开始,建立进位、行波进位加法器、溢出判断以及加减法统一电路。第 7 章的异或和第 8 章的模块级连接会在加法器中再次出现。