← 返回博客布尔代数基础 · 2/4

掌握积之和(SOP):布尔函数指南

积之和(SOP)通过对最小项进行 OR 运算,将真值表转换为布尔表达式。结果可直接映射为 AND-OR 或 NAND-NAND 硬件。

DennyDenny
阅读约需 7 分钟
Chalkboard feature illustration for “掌握积之和(SOP):布尔函数指南”

简述: 积之和(SOP)是一种将任何真值表转换为布尔表达式的系统方法:为输出为 1 的每一行写一个最小项,再将它们 OR 在一起。规范形式是正确的,但很少是最简的——应使用卡诺图或布尔代数化简。

数字设计的根本挑战,是把所需行为——一组以真值表表达的规则——转换为逻辑门的物理排列。如何系统地弥合这一差距,而不靠猜测?

答案是**积之和(SOP)**形式。SOP 提供一种机械化、可重复的方法,将任何真值表转换为可工作的门级电路。这是从抽象需求走向有形硬件的第一个重要步骤。

什么是积之和?

积之和的核心,是将一个或多个AND项通过 OR 运算连接起来,写成一个布尔表达式的方法。在布尔代数中,OR 运算通常称为“和”,AND 运算通常称为“积”。

考虑下面的表达式:

Y=(A⋅B‾)+(A‾⋅B)Y = (A \cdot \overline{B}) + (\overline{A} \cdot B)

这里,(A⋅B‾)(A \cdot \overline{B}) 是一个积项,(A‾⋅B)(\overline{A} \cdot B) 是另一个。符号 + 表示 OR 运算,即这些积的“和”。这一结构可直接转换为两级电路:第一级 AND 门馈入第二级的单个 OR 门。这种可预测性正是它的力量来源。

原子单元:最小项

从真值表构建 SOP 表达式时,首先需要明确其基本构建块:最小项。最小项是一种特殊的积项,包含函数中的每个变量,且变量要么以原变量形式出现,要么以补变量形式出现。

对于具有三个变量(A、B、C)的函数,有 23=82^3 = 8 个可能的最小项。每个最小项恰好对应真值表中的一行。

创建最小项的规则很简单:

  • 如果该行中变量的值为 1,直接使用该变量(例如 A)。
  • 如果该行中变量的值为 0,使用变量的补(例如 A‾\overline{A})。

下面列出一个 3 变量系统的最小项:

最小项二进制(ABC)表达式
m0m_0000A‾⋅B‾⋅C‾\overline{A} \cdot \overline{B} \cdot \overline{C}
m1m_1001A‾⋅B‾⋅C\overline{A} \cdot \overline{B} \cdot C
m2m_2010A‾⋅B⋅C‾\overline{A} \cdot B \cdot \overline{C}
m3m_3011A‾⋅B⋅C\overline{A} \cdot B \cdot C
m4m_4100A⋅B‾⋅C‾A \cdot \overline{B} \cdot \overline{C}
m5m_5101A⋅B‾⋅CA \cdot \overline{B} \cdot C
m6m_6110A⋅B⋅C‾A \cdot B \cdot \overline{C}
m7m_7111A⋅B⋅CA \cdot B \cdot C

注意,每个最小项只会在其特定输入组合下求值为 1。例如,m5m_5(A⋅B‾⋅CA \cdot \overline{B} \cdot C)只在 A=1、B=0、C=1 时为真。对于其余七种输入组合,它都为假。最小项是精确定位真值表中单独一行的工具。

从真值表到 SOP:三步法

理解最小项后,将任何真值表转换为 SOP 表达式就是一个直接且机械化的过程。

以“3 个输入中至少 2 个为 1”的多数函数为例:仅当两个或更多输入为 1 时,输出 Y 才为 1。

ABCY最小项
0000
0010
0100
0111A‾⋅B⋅C\overline{A} \cdot B \cdot C
1000
1011A⋅B‾⋅CA \cdot \overline{B} \cdot C
1101A⋅B⋅C‾A \cdot B \cdot \overline{C}
1111A⋅B⋅CA \cdot B \cdot C

第 1 步:找出所有输出为 1 的行。 在本例中,输入组合为 011、101、110 和 111 时,输出 Y 为 1。

第 2 步:写出这些行各自的最小项。 根据上表,对应的最小项为 m3,m5,m6,m_3, m_5, m_6, 和 m7m_7。

第 3 步:将所有最小项 OR 在一起。 得到该函数最终的 SOP 表达式:

Y=(A‾⋅B⋅C)+(A⋅B‾⋅C)+(A⋅B⋅C‾)+(A⋅B⋅C)Y = (\overline{A} \cdot B \cdot C) + (A \cdot \overline{B} \cdot C) + (A \cdot B \cdot \overline{C}) + (A \cdot B \cdot C)

这称为规范 SOP 形式,因为它是所有相关最小项直接且未经化简的和。它完整描述了函数,并且可以立即据此构建电路。

常见误区:规范形式与最简形式

学生常见的困惑是以为规范 SOP 就是最终答案。虽然它在功能上正确,但几乎从来不是最高效的实现。它往往使用了超出必要数量的门和输入。

