JTAG 边界扫描与 TAP:四线测遍整板、接管芯片内部
更新时间:2026-09-12。本文是「集成电路大类 · 芯片设计」**进阶层(intermediate)**数字逻辑第六十九篇,也是第四批的收尾。BGA/QFN 把引脚藏到芯片底下,虚焊连探针都碰不到。**JTAG 边界扫描(IEEE 1149.1)**把测试能力做进每个管脚,只用 4 根线就能检查整板焊接,并顺理成章地成为 CPU 调试、FPGA 下载、scan/MBIST的统一入口。
本文要回答的问题
- 引脚在芯片底下没法下探针,JTAG 怎么「隔空」测出焊点开路/短路?
- TCK/TMS/TDI/TDO 四线各干什么?TAP 控制器那个 16 态 FSM 怎么转?
- 指令寄存器 IR 和数据寄存器 DR 怎么配合?EXTEST/SAMPLE/BYPASS 各做什么?
- 多颗芯片怎么用同一组四线串成菊花链?IDCODE 怎么识别芯片?
- 为什么 JTAG 既是强大调试口又是安全后门?怎么关?
一、核心思想:给每个管脚串一个可控可测的边界单元
在芯片每个数字输入/输出管脚和内部逻辑之间插入一个边界扫描单元(boundary cell,本质是一个带保持的 MUX-D 触发器),所有边界单元首尾相连成一条边界扫描链(BSR),接进 TAP 的一条数据寄存器。于是测试者可以:
- EXTEST(外部测试):把期望电平沿链移入输出管脚的边界单元并更新到引脚上,驱动板级连线;再把输入管脚的实际电平采样移出比对——若某条线该高却读到低,就能定位开路/短路/虚焊/桥接,全程不用物理探针;
- SAMPLE/PRELOAD:在芯片正常工作时拍一张管脚状态快照移出观察,或在进 EXTEST 前预装安全值。
多颗支持 JTAG 的芯片把 TDO 接下一颗的 TDI,用同一组 TCK/TMS 菊花链串起来,测试机一次即可扫描整板——这正是为高密度贴装和 BGA 设计的可测性标准(DFT的板级延伸)。
二、TAP 接口与 16 状态控制器
四根必备线:TCK(独立测试时钟,异步于功能时钟,所有 TAP 动作同步于它)、TMS(模式选择,在 TCK 上升沿决定状态跳转,常上拉)、TDI(串行移入指令/数据)、TDO(串行移出),可选 TRST(异步复位 TAP)。TAP 控制器是一个由 TMS 驱动的固定 16 状态有限状态机(FSM),主干结构对称:
Test-Logic-Reset ◄── TMS 连续 5 个 1(最稳的复位方式)
│0
Run-Test/Idle
┌──────┴───────┐
Select-DR-Scan Select-IR-Scan ← 选数据寄存器 or 指令寄存器
│ Capture-DR Capture-IR
│ Shift-DR Shift-IR ← TDI→链→TDO 逐位移
│ Exit1-DR Exit1-IR
│ Pause-DR Pause-IR
│ Exit2-DR Exit2-IR
│ Update-DR Update-IR ← 移完的内容锁存生效
└───────────────┘TMS 连续给 5 个 1 从任意状态回到 Test-Logic-Reset(TAP 复位的推荐方式,不依赖可选的 TRST)。移位动作统一发生在 Shift-DR/IR:每来一个 TCK,TDI 移入 1 bit、链尾从 TDO 移出 1 bit。
三、IR + DR:指令决定「在移哪条链」
TAP 里有两类寄存器:
- 指令寄存器 IR:先把指令码移入 IR 并在 Update-IR 锁存,决定本次访问连接哪条数据寄存器;
- 数据寄存器 DR:一组并联、由当前指令选通的移位链——边界扫描链(BSR)、BYPASS(1 bit 单寄存器,占位用)、IDCODE(32 bit 厂牌/器件/版本号)、以及厂商自定义链(内部 scan、MBIST接口、调试寄存器)。
几条必备指令:
| 指令 | 作用 |
|---|---|
| EXTEST | 移出值驱动输出管脚、采样输入管脚,测板级互联(开焊/短路/桥接) |
| SAMPLE/PRELOAD | 正常功能下采样管脚快照;进 EXTEST 前预装初始值 |
| BYPASS | 选 1 bit 旁路寄存器,让菊花链中「本轮不关心的芯片」变成 1 拍延迟,缩短移位 |
| IDCODE | 移出 32 bit ID,识别链上每颗器件 |
菊花链多颗芯片时,整条 TDI→TDO 是各芯片 IR/DR 串联;给不操作的芯片装 BYPASS,就不必为它们移完整长链。这与串入并出移位寄存器是同一硬件,只是被标准化成测试基础设施。
四、被复用成「万能调试口」
同一个 TAP 在芯片内部几乎总被扩展复用:
- 内部扫描测试(stuck-at/延迟故障):把功能触发器串成 scan 链挂到 TAP,配合 ATPG 向量做逻辑 DFT;
- MBIST/修复控制:经 TAP 启动存储器自测、加载 BISR 修复链;
- CPU 在线调试:访问调试模块,halt/单步/断点、读写寄存器和内存、烧录 Flash;
- FPGA 配置/下载:很多 FPGA 用 JTAG 下发比特流(见 FPGA JTAG 进阶)。
五、安全:方便的后门必须能关
JTAG 能直接驱动管脚、窥视内部、改写内存——在量产产品上若保持开放,等于留了无视所有软件防护的硬件后门(可提取密钥、绕过安全启动)。安全做法:①用 eFUSE/OTP 存「调试口使能/永久关闭」位,安全启动时据此封锁或要求认证(挑战-应答解锁);②区分工厂模式/安全量产模式的生命周期状态;③敏感芯片边界扫描链本身也要访问控制。测试便利与产品安全是同一条 TAP 的两面,必须在量产时收敛。
与现有篇目的衔接
总结
一句话总结:JTAG/IEEE 1149.1 边界扫描针对 BGA 等无法下探针的高密度封装,在每个数字管脚与内部逻辑之间插入可驱动可采样的边界单元并串成边界扫描链,仅用 TCK、TMS、TDI、TDO 四线(可选 TRST)就能把测试电平移入输出脚、再把输入脚实值移出比对,靠 EXTEST 在不接触焊点的情况下定位板级互联的开路、短路和桥接;TAP 是一个由 TMS 驱动、连续 5 个 1 即可复位的标准 16 状态 FSM,移位统一在 Shift-IR/DR 进行,先移入指令寄存器选择要连的那条数据寄存器(边界链、单 bit 的 BYPASS 旁路、32 bit IDCODE 或厂商自定义链),多颗芯片用 TDO 接下一颗 TDI 菊花链级联、不操作的芯片装 BYPASS 缩短移位;同一 TAP 还被复用作内部 scan、MBIST/BISR、CPU 调试烧录和 FPGA 配置的统一入口,极其强大,但正因为它能直接驱动管脚、读写内部而构成绕过软件的硬件后门,量产时必须按 eFUSE 中的生命周期/安全位永久关闭或加认证解锁,在测试便利与产品安全之间取得闭环。