本章导航
本章讨论组合逻辑:任意时刻的输出只由该时刻输入决定,不具备记忆功能。学习主线是“电路图 → 布尔表达式/真值表”和“表达式/真值表 → 电路图”,再扩展到通用 NAND/NOR、脉冲波形、VHDL 建模及示波器排障。
第 5 章:组合逻辑分析
5.1 组合逻辑的核心观念
组合逻辑没有时钟和存储单元。输入一变化,经过门电路传播延迟后,输出随之变化。分析时先认清每一级门的功能,再逐级写出中间量,最后得到输出表达式。
AND-OR(与-或)逻辑
SOP(积之和)表达式可直接用“每个乘积项一个 AND 门,所有乘积项再接一个 OR 门”实现。例如图 5-1 的电路为
因此,仅当 A、B 同时为 1,或 C、D 同时为 1 时,X 才为 1。真值表应同时列出中间量 AB、CD,便于逐行核对。

图 5-1(a) 与-或逻辑门级图(ANSI 形状符号)

图 5-1(b) ANSI 矩形轮廓符号
算例 5-1:三个储罐的低液位报警
三个液位传感器 A、B、C 在液位低于规定值时输出高电平。要求任意两个储罐液位过低就报警。分别检测 AB、AC、BC,再用 OR 汇总:
只要三项中有一项为 1,报警输出 X 就为 1。

图 5-2 任意两个储罐低液位报警电路
5.2 AND-OR-Invert 与 XOR/XNOR
AND-OR-Invert(AOI)
在与-或网络最后加反相器,得到
它天然适合实现 POS(和之积)形式。根据德摩根定律,AOI 的输出在 AB=1 或 CD=1 时为 0;只有两项都为 0 时才为 1。

图 5-3 四输入 AOI 电路
算例 5-2:低有效传感器
若传感器在液位过低时输出低电平,则每个检测 AND 门只要有一个低输入就输出低,末级反相器把结果变为高电平报警。因此仍可检测“任意两个低有效输入”,但要按有效电平重新理解逻辑,不能机械套用高有效电路。

图 5-4 低有效液位传感器的 AOI 电路
异或 XOR
XOR 只在两个输入不同的时候输出 1:
真值表为 00→0、01→1、10→1、11→0。它可用于比较、奇偶校验和受控翻转。

图 5-5 XOR 的与-或实现及符号
同或 XNOR
XNOR 是 XOR 的反相:
输入相同(00 或 11)时输出 1,常用于相等比较。


图 5-6 XNOR 的两种等效实现
算例 5-3:4 位偶校验发生器
将四个数据位依次用 XOR 级联。若原数据中 1 的个数为奇数,校验位输出 1,使总 1 数变为偶数;若原数据已有偶数个 1,校验位输出 0。

图 5-7 偶校验发生器
算例 5-4:偶校验检查器
对 4 位数据和校验位共 5 位再次 XOR。结果为 0 表示总 1 数为偶数、未检测到错误;结果为 1 表示奇偶性不对、报告错误。

图 5-8 偶校验检查器
5.3 从表达式或真值表实现电路
表达式到门电路
先按括号和优先级拆分,再按“先 NOT、再 AND、后 OR”的顺序连接。例如:
需要一个 2 输入 AND、一个 3 输入 AND 和一个 OR。又如:
可先生成 (\overline D)、(C\overline D)、EF,再 OR,最后与 AB 相与。若中间和项不是外部输出,通常展开为 SOP:
这样可减少级数和传播延迟。

图 5-9 表达式 X=AB+CDE 的结构分析

图 5-9 表达式实现电路

图 5-10 表达式分层分析

图 5-10(a)(b) 两种实现及 SOP 展开
真值表到电路
只看输出 X=1 的行:每一行写一个最小项(输入为 0 的变量取反,输入为 1 的变量保持),最后将所有最小项 OR 起来。例如表 5-3 给出
每个最小项对应一个 AND,末级用 OR 汇总。

图 5-11 真值表实现电路
算例 5-5:三输入函数
若 X=1 的行是 011、101、110,则
需要 3 个反相器、3 个三输入 AND 和 1 个三输入 OR。得到表达式后再用布尔代数或卡诺图化简。

图 5-12 算例 5-5 电路
算例 5-6:四输入中恰好三个为 1
四个满足条件的最小项为 (\overline A BCD)、(A\overline BCD)、(AB\overline C D)、(ABC\overline D):

