3、传统JTAG (IEEE 1149.1) 回顾:TAP状态机、指令寄存器、数据寄存器、边界扫描原理

在深入IEEE 1687 IJTAG之前,必须彻底理解其前身——IEEE 1149.1标准,即传统JTAG。JTAG最初是为了解决板级互连测试而设计的,但它的架构后来成为芯片内部调试、配置和测试的基础设施。本章将系统回顾JTAG的核心组件:TAP状态机、指令寄存器(IR)、数据寄存器(DR)以及边界扫描原理。理解这些概念是掌握IJTAG中Segment Insertion Bit(SIB)和1687网络拓扑的基石。

IEEE 1149.1 JTAG 核心架构与边界扫描链路 SoC / ASIC TAP 控制器 (16状态机) 指令寄存器 (IR) 数据寄存器 (DR) 组 边界扫描寄存器 Bypass (1-bit) Device ID (32-bit) 用户自定义DR 边界扫描单元 (BSC) 链 PIN1 PIN2 PIN3 PIN4 PINn 核心逻辑 (Core Logic) TDI TMS TCK TDO 扫描数据 图例 数据路径 (TDI→IR/DR→TDO) 控制信号 (TMS/TCK) 扫描数据 (边界扫描链)

上图展示了JTAG测试访问端口(TAP)的顶层架构。TAP控制器是一个16状态的有限状态机(FSM),由TCK(测试时钟)和TMS(测试模式选择)驱动。TDI(测试数据输入)和TDO(测试数据输出)构成了串行移位路径。指令寄存器(IR)用于选择要执行的操作,而数据寄存器(DR)则根据指令被选中并连接在TDI和TDO之间。边界扫描寄存器(BSR)是DR中最重要的一种,它由一系列边界扫描单元(BSC)组成,这些单元与芯片的每个数字I/O引脚相关联。

3.1 TAP状态机:JTAG的“大脑”

核心原理:16状态的状态迁移

TAP状态机是JTAG的控制中枢。它通过TMS引脚上的逻辑电平序列,在TCK的上升沿进行状态迁移。状态机分为两大主要阶段:数据移位阶段和数据捕获/更新阶段。所有操作都遵循“先捕获(Capture)、再移位(Shift)、最后更新(Update)”的经典流程。

状态机的主要状态包括:Test-Logic-Reset(上电或TMS=1持续5个TCK周期后进入)、Run-Test/Idle(空闲状态)、Select-DR-Scan和Select-IR-Scan(选择扫描路径)、Capture-DR/IR(并行装载数据)、Shift-DR/IR(串行移位)、Exit1-DR/IR、Pause-DR/IR(暂停)、Exit2-DR/IR以及Update-DR/IR(并行输出)。

关键操作流程:要访问一个数据寄存器,控制器必须经历以下路径:
Test-Logic-Reset → Run-Test/Idle → Select-DR-Scan → Capture-DR → Shift-DR (循环N次) → Exit1-DR → Update-DR
其中N等于该数据寄存器的位宽。对于指令寄存器,路径类似,但将“-DR”替换为“-IR”。

判断方法:如何区分IR与DR访问

区分当前访问的是指令寄存器还是数据寄存器,关键在于状态机当前处于哪条扫描路径上。如果状态机经过Select-IR-Scan,则后续的Capture/Shift/Update操作针对IR;如果经过Select-DR-Scan,则针对DR。TMS信号在Select-DR-Scan状态时的电平决定了下一个状态是进入Select-IR-Scan(TMS=1)还是Capture-DR(TMS=0)。

状态名称TMS=0 下一状态TMS=1 下一状态功能说明
Test-Logic-ResetRun-Test/IdleTest-Logic-Reset复位所有测试逻辑,使IR变为IDCODE指令
Run-Test/IdleRun-Test/IdleSelect-DR-Scan空闲状态,可执行BIST等运行测试
Select-DR-ScanCapture-DRSelect-IR-Scan选择数据寄存器扫描路径
Select-IR-ScanCapture-IRTest-Logic-Reset选择指令寄存器扫描路径
Capture-DRShift-DRExit1-DR在TCK上升沿将并行数据装载到DR
Shift-DRShift-DRExit1-DR每个TCK上升沿将TDI数据移入,TDO数据移出
Exit1-DRPause-DRUpdate-DR移位结束的中间状态
Update-DRRun-Test/IdleSelect-DR-Scan在TCK下降沿将移位寄存器内容锁存到并行输出

