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

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

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

DennyDenny
阅读约需 11 分钟
Chalkboard feature illustration for “布尔代数:数字电路设计的基石”

概要: 布尔代数是使用 AND、OR、NOT 等运算处理二值逻辑变量的形式系统。恒等律、吸收律、分配律、互补律和德摩根定律可以在保持函数不变的前提下改变表达形式。更简的表达式可作为实现候选,但单元数量、延迟、功耗、冒险和面积必须在映射到目标技术后评估。

George Boole 在 19 世纪中叶建立的代数,后来成为数字逻辑设计的理论基础之一。在布尔抽象层,处理器、存储器和图形硬件中的组合函数可用 AND、OR、NOT,或其他函数完备基来表示;模拟行为、时序、状态和物理实现还需要其他模型。

对于工程师或计算机科学工作者,布尔变换是一项实用设计技能。它可以揭示冗余条件、公共子表达式和替代极性,但字面量最少的表达式不一定对应布局后最优的电路;综合库、扇入、重汇聚路径、布线、负载、时序约束、可测试性和功耗目标都会影响最终结果。

三种基本运算:AND、OR、NOT

AND、OR 和 NOT 构成函数完备集:任意有限布尔函数都可以用它们表示。因此,它们是很有价值的教学基础;实际物理单元库还会提供 NAND、NOR、XOR、多路复用器、复合门、查找表和时序单元。DigiSim 以分立元件表示这些运算,可将其连接成更大的教学电路。

AND 门元件示意图

1. AND 操作

只有当所有输入都为 TRUE 时,输出才是 TRUE(1)。作为逻辑示例,一条命令可以要求 start_request 与 guard_closed 同时有效。真实机械安全功能必须采用基于风险评估、具备容错能力且符合适用标准的安全额定硬件;一个双输入门并不构成安全设计。在理想触点模型中,串联常开触点表现为 AND,因为所有触点都必须闭合,电流才能流通。

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

2. OR 操作

只要至少有一个输入为 TRUE,输出就为 TRUE(1)。例如,当 door_open OR window_open 为真时,可以置位逻辑报警请求。在理想触点模型中,并联常开支路表现为 OR,因为任一支路均可闭合回路。

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

