4367 字
22 分钟
ECE2050-Chapter6
2025-08-24

好的,这份中文自学讲义根据您提供的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): 相加后产生的向高位的进位。
  • 逻辑符号与真值表:

ABCout (进位)Σ (和)
0000
0101
1001
1110
  • 逻辑表达式与电路图:
    • 从真值表可以看出:
      • 和 (Σ) 的逻辑功能是“异或” (XOR): Σ = A ⊕ B
      • 进位 (Cout) 的逻辑功能是“与” (AND): Cout = A · B
    • 因此,一个半加法器可以用一个异或门和一个与门来实现。

2. 全加法器 (Full Adders)#

半加法器无法处理来自低位的进位,这在多位二进制数相加时是不够的。因此,我们需要全加法器。

  • 定义: 全加法器能够对三个二进制位进行相加。

  • 输入: 三个二进制位:

    • 两个待加数位 A 和 B。
    • 一个来自低位的进位输入 (Carry In, Cin)
  • 输出: 两个二进制位:

    • 和 (Sum, Σ)
    • 向高位的进位输出 (Carry Out, Cout)
  • 真值表:

ABCinCout (进位输出)Σ (和)
00000
00101
01001
01110
10001
10110
11010
11111
  • 逻辑表达式与电路实现:
    • 和 (Σ): Σ = (A ⊕ B) ⊕ Cin
    • 进位输出 (Cout): Cout = A·B + (A ⊕ B)·Cin
    • 重要思想: 一个全加法器可以由两个半加法器和一个或门构成。
      1. 第一个半加法器计算 A + B,得到一个中间和 (A ⊕ B) 与中间进位 (A·B)。
      2. 第二个半加法器将中间和 (A ⊕ B) 与低位进位 Cin 相加,得到最终的和 Σ。
      3. 两个半加法器的进位输出通过一个或门相连,得到最终的进位输出 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),这个进位将会被传播到下一位。
    • 输出进位公式: Cout = Cg + Cp · Cin
    • 优点: 通过复杂的逻辑电路,可以同时计算出所有位的进位信号,极大地加快了加法运算的速度。电路的复杂度更高,但性能更好。
    • 4位超前进位逻辑: 我们可以推导出每一位的进位输出 (Cout1, Cout2, …) 仅与输入位 (A, B) 和初始进位 (Cin1) 相关的复杂表达式。这样所有进位就可以并行计算。

第二部分:比较器 (Comparators)#

比较器用于比较两个二进制数的大小。

1. 相等比较 (Equality)#

  • 基本单元: 同或门 (XNOR) 是最基本的比较器。当两个输入位相同时,输出为1;不同时,输出为0。
  • 多位比较: 要比较两个n位数是否相等(例如 A=A1A0, B=B1B0),我们需要比较它们所有对应的位。
    • 只有当 A1B1 相等 A0B0 相等时,我们才认为 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级联输入端。这使得我们可以将多个比较器连接起来,比较更多位的数字。
    • 级联方法:
      1. 比较低位的比较器(例如比较0-3位)的输出连接到比较高位的比较器(例如比较4-7位)的级联输入端。
      2. 最低位的比较器,其 A=B 级联输入必须接高电平(HIGH),而 A>BA<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

第四部分:多路复用器与解复用器#

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=1B 从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)#

  1. 半加法器对两个二进制位进行相加。

    • ✔ 对 (True). 这是半加法器的定义。
  2. 半加法器只有一个进位输出。

    • ❌ 错 (False). 它有一个进位输出 (Cout) 和一个和输出 (Sum)。
  3. 全加法器对两个二进制位进行相加,并产生两个输出。

    • ❌ 错 (False). 它对三个二进制位(A, B, Cin)进行相加,产生两个输出 (Sum, Cout)。
  4. 全加法器只能用2输入异或门来实现。

    • ❌ 错 (False). 实现全加法器不仅需要异或门,还需要与门和或门。
  5. 当输入位都为1,输入进位也为1时,全加法器的和输出是1。

    • ✔ 对 (True). 1 + 1 + 1 = 3 (二进制为 11)。所以和 (Sum) 是1,进位输出 (Cout) 也是1。
  6. 当两个二进制输入相等时,比较器的输出是0。

    • ❌ 错 (False). 这取决于设计。通常,相等时 A=B 输出会是高电平(1),表示“相等”这个条件成立。
  7. 解码器检测输入位的特定组合是否存在。

    • ✔ 对 (True). 当输入是某个特定组合时,解码器会激活对应的那个输出。
  8. 4线-10线解码器和1-of-10解码器是两种不同类型。

    • ❌ 错 (False). 它们通常指的是同一种设备,即BCD-十进制解码器。
  9. 编码器本质上执行解码器的逆功能。

    • ✔ 对 (True). 编码器将激活的线的位置转为代码,解码器将代码转为激活的线的位置。
  10. 多路复用器是允许数字信息从单一来源路由到多条线路的逻辑电路。

    • ❌ 错 (False). 这个描述是解复用器 (DEMUX) 的功能。多路复用器 (MUX) 是将多个来源的信息路由到单一线路
ECE2050-Chapter6
https://chr0mium.link/posts/ece2050-chapter6/
作者
Cr
发布于
2025-08-24
许可协议
CC BY-NC-SA 4.0