第三章:边界扫描寄存器结构
好,咱们今天聊聊边界扫描的核心——寄存器结构。说白了,边界扫描能干活,全靠这几个寄存器在背后撑着。我个人习惯把BSR(边界扫描寄存器)、Bypass寄存器和IDCODE寄存器称为“三驾马车”。
3.1 BSR(边界扫描寄存器)原理
BSR,全称Boundary Scan Register。名字挺长,但原理不复杂。你可以把它想象成芯片管脚上的“监控探头”。
每个数字I/O管脚旁边,都串联了一个BSR单元。这些单元首尾相连,形成一条长长的移位寄存器链。测试时,数据从TDI(测试数据输入)进入,沿着这条链一路传下去,最后从TDO(测试数据输出)出来。
BSR的核心功能有两个:
- 捕获(Capture):把管脚上的实际电平值“拍个快照”,存进BSR单元里。
- 更新(Update):把预先准备好的测试数据,从BSR单元“推”到管脚上。
我在项目中遇到过一个问题:某款芯片的BSR链长度是固定的,但设计文档里没写清楚。结果我们写测试向量时,移位次数算错了,导致数据对不上。嗯,这里要注意——BSR链的长度,必须从芯片的BSD(边界扫描描述)文件里查,别自己猜。
重要提示:BSR单元的结构通常包含两个锁存器——一个用于捕获(Capture),一个用于更新(Update)。这种“双锁存”设计,是为了避免在移位过程中干扰管脚的实际状态。
3.2 Bypass寄存器
Bypass寄存器,说白了就是个“快速通道”。
你想想看,如果一块板子上有10颗芯片,每颗芯片的BSR链都有几百个单元。测试时,数据要穿过所有芯片的BSR链,那得等到猴年马月?
Bypass寄存器就是来解决这个问题的。它只有1位(1-bit),数据从TDI进来,经过一个触发器,直接到TDO。延迟只有一个时钟周期。
什么时候用Bypass?
- 当某颗芯片不需要参与当前测试时,就把它设成Bypass模式。
- 这样,测试数据可以“绕开”它的BSR链,直接穿过去。
我曾经在一次板级调试中,发现某颗芯片的Bypass路径死活不通。查了半天,原来是芯片的JTAG TAP控制器状态机卡住了。解决办法很简单——给芯片的TRST(测试复位)引脚来一个复位脉冲。
避坑指南:Bypass寄存器的指令码通常是全1(比如111...1)。但不同厂商可能有差异。我建议你养成习惯:每次拿到新芯片,先查它的指令集表。
3.3 IDCODE寄存器
IDCODE寄存器,全称Identification Code Register。它的作用就一个——告诉测试设备“我是谁”。
IDCODE是32位的,结构如下:
| 位域 | 位数 | 含义 |
|---|---|---|
| [31:28] | 4位 | 版本号(Version) |
| [27:12] | 16位 | 器件编号(Part Number) |
| [11:1] | 11位 | 制造商编号(Manufacturer ID) |
| [0] | 1位 | 固定为1(LSB) |
为什么LSB固定为1?这是IEEE 1149.1标准规定的。目的是让测试设备能快速识别出IDCODE寄存器的存在。你想想看,如果LSB是0,那它可能就是个普通的BSR单元,容易混淆。
IDCODE的读取流程:
- TAP控制器进入Shift-DR状态。
- 在TCK(测试时钟)的驱动下,IDCODE从TDO逐位输出。
- 测试设备读取这32位数据,然后查表,就知道芯片的型号和厂商了。
我记得有一次,客户送来一块板子,说芯片识别不出来。我一看,IDCODE读出来全是0。嗯,这通常是芯片没上电,或者JTAG链路有断路。后来发现是TDI到TDO的链路上,有一颗芯片的电源没接好。
警告:IDCODE寄存器是只读的。你不能往里面写数据。如果测试设备试图写入IDCODE,TAP控制器会忽略这个操作。别问我怎么知道的——我年轻时犯过这个错。
3.4 三种寄存器的协同工作
这三种寄存器不是各自为政的。它们通过TAP控制器的指令寄存器(IR)来切换。
简单来说:
- 当IR加载了EXTEST指令,BSR链被激活。
- 当IR加载了BYPASS指令,Bypass寄存器被激活。
- 当IR加载了IDCODE指令,IDCODE寄存器被激活。
你可能会问:“为什么不能同时激活多个寄存器?”
原因很简单——TDI到TDO之间,同一时刻只能有一条数据路径。如果多条路径同时打开,数据就会打架。所以,TAP控制器通过指令来选择当前要用的寄存器。
个人经验:在板级测试中,我习惯先读IDCODE,确认所有芯片都“在线”。然后再切换到EXTEST模式,做互连测试。如果IDCODE读不出来,就别浪费时间跑后面的测试了——先修硬件吧。
3.5 实际应用中的注意事项
最后,分享几个我在项目中踩过的坑:
- BSR链长度别搞错:不同芯片的BSR链长度差异很大。有的只有几十位,有的上千位。写测试向量时,一定要从BSD文件里提取准确长度。
- Bypass不是万能的:虽然Bypass只有1位,但它仍然需要时钟。如果芯片的时钟域有问题,Bypass也可能失效。
- IDCODE的版本号会变:同一款芯片,不同批次可能版本号不同。测试设备里的IDCODE数据库要定期更新。
好了,这一章就讲到这里。下一章,咱们聊聊TAP控制器——那个指挥这些寄存器干活的总调度师。