好的,这份中文自学讲义根据您提供的PPT内容编写而成,包含了所有知识点,并增加了详细的解释和说明,以帮助您更好地理解和掌握。
ECE 2050 数字逻辑与系统 - 中文自学讲义
第6章:组合逻辑构建模块
讲师:Yue ZHENG, Ph.D. 学校:香港中文大学(深圳)
引言
欢迎来到第六章的学习。本章我们将深入探讨数字系统中一些最基本、最重要的“构建模块”。这些模块本身由基本的逻辑门构成,但它们实现了更复杂、更常用的功能,如加法、比较和数据选择。掌握这些模块的工作原理是设计复杂数字系统的基础。
上周内容回顾
在进入新内容之前,我们先快速回顾一下上周的核心知识点:
- 基本组合逻辑电路:
- 与或(AND-OR)逻辑: 实现“积之和”(Sum-of-Products)表达式。
- 与或非(AND-OR-Invert)逻辑: 在与或逻辑后增加一个反相器。
- 异或(Exclusive-OR)逻辑: 当输入不同时,输出为1。
- 同或(Exclusive-NOR)逻辑: 当输入相同时,输出为1。
- 与非门(NAND)和或非门(NOR)的通用性:
- 仅使用与非门(NAND)或仅使用或非门(NOR)就可以实现 NOT, AND, OR 等所有基本逻辑功能。这使得它们在电路设计中非常重要。
- 对偶符号 (Dual Symbols):
- 根据德摩根定律,我们可以用不同的符号表示同一个逻辑门,以简化电路图的阅读。
A·B
的反 =A
的反 +B
的反A+B
的反 =A
的反 ·B
的反- 这引出了使用对偶符号的逻辑图,例如用“与非门”和“负或门”来表示与非逻辑。
第一部分:加法器 (Adders)
加法器是数字系统(尤其是计算机的算术逻辑单元 ALU)的核心部件,用于执行二进制加法。
1. 半加法器 (Half Adders)
-
定义: 半加法器是能够对两个二进制位进行相加的组合逻辑电路。
-
输入: 两个二进制位,我们称之为 A 和 B。
-
输出: 两个二进制位:
- 和 (Sum, Σ): 两个输入位相加的结果。
- 进位 (Carry Out, Cout): 相加后产生的向高位的进位。
-
逻辑符号与真值表:
A | B | Cout (进位) | Σ (和) |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 0 | 0 | 1 |
1 | 1 | 1 | 0 |
- 逻辑表达式与电路图:
- 从真值表可以看出:
- 和 (Σ) 的逻辑功能是“异或” (XOR): Σ = A ⊕ B
- 进位 (Cout) 的逻辑功能是“与” (AND): Cout = A · B
- 因此,一个半加法器可以用一个异或门和一个与门来实现。
- 从真值表可以看出:
2. 全加法器 (Full Adders)
半加法器无法处理来自低位的进位,这在多位二进制数相加时是不够的。因此,我们需要全加法器。
-
定义: 全加法器能够对三个二进制位进行相加。
-
输入: 三个二进制位:
- 两个待加数位 A 和 B。
- 一个来自低位的进位输入 (Carry In, Cin)。
-
输出: 两个二进制位:
- 和 (Sum, Σ)。
- 向高位的进位输出 (Carry Out, Cout)。
-
真值表:
A | B | Cin | Cout (进位输出) | Σ (和) |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 1 |
0 | 1 | 0 | 0 | 1 |
0 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 |
1 | 0 | 1 | 1 | 0 |
1 | 1 | 0 | 1 | 0 |
1 | 1 | 1 | 1 | 1 |
- 逻辑表达式与电路实现:
- 和 (Σ): Σ = (A ⊕ B) ⊕ Cin
- 进位输出 (Cout): Cout = A·B + (A ⊕ B)·Cin
- 重要思想: 一个全加法器可以由两个半加法器和一个或门构成。
- 第一个半加法器计算 A + B,得到一个中间和 (A ⊕ B) 与中间进位 (A·B)。
- 第二个半加法器将中间和 (A ⊕ B) 与低位进位 Cin 相加,得到最终的和 Σ。
- 两个半加法器的进位输出通过一个或门相连,得到最终的进位输出 Cout。
3. 并行二进制加法器 (Parallel Binary Adders)
要实现多位二进制数的加法(例如,4位数加4位数),我们可以将多个全加法器连接起来。
-
结构: 将
n
个全加法器串联起来,就可以构成一个n
位并行加法器。- 最低位(LSB)的进位输入 (Cin) 通常接地(即为0)。
- 前一个全加法器的进位输出 (Cout) 连接到后一个(更高位)全加法器的进位输入 (Cin)。
- 这种结构被称为行波进位加法器 (Ripple Carry Adder)。
-
示例 (4位加法器):
- 计算
A (1100)
+B (1100)
。 - 需要4个全加法器 (FA1 到 FA4)。
- FA1 计算 A1+B1,Cout1 送到 FA2。
- FA2 计算 A2+B2+Cout1,Cout2 送到 FA3,以此类推。
- 最终结果由 Σ4, Σ3, Σ2, Σ1 和最终的进位 C4 组成。
- 计算
-
集成电路 (IC) 示例: 74HC283 / 74LS283
- 这是一个常见的4位并行加法器芯片。
- 级联 (Cascading): 我们可以将两个4位加法器级联起来,实现一个8位加法器。只需将低4位加法器的进位输出 (Cout) 连接到高4位加法器的进位输入 (Cin) 即可。
4. 行波进位加法器的问题与优化
-
行波进位加法器 (Ripple Carry Adder)
- 问题: 存在显著的延迟。每一位的计算都必须等待它前一位的进位信号。这个进位信号像波浪一样逐级“传播”(ripple),导致位数越多,总的计算时间越长。
- 例如,如果每个全加法器有8ns的延迟,一个32位的加法器将有
32 * 8ns = 256ns
的最差情况延迟。
-
超前进位加法器 (Look-Ahead Carry Adder)
- 思想: 为了消除行波进位的延迟,我们可以设计一种电路,它能提前预测每一位的进位,而不需要等待前一位的计算结果。
- 核心概念:
- 进位产生 (Carry Generate, Cg):
Cg = A · B
。当 A 和 B 都为1时,无论低位进位是什么,这一位必然会产生一个向高位的进位。 - 进位传播 (Carry Propagate, Cp):
Cp = A ⊕ B
(有时用A + B
)。当 A 或 B 中有一个为1时,如果低位传来一个进位 (Cin=1),这个进位将会被传播到下一位。
- 进位产生 (Carry Generate, Cg):
- 输出进位公式:
Cout = Cg + Cp · Cin
- 优点: 通过复杂的逻辑电路,可以同时计算出所有位的进位信号,极大地加快了加法运算的速度。电路的复杂度更高,但性能更好。
- 4位超前进位逻辑: 我们可以推导出每一位的进位输出 (Cout1, Cout2, …) 仅与输入位 (A, B) 和初始进位 (Cin1) 相关的复杂表达式。这样所有进位就可以并行计算。
第二部分:比较器 (Comparators)
比较器用于比较两个二进制数的大小。
1. 相等比较 (Equality)
- 基本单元: 同或门 (XNOR) 是最基本的比较器。当两个输入位相同时,输出为1;不同时,输出为0。
- 多位比较: 要比较两个n位数是否相等(例如 A=A1A0, B=B1B0),我们需要比较它们所有对应的位。
- 只有当
A1
与B1
相等 且A0
与B0
相等时,我们才认为 A=B。 - 电路实现:将每一对位的比较结果(来自同或门)再通过一个与门连接起来。
- 只有当
2. 不等比较 (Inequality)
一个更通用的比较器需要有三个输出:A > B
, A < B
, A = B
。
-
比较规则:
- 从最高有效位 (MSB) 开始比较。
- 如果在某一位上发现不相等(例如
A3=1, B3=0
),那么就可以立即确定大小关系 (A > B
),无需再看更低的位。 - 如果当前位相等,则继续比较下一位。
- 如果所有位都相等,则
A = B
。
-
集成电路 (IC) 示例: 74HC85 / 74LS85
- 这是一个4位比较器芯片。
- 级联输入: 它有
A>B
,A<B
,A=B
的级联输入端。这使得我们可以将多个比较器连接起来,比较更多位的数字。 - 级联方法:
- 比较低位的比较器(例如比较0-3位)的输出连接到比较高位的比较器(例如比较4-7位)的级联输入端。
- 最低位的比较器,其
A=B
级联输入必须接高电平(HIGH),而A>B
和A<B
输入必须接低电平(LOW),表示“在开始比较前,我们假设它们是相等的”。
第三部分:编码器与解码器
1. 编码器 (Encoder)
-
功能: 编码器有多个输入端,但通常只有一个输入端是有效的(例如高电平)。它会将这个有效输入的位置转换成一个二进制编码输出。
-
示例: 10线-4线编码器(或称为十进制-BCD编码器)
- 输入: 10个输入端,分别代表数字0到9。
- 输出: 4个输出端,产生对应输入数字的BCD码。
- 例如,如果第7个输入端有效,输出就是
0111
。
-
优先编码器 (Priority Encoder)
- 功能: 当有多个输入同时有效时,普通编码器会出错。优先编码器则只对优先级最高的有效输入进行编码,忽略其他所有较低优先级的输入。通常,输入引脚序号越大的优先级越高。
- 应用: 键盘。当你同时按下多个键时,它只识别一个。
- “无关项” (Don’t Care, ‘X’): 在真值表中,我们用 ‘X’ 来表示那些因为被更高优先级的输入覆盖而无需关心的输入状态。
2. 解码器 (Decoder)
-
功能: 解码器与编码器功能相反。它将一个二进制编码作为输入,并激活多个输出端中的唯一一个。
-
N线-2^N线解码器:
- 输入: N个输入端。
- 输出: 2^N个输出端。
- 例如,一个2-4线解码器,输入为
10
,则第2个输出端被激活。 - 独热码输出 (One-hot output): 在任何时候,只有一个输出是有效的。
-
用解码器实现逻辑函数:
- 解码器的每个输出都对应一个最小项 (minterm)。
- 因此,我们可以通过将一个布尔函数(积之和形式)中包含的最小项对应的解码器输出连接到一个或门,来实现任意的组合逻辑函数。
-
集成电路 (IC) 示例:
- 74HC154 (4-16线解码器): 可以用两个4-16线解码器和一个反相器来构成一个5-32线解码器。
- 74HC42 (BCD-十进制解码器): 输入是4位BCD码,它会激活对应的0-9号输出端之一。
- BCD-7段数码管解码器:
- 功能: 将4位BCD码转换为驱动7段数码管所需的7个信号(a-g段)。
- 特殊功能引脚:
- LT (Lamp Test): 灯测试,低电平有效时点亮所有段。
- RBI (Ripple Blanking Input): 脉冲熄灭输入。当输入为0且该引脚为低电平时,熄灭显示。
- BI/RBO (Blanking Input / Ripple Blanking Output): 熄灭输入/脉冲熄灭输出。
- 消零 (Zero Suppression):
- 消去前导零 (Leading Zero Suppression): 例如,
0030
显示为30
。 - 消去末尾零 (Trailing Zero Suppression): 例如,在小数中,
30.0800
显示为30.08
。
- 消去前导零 (Leading Zero Suppression): 例如,
第四部分:多路复用器与解复用器
1. 多路复用器 (Multiplexer, MUX)
- 功能: 也叫数据选择器 (Data Selector)。它有多个数据输入端,但只有一个输出端。通过“选择”信号,来决定将哪一个输入端的数据连接到输出端。
- N-1 MUX:
- 数据输入: N个。
- 选择输入:
log₂(N)
个。 - 输出: 1个。
- 示例: 4-1 MUX
- 4个数据输入 D0, D1, D2, D3。
- 2个选择输入 S1, S0。
- 当
S1S0 = 00
,输出 Y = D0;当S1S0 = 01
,输出 Y = D1,以此类推。
- 实现方式:
- 逻辑门: 可以用与门、或门、非门实现。
- 三态门 (Tristates): 每个输入连接一个三态门,选择信号只打开其中一个三态门,让其数据通过。
- 应用:
- 数据路由: 在多路数据中选择一路。
- 实现逻辑函数: 可以把MUX当作一个“查找表”(Look-up Table)。将逻辑函数的输入作为MUX的选择输入,然后根据真值表将数据输入端接到高电平(1)或低电平(0),就可以实现该逻辑函数。
2. 解复用器 (Demultiplexer, DEMUX)
- 功能: 也叫数据分配器 (Data Distributor),功能与MUX相反。它有一个数据输入端和多个输出端。通过“选择”信号,将输入数据分配到指定的输出端上。
- 1-N DEMUX:
- 数据输入: 1个。
- 选择输入:
log₂(N)
个。 - 输出: N个。
- 关系: 解码器加上一个使能端就可以作为一个解复用器使用。
第五部分:时序问题 (Timing)
-
延迟 (Delay): 信号从电路的输入端传输到输出端需要时间,这个时间就是延迟。这是由电路中的电容、电阻和信号传播速度(光速限制)引起的。
-
传播延迟 (Propagation Delay, t_pd):
- 定义:从输入发生变化到输出稳定到新状态所需的最大时间。它决定了电路的最高工作速度。
-
污染延迟 (Contamination Delay, t_cd):
- 定义:从输入发生变化到输出开始发生变化所需的最小时间。
-
临界路径 (Critical Path) 与短路径 (Short Path):
- 临界路径 (长路径): 电路中信号传播延迟最长的路径。这条路径的延迟决定了整个电路的
t_pd
。 - 短路径: 电路中信号传播延迟最短的路径。这条路径的延迟决定了整个电路的
t_cd
。
- 临界路径 (长路径): 电路中信号传播延迟最长的路径。这条路径的延迟决定了整个电路的
-
毛刺 (Glitches)
- 定义: 在组合逻辑电路中,当单个输入信号发生变化时,由于信号通过不同长度的路径到达输出端,导致输出端出现一次或多次非预期的、短暂的跳变。
- 原因: 信号在长短不同的路径上“赛跑”,到达终点的时间不一致。
- 示例: 在
Y = A'B + BC
的电路中,当A=0, C=1
且B
从1跳变为0时,A'B
项会从1变为0,而BC
项会从1变为0。如果A'B
项的路径比BC
项的路径长,就会有一个短暂的时间两项都为0,导致输出Y从1短暂地跳到0,再变回1,形成一个负向毛刺。 - 修复毛刺: 通过在卡诺图中添加一个冗余项(例如,
A'C
)来“覆盖”可能产生毛刺的跳变。这个冗余项在逻辑上是多余的,但在跳变期间能保持输出稳定。 - 重要性: 虽然在同步设计中,毛刺通常不会造成问题(因为我们只在时钟边沿采样稳定的信号),但在仿真和调试电路时,认识和理解毛刺非常重要。
本章复习
- 半加器与全加器: 区别、构成和功能。
- 并行二进制加法器: 如何用全加器搭建。
- 行波进位与超前进位加法器: 两者的优缺点和基本原理。
- 比较器: 比较两个二进制数的大小和相等关系。
- 解码器: 将二进制码转换为唯一的有效输出 (N -> 2^N)。
- 编码器: 将唯一的有效输入转换为二进制码(特别是优先编码器)。
- 代码转换器: 如BCD码到二进制码的转换。
- 多路复用器 (MUX): 从多个输入中选择一个输出。
- 解复用器 (DEMUX): 将一个输入分配到多个输出之一。
- 时序: 理解传播延迟、污染延迟、临界路径和毛刺。
思考题
如何用全加器/半加器来设计一个乘法器? (提示:二进制乘法可以分解为一系列的“与”运算和加法运算。)
随堂测验 (True/False Quiz)
-
半加法器对两个二进制位进行相加。
- ✔ 对 (True). 这是半加法器的定义。
-
半加法器只有一个进位输出。
- ❌ 错 (False). 它有一个进位输出 (Cout) 和一个和输出 (Sum)。
-
全加法器对两个二进制位进行相加,并产生两个输出。
- ❌ 错 (False). 它对三个二进制位(A, B, Cin)进行相加,产生两个输出 (Sum, Cout)。
-
全加法器只能用2输入异或门来实现。
- ❌ 错 (False). 实现全加法器不仅需要异或门,还需要与门和或门。
-
当输入位都为1,输入进位也为1时,全加法器的和输出是1。
- ✔ 对 (True). 1 + 1 + 1 = 3 (二进制为
11
)。所以和 (Sum) 是1,进位输出 (Cout) 也是1。
- ✔ 对 (True). 1 + 1 + 1 = 3 (二进制为
-
当两个二进制输入相等时,比较器的输出是0。
- ❌ 错 (False). 这取决于设计。通常,相等时
A=B
输出会是高电平(1),表示“相等”这个条件成立。
- ❌ 错 (False). 这取决于设计。通常,相等时
-
解码器检测输入位的特定组合是否存在。
- ✔ 对 (True). 当输入是某个特定组合时,解码器会激活对应的那个输出。
-
4线-10线解码器和1-of-10解码器是两种不同类型。
- ❌ 错 (False). 它们通常指的是同一种设备,即BCD-十进制解码器。
-
编码器本质上执行解码器的逆功能。
- ✔ 对 (True). 编码器将激活的线的位置转为代码,解码器将代码转为激活的线的位置。
-
多路复用器是允许数字信息从单一来源路由到多条线路的逻辑电路。
- ❌ 错 (False). 这个描述是解复用器 (DEMUX) 的功能。多路复用器 (MUX) 是将多个来源的信息路由到单一线路。