4. 边界扫描(JTAG):IEEE 1149.1标准,TAP控制器,指令寄存器与数据寄存器,边界扫描应用
边界扫描,圈内人通常直接叫它JTAG。这玩意儿在芯片测试领域,地位就跟咱们吃饭用的筷子一样——离了它,很多活儿真干不了。
我记得刚入行那会儿,带我的老工程师跟我说:“小子,你要是搞懂了JTAG,DFT这行你就入门一半了。”当时我还不太信,后来踩过几次坑才明白,这话一点不夸张。
4.1 为什么需要边界扫描?
你想想看,现在的芯片封装越来越小,引脚间距比头发丝还细。传统的探针测试?根本扎不上去。就算勉强扎上去了,板级焊接后的互联测试怎么办?总不能把焊好的芯片再拆下来测吧。
IEEE 1149.1标准就是为解决这个问题来的。它定义了一套串行测试接口,通过芯片内部的一条“数字高速公路”,让我们能访问到每个引脚的输入输出状态。说白了,就是给每个IO引脚装了个“偷窥窗”。
核心思想:在芯片内部,每个数字引脚旁边都串一个“边界扫描单元”(BSC)。这些单元手拉手连成一条链,通过4根或5根测试专用引脚来控制。
4.2 TAP控制器——JTAG的大脑
TAP(Test Access Port)控制器是整个JTAG架构的核心。它是一个16状态的有限状态机,所有操作都围着它转。
我个人习惯把TAP控制器理解成一个“交通指挥员”。它根据TCK(测试时钟)和TMS(测试模式选择)这两个信号,指挥数据在芯片内部怎么走。
下面这张图是我自己画的TAP控制器状态转移图,你仔细看看:
嗯,这里要注意几个关键点:
- Test-Logic-Reset:上电后默认进入这个状态。TMS保持5个TCK周期的1,就能强制回到这里。我建议你在测试开始时先做这个操作,确保状态机处于已知状态。
- Run-Test/Idle:空闲状态,啥也不干。但有些内建自测试(BIST)操作是在这个状态下触发的。
- Shift-DR和Shift-IR:这是真正干活的状态。数据寄存器(DR)和指令寄存器(IR)的移位操作都在这里完成。
4.3 指令寄存器与数据寄存器
JTAG的寄存器分两类:指令寄存器(IR)和数据寄存器(DR)。这个区分很重要,我见过不少新手搞混。
4.3.1 指令寄存器(IR)
IR的长度至少是2位,具体长度由芯片设计决定。它用来存放当前要执行的指令。标准定义了几条强制指令:
| 指令 | 编码(示例) | 功能 |
|---|---|---|
| BYPASS | 全1 | 旁路模式,数据从TDI直接到TDO,延迟1个TCK |
| SAMPLE/PRELOAD | 0001 | 采样引脚状态 / 预加载数据到边界扫描单元 |
| EXTEST | 0000 | 板级互联测试,核心指令 |
| INTEST | 0010 | 芯片内部逻辑测试(可选) |
| IDCODE | 0011 | 读取芯片ID(可选) |
避坑指南:我曾经在一个项目中,发现JTAG链死活不通。查了两天才找到原因——IR的长度设计成了1位。标准要求至少2位,1位的IR无法区分BYPASS和EXTEST。所以,设计时IR长度千万别省。
4.3.2 数据寄存器(DR)
DR的种类就多了。标准强制要求的有两个:
- 边界扫描寄存器(BSR):就是前面说的那条“数字链”,每个IO引脚对应一个BSC单元。
- 旁路寄存器(Bypass Register):只有1位,用于快速穿过当前芯片。
可选的数据寄存器包括:设备ID寄存器、用户自定义寄存器等。
4.4 边界扫描的应用场景
说完了原理,咱们聊聊实际怎么用。我这些年做过的项目里,JTAG主要用在三个地方:
4.4.1 板级互联测试
这是JTAG最经典的应用。PCB焊接完成后,通过EXTEST指令,可以测试芯片之间的连线有没有短路、断路。
具体做法:芯片A的某个引脚输出一个已知值(比如0),芯片B对应的引脚捕获这个值。如果B捕获到的不是0,说明这条线有问题。
实际案例:我参与过一个通信板卡项目,板上有8颗FPGA和20多颗ASIC。第一次上电时,JTAG链能识别到所有芯片,但跑EXTEST时总报错。后来定位到是某颗ASIC的TDO引脚虚焊。你看,没有JTAG,这种问题查起来得费多大劲?
4.4.2 芯片内部测试
INTEST指令允许我们通过边界扫描链,向芯片内部逻辑施加测试向量。虽然速度慢,但在某些场景下非常有用——比如芯片已经焊在板上了,想单独测一下内部逻辑是否正常。
4.4.3 在线编程与调试
这个大家应该很熟悉了。FPGA的配置、MCU的调试,用的都是JTAG接口。本质上就是通过TAP控制器,把数据写到芯片内部的特定寄存器里。
4.5 设计中的注意事项
最后,分享几个我在实际项目中总结的经验:
- TCK频率别太高:板级JTAG链可能很长,TCK频率太高会导致信号质量下降。我一般控制在10-20MHz。
- TMS和TDI要有上拉:防止悬空时误触发。我曾经吃过这个亏,芯片上电后莫名其妙进入测试模式。
- 链的顺序要规划好:多颗芯片级联时,TDI->TDO的路径要清晰。建议在PCB上预留测试点,方便调试。
- BSC单元的位置:每个数字IO引脚都要有BSC,但模拟引脚不需要。这个在设计约束里要明确。
重要提醒:边界扫描不是万能的。它只能测试数字信号的互联,对模拟信号无能为力。另外,JTAG链本身也可能出问题——如果链断了,所有芯片都测不了。所以,设计时一定要考虑JTAG链的可靠性。
好了,关于边界扫描就聊这么多。这东西看着复杂,其实核心就三件事:TAP控制器怎么走状态、IR和DR怎么操作、EXTEST怎么用。搞懂了这些,JTAG这块就算拿下了。