PREVIEW
数字逻辑门(AND、OR、NOT)与真值表、信号流,展示布尔代数原理。

AND、OR、NOT 这三种基本逻辑门,在布尔代数原理之上构成所有数字电路的构建块。

布尔代数:数字电路设计的基石

布尔代数定义了电路如何操作 TRUE 与 FALSE。本文涵盖 AND/OR/NOT 三个原语,以及恒等律、吸收律和德摩根定理。

TL;DR: 布尔代数是用 AND、OR 和 NOT 操作 TRUE/FALSE 值的形式系统。它的定律——恒等律、吸收律、分配律、互补律和德摩根定理——让你可以把一个布尔表达式变换成等价的更简形式,而这种简化在硅片上直接对应更少的门和更小的传输延迟。

19 世纪中叶,乔治·布尔(George Boole)将”思想的代数”形式化,如今它已是每一颗数字芯片的运行数学。无论是微处理器、存储单元还是图形流水线,最终都会归约到他所定义的 AND、OR、NOT 三个操作。

对于工程师或计算机科学家,掌握布尔定律绝非纸上谈兵。化简一个布尔表达式意味着删除门、消除连线、从传输延迟中抠出皮秒。如果你能把数学化简下来,你就能把硅片化简下来。

三个原语操作:AND、OR、NOT

无论数字逻辑多复杂,都建立在三个原语操作之上。理解它们就等于掌握数字设计的字母表。在 digisim.io 中,它们由分立元件表示,你可以把它们任意连接,搭出任意复杂的逻辑。

AND 门元件示意图

1. AND 操作

只有当所有输入都为 TRUE 时,输出才是 TRUE (1)。把它当成一种严格要求:在重型机械的安全系统里,可能要求”启动按钮”被按下”安全防护”已合上,电机才能运转。在电路上,AND 门相当于串联连接——必须每个开关都闭合,电流才能流通。

  • 布尔表达式: Y=ABY = A \cdot B
  • 元件名称: AND

2. OR 操作

只要至少有一个输入为 TRUE,输出就为 TRUE (1)。在家庭安防系统中,只要”前门被打开””后窗被砸破”,报警器就应触发。在电路上,OR 门相当于并联连接——任意一个开关闭合,电流就能流通。

  • 布尔表达式: Y=A+BY = A + B
  • 元件名称: OR

3. NOT 操作(反相器)