图 5-13 恰好三个输入为 1 的检测电路
算例 5-7、5-8:化简
分析复杂电路时先写完整输出表达式,再用德摩根、吸收律和结合律化简。算例 5-7 最终得到
即一个四输入 OR 门。算例 5-8 先补全缺失变量 ((D+\overline D)=1),再用卡诺图合并相邻项。

图 5-14 待化简电路

图 5-15 化简后的四输入 OR



图 5-17 卡诺图化简过程与实现
5.4 NAND 与 NOR:通用逻辑门
NAND、NOR 都是通用门,只用一种门即可构成 NOT、AND、OR 及其组合。
只用 NAND
- 反相:两输入并接,(\overline A=A\operatorname{NAND}A)。
- 与:先 NAND 得 (\overline{AB}),再用 NAND 反相,得到 AB。
- 或:先分别反相 A、B,再 NAND,依据德摩根得到 A+B。
- NOR:在上述 OR 后再加一个 NAND 反相。

图 5-18 NAND 的通用应用:反相、与、或、或非
只用 NOR
- 反相:输入并接,(\overline A=A\operatorname{NOR}A)。
- 或:先 NOR 得反相结果,再用 NOR 反相。
- 与:先分别反相 A、B,再 NOR。
- NAND:在上述 AND 后再加 NOR 反相。

图 5-19 NOR 的通用应用
双重符号与气泡
画 NAND/NOR 逻辑图时,优先使用 dual symbol,使相邻连接成为“气泡对气泡”或“无气泡对无气泡”。两个相连气泡代表两次反相,彼此抵消。NAND 的等效符号是负或门,NOR 的等效符号是负与门;这样可以直接从图读出表达式。

5.5 脉冲波形与时序图
门的真值表对脉冲同样适用,但要逐时刻观察输入。AND 仅在所有输入同时为高时输出高;OR 只要一个输入为高就输出高;NAND 仅在所有输入同时为高时输出低;NOR 只要一个输入为高就输出低。分析方法是从输入开始,逐级画中间波形,注意传播延迟。

图 5-30 脉冲波形分析示意
算例 5-12~5-15
对每个时间区间列出 A、B、C、D 的逻辑值,代入表达式即可。算例 5-12 的输出为 (\overline{AB+AC}),所以 AB 或 AC 任一同时为高时 X 变低;算例 5-13 的电路是 XNOR,输入相同时 X 为高;算例 5-14 先求 Y1~Y4 再求 X;算例 5-15 直接利用 SOP 识别 X 为高的区间,两种方法结果一致。

5.6 用 VHDL 描述组合逻辑
数据流与结构化
数据流法直接写布尔表达式,简洁清晰;结构化法把门封装成 component,用 signal 表示连线,再用 port map 实例化,适合复杂层次化设计。
component AND_gate is
port (A, B: in bit; X: out bit);
end component AND_gate;
signal OUT1, OUT2: bit;
begin
G1: AND_gate port map (A => IN1, B => IN2, X => OUT1);
G2: AND_gate port map (A => IN3, B => IN4, X => OUT2);
G3: OR_gate port map (A => OUT1, B => OUT2, X => OUT3);
end architecture;component 是预定义逻辑模块;instantiation 是调用模块;signal 是模块间内部连线。编译后可用 waveform editor 输入波形,并用仿真检查所有组合和传播延迟。

5.7 组合逻辑故障诊断
节点与常见故障
节点是驱动门输出与一个或多个负载输入的公共连接点。常见故障包括:驱动输出开路(所有负载失去信号)、负载输入开路(只影响该负载)、输出短接地(节点恒低)、输出短接 VCC(节点恒高)。
信号跟踪
用示波器或逻辑分析仪从输入逐级向输出测量:先确认输入,再检查每个门输出;第一个出现错误的节点通常就是故障门或其连接。数字波形测量使用 DC 耦合;触发应选最低频率通道。

算例 5-17:由波形定位开路
逐门比较实测(绿)与正确(红)波形,若 G1、G2 正常而 G3 首次不一致,则故障在 G3 或其 D 输入;若 D 输入开路并表现为高电平,可解释该波形。更换包含 G3 的芯片后重新检查。

5.8 应用:储罐阀门与温度控制
入口阀在液位低于最低点,或正在进料且尚未达到最高点时打开:
出口阀要求液位高于最低点、没有进料且温度达到设定值:
温度控制把实测与设定的 8 位 BCD 逐位 XOR,再 OR 汇总:只要有一位不同,T=1,启动加热器。

