JTAG TAP 控制器
更新时间:2026-10-01。JTAG 最初为板级互连测试而生,后来成为几乎所有 DFT、MBIST、调试跟踪的统一访问入口。已有 JTAG 边界扫描,本文聚焦 TAP 状态机与寄存器机制。
本文要回答的问题
- 只用 TCK/TMS/TDI/TDO 几 根线,怎么控制芯片内那么多测试逻辑?
- TAP 状态机如何决定“现在移入的是指令还是数据”?
- 边界扫描怎么测出 PCB 上的虚焊和桥接?
一、五根测试引脚
- TCK:独立测试时钟,与功能时钟无关。
- TMS:模式选择,在 TCK 上升沿采样,驱动状态跳转。
- TDI/TDO:串行数据输入/输出。
- TRST(可选):异步复位 TAP。
二、TAP 控制器 16 状态 FSM
TMS 序列在一个确定的状态图里移动,关键状态:
- Test-Logic-Reset:复位 TAP。
- Run-Test/Idle:空闲或运行内建自测。
- Shift-IR / Capture-IR / Update-IR:移入/捕获/更新指令。
- Shift-DR / Capture-DR / Update-DR:移入/捕获/更新所选数据寄存器。
先 Shift-IR 装入指令,该指令决定接下来连接 TDI→TDO 之间的是哪条数据寄存器,再 Shift-DR 传实际数据。

三、IR 与常用 DR
- 指令寄存器 IR:选择操作。
- BYPASS:单 bit 寄存器,把本芯片在链中“透明”穿过。
- IDCODE:32 位厂商/部件/版本号,识别芯片。
- 边界扫描寄存器(BSR):环绕每个引脚的边界单元串,是 EXTEST/SAMPLE 的数据通路。
四、板级互连测试 EXTEST
边界单元可在引脚处“脱离内核”强制输出值、捕获输入值:
- 经 BSR 把驱动值送到某芯片输出引脚(EXTEST)。
- 在相连芯片的输入边界单元捕获。
- 移出比对,即可判断引脚间开路(虚焊)或相邻短路(桥接)。
这使焊接在板上之后无法用探针直接接触的节点仍可测。
五、TAP 的复用与多芯片链
现代设计把 TAP 作为统一访问口,通过自定义 IR/DR 连到 MBIST 控制器、扫描压缩、温度传感器、以及 CoreSight 等调试跟踪。板上多颗芯片可串成一条 TAP 链(TDI→…→TDO),用 BYPASS 跳过无关芯片。
六、常见坑
- TMS 序列给错,停在错误状态导致指令/数据写错位。
- TCK 与功能时钟的跨域处理不当,更新寄存器时亚稳态。
- 多芯片链长度计算错误,寻址错位。
- 安全场景下 TAP 暴露后门却不加锁,被未授权访问。
- 上电时 TAP 未处于确定复位态。
小结
总结
JTAG 用 TCK/TMS/TDI/TDO(+可选 TRST)五根线和一个 16 状态 TAP 控制器实现两级寻址:先 Shift-IR 装入指令、由指令选中 TDI→TDO 间的数据寄存器,再 Shift-DR 传数据;配合 BYPASS/IDCODE/边界扫描寄存器,EXTEST 可在焊板后测出引脚开路短路,并把 TAP 复用为 MBIST、扫描压缩、调试的统一访问口,多芯片可串成一条 TAP 链。