74HC138 参数速查:3-8 译码器、使能逻辑与地址片选实战
更新时间:2026-10-30。本篇属于芯片选型速查系列,电气参数依据官方 datasheet 摘录,逻辑行为由 Vivado Simulator 2017.4 穷举验证。更多器件见 74HC138 所在的芯片参数速查中心。
74HC138 是一颗三路地址输入、八路低有效输出的译码器。它最典型的任务不是「把二进制变成某种显示」,而是把地址总线上的一小段编码变成某一颗外设的片选信号:三位地址选中一路,三个使能脚再限定器件何时参与译码。它也可作为数据分配器使用。理解这颗料要同时抓住两层条件——地址只决定选哪一路,使能才决定有没有一路被选中;任何使能条件不满足,八路输出就全部为高电平。
本文要回答的问题
- 74HC138 的 G1、G2A、G2B 三个使能输入怎样组合才有效?
- 为什么输出写成 Y0~Y7 却都用低电平表示选中,这与片选有什么关系?
- 16 个引脚如何分工,供电、输入电平和输出驱动有哪些边界?
- 怎样用它把一段 CPU 地址空间拆成八个外设片选?
- 64 组输入穷举验证覆盖了什么,又有哪些电气问题不能靠仿真回答?
一、74HC138 的功能与内部结构:先过使能门,再做一热译码
74HC138 是组合逻辑器件,没有时钟、寄存器或内部状态。同一时刻的输入完全决定输出。内部可以先看成一个使能判定器:只有 G1 为高、低有效的 G2A 与 G2B 都为低,译码部分才工作。随后三位地址 A2、A1、A0 形成 0~7 的一热码,也就是八路中只有一路内部信号有效;经过输出反相后,被选中的那一路变低,其余七路保持高。
这张概念卡把信号分成了三类,读芯片时不要只盯地址表:地址输入提供候选编号,使能输入拥有总开关般的否决权,输出则用低电平表达命中。尤其要避免把「禁止译码」理解成高阻态,74HC138 禁止时仍然会主动输出高电平,不是与总线断开。
沿图里的主线可以看到,使能逻辑位于地址译码之前,所以无论 A2~A0 是什么,只要使能不对,结果都固定为 8'b1111_1111。这也是为什么排查「明明地址对了却选不中」时,应先量三个使能脚,再怀疑地址线。
二、关键参数讲人话:HC 电平、低有效与组合延迟
2.0~6.0V 是供电范围,不等于输入可以随便跨电压连接。 74HC 系列采用 CMOS 输入电平,输入高、低门限随 VCC 变化。5V 供电的 HC 器件不能直接照搬 74HCT 的 TTL 输入兼容结论;3.3V 控制器接 5V 74HC138 时,要按所用厂商表格核对高电平最小值,不能看到「2~6V 都能工作」就默认逻辑兼容。
低有效输出天然适合传统片选。 很多存储器和并行外设的 CS 引脚本身就是低有效,译码器输出可直接接入同电压体系的 CS,不必再增加反相器。未选中的输出为高,外设保持未选中;被选中的一路变低,只唤醒目标器件。若外设要求高有效片选,就需要反相,或考虑输出极性相反的 74HC238。
组合译码不是零延迟,也不一定无毛刺。 地址翻转时,不同内部路径的传播延迟可能造成短暂的多路无效或输出过渡。官方 datasheet 会按 VCC、负载电容和温度分别给传播延迟限值,设计高速读写周期时应查具体型号与条件,而不是记一个通用的「多少纳秒」。这些输出不应未经处理就当精确时钟或异步复位使用。
每路能驱动 LED,不代表能直接拖继电器。 输出电流能力、单脚功耗与整芯片功耗是不同约束;低有效接 LED 时也要串限流电阻。继电器、电机、背光阵列等负载应通过三极管、MOSFET 或专用驱动器隔离,并同时核对输出电流和整封装总功耗。
三、核心参数一览
下表只列跨设计时最常用的项目。传播延迟、输出电流和直流电平限值都与测试条件有关,不能用一个脱离 VCC 与负载的数字代替整张官方表。
| 参数 | 74HC138 典型规格与含义 |
|---|---|
| 逻辑功能 | 3 线到 8 线译码器,也可作 1 路到 8 路数据分配器 |
| 逻辑系列 | 74HC,高速 CMOS;不要与 74HCT 的输入门限混为一谈 |
| 工作电压 | 2.0~6.0V(以所采购厂商、具体订货型号为准) |
| 地址输入 | A2、A1、A0,共 8 种组合 |
| 使能输入 | G1 高有效;G2A、G2B 低有效 |
| 输出 | Y0~Y7,低有效;有效时一路低,禁止时全部高 |
| 输出高阻 | 无三态禁止模式,禁止不等于断开 |
| 引脚数 | 常见双列或贴片封装均为 16 脚,封装代码需另查订货表 |
| 传播延迟 | 随厂商、VCC、负载和温度变化,按 datasheet 对应表格取值 |
| 温度范围 | 不同订货等级不同,采购时核对后缀,不从「74HC138」统称推断 |
四、引脚定义与真值表
不同厂商通常沿用下列标准 16 脚排列,但画 PCB 封装前仍应拿当前料号的数据手册逐脚核对。G2A、G2B 和 Y0~Y7 名称中的横线表示低有效,本文用 _n 作为代码里的等价写法。
| 引脚 | 名称 | 功能 |
|---|---|---|
| 1、2、3 | A0、A1、A2 | 地址输入,A2 为最高位 |
| 4、5 | G2A_n、G2B_n | 低有效使能,必须都接低才允许译码 |
| 6 | G1 | 高有效使能,必须接高 |
| 7 | Y7_n | 第 7 路低有效输出 |
| 8 | GND | 电源地 |
| 9~14 | Y6_n~Y1_n | 第 6 至第 1 路低有效输出,顺序递减 |
| 15 | Y0_n | 第 0 路低有效输出 |
| 16 | VCC | 正电源,就近放置 100nF 退耦电容 |
使能条件可以先压成两行,再接八行地址关系。表中 H 表示高、L 表示低、X 表示任意;Y 列写被选中的输出,其余输出全部为 H。
| G1 | G2A_n | G2B_n | A2 A1 A0 | 输出结果 |
|---|---|---|---|---|
| L 或 X | X | X | XXX | 凡 G1=L,Y0~Y7 全为 H |
| H | H 或 X | X 或 H | XXX | 任一低有效使能为 H,Y0~Y7 全为 H |
| H | L | L | 000 | 仅 Y0_n=L |
| H | L | L | 001 | 仅 Y1_n=L |
| H | L | L | 010 | 仅 Y2_n=L |
| H | L | L | 011 | 仅 Y3_n=L |
| H | L | L | 100 | 仅 Y4_n=L |
| H | L | L | 101 | 仅 Y5_n=L |
| H | L | L | 110 | 仅 Y6_n=L |
| H | L | L | 111 | 仅 Y7_n=L |
下面用一段波形把「禁止→选 Y0→改选 Y3→再禁止」串起来。它不是传播延迟测量,只表达稳定输入之间的逻辑关系;地址变化与使能关闭是观察输出极性的两个关键时刻。
开始 G1 为低,所以两路输出都为高;G1 拉高且地址仍为 000 时,只有 Y0_n 拉低。地址改为 011 后,Y0_n 回到高、Y3_n 变低。末尾 G2A_n 拉高,即使地址仍是 011,Y3_n 也立即按真值关系恢复高电平,这就是使能的否决作用。
五、实验:穷举 64 种地址与使能组合
5.1 实验设计
三个使能输入加三个地址输入共六位,完整输入空间只有 2^6=64 种,适合穷举而不是抽样。测试台把 0~63 依次赋给 {G1,G2A_n,G2B_n,A},每个向量等待 1ns,再根据同一真值规则计算期望的八位输出,并用四态不等比较实际值。这样既能抓到 0/1 反相错误,也不会把未知态 X 悄悄当成通过。
行为模型的核心只有两条路径:使能满足时生成一热码再整体取反;否则直接输出全高。源码如下,测试中的 DUT 就是被测设计实例。
always @* begin
if (g1 && !g2a_n && !g2b_n)
y_n = ~(8'b0000_0001 << a);
else
y_n = 8'hff;
end5.2 测试方法
实验采用 Vivado Simulator 2017.4 的批处理链,依次执行 xvlog decoder.v tb.v、xelab tb -s snap 和 xsim snap -R。1ns 的向量间隔只是行为仿真的激励步长,并非 74HC138 的传播延迟规格;模型没有代入厂商时序参数,也没有模拟电压、电流和负载。
终端记录里的 vectors=64 对应全部六位输入组合,errors=0 表示没有一组输出偏离期望。下一行 PASS 是测试台在错误计数为零时打印的汇总,不是只验证八个有效地址;其余 56 种禁止组合也都在同一循环内检查。
5.3 原始结果
以下保留编译完成后的仿真摘要原文,便于把 PASS、向量数量和结束位置对照起来。
Vivado Simulator 2017.4
Time resolution is 1 ps
run -all
SUMMARY vectors=64 errors=0
PASS all address and enable combinations
$finish called at time : 64 ns : File "C:/win-jobs/runs/chipref-74hc138-20261030-mac/tb.v" Line 3164ns 的结束时间与 64 个向量、每个等待 1ns 相符。日志没有出现 FAIL 行,但真正的通过判据仍是逐向量四态比较和最终 errors=0,不是靠「仿真跑完」推断功能正确。
5.4 测试结论与边界
穷举结果确认行为模型满足两条核心规则:使能有效时八路低有效输出与三位地址一一对应;任一使能条件不满足时八路全高。这足以支持本文的真值表和地址译码讲解,却不能替代实物电气实测。实际板上的高电平是否达标、传播延迟是否满足读写时序、输出能否带动负载,仍需按具体器件 datasheet 计算并用示波器、万用表或逻辑分析仪验证。
六、替代型号与选型
| 型号 | 主要差别 | 何时选择 |
|---|---|---|
| 74HCT138 | 逻辑功能相同,T 系列面向 TTL 兼容输入门限,供电范围不同 | 5V 系统需要 TTL 输入兼容时,按官方表替换 |
| 74HC238 | 同为 3-8 译码,但输出高有效 | 后级要求高有效片选,想省掉八路反相 |
| 74HC137 | 带地址锁存的同族译码器 | 地址会变化、需要保持先前译码结果时 |
| 74LS138 | 双极型 TTL 老系列,功耗、电平和驱动特性不同 | 维修既有 5V TTL 设计,不宜当作 HC 的无条件替代 |
替换时不只比较「都是 3-8 译码器」。至少检查供电范围、输入门限、输出极性、传播延迟和封装五项。74HCT138 在合适的 5V 场景更容易接 TTL 电平,却不能因此推广到整个 2~6V 范围;74LS138 的引脚功能相近,也不意味着电流与功耗可以直接沿用 HC 设计。
七、应用与踩坑:地址扩展、数据分配和五个硬件细节
7.1 把 8KB 区域拆成八个 1KB 片选
假设一片 16 位地址总线系统要把 0x8000~0x9FFF 分给八个外设。可让 A15 接 G1,A14、A13 分别接 G2A_n、G2B_n,这样只有高三位为 100 时允许译码;再把 A12、A11、A10 接 A2、A1、A0,八路输出就分别对应八个 1KB 区域,低十位 A9~A0 留给外设内部寻址。
| 地址高六位 A15~A10 | 区域 | 有效输出 |
|---|---|---|
| 100000 | 0x8000~0x83FF | Y0_n |
| 100001 | 0x8400~0x87FF | Y1_n |
| 100010 | 0x8800~0x8BFF | Y2_n |
| 100011 | 0x8C00~0x8FFF | Y3_n |
| 100100~100111 | 0x9000~0x9FFF | Y4_n~Y7_n |
这种接法利用了三个使能脚的「额外译码」价值:高位地址负责选中整个区域,三位地址再拆区域。若还有未参与判定的中间地址位,就会产生地址镜像,同一个外设可能在多个地址出现;这是电路允许的结果,不是芯片故障,但内存映射文档必须写清楚。
7.2 数据分配器接法
把 G1 固定为高、G2B_n 固定为低,再把串行数据接到 G2A_n,地址仍接 A2~A0。数据为高时所有输出为高;数据为低时被地址选中的输出为低,因此被选中的一路跟随该数据,其余保持高。这能把一路数据分配到八个目的地,但八路不是同时广播,也不会为后级提供锁存。
7.3 五个容易忽略的坑
- 未用使能脚不能悬空。 固定使能时,G1 直接接 VCC,G2A_n/G2B_n 接 GND;需要受控则接明确的逻辑输出。CMOS 输入悬空可能随机翻转并增加功耗。
- 低有效不是负电压。 输出低只是接近 GND 的有效逻辑电平,测量和接线都按单电源数字逻辑理解。
- 禁止时不是高阻。 多颗器件输出不能直接并联实现「或」逻辑;需要级联应通过使能逻辑和外部门电路设计。
- 别让译码输出承担大功率负载。 LED 必须限流,继电器和电机使用驱动级,并检查单路与整芯片的电流、功耗限制。
- 上电与地址切换要留裕量。 电源附近放 100nF 退耦;若外设会在片选毛刺期间误写,应让写使能保持无效,等地址和片选稳定后再开放。
实验环境
- 机器/系统:Windows worker
- 工具版本:Vivado Simulator 2017.4(xvlog / xelab / xsim 批处理链)
- 日期:2026-10-30
- 完整命令:
xvlog decoder.v tb.v && xelab tb -s snap && xsim snap -R,由run.bat顺序调用并在失败时退出。
代码获取
本实验的完整源码、运行脚本、README 与原始输出已放在公开仓库 experiments/chip-ref-74hc138/。在 Windows 上把 run.bat 中的 Vivado 安装路径改为本机路径后执行该脚本,即可复现 64 组穷举。
参考来源
- Nexperia, 74HC138; 74HCT138 — 3-to-8 line decoder/demultiplexer; inverting:功能、使能、引脚、供电范围与电气限值。
- Texas Instruments, SN74HC138 3-Line to 8-Line Decoders/Demultiplexers:真值表、逻辑结构与开关特性测试条件。
- 本文实验:
decoder.v与tb.v的行为级穷举结果,不用于替代上述 datasheet 的电气规格。
这一篇在知识体系里的位置
本篇属于 74HC138 等器件的芯片参数速查中心,重点是外围组合逻辑如何服务处理器的地址译码。需要理解片选最终连接的处理器、总线时钟与外设约束时,可继续读 STM32F103C8T6 参数速查:前者解决「怎样选中一颗外设」,后者提供「谁在发起访问」的 MCU 视角。
总结
74HC138 的核心可以压缩成一句判断:G1=1、G2A_n=0、G2B_n=0 时,三位地址选中 Y0~Y7 中的一路并把它拉低;任一条件不满足,八路全部为高而不是高阻。三个使能脚既能固定使能,也能参与高位地址译码,因此一颗器件就能把 8KB 区域拆成八个 1KB 低有效片选。64 组穷举仿真已验证全部地址与使能组合,但供电门限、传播延迟和负载能力仍须回到具体厂商 datasheet 与实物测量,尤其不要让使能脚悬空或让输出直接驱动超负载。