再次考察多数函数表达式,可用布尔代数将其化简:

Y=(A‾⋅B⋅C)+(A⋅B‾⋅C)+(A⋅B⋅C‾)+(A⋅B⋅C)Y = (\overline{A} \cdot B \cdot C) + (A \cdot \overline{B} \cdot C) + (A \cdot B \cdot \overline{C}) + (A \cdot B \cdot C) Y=B⋅C⋅(A‾+A)+A⋅C⋅(B‾+B)+A⋅B⋅(C‾+C)Y = B \cdot C \cdot (\overline{A} + A) + A \cdot C \cdot (\overline{B} + B) + A \cdot B \cdot (\overline{C} + C)

这种代数方法可行,但对于更大的表达式容易出错。卡诺图为 SOP 化简提供了一种可视化方法。通过在 K 图中对真值表的 1 分组,可以快速得到更简洁的表达式:

Y=(A⋅B)+(A⋅C)+(B⋅C)Y = (A \cdot B) + (A \cdot C) + (B \cdot C)

这种最简 SOP 形式实现相同逻辑,但只需三个 2 输入 AND 门和一个 3 输入 OR 门;规范形式则需要四个 3 输入 AND 门和一个 4 输入 OR 门。由真值表直接推导出的规范 SOP 是优化的起点,而非最终实现。

在 DigiSim.io 上仿真

下面构建未经化简的规范多数电路,以验证方程与硬件实现之间的对应关系。

  1. 设置输入: 从工具栏将三个输入组件拖到画布上,标记为 A、B 和 C。
  2. 创建最小项(积项):
  • 对于第一个最小项 A‾⋅B⋅C\overline{A} \cdot B \cdot C,输入 A 需要一个NOT 门。将这个 NOT 门的输出与输入 B、C 一起接入一个3 输入 AND 门。
  • 对另外三个最小项重复这一过程:(A⋅B‾⋅C)(A \cdot \overline{B} \cdot C)、(A⋅B⋅C‾)(A \cdot B \cdot \overline{C}) 和 (A⋅B⋅C)(A \cdot B \cdot C)。总共将有四个 3 输入 AND 门。
  1. 创建和: 将全部四个 AND 门的输出接入一个4 输入 OR 门。
  2. 添加输出: 将最后一个 OR 门的输出连接到一个输出组件(或 LED,以便获得视觉反馈)。

依次切换 A、B 和 C 输入并观察输出。仅当至少两个输入为高电平时,输出才有效,与原始真值表一致;由此即可验证规范已正确转换为可工作的数字逻辑电路。

SOP 到 NAND-NAND 的联系

SOP 最重要的性质之一,是它可直接映射到NAND-NAND 逻辑。在 CMOS 技术中,NAND 门的物理尺寸更小、速度也比 AND 或 OR 门更快。幸运的是,使用德摩根定律,任何 SOP 表达式都可转换为两级 NAND-NAND 电路。

这种转换是机械化的。从最简多数函数开始:

Y=AB+AC+BCY = AB + AC + BC

应用双重否定(不会改变值):

Y=AB+AC+BC‾‾Y = \overline{\overline{AB + AC + BC}}

对外层横线应用德摩根定律:

Y=AB‾⋅AC‾⋅BC‾‾Y = \overline{\overline{AB} \cdot \overline{AC} \cdot \overline{BC}}

每个 AB‾\overline{AB} 都是一次 NAND 运算,而积项外的横线也是一次 NAND。结果是一个两级 NAND-NAND 电路:三个 2 输入 NAND 门馈入一个 3 输入 NAND 门。它在逻辑上等同于 AND-OR 实现,但只使用一种门,从而简化了制造和单元库。

现实应用

积之和形式已嵌入现代计算的架构之中。

  1. 可编程逻辑阵列(PLA): 这些集成电路用于实现复杂组合逻辑。PLA 的内部结构是 SOP 概念的直接物理体现。它由一个可编程“AND 平面”(用于创建积项)和一个可编程“OR 平面”(用于对积项求和)组成。工程师通过指定这些平面中的连接来定义函数,等效于在硬件中构建一个定制 SOP 电路。
  2. 存储器地址译码: 当 CPU 需要从存储器中的特定位置读取或写入时,它会在地址总线上放置一个地址。存储器控制器内的译码电路必须识别应激活哪个存储器芯片和哪个行/列。这种逻辑通常使用 SOP 实现。例如,启用特定 RAM 块的信号可能是 Enable_Block_3 = A_{15} \cdot A_{14} \cdot \overline{A_{13}}。该积项确保仅当高位地址位与该特定模式匹配时才选择该块。整个存储器映射的逻辑就是此类积项之和。

积之和形式提供了一条可靠、系统化的路径,可从想法走到电路。它保证任何布尔函数,无论多么复杂,都可以用标准的两级 AND-OR(或 NAND-NAND)门结构表达并构建。

继续阅读本系列的下一篇:和之积(POS)——它从真值表的 0 而非 1 推导而来。或者直接阅读卡诺图,了解可视化的 SOP 最小化。

将想法变成真正可运行的电路。