输出是单一输入的逻辑取反。输入为 HIGH 则输出为 LOW,反之亦然。在电路上,NOT 门(或反相器)翻转信号电平,把高有效信号转换为低有效信号,或反之。

  • 布尔表达式: Y=AY = \overline{A} (或 AA')
  • 元件名称: NOT

尝试 AND 门行为

在初学这些门时,一个干净、独立的环境——可以让你拨动输入并看着真值表逐步活起来——非常有价值。

技术规格:真值表

真值表是数字逻辑最基本的”计分卡”。它把每一种可能的输入组合映射到对应的输出。

AND 门真值表

输入 A输入 B输出 Y
000
010
100
111

OR 门真值表

输入 A输入 B输出 Y
000
011
101
111

NOT 门真值表

输入 A输出 Y
01
10

布尔代数有哪些定律?

定义好基本操作后,我们就可以探究让我们能够变换、化简逻辑表达式的定律了。这些不是抽象规则——而是一种电路变换。每条定律都对应一种具体的硬件优化:删除一个门、消除一根连线,或减小传输延迟。

OR 门元件示意图

恒等律与零律

这些定律定义了变量与常数 0、1 之间的关系。你可以在 digisim.io 中用 CONSTANT 与 CONSTANT_ZERO 元件验证它们。

  • 恒等律(Identity Law): 变量与对应运算的”恒等元素”组合,保持不变。
  • 与 0 OR: A+0=AA + 0 = A —— 把 OR 门一个输入接地,对输出毫无影响。
  • 与 1 AND: A1=AA \cdot 1 = A —— 把 AND 门一个输入接 VCC,对输出毫无影响。
  • 零律(Null/Annihilation Law): 变量与”支配元素”组合,结果就是该支配元素。
  • 与 1 OR: A+1=1A + 1 = 1 —— 如果 OR 门有一个输入恒为 HIGH,无论 A 是什么,输出都为 HIGH。
  • 与 0 AND: A0=0A \cdot 0 = 0 —— 如果 AND 门有一个输入恒为 LOW,无论 A 是什么,输出都为 LOW。

互补律与幂等律

这些定律刻画变量与自身或自身取反之间的关系。

  • 幂等律(Idempotent Law): 变量与自身组合不产生改变。
  • A+A=AA + A = A —— 把同一信号接到 OR 门两个输入,等价于一根直连。
  • AA=AA \cdot A = A —— 把同一信号接到 AND 门两个输入,等价于一根直连。
  • 互补律(Complement Law): 变量与自身取反组合,结果是常数。
  • A+A=1A + \overline{A} = 1 —— 信号要么 HIGH 要么 LOW,所以两个 OR 输入中必有一个为 1。
  • AA=0A \cdot \overline{A} = 0 —— 信号不可能同时既 HIGH 又 LOW,所以 AND 输出必为 0。

交换律、结合律与分配律

对于任何熟悉传统代数的人,这些定律大多都很熟悉。

  • 交换律(Commutative): A+B=B+AA + B = B + A 以及 AB=BAA \cdot B = B \cdot A —— AND 或 OR 门输入的顺序不影响结果。
  • 结合律(Associative): (A+B)+C=A+(B+C)(A + B) + C = A + (B + C) 以及 (AB)C=A(BC)(A \cdot B) \cdot C = A \cdot (B \cdot C) —— 多个门可以任意分组级联,结果不变。
  • 分配律(标准形式): A(B+C)=AB+ACA \cdot (B + C) = A \cdot B + A \cdot C —— 与普通代数完全一致,你可以随意因式分解或展开表达式。

但布尔代数还有一条实数代数中并不成立的分配律:

A+(BC)=(A+B)(A+C)A + (B \cdot C) = (A + B) \cdot (A + C)

这一条乍看反直觉。在普通数学中,5+(3×4)=175 + (3 \times 4) = 17,而 (5+3)×(5+4)=72(5+3) \times (5+4) = 72,二者并不相等。但在布尔逻辑的二进制世界里,这个等式成立。

直觉上的关键:如果 A=1A = 1,两边都立即等于 1。如果 A=0A = 0,两边都化为 BCB \cdot C。不要像处理二次式那样去”FOIL”展开右边——布尔代数没有平方项的概念,因为 AA=AA \cdot A = A。这第二条分配律是在”积之和”(SOP)与”和之积”(POS)之间转换的核心,而它们正是任何布尔函数的两种规范表示形式。

重武器:吸收律与德摩根定理

下面这些定律可以删除整项、并对表达式做激进的重构。它们是真实电路化简的主力。

吸收律:消除冗余

吸收律允许你删除整组门而不改变行为。

  • A+AB=AA + A \cdot B = A
  • A(A+B)=AA \cdot (A + B) = A

第一个形式的直觉:A+ABA + A \cdot BAA 为真, AABB 都为真时为真。但如果 AA 已经为真,那么无论 BB 是什么整个表达式都为真。ABA \cdot B 这一项完全冗余。在硬件上,这意味着删掉一个 AND 门和一个 OR 门,代之以一根直连。

还有一个鲜为人知的变体,有时被称为共识定理(Consensus Theorem):

  • AB+AC+BC=AB+ACA \cdot B + \overline{A} \cdot C + B \cdot C = A \cdot B + \overline{A} \cdot C

第三项 (BCB \cdot C) 是冗余的,因为前两项在所有情形下已经覆盖了它。靠肉眼分析很难一眼看出,但卡诺图(Karnaugh map)能让它一目了然。

德摩根定理:分配取反

奥古斯都·德摩根(Augustus De Morgan)的定理告诉我们如何把一个 NOT 操作分配到 AND 与 OR 上,从而对取反表达式进行重构。

  • 第一定律: AB=A+B\overline{A \cdot B} = \overline{A} + \overline{B} —— NAND 门等价于输入取反的 OR 门。
  • 第二定律: A+B=AB\overline{A + B} = \overline{A} \cdot \overline{B} —— NOR 门等价于输入取反的 AND 门。

在电路意义上,这种对偶性是现代芯片设计的根本。在 CMOS 工艺中,NAND 与 NOR 门在物理上比标准的 AND 与 OR 更小、更快,所以设计者经常用德摩根定理把逻辑转换为纯 NAND 或纯 NOR 实现。如需更深入的内容,请参阅我们专门的 德摩根定律实战 文章。

NAND 门元件示意图

探索通用 NAND 逻辑

在 digisim.io 上仿真:从理论到可见证据

读懂这些定律是一回事,亲眼看到它们生效又是另一回事。让我们在 digisim.io 画布上证明吸收律 A+AB=AA + A \cdot B = A

一步步验证

  1. 打开仿真器: 在 digisim.io/circuits/new 新建项目。
  2. 放置输入: 拖两个 INPUT_SWITCH 到画布上。用 TEXT 工具标注为 ‘A’ 和 ‘B’。
  3. 搭建复杂版本:
  • 放置一个 AND 门。把 ‘A’ 和 ‘B’ 接到它的输入。
  • 放置一个 OR 门。把 AND 门的输出接到它的一个输入,把 ‘A’ 直接接到另一个输入。
  • 把 OR 门的输出接到一个 OUTPUT_LIGHT。
  1. 搭建化简版本:
  • 直接把 ‘A’ 接到第二个 OUTPUT_LIGHT 上。
  1. SimCast 时刻: 用 SimCast 功能录下你的操作。把 ‘A’ 和 ‘B’ 切换四种组合。你会看到两盏灯始终一致。无论 ‘B’ 怎么动,第一盏灯只关心 ‘A’。

示波器验证:观察传输

为了真正理解未化简电路的”代价”,在画布上放一个 OSCILLOSCOPE_8CH。把通道 1 接到输入 ‘A’,通道 2 接到你那个复杂 OR 门的输出。

切换 ‘A’ 时,你会在示波器波形上看到一段微小的延迟。这就是传输延迟(tpdt_{pd})。每个门都为信号传播添加一点时间。把 A+ABA + A \cdot B 化简为单一的 AA,就消除了两个门(AND 和 OR)的延迟,使总 tpdt_{pd}tpd(AND)+tpd(OR)t_{pd(AND)} + t_{pd(OR)} 直降到零。在高速设计中,这些节省直接转化为更高的可达时钟频率。

安全系统模板示意图

打开安全报警电路

Security Alarm 模板展示了多个门(AND、OR、NOT)在真实场景中如何协作——是练习这些化简定律的实用沙盒。

真实世界应用:化简的力量

这并不只是课堂练习里省下几个门的事。在现实系统中,化简直接转化为更便宜、更快、更省电的硬件。

例 1:高速存储地址译码

在经典的 Intel 8086 架构中,CPU 用地址线选择要与哪片存储芯片通信。让某片芯片被使能的逻辑叫做地址译码器。如果译码器逻辑没有优化,“使能”信号到达 RAM 芯片的时间就会变长,逼迫 CPU 插入”等待状态”——本质上是因为逻辑太慢而干等。通过对译码电路应用布尔定律,工程师能够削减出足够的延迟,从而让整套系统跑在更高的时钟频率上。

例 2:ALU 状态标志

算术逻辑单元(ALU)是 CPU 的计算核心。每次运算后,它会在 FLAGS_REGISTER 中设置状态标志(如零、负、溢出)。其中”溢出”(Overflow)标志的逻辑出了名地复杂,牵扯到最高有效位的进位入与进位出。

如果你不做化简就用原始逻辑去搭它,你会得到一团巨大的门级网络。借助德摩根定律和分配律,设计者可以把这套逻辑压缩成几个高速 NAND 门,确保运算一结束标志就立刻就绪。

课程相关主题

在 digisim.io 上继续探索数字逻辑时,以下相关主题会加深你的理解:

速查表:所有定律一览

定律OR 形式AND 形式
恒等律A+0=AA + 0 = AA1=AA \cdot 1 = A
零律A+1=1A + 1 = 1A0=0A \cdot 0 = 0
幂等律A+A=AA + A = AAA=AA \cdot A = A
互补律A+A=1A + \overline{A} = 1AA=0A \cdot \overline{A} = 0
交换律A+B=B+AA + B = B + AAB=BAA \cdot B = B \cdot A
结合律(A+B)+C=A+(B+C)(A+B)+C = A+(B+C)(AB)C=A(BC)(AB)C = A(BC)
分配律A+BC=(A+B)(A+C)A + BC = (A+B)(A+C)A(B+C)=AB+ACA(B+C) = AB + AC
吸收律A+AB=AA + AB = AA(A+B)=AA(A+B) = A
德摩根A+B=AB\overline{A+B} = \overline{A}\cdot\overline{B}AB=A+B\overline{AB} = \overline{A}+\overline{B}
双重否定A=A\overline{\overline{A}} = A

你来动手:把知识落地

布尔代数是连接抽象想法和可工作硅片的语言。这些定律就是你雕刻逻辑、剔除冗余、打造既高效又正确的设计所需的数学工具。

来一个挑战:取表达式 Y=ABC+ABC+ABCY = A \cdot B \cdot C + A \cdot B \cdot \overline{C} + A \cdot \overline{B} \cdot C

  1. 用分配律把公因子提出来: Y=AB(C+C)+ABCY = A \cdot B \cdot (C + \overline{C}) + A \cdot \overline{B} \cdot C
  2. 应用互补律 (C+C=1C + \overline{C} = 1) 和恒等律 (AB1=ABA \cdot B \cdot 1 = A \cdot B),得到 Y=AB+ABCY = A \cdot B + A \cdot \overline{B} \cdot C
  3. 再次因式分解: Y=A(B+BC)=A(B+C)Y = A \cdot (B + \overline{B} \cdot C) = A \cdot (B + C)。(最后一步用到吸收律变体 B+BC=B+CB + \overline{B}C = B + C。)
  4. 打开 digisim.io,把原始的 3-min项电路与化简后的 2 门版本都搭出来。
  5. 用 OSCILLOSCOPE 比较二者的传输延迟。

继续阅读本系列下一篇: 积之和(SOP),或者打开 AND 门元件参考 亲手把其中某条定律连出来。