实战场景:上电后的默认行为

当芯片上电时,TAP控制器进入Test-Logic-Reset状态。此时,指令寄存器被强制设置为IDCODE指令(如果实现了IDCODE寄存器)。这意味着,如果测试人员立即开始扫描操作,访问的是32位的Device ID寄存器,而不是边界扫描寄存器。这一设计允许测试系统快速识别芯片的制造商、型号和版本,而无需预先知道芯片的边界扫描链长度。

经验提醒:在编写JTAG驱动时,务必在初始化序列中发送至少5个TCK周期的高电平TMS信号,以确保TAP控制器从任何未知状态安全复位到Test-Logic-Reset状态。

3.2 指令寄存器与数据寄存器:JTAG的“指令集”

核心原理:指令决定DR连接

指令寄存器(IR)是JTAG的可编程控制端口。它由一组移位寄存器和并行锁存器组成。在Shift-IR状态,指令码通过TDI串行移入;在Update-IR状态,指令码被锁存到并行输出,从而决定哪个数据寄存器(DR)被连接在TDI和TDO之间。IEEE 1149.1标准定义了几条 mandatory(强制)指令和若干 optional(可选)指令。

  • BYPASS (强制): 指令码通常为全'1'。将1位的Bypass寄存器连接在TDI和TDO之间,用于缩短扫描链长度,便于测试其他器件。
  • SAMPLE/PRELOAD (强制): 指令码通常为全'0'(或特定值)。允许在不干扰芯片正常运行的情况下,捕获引脚状态(SAMPLE)或预置边界扫描单元的数据(PRELOAD)。
  • EXTEST (强制): 指令码通常为全'0'(与SAMPLE/PRELOAD共用)。将边界扫描寄存器置于测试模式,用于板级互连测试。此时,边界扫描单元输出测试激励并捕获响应。
  • IDCODE (可选): 连接32位的Device ID寄存器,用于识别芯片。
  • INTEST (可选): 允许测试芯片内部逻辑,将边界扫描单元作为测试激励和响应捕获点。
  • RUNBIST (可选): 触发芯片内建自测试逻辑。

操作流程:一条指令的完整生命周期

  1. 进入Shift-IR: 通过TMS序列将状态机驱动至Shift-IR状态。
  2. 移入指令码: 在TCK上升沿,将指令码的LSB(最低有效位)先送入TDI,依次移入IR移位寄存器。同时,TDO输出当前IR的内容(通常为IDCODE指令码)。
  3. 退出并更新: 经过Exit1-IR和Update-IR状态,在TCK下降沿,指令码被锁存到IR并行输出。
  4. 执行指令: 指令译码逻辑根据锁存的指令码,将对应的DR(如BSR、Bypass、IDCODE)连接到TDI-TDO路径。
  5. 访问DR: 状态机进入Select-DR-Scan路径,对选中的DR进行Capture、Shift、Update操作。

案例拆解:使用EXTEST进行板级互连测试

假设一块PCB上有两块JTAG器件U1和U2,它们之间的网络NET_A存在焊接短路。测试步骤如下:

测试过程:
1. 对U1和U2的TAP进行复位。
2. 对U1发送EXTEST指令,对U2发送EXTEST指令。
3. 在U1的边界扫描寄存器中,将驱动NET_A的BSC单元设置为逻辑'0',其他无关引脚设为安全值(如高阻或固定电平)。
4. 在U2的边界扫描寄存器中,将捕获NET_A的BSC单元设置为捕获模式。
5. 执行一次Update-DR(将U1的激励输出到引脚)和一次Capture-DR(捕获U2引脚上的电平)。
6. 移出U2的捕获数据。如果NET_A短路到地,则捕获值为'0';如果短路到电源,则捕获值为'1';如果正常,则捕获值应为'0'(因为U1驱动为'0')。
结果分析:若捕获值与预期不符,则判定NET_A存在故障。

常见误区:IR位宽与指令码混淆

