3. TAP控制器状态机
TAP(Test Access Port)控制器是边界扫描测试的核心控制单元,它是一个16状态的有限状态机(FSM),在TCK上升沿触发状态跳变,由TMS输入决定下一状态。理解这16个状态是部署边界扫描ATE测试方案的基础。
关键概念: TAP控制器状态机遵循IEEE 1149.1标准,所有JTAG兼容器件必须实现完全相同的16状态转移逻辑。ATE测试向量必须精确控制TMS序列,使状态机按预期路径跳转。
3.1 状态机总览与状态转移图
TAP控制器状态机分为两大分支:数据寄存器(DR)分支和指令寄存器(IR)分支。每个分支包含7个状态,加上公共的Test-Logic-Reset和Run-Test/Idle,共16个状态。
3.2 核心状态详解
以下按ATE测试中实际使用频率,对16个状态进行分组详解。
3.2.1 公共状态(2个)
| 状态名称 | 状态编码 | 功能描述 | ATE测试要点 |
|---|---|---|---|
| Test-Logic-Reset | 0x0F | 上电默认状态,TAP控制器复位,测试逻辑被禁用,IC正常工作模式 | 保持TMS=1至少5个TCK周期确保进入此状态;ATE上电序列必须包含此操作 |
| Run-Test/Idle | 0x0C | 空闲状态,TAP等待指令;在此状态可执行自测试(BIST)操作 | ATE向量中此状态用于等待测试完成;TMS保持0可无限停留 |
ATE实践提示: 在测试程序初始化阶段,建议发送至少10个TCK周期且TMS=1的序列,确保所有JTAG链路上的器件都可靠进入Test-Logic-Reset状态,避免上电时序差异导致的状态机不同步。
3.2.2 数据寄存器(DR)分支(7个状态)
DR分支用于访问边界扫描寄存器、旁路寄存器、器件ID寄存器等数据路径。
| 状态名称 | 功能描述 | ATE测试应用 |
|---|---|---|
| Select-DR-Scan | DR分支的入口选择状态,TMS=0进入Capture-DR,TMS=1进入Select-IR-Scan | ATE向量中作为DR访问的跳转中间态 |
| Capture-DR | 在TCK上升沿将并行数据(如边界扫描单元捕获的引脚状态)加载到移位寄存器链 | ATE测试中用于采样输入引脚状态;必须在此状态停留1个TCK周期 |
| Shift-DR | 在TCK上升沿通过TDI串行移入数据,同时在TCK下降沿从TDO串行移出数据 | ATE测试的核心操作状态;移入测试激励,移出测试响应;移位位数由寄存器长度决定 |
| Exit1-DR | DR分支的第一退出状态,TMS=1进入Update-DR,TMS=0进入Pause-DR | ATE中用于判断是否继续移位或结束移位 |
| Pause-DR | 暂停移位操作,TAP在此状态等待,TDO保持高阻或最后一位值 | ATE测试中用于等待外部事件或同步多器件操作 |
| Exit2-DR | DR分支的第二退出状态,TMS=0返回Shift-DR,TMS=1进入Update-DR | ATE中从暂停恢复移位或结束移位的选择点 |
| Update-DR | 在TCK下降沿将移位寄存器中的数据并行加载到边界扫描单元的输出锁存器 | ATE测试中用于更新输出引脚状态;必须在此状态停留1个TCK周期 |
3.2.3 指令寄存器(IR)分支(7个状态)
IR分支用于加载JTAG指令,选择要访问的数据寄存器或执行特定操作。
| 状态名称 | 功能描述 | ATE测试应用 |
|---|---|---|
| Select-IR-Scan | IR分支的入口选择状态,TMS=0进入Capture-IR,TMS=1返回Test-Logic-Reset | ATE向量中作为IR访问的跳转中间态 |
| Capture-IR | 将固定值(通常最低2位为01)加载到指令移位寄存器 | ATE中用于验证IR移位路径的完整性 |
| Shift-IR | 通过TDI串行移入指令码,同时从TDO移出Capture-IR加载的值 | ATE测试中加载指令(如EXTEST、SAMPLE、BYPASS等);移位位数由IR长度决定 |
| Exit1-IR | IR分支的第一退出状态,TMS=1进入Update-IR,TMS=0进入Pause-IR | ATE中用于判断是否继续移位指令 |
| Pause-IR | 暂停指令移位操作 | ATE中用于多指令序列的同步等待 |
| Exit2-IR | IR分支的第二退出状态,TMS=0返回Shift-IR,TMS=1进入Update-IR | ATE中从暂停恢复移位或结束移位的选择点 |
| Update-IR | 在TCK下降沿将移位寄存器中的指令码加载到指令锁存器,激活对应指令功能 | ATE测试中指令生效的关键状态;必须在此状态停留1个TCK周期 |
3.3 ATE测试中的典型状态序列
在ATE测试中,TAP控制器的状态序列通常遵循以下模式:
- 初始化序列: Test-Logic-Reset → Run-Test/Idle(确保状态机从已知状态启动)
- 加载指令序列: Run-Test/Idle → Select-DR-Scan → Select-IR-Scan → Capture-IR → Shift-IR(移入N位指令码)→ Exit1-IR → Update-IR → Run-Test/Idle
- 数据操作序列: Run-Test/Idle → Select-DR-Scan → Capture-DR → Shift-DR(移入/移出M位数据)→ Exit1-DR → Update-DR → Run-Test/Idle
ATE向量生成规则: 每个TCK周期对应一个TMS值和TDI值(移位状态下有效)。TMS控制状态跳转,TDI提供串行输入数据。TDO在每个TCK下降沿被采样,获取串行输出数据。ATE测试程序必须精确计算每个状态的停留周期数,特别是Shift-DR/Shift-IR状态下的移位位数必须与寄存器长度匹配。
3.4 状态机在ATE测试中的关键应用
以下表格总结了16个状态在ATE测试中的具体应用场景:
| 状态 | ATE测试应用场景 | 典型TMS序列 |
|---|---|---|
| Test-Logic-Reset | 上电初始化、故障恢复、测试结束 | 11111(至少5个TCK) |
| Run-Test/Idle | 等待BIST完成、空闲等待、多器件同步 | 0(可无限保持) |
| Select-DR-Scan | DR分支入口跳转 | 1(仅1个TCK) |
| Select-IR-Scan | IR分支入口跳转 | 1(仅1个TCK) |
| Capture-DR | 采样输入引脚状态、捕获内部逻辑值 | 0(仅1个TCK) |
| Capture-IR | 验证IR路径完整性 | 0(仅1个TCK) |
| Shift-DR | 移入测试激励、移出测试响应 | 0(N-1个TCK)+ 1(最后1位) |
| Shift-IR | 移入指令码 | 0(N-1个TCK)+ 1(最后1位) |
| Exit1-DR/IR | 退出移位、选择更新或暂停 | 1(仅1个TCK) |
| Pause-DR/IR | 等待外部触发、多芯片同步 | 0(可无限保持) |
| Exit2-DR/IR | 从暂停恢复或结束 | 1(仅1个TCK) |
| Update-DR | 更新输出引脚状态、加载测试激励到输出 | 1(仅1个TCK) |
| Update-IR | 激活新加载的指令 | 1(仅1个TCK) |
3.5 状态机时序与ATE向量生成
在ATE测试中,TAP控制器的时序要求直接影响测试向量的生成策略:
- TCK频率: 通常为10MHz~50MHz,受限于ATE通道板卡性能和DUT最大工作频率
- 建立/保持时间: TMS和TDI相对TCK上升沿需满足建立/保持时间(通常≥5ns)
- TDO采样窗口: 在TCK下降沿之后、下一个TCK上升沿之前采样TDO
- 状态保持时间: 每个状态至少保持1个TCK周期,Pause状态可无限保持
常见ATE测试陷阱:
- 在Shift-DR/Shift-IR状态下,移位位数必须严格等于寄存器长度,多移或少移都会导致后续数据错位
- Update-DR和Update-IR必须在TCK下降沿触发,ATE向量时序必须精确匹配
- 多器件JTAG链时,所有器件的TAP状态机必须同步跳转,TMS信号同时驱动所有器件
- 从Test-Logic-Reset退出时,必须确保TMS=0至少1个TCK周期进入Run-Test/Idle,不能直接跳转到Select-DR-Scan
3.6 状态机验证的ATE测试方法
在ATE测试中,验证TAP控制器状态机正确性的常用方法:
- IDCODE读取测试: 通过IR加载IDCODE指令(通常为0x03),然后在DR分支读取32位器件ID码,验证状态机能否正确完成指令加载和数据移位
- BYPASS路径测试: 加载BYPASS指令(通常为0xFF),验证1位移位寄存器路径,确认状态机在Shift-DR下的基本移位功能
- 状态回环测试: 遍历所有16个状态,在每个状态读取TDO输出,验证状态机是否按预期路径跳转
- 复位恢复测试: 在任意状态强制TMS=1保持5个TCK周期,验证能否可靠回到Test-Logic-Reset
// ATE测试向量示例:加载EXTEST指令并执行边界扫描测试
// 假设IR长度=8位,EXTEST指令码=0x00
// 假设边界扫描寄存器长度=64位
// 步骤1:复位到已知状态
TCK: 1 1 1 1 1 1 1 1 1 1 // 10个TCK周期,TMS=1
TMS: 1 1 1 1 1 1 1 1 1 1
TDI: X X X X X X X X X X // 无关
// 步骤2:进入Run-Test/Idle
TCK: 1
TMS: 0
TDI: X
// 步骤3:加载EXTEST指令(IR分支)
// 路径:Run-Test->Select-DR->Select-IR->Capture-IR->Shift-IR(8位)->Exit1-IR->Update-IR->Run-Test
TCK: 1 1 1 1 1 1 1 1 1 1 1 1 1
TMS: 1 1 0 0 0 0 0 0 0 0 1 1 0
TDI: X X X 0 0 0 0 0 0 0 X X X // 移入EXTEST指令码0x00(LSB first)
// 步骤4:执行边界扫描数据操作(DR分支)
// 路径:Run-Test->Select-DR->Capture-DR->Shift-DR(64位)->Exit1-DR->Update-DR->Run-Test
TCK: 1 1 1 1 ... (64个移位周期) ... 1 1 1 1
TMS: 1 0 0 0 ... (63个0 + 1个1) ... 1 1 0
TDI: X X 1 ... (64位测试激励数据) ... 0 X X // 移入激励,同时移出响应
ATE向量优化建议: 对于大规模JTAG链(多器件级联),建议使用ATE的pattern burst功能,将重复的移位序列压缩为循环模式,减少向量存储空间。同时,利用ATE的实时TDO比较功能,在移位过程中即时比对响应数据,提高测试效率。
3.7 状态机与ATE测试系统架构
在ATE测试系统中,TAP控制器的状态机控制通常由以下组件协同完成: