三、逻辑代数基础:基本逻辑运算与复合逻辑

逻辑代数是数字电路分析与设计的数学工具,由英国数学家乔治·布尔于19世纪中叶提出,因此也称为布尔代数。在数字电路中,所有复杂的运算——从简单的数据选择到CPU中的算术逻辑单元(ALU)——最终都被分解为最基本的逻辑运算。本章将系统讲解与、或、非三种基本逻辑运算,以及由它们组合而成的与非、或非、异或、同或四种复合逻辑运算,并介绍逻辑函数的四种常用表示方法及其相互转换。理解这些基础概念,是后续学习组合逻辑电路、时序逻辑电路以及数字系统设计的必要前提。

逻辑代数基础:运算体系与表示方法 基本逻辑运算 与 (AND) Y = A·B 全1则1 或 (OR) Y = A+B 有1则1 非 (NOT) Y = A' 取反 复合逻辑运算 与非 Y = (A·B)' 有0则1 或非 Y = (A+B)' 全0则1 异或 Y = A⊕B 相异则1 四种表示方法 ① 真值表 ② 逻辑表达式 ③ 逻辑电路图 ④ 卡诺图 相互转换,等价描述 同一逻辑功能 二变量逻辑运算真值表汇总 A B 与 或 与非 或非 异或 同或 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 0 1 0 0 1 1 0 1 0 1 1 1 1 0 0 0 1 注:1 表示高电平/逻辑真,0 表示低电平/逻辑假

3.1 基本逻辑运算:与、或、非

3.1.1 核心原理

与运算(AND):当且仅当所有输入条件同时为真时,输出才为真。在数字电路中,与门通常用“·”或省略符号表示,逻辑表达式为 Y = A·B(读作“A与B”)。其物理意义可以类比为串联开关电路:只有两个开关都闭合,灯泡才会点亮。与运算的运算规则是:有0则0,全1则1。

或运算(OR):只要有一个输入条件为真,输出即为真。逻辑表达式为 Y = A+B(读作“A或B”)。其物理意义可以类比为并联开关电路:任一开关闭合,灯泡即点亮。或运算的运算规则是:有1则1,全0则0。

非运算(NOT):对输入信号取反,输出与输入相反。逻辑表达式为 Y = A'(或写作 Ā、¬A)。非运算只有一个输入,其物理意义相当于常闭触点继电器:输入为高电平时输出低电平,输入为低电平时输出高电平。

3.1.2 判断方法与真值表

判断一个逻辑运算的结果,最可靠的方法是列出真值表。真值表列出了所有可能的输入组合及其对应的输出值。对于二变量逻辑运算,共有 2² = 4 种输入组合;对于 n 变量,则有 2ⁿ 种组合。下表给出了三种基本逻辑运算的完整真值表:

ABY = A·B(与)Y = A+B(或)Y = A'(非)
00001
01011
10010
11110
经验提醒:在硬件调试中,判断逻辑门是否工作正常,可以先用万用表测量输入引脚电平,再对照真值表预测输出。例如,若测得与门两个输入均为 3.3V(逻辑1),则输出应为高电平;若输出异常,则需检查芯片供电、引脚虚焊或负载短路。

3.1.3 案例拆解:单片机IO口控制LED

假设使用单片机控制两个按键 K1、K2 和一颗 LED。要求:只有 K1 和 K2 同时按下时,LED 才点亮。这是一个典型的与逻辑应用场景。

  • 输入定义:K1 按下为逻辑1,松开为逻辑0;K2 同理。
  • 输出定义:LED 点亮为逻辑1,熄灭为逻辑0。
  • 逻辑表达式:LED = K1 · K2
  • 硬件实现:将两个按键信号接入一个 74HC08(四重二输入与门)芯片,输出端接 LED 驱动电路。

若将需求改为“任一按键按下时 LED 点亮”,则使用或门 74HC32 实现。若改为“按键按下时 LED 熄灭,松开时点亮”,则使用非门(如 74HC04)实现反相控制。

3.1.4 常见误区与总结

风险提示:初学者常混淆“与”和“或”的符号。在电路图中,与门符号是矩形左侧呈直线排列,或门符号左侧呈弧形。此外,注意区分逻辑符号与算术符号:逻辑“+”不是算术加法,1+1=1(或运算),而非算术中的2。

总结:与、或、非是逻辑代数的三大基石,任何复杂的逻辑功能都可以通过这三种基本运算的组合来实现。掌握真值表是理解逻辑运算的最直观途径。

3.2 复合逻辑运算:与非、或非、异或、同或

3.2.1 核心原理

复合逻辑运算由基本逻辑运算组合而成,在实际芯片中,复合逻辑门往往比单一基本门更常用,因为它们可以在一个封装内完成更多功能,减少芯片数量。

  • 与非运算(NAND):先与后非,Y = (A·B)'。其特点是有0则1,全1则0。与非门是数字电路中最通用的门,因为任何逻辑功能都可以仅用与非门实现(称为“与非门通用性”)。
  • 或非运算(NOR):先或后非,Y = (A+B)'。其特点是全0则1,有1则0。或非门同样具有通用性。
  • 异或运算(XOR):当两个输入相异时输出1,相同时输出0,Y = A⊕B = A'B + AB'。异或运算在数字电路中应用极广,包括比较器、加法器、奇偶校验等。
  • 同或运算(XNOR):异或的非运算,当两个输入相同时输出1,相异时输出0,Y = A⊙B = AB + A'B'。同或也称为“异或非”。

3.2.2 判断方法与逻辑符号识别

在电路图中,复合逻辑门的识别要点:与非门和或非门是在基本门输出端加一个小圆圈(表示取反);异或门在或门基础上增加一条弧线;同或门则在异或门输出端加小圆圈。下表总结了四种复合逻辑的运算规则:

AB与非 (A·B)'或非 (A+B)'异或 A⊕B同或 A⊙B
001101
011010
101010
110001
记忆口诀:“与非全1则0,或非全0则1,异或相异为1,同或相同为1。” 这个口诀在快速分析逻辑电路时非常实用。

3.2.3 案例拆解:数据选择器中的异或应用

考虑一个实际工程场景:某通信设备需要检测两个数据位是否一致,用于错误校验。设计一个电路,当两个输入位 A、B 相同时输出1(表示校验通过),不同时输出0(表示校验失败)。

方案设计:该功能恰好符合同或运算的定义。使用 74HC266(四重二输入同或门)即可实现。若手头只有异或门 74HC86,则可在异或门输出端再接一个非门,同样实现同或功能。

验证过程:

  1. 输入 A=0, B=0:异或输出0,经非门反相后输出1,校验通过 ✓
  2. 输入 A=0, B=1:异或输出1,经非门反相后输出0,校验失败 ✓
  3. 输入 A=1, B=0:异或输出1,经非门反相后输出0,校验失败 ✓
  4. 输入 A=1, B=1:异或输出0,经非门反相后输出1,校验通过 ✓

结果对比:使用同或门方案仅需1颗芯片,使用异或门+非门方案需要2颗芯片,但利用了现有库存,减少了采购周期。在批量生产中,优先选择同或门方案以降低成本。

3.2.4 常见误区与总结

风险提示:异或和同或的符号容易混淆。异或的符号是“⊕”(圆圈中加加号),同或的符号是“⊙”(圆圈中加点)。在阅读电路图时,务必注意输出端是否有小圆圈,有圆圈即为同或。

复合逻辑运算在数字系统中无处不在。与非门的通用性使其成为许多可编程逻辑器件的基本单元;异或运算则是算术运算和校验电路的核心。理解这些运算的等价变换(如 A⊕B = (A⊙B)')有助于电路化简。

3.3 逻辑函数的表示方法

3.3.1 四种表示方法概述

逻辑函数描述了输入变量与输出变量之间的因果关系。同一个逻辑函数可以用四种不同的方式表示,它们之间可以相互转换:

  1. 真值表:最直观的表示方法,列出所有输入组合对应的输出值。适合变量较少(≤4个)的情况。
  2. 逻辑表达式:用与、或、非等运算符号描述函数关系,如 Y = A·B + C'。适合公式推导和化简。
  3. 逻辑电路图:用标准逻辑门符号绘制电路,直观反映硬件实现方式。
  4. 卡诺图:一种图形化简工具,特别适合化简3-4变量的逻辑函数,后续章节将详细讲解。

3.3.2 表示方法转换流程

在实际工程中,最常见的转换路径是:真值表 → 逻辑表达式 → 逻辑电路图。具体步骤如下:

  • 步骤1:从真值表中找出所有输出为1的行。
  • 步骤2:对每一行,将输入变量相与(变量为1时用原变量,为0时用反变量),得到最小项。
  • 步骤3:将所有最小项相或,得到“与-或”标准表达式(最小项之和形式)。
  • 步骤4:根据表达式绘制逻辑电路图,先画与门,再画或门。
示例:已知真值表中,当 A=0,B=1 和 A=1,B=1 时输出为1。则最小项分别为 A'B 和 AB,逻辑表达式为 Y = A'B + AB = B(A'+A) = B。化简后可知,该函数实际上就是 B 本身。

3.3.3 案例拆解:三人表决器设计

设计一个三人表决器:三人(A、B、C)投票,两人及以上同意则通过。这是一个典型的组合逻辑设计问题。

第一步:列真值表

ABCY
0000
0010
0100
0111
1000
1011
1101
1111

第二步:写出最小项表达式

输出为1的行对应:A'BC、AB'C、ABC'、ABC,因此 Y = A'BC + AB'C + ABC' + ABC。

第三步:化简

利用公式 AB + AB' = A 进行合并:Y = BC(A'+A) + AC(B'+B) + AB(C'+C) = BC + AC + AB。

第四步:绘制电路图

使用三个二输入与门分别产生 BC、AC、AB,再用一个三输入或门合并输出。实际硬件可选用 74HC08(与门)和 74HC32(或门)实现。

复盘经验:化简后的表达式比原始表达式少了一个与门,降低了硬件成本。在工程设计中,逻辑化简是优化电路的重要手段。

3.3.4 常见误区与总结

风险提示:从真值表写最小项时,容易将变量取反搞错。记住规则:变量为