易错点
- 不要混淆高有效与低有效传感器;先写“何时为 1”再写表达式。
- XOR 是“不同为 1”,XNOR 是“相同为 1”。
- 由真值表写最小项时,输入为 0 的变量必须取反。
- 多级门的传播延迟会叠加,时序图不能只看逻辑值而忽略时间。
- NAND/NOR 双符号的气泡连接必须保持一致,否则容易漏掉反相。
本章小结
- 与-或电路直接实现 SOP;AOI 可实现 POS。
- XOR/XNOR 分别实现“不等比较/等值比较”,也是奇偶校验的基础。
- 从表达式或真值表均可系统地设计门电路,再用布尔代数或卡诺图最小化。
- NAND、NOR 是通用门;双符号和气泡抵消能帮助快速读图。
- 脉冲分析需按时间区间逐级求波形;故障诊断需从输入到输出寻找首个错误节点。
- VHDL 数据流法写表达式,结构化法用 component、signal 和 port map 描述硬件连接。
自测题
- 对 (X=\overline{AB+CD}),当 A=1、B=0、C=1、D=0 时,X 为多少?
- 写出三输入“至少两个输入为 1”电路的 SOP 表达式。
- 证明 (A\oplus B=A\overline B+\overline AB),并写出 XNOR 表达式。
- 仅用 NAND 门实现 NOT、AND、OR,各需要几级门?
- 真值表中 X=1 的行如何转换为 SOP 最小项?
- 为什么组合逻辑输出波形可能比输入晚?
- VHDL 中 component、component instantiation、signal 分别对应什么?
- 节点恒低时,列出至少两种可能故障。
- 入口阀和出口阀的化简表达式分别是什么?
- 设计一个 4 位偶校验发生器和检查器,并说明输出 1 的含义。
自测一下
三个储罐的低液位报警电路为什么写成 (X=AB+AC+BC)?
参考答案:三个传感器 A、B、C 在液位低于规定值时输出高电平,要求”任意两个储罐液位过低就报警”。于是用 AND 门分别检测每一对同时过低的情况(AB、AC、BC),再用 OR 门汇总:只要三项中有一项为 1,报警输出 X 就为 1。这正是”与-或”(SOP)结构的典型应用(5.1 节算例 5-1)。
由真值表设计组合逻辑电路的一般步骤是什么?
参考答案:只看输出 X=1 的行,每一行写一个最小项——输入为 0 的变量取反、输入为 1 的变量保持原样——再把所有最小项 OR 起来得到 SOP 表达式;每个最小项用一个 AND 门实现,末级用 OR 汇总,最后用布尔代数或卡诺图化简。例如 X=1 的行为 011、101、110 时,(X=\overline A BC+A\overline B C+AB\overline C)(5.3 节算例 5-5)。
NAND 和 NOR 为什么被称为通用逻辑门?
参考答案:因为只用一种门就能构成 NOT、AND、OR 及其组合。以 NAND 为例:两输入并接得反相 (\overline A=A\operatorname{NAND}A);先 NAND 再用 NAND 反相得 AND;先分别反相 A、B 再 NAND,依据德摩根定律得 OR。NOR 的构造方式与之对称。画逻辑图时用双重符号保持”气泡对气泡”或”无气泡对无气泡”连接,两个相连气泡代表两次反相、相互抵消(5.4 节)。
奇偶校验电路属于哪类逻辑电路?
参考答案:属于组合逻辑电路。它由 XOR 门级联构成,没有时钟和存储单元,输出只由当前各位输入决定:发生器用 XOR 统计数据中 1 的个数,若为奇数则校验位输出 1,使总 1 数变为偶数;检查器对”数据 + 校验位”再次做 XOR,结果为 0 表示未检测到错误,结果为 1 表示奇偶性不对、报告错误(对应本章算例 5-3、5-4)。
组合逻辑中的传播延迟会带来什么影响?
参考答案:信号每经过一级门都有传播延迟,多级电路的延迟会逐级叠加,使输出比输入晚变化。分析脉冲波形时必须按时间区间逐级画出中间波形,不能只看逻辑值而忽略时间;在故障诊断中,还要区分真实的逻辑错误与延迟造成的短暂波形差异,方法是从输入到输出逐级跟踪,第一个出现错误的节点通常就是故障门或其连接(见 5.5 与 5.7 节)。