3. NOT 操作(反相器)

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

  • 布尔表达式: Y=A‾Y = \overline{A}(或 A′A')
  • 元件名称: 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: A⋅1=AA \cdot 1 = A —— 把 AND 门一个输入接 VCC,对输出毫无影响。
  • **零律(Null/Annihilation Law):**变量与“支配元素”组合,结果就是该支配元素。
  • 与 1 OR: A+1=1A + 1 = 1 —— 如果 OR 门有一个输入恒为 HIGH,无论 A 是什么,输出都为 HIGH。
  • 与 0 AND: A⋅0=0A \cdot 0 = 0 —— 如果 AND 门有一个输入恒为 LOW,无论 A 是什么,输出都为 LOW。

互补律与幂等律

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

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

物理过渡过程与四态仿真值需要另行处理;上述代数恒等式并不意味着真实节点始终处于理想电源轨电压。

交换律、结合律与分配律

这些定律大多与传统代数中的对应形式相似。

  • 交换律(Commutative): A+B=B+AA + B = B + A 以及 A⋅B=B⋅AA \cdot B = B \cdot A —— AND 或 OR 门输入的顺序不影响结果。
  • 结合律(Associative): (A+B)+C=A+(B+C)(A + B) + C = A + (B + C) 以及 (A⋅B)⋅C=A⋅(B⋅C)(A \cdot B) \cdot C = A \cdot (B \cdot C) —— 稳定布尔结果相同,但不同分组仍可能改变逻辑深度、负载、延迟和瞬态冒险。
  • 分配律(标准形式): A⋅(B+C)=A⋅B+A⋅CA \cdot (B + C) = A \cdot B + A \cdot C——与普通代数一致,可对表达式进行因式分解或展开。

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

A+(B⋅C)=(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,两边都化为 B⋅CB \cdot C。不能像处理二次式那样用 FOIL 法展开右边——布尔代数没有平方项的概念,因为 A⋅A=AA \cdot A = A。这第二条分配律是在“积之和”(SOP)与“和之积”(POS)之间转换的核心,而它们正是任何布尔函数的两种规范表示形式。

进阶恒等式:吸收律与德摩根定理

以下定律可以删除整项并重构表达式,是实际电路化简中的常用工具。

吸收律:消除冗余

吸收律可在不改变稳定真值表的前提下移除冗余布尔项。

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

第一个形式的直觉:A+A⋅BA + A \cdot B 在 AA 为真,或 AA 与 BB 同时为真时为真。只要 AA 已经为真,结果就不再依赖 BB。在独立的门级实现中,该表达式可以化简为来自 AA 的连接;实现工具仍须处理扇出、缓冲、时序以及中间项的其他使用者。

还有一个较少提及的变体,称为共识定理(Consensus Theorem):

  • A⋅B+A‾⋅C+B⋅C=A⋅B+A‾⋅CA \cdot B + \overline{A} \cdot C + B \cdot C = A \cdot B + \overline{A} \cdot C

对于稳态布尔函数,第三项(B⋅CB \cdot C)是冗余项,因为前两项已经覆盖对应的全部 1。不过,在异步或对冒险敏感的实现中,可以保留或加入该共识项以抑制静态冒险。因此,“逻辑冗余”并不总是等于“物理上无用”。

德摩根定理:分配取反

奥古斯都·德摩根(Augustus De Morgan)的定理给出了如何把 NOT 运算分配到 AND 与 OR 上,从而对取反表达式进行重构。

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

在电路意义上,这种对偶性是极性感知逻辑变换的核心。静态 CMOS 库通常以反相 NAND 或 NOR 级再接反相器来实现 AND 或 OR;相对面积和延迟取决于扇入、晶体管尺寸、驱动能力、负载及经过表征的单元库。在相同扇入下,CMOS NAND 往往比 NOR 更有利,因为 NOR 的上拉网络串联了 p 沟道器件;但技术映射后,二者都不保证始终最小或最快。有关详细说明,参见专题文章 德摩根定律实战。

NAND 门元件示意图

探索通用 NAND 逻辑

在 DigiSim 中验证布尔恒等式

A、B 的四种输入组合可以穷举验证二变量吸收恒等式 A+A⋅B=AA + A \cdot B = A。这项实验验证的是仿真模型中的真值表,并不是对物理时序或硅实现的证明。

分步验证

  1. **打开仿真器:**在 DigiSim.io/logic/new 新建项目。
  2. **放置输入:**将两个 INPUT_SWITCH 拖到画布,并使用 TEXT 工具分别标注为 A 和 B。
  3. 搭建未化简版本:
  • 放置一个 AND 门,将 A 和 B 接到其输入端。
  • 放置一个 OR 门,将 AND 门的输出接到一个输入端,并将 A 直接接到另一个输入端。
  • 将 OR 门的输出接到一个 OUTPUT_LIGHT。
  1. 搭建化简版本:
  • 将 A 直接接到第二个 OUTPUT_LIGHT。
  1. **比较全部表行:**遍历 A、B 的四种组合并记录两个输出。每一行的输出都必须相同;表达式化简为 A 后,B 不得再影响结果。

示波器验证:观察传播过程

若要检查当前仿真模型所表示的时序,可在画布上放置 OSCILLOSCOPE_8CH,将通道 1 接到输入 A,通道 2 接到复杂 OR 网络的输出。

如果所选元件建模了传播延迟,可以比较逻辑门网络与直接路径的响应。把 A+A⋅BA + A \cdot B 化简为 AA 会移除该路径上的两级逻辑,但不会使物理延迟变为零:互连、缓冲器、源电阻、负载、转换时间以及所需输出单元仍然存在。时钟频率必须依据映射后设计的时序分析确定,不能把若干通用门延迟直接相加后得出。

安全系统模板示意图

打开安全报警电路

Security Alarm 模板展示了多个门(AND、OR、NOT)在实际场景中的协作方式,可用于练习这些化简定律。

实际应用:化简的作用

布尔化简为实现工具提供了更多候选形式。根据目标技术和约束,变换后的表达式可能减少逻辑、共享公共项、改善时序或降低开关活动,也可能需要在不同目标之间作出权衡。

例 1:高速存储地址译码

地址译码器组合地址信号与控制信号,以选择一个存储器或外设目标。译码延迟占用接口时序预算;根据处理器和存储器协议,延迟过大可能需要延长周期、加入等待状态或改用其他实现。布尔因式分解只是其中一个设计输入;扇出、可编程逻辑资源、板级传播延迟、存储器访问时间和信号完整性同样会决定结果。

例 2:ALU 状态标志

算术逻辑单元(ALU)常生成零、负、进位和有符号溢出等状态标志。对于二进制补码加法,有符号溢出可以通过操作数与结果的符号关系,或最高有效位的进位输入与进位输出异或来检测;具体定义必须明确操作和标志约定。

这些标志并非“瞬时”产生,其稳定时间取决于算术结构、逻辑深度、布线、负载与寄存方式。德摩根定律和分配律可以提供等价形式,但是否采用 NAND 网络、是否更快或面积更小,仍须依据目标单元库和时序分析判断。

课程相关主题

以下主题可用于进一步学习 DigiSim.io 中的数字逻辑:

速查表:所有定律一览

定律OR 形式AND 形式
恒等律A+0=AA + 0 = AA⋅1=AA \cdot 1 = A
零律A+1=1A + 1 = 1A⋅0=0A \cdot 0 = 0
幂等律A+A=AA + A = AA⋅A=AA \cdot A = A
互补律A+A‾=1A + \overline{A} = 1A⋅A‾=0A \cdot \overline{A} = 0
交换律A+B=B+AA + B = B + AA⋅B=B⋅AA \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‾=A‾⋅B‾\overline{A+B} = \overline{A}\cdot\overline{B}AB‾=A‾+B‾\overline{AB} = \overline{A}+\overline{B}
双重否定A‾‾=A\overline{\overline{A}} = A

实践:将代数化简落实为电路

布尔代数连接了功能规范与候选逻辑结构。它可以在二值逻辑层证明等价性;候选实现能否满足完整设计要求,还需通过综合、时序分析、电气分析与验证来判定。

可按以下步骤化简表达式 Y=A⋅B⋅C+A⋅B⋅C‾+A⋅B‾Y = A \cdot B \cdot C + A \cdot B \cdot \overline{C} + A \cdot \overline{B}。

  1. 用分配律把公因子提出来:Y=A⋅B⋅(C+C‾)+A⋅B‾⋅CY = A \cdot B \cdot (C + \overline{C}) + A \cdot \overline{B} \cdot C。
  2. 应用互补律(C+C‾=1C + \overline{C} = 1)和恒等律(A⋅B⋅1=A⋅BA \cdot B \cdot 1 = A \cdot B),得到 Y=A⋅B+A⋅B‾⋅CY = A \cdot B + A \cdot \overline{B} \cdot C。
  3. 再次因式分解:Y=A⋅(B+B‾⋅C)=A⋅(B+C)Y = A \cdot (B + \overline{B} \cdot C) = A \cdot (B + C)。(最后一步用到吸收律变体 B+B‾C=B+CB + \overline{B}C = B + C。)
  4. 在 DigiSim.io 中分别搭建原始的 3 个最小项电路与化简后的双门版本。
  5. 用 OSCILLOSCOPE 比较仿真模型中的传输延迟,并说明该结果为何不能直接预测物理实现的延迟。

后续可阅读本系列的积之和(SOP),或打开 AND 门元件参考,选择其中一条定律进行接线验证。

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