04-组合逻辑电路.md 8.4 KB


tags: [数电] type: note source_type: reconstructed created: 2026-08-15 updated: 2026-08-18

aliases: [组合逻辑, 译码器, 编码器, 数据选择器, 加法器, 竞争冒险]

组合逻辑电路

[!note] 对象层 学完这篇,你能判断

  1. 一个电路是组合逻辑(无记忆)还是时序逻辑(有记忆);
  2. 在原理图中认出 74LS138 译码器、74LS151 选择器、74LS148 编码器并说出功能;
  3. 用译码器/选择器实现任意逻辑函数;
  4. 知道竞争-冒险是什么、什么时候会发生、怎么消除。

用生活理解:组合电路像"自动售货机"——投币立刻出货,完全由当前输入决定,没有记忆。译码器是"查表器"(3 位编号查 1 个输出),编码器是"点名器"(谁按了键盘就报出编号),选择器是"多路开关"(一条数据线选一路信号)。


一、一句话本质

组合逻辑电路的输出仅由当前输入决定(无记忆),其分析/设计围绕真值表→表达式→电路展开;中规模芯片(译码器/选择器/加法器/比较器)是组合逻辑的"乐高积木"。


二、速查表(常用中规模芯片)

2.1 芯片功能速查

芯片 名称 功能
74LS138 3-8 译码器 3 位输入选中 8 路中 1 路输出低电平(低有效),带 3 个使能端(G1=1, G2A'=0, G2B'=0)
74LS148 8-3 优先编码器 8 路输入(低有效)编码为 3 位二进制,优先级别高者优先
74LS151 8 选 1 数据选择器 3 位选择端选通 8 路数据中 1 路到输出
74LS283 4 位超前进位加法器 两个 4 位二进制数相加 + 进位输入
74LS85 4 位数值比较器 比较 A、B 大小,输出 A>B / A=B / A<B
74LS47/48 BCD-七段译码器 BCD 码驱动共阳/共阴数码管

2.2 关键功能表(背下来)

74LS138(3-8 译码器)Yi = 1 当且仅当 二进制编号 = i(低有效时 Yi=0)。

74LS148(优先编码器):输入 I0(LSB)~I7(MSB),I7 优先级最高;I7=0 时输出 111,与其它输入无关。

74LS151(数据选择器)Y = Σ(mᵢ · Dᵢ),选择端 S2S1S0 = i 时输出 Dᵢ。

2.3 组合逻辑设计步骤

  1. 明确输入/输出变量并定义逻辑 1/0;
  2. 列真值表;
  3. 化简(卡诺图/公式)→ 得最简表达式;
  4. 画电路图(或用中规模芯片实现)。

2.4 竞争-冒险

  • 竞争:同一信号经不同路径到达门电路时延不同;
  • 冒险:竞争导致输出出现不该有的尖峰脉冲(毛刺);
  • 判别:表达式 F = A + A'(1 冒险)或 F = A·A'(0 冒险);
  • 消除:加冗余项(引入不依赖 A 的项)、输出端加滤波电容、用选通脉冲(可靠选通信号)。

三、判别规则

  1. 组合 vs 时序:看有没有反馈回路/存储元件(触发器、锁存器)。无记忆 = 组合。
  2. 译码器低有效:74LS138 输出低电平有效,选中位输出 0,未选中全是 1——画图时注意输出端"小圆圈"。
  3. 选择器 = 查表器:Y 的表达式按"选择端 = 最小项"展开,凡某输入组合成立输出即 Dᵢ。
  4. 冒险看表达式:出现 A+A' 形式 → 1 冒险(输出恒 1 时出现 0 毛刺);A·A' → 0 冒险。数字示波器上看到毛刺优先怀疑竞争冒险。

四、易混对比

易混点 A 易混点 B 关键区别
编码器 译码器 编码器多输入→少输出(8→3);译码器少输入→多输出(3→8),互为逆过程
译码器 数据选择器 译码器输出多路、每路对应一个最小项;选择器输出 1 路、从多路数据中选
普通译码器 显示译码器 前者输出按二进制位;后者输出直接驱动数码管段码(如 0→1111110)
竞争(竞争) 冒险(毛刺) 竞争是"原因"(时延差),冒险是"结果"(毛刺)

