3、传统JTAG (IEEE 1149.1) 回顾:TAP状态机、指令寄存器、数据寄存器、边界扫描原理
在深入IEEE 1687 IJTAG之前,必须彻底理解其前身——IEEE 1149.1标准,即传统JTAG。JTAG最初是为了解决板级互连测试而设计的,但它的架构后来成为芯片内部调试、配置和测试的基础设施。本章将系统回顾JTAG的核心组件:TAP状态机、指令寄存器(IR)、数据寄存器(DR)以及边界扫描原理。理解这些概念是掌握IJTAG中Segment Insertion Bit(SIB)和1687网络拓扑的基石。
上图展示了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-Reset | Run-Test/Idle | Test-Logic-Reset | 复位所有测试逻辑,使IR变为IDCODE指令 |
| Run-Test/Idle | Run-Test/Idle | Select-DR-Scan | 空闲状态,可执行BIST等运行测试 |
| Select-DR-Scan | Capture-DR | Select-IR-Scan | 选择数据寄存器扫描路径 |
| Select-IR-Scan | Capture-IR | Test-Logic-Reset | 选择指令寄存器扫描路径 |
| Capture-DR | Shift-DR | Exit1-DR | 在TCK上升沿将并行数据装载到DR |
| Shift-DR | Shift-DR | Exit1-DR | 每个TCK上升沿将TDI数据移入,TDO数据移出 |
| Exit1-DR | Pause-DR | Update-DR | 移位结束的中间状态 |
| Update-DR | Run-Test/Idle | Select-DR-Scan | 在TCK下降沿将移位寄存器内容锁存到并行输出 |
实战场景:上电后的默认行为
当芯片上电时,TAP控制器进入Test-Logic-Reset状态。此时,指令寄存器被强制设置为IDCODE指令(如果实现了IDCODE寄存器)。这意味着,如果测试人员立即开始扫描操作,访问的是32位的Device ID寄存器,而不是边界扫描寄存器。这一设计允许测试系统快速识别芯片的制造商、型号和版本,而无需预先知道芯片的边界扫描链长度。
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 (可选): 触发芯片内建自测试逻辑。
操作流程:一条指令的完整生命周期
- 进入Shift-IR: 通过TMS序列将状态机驱动至Shift-IR状态。
- 移入指令码: 在TCK上升沿,将指令码的LSB(最低有效位)先送入TDI,依次移入IR移位寄存器。同时,TDO输出当前IR的内容(通常为IDCODE指令码)。
- 退出并更新: 经过Exit1-IR和Update-IR状态,在TCK下降沿,指令码被锁存到IR并行输出。
- 执行指令: 指令译码逻辑根据锁存的指令码,将对应的DR(如BSR、Bypass、IDCODE)连接到TDI-TDO路径。
- 访问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位宽与指令码混淆
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=1 | TDI → 移位寄存器 → TDO | 装载/卸载扫描数据 |
| 更新模式 | 模式选择=1, UpdateDR=1 | 移位寄存器 → 更新寄存器 → 引脚 | 将测试激励输出到引脚 |
实战场景:边界扫描链的级联与诊断
在实际板卡中,多颗JTAG器件的TDI/TDO首尾相连形成一条菊花链。测试系统通过TAP状态机逐器件访问。当链上某颗器件损坏时,整条链可能断裂。此时,测试系统可以通过BYPASS指令将损坏器件旁路,从而继续测试链上的其他器件。诊断方法通常是:先发送BYPASS指令给所有器件,然后通过测量TDO的移位延迟来判断链上器件的数量和位置。
常见误区:忽略安全状态设置
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配置网络。访问粒度小,效率高,支持分层网络。