bitGateLab Digital · 学习
中文(简体)
打开模拟器

学习 › 第 2 讲

布尔代数:基本定律、德摩根定理与化简

阅读约 7 分钟 · bitGateLab 团队

布尔代数是描述和变换数字电路所用的语言。每个表达式都对应一种逻辑门的接法,而你在化简时每用一条定律,就意味着省下若干个门。本文将带你复习基本公理、最常用的定律、德摩根定理,以及如何一步一步地化简表达式,并为每一步给出依据。

变量与运算

布尔变量只能取 0 和 1 两个值。基本运算有三种:取反(A,NOT 门)、逻辑乘(A·B 或 AB,AND 门)和逻辑加(A + B,OR 门)。没有括号时,运算的优先顺序是:先取反,再乘,最后加。因此 A + BC 表示 A + (B·C),与普通代数一样。

基本公理

整个布尔代数建立在少数几条公理之上。注意它们是成对出现的:一条针对加法,一条针对乘法。

公理加法形式乘法形式
自等律A + 0 = AA · 1 = A
交换律A + B = B + AAB = BA
分配律A + BC = (A + B)(A + C)A(B + C) = AB + AC
互补律A + A = 1A · A = 0
对偶原理:如果一个等式成立,那么把其中的 + 与 · 互换、0 与 1 互换(变量及其上方的横线保持不动)后得到的等式也成立。所以每条定律都有一个“孪生”版本。请留意加对乘的分配律 A + BC = (A + B)(A + C):它在实数代数中并不成立,但在这里完全正确。

常用定律和定理

由公理可以推出下面这些规则,它们是你化简时用得最多的:

定律加法形式乘法形式
重叠律A + A = AAA = A
零一律A + 1 = 1A · 0 = 0
还原律A = A
结合律A + (B + C) = (A + B) + CA(BC) = (AB)C
吸收律A + AB = AA(A + B) = A
消因子律A + AB = A + BA(A + B) = AB
并项律AB + AB = A(A + B)(A + B) = A
共识定理(冗余律)AB + AC + BC = AB + AC(A + B)(A + C)(B + C) = (A + B)(A + C)

这些定律中的任何一条都可以用真值表来验证:如果两列在所有行上都相同,等式就成立。例如 A + AB = A:当 A = 0 时,无论 B 取何值,两边都为 0;当 A = 1 时,两边都为 1。消因子律可以这样证明:A + AB = (A + A)(A + B) = 1·(A + B) = A + B,这里用到了加对乘的分配律。

德摩根定理

这两条定理告诉你如何把一条长横线“断开”:

实用口诀:断开横线时,把横线下面的运算换掉(· 换成 +,或 + 换成 ·),并对每一项取反。它对任意多个变量都适用:ABC = A + B + C。

ABABA + BA + BAB
001111
011100
101100
110000

在电路上,德摩根定理说明:NAND 门等效于输入端带小圆圈的 OR 门,NOR 门等效于输入端带小圆圈的 AND 门。这正是把任何设计转换成只用 NAND 或只用 NOR 的基础,详见逻辑门一文。

例 1:应用德摩根定理。化简 F = AB + C。

  1. 长横线盖住的是一个和:AB + C = AB · C。
  2. 断开乘积上的横线:AB = A + B。
  3. 结果:F = (A + B)C = AC + BC。

用 A = 1,B = 1,C = 0 验证:原式得 1 + 0 = 0;化简结果得 (0 + 0)·1 = 0。用 A = 0,B = 1,C = 0 验证:原式 0 + 0 = 1;化简结果 (1 + 0)·1 = 1。

一步一步进行代数化简

化简就是减少项数和文字数(文字指变量的每一次出现,不论是否取反)。文字越少,门的输入端就越少。纯代数方法没有一套唯一的算法,但下面这些技巧几乎总能奏效:

例 2。化简 F = AB + AB + AB。

  1. 对前两项提取公因子:AB + AB = A(B + B) = A·1 = A。
  2. 于是 F = A + AB。
  3. 消因子律:A + AB = A + B。

F = A + B。原来需要三个 AND 门、一个三输入 OR 门和两个反相器,现在只要一个 OR 门。

例 3:多数表决函数。化简 F = ABC + ABC + ABC + ABC。

  1. 根据重叠律,ABC = ABC + ABC + ABC。写出三份,让每一份分别与一个相邻项合并。
  2. ABC + ABC = BC(A + A) = BC。
  3. ABC + ABC = AC(B + B) = AC。
  4. ABC + ABC = AB(C + C) = AB。

F = AB + AC + BC。只要三个输入中至少有两个为 1,它就输出 1:这是一个表决电路。你以后会看到,它也是全加器的进位输出。

例 4:加对乘的分配律。化简 F = (A + B)(A + C)。

  1. 展开相乘:AA + AC + AB + BC = A + AC + AB + BC。
  2. 提取 A:A(1 + C + B) + BC。
  3. 零一律:1 + C + B = 1,于是得到 A + BC。

这正是把加对乘的分配律公理反过来读。

常见错误

在模拟器中试一试

正确的化简得到的电路,其真值表与原电路完全相同。模拟器可以让你不必手工列表就验证这一点。

  1. 在编辑器中搭出某个例子的原始电路,例如 AB + AB + AB,带上它的输入和输出。
  2. 生成它的真值表并记下来。
  3. 在同一画布上用另一个输出,以相同的输入搭出化简后的版本(A + B)。
  4. 把输入切换成所有组合,观察两个输出是否始终一致。
  5. 让工具根据真值表给出化简后的表达式,并与你手算的结果比较。

练习

  1. 化简 F = AB + AB + AB。
    答案

    AB + AB = A。然后 A + AB = A + B(消因子律)。F = A + B = AB:这是一个 NAND 门。

  2. 化简 F = A + B。
    答案

    德摩根定理:A · B = AB。

  3. 化简 F = A(A + B) + B(B + C)。
    答案

    根据吸收律,A(A + B) = A,B(B + C) = B。F = A + B。

  4. 证明共识定理:AB + AC + BC = AB + AC。
    答案

    写出 BC = BC(A + A) = ABC + ABC。于是 AB + ABC = AB(吸收律),AC + ABC = AC(吸收律)。最后剩下 AB + AC。