风险提示:不同芯片的IR位宽可能不同(如4位、8位、16位)。在编写测试程序时,必须从芯片数据手册中获取准确的IR位宽和指令码。例如,某芯片的EXTEST指令码是0000,而另一芯片可能是1000。如果使用错误的指令码,TAP控制器可能执行了BYPASS或未知指令,导致测试失败。此外,SAMPLE/PRELOAD和EXTEST共用指令码时,必须在进入EXTEST前先执行一次SAMPLE/PRELOAD来预置安全数据,避免在切换瞬间产生总线冲突。

3.3 边界扫描原理:从引脚到内部逻辑的“透视镜”

核心原理:边界扫描单元(BSC)的结构

边界扫描的核心是边界扫描单元(BSC)。每个数字I/O引脚都串联一个BSC。一个典型的BSC包含两个触发器:移位寄存器触发器(用于串行扫描)和更新寄存器触发器(用于并行输出)。BSC支持三种主要模式:正常模式(引脚直接连接到核心逻辑)、移位模式(数据通过TDI串行移入/移出)、更新模式(将移位寄存器中的数据锁存到更新寄存器,并驱动到引脚)。

边界扫描寄存器(BSR)就是由这些BSC串联而成的移位寄存器链。它的长度等于芯片的数字I/O引脚数(可能包含控制引脚)。通过EXTEST指令,测试系统可以完全控制这些引脚的电平,从而隔离芯片内部逻辑,进行板级互连测试。

判断方法:识别BSC的三种工作模式

模式控制信号数据路径典型应用
正常模式模式选择=0引脚 ↔ 核心逻辑芯片正常运行
移位模式模式选择=1, ShiftDR=1TDI → 移位寄存器 → TDO装载/卸载扫描数据
更新模式模式选择=1, UpdateDR=1移位寄存器 → 更新寄存器 → 引脚将测试激励输出到引脚

实战场景:边界扫描链的级联与诊断

在实际板卡中,多颗JTAG器件的TDI/TDO首尾相连形成一条菊花链。测试系统通过TAP状态机逐器件访问。当链上某颗器件损坏时,整条链可能断裂。此时,测试系统可以通过BYPASS指令将损坏器件旁路,从而继续测试链上的其他器件。诊断方法通常是:先发送BYPASS指令给所有器件,然后通过测量TDO的移位延迟来判断链上器件的数量和位置。

经验总结:在调试JTAG链路时,如果发现TDO无输出,首先检查TCK和TMS信号是否正常,其次检查TDI到第一颗器件的连接,最后检查TAP状态机是否卡死在某个状态(例如TMS线虚焊导致无法退出Shift状态)。

常见误区:忽略安全状态设置

风险提示:在从EXTEST模式切换回正常模式时,如果边界扫描单元中锁存了不安全的电平(例如将两个输出使能引脚同时驱动为'0'),可能会导致板级短路。正确的做法是:在退出EXTEST之前,先通过SAMPLE/PRELOAD指令将所有的输出BSC设置为高阻态(Hi-Z)或安全的非驱动电平,然后再切换到正常模式。这被称为“安全预置”(Safe Preload)。

3.4 从JTAG到IJTAG的演进:为何需要1687

传统JTAG的指令寄存器机制虽然强大,但在面对芯片内部日益复杂的嵌入式仪器(如温度传感器、电压监控器、PLL状态寄存器、片上调试逻辑)时,暴露了明显的局限性。首先,指令码资源有限,IR位宽通常只有4-8位,无法为芯片内成百上千个仪器分配独立指令。其次,数据寄存器访问粒度太粗,访问一个仪器需要将整个边界扫描链或大型DR全部移位,效率低下。最后,缺乏动态配置能力,无法在测试过程中灵活地重新配置扫描链的拓扑结构。

IEEE 1687 (IJTAG) 正是为了解决这些问题而诞生。它引入了Segment Insertion Bit (SIB)作为可配置的开关,允许将不同的仪器段动态地接入或移出扫描链。通过SIB,测试系统可以构建一个“可重构的扫描网络”,按需访问特定的仪器,而无需扫描整个边界扫描链。这极大地提高了测试效率和灵活性。

核心对比:
- IEEE 1149.1: 固定扫描链,通过指令选择整个DR。访问粒度大,效率低。
- IEEE 1687: 动态扫描链,通过SIB配置网络。访问粒度小,效率高,支持分层网络。