五、典型例题(先想再翻)

  1. 分析:74LS138 输入 CBA=101,哪个输出有效? > 答:对应二进制 5 → Y5 输出低电平 0,其余为 1。
  2. 设计:用 74LS151 实现 F = Σm(0,3,5,6)。 > 答:把 D0=D3=D5=D6 接 1,其余接 0,选择端接 A、B、C 即可。
  3. 陷阱题:同学说"74LS148 输入 I2 和 I5 同时为 0,编码冲突会出错"。 > 答:不会。优先编码器 I5 优先级别更高(下标大者优先),输出 101。

六、完整知识点

6.1 组合逻辑的分析方法

已知电路 → 逐级写表达式 → 化简 → 列真值表 → 说明功能。标准流程,必须熟练。

6.2 译码器实现逻辑函数

译码器输出就是全部最小项(低有效时取反): F = Σm(0,3,5) = Y0'·Y3'·Y5'(与非门连接低有效输出)。任何 3 变量函数都可用 74LS138 + 与非门实现——这是原理图设计的重要技巧。

6.3 加法器扩展

  • 半加器:S = A⊕B,C = AB;
  • 全加器:S = A⊕B⊕Ci,Co = AB + Ci(A⊕B);
  • 74LS283 超前进位:进位并行产生,速度远快于串行进位;
  • 级联:多片 74LS283 的 Co 接下一片 Ci 实现多位加法。

6.4 数值比较器级联

74LS85 多片级联:低位片的 A>B / A=B / A<B 输出接到高位片的级联输入,实现 8 位、12 位…比较。

6.5 冒险的工程视角

低速/低频应用(LED、按键)毛刺无影响;但高速时钟/总线上的毛刺会触发错误——所以高端板卡上有"时钟使能 + 滤波电容"的组合拳。

6.6 从零搭一个运算器(Digital 动手,尚硅谷补充)

  1. 半加器:1 位加法枚举出 A、B→S(和)、C(进位)关系:S = A⊕B,C = A·B

半加器电路

  1. 封装子电路:把半加器保存到 Digital 安装目录 lib/class_code,之后从"组件→库→class_code"直接拖出使用。
  2. 全加器:考虑低位进位 Cin,用两个半加器 + 一个或门。两个半加器产生的进位 C1、C2 不可能同时为 1(C1=1 ⇒ S1=0 ⇒ C2=0),所以合并进位用"或"即可。

全加器电路

  1. 4 位加法器:把 4 个全加器由低到高串行进位(Cout→下一级 Cin),配合分裂器(拆 4 位总线)和隧道(跨区域连线)完成。

4 位行波进位加法器

  1. 减法:实际工程直接使用"组件→运算器"里的加法器/减法器;尚硅谷的减法在 16 位 ALU 中实现(sel=0b01 即 A−B,含 Cin/Cout 进位与 ZF 相等标志),见 [[10-从零搭建计算机(上)-组成与算力|数电 10 搭建计算机]]。

带进位与 ZF 标志的加减电路

结论:加法器就是"异或求和 + 与求进位"的层层组合——这正是后续 [[07-半导体存储器|数电 07]]、[[10-从零搭建计算机(上)-组成与算力|数电 10]] 中 ALU 的雏形。


七、与 PCB 画图的关联

  • STM32 外部存储器/外设的片选(CS)常用译码器产生——画原理图时看到 74LS138 就知道这是地址译码(对应 [[PCB学习笔记/09-项目实战-51单片机核心板|PCB 笔记 09]] 的 51 核心板电路)。
  • 数码管显示、按键矩阵用编码器/译码器简化接线。
  • 数据总线上多设备共享 → 三态/选择器概念([[03-逻辑门电路|数电 03]])与总线拓扑。
  • 竞争冒险 → PCB 布线时注意信号线等长、串阻吸收反射,本质都是"时延差异"管理。

来源:阎石《数字电子技术基础》第 4 章(组合逻辑电路);尚硅谷《从零搭建计算机》第 1.3.4 节(运算器)