4、边界扫描寄存器与单元:从BSC结构到引脚级控制与观测
边界扫描测试(Boundary Scan Test)的核心思想,是在芯片的每个数字I/O引脚与芯片内部逻辑之间,插入一串可控、可观测的移位寄存器单元,即边界扫描单元(BSC,Boundary Scan Cell)。这些BSC串联成链,构成边界扫描寄存器(BSR,Boundary Scan Register),配合旁路寄存器(Bypass Register)、IDCODE寄存器以及TAP控制器(Test Access Port Controller),共同实现了对芯片引脚级的精密控制与观测。本章将深入剖析BSC的内部结构、BSR的配置机制,以及如何通过标准指令驱动这些寄存器完成引脚级测试,并辅以实际工程案例说明其应用价值。
上图展示了边界扫描测试的核心架构:芯片的每个I/O引脚旁都串联了一个BSC单元,这些BSC通过移位路径首尾相连形成BSR链。TAP控制器作为总指挥,根据TCK(测试时钟)和TMS(测试模式选择)信号的状态,决定是将数据从TDI(测试数据输入)移入BSR、旁路寄存器还是IDCODE寄存器,并通过TDO(测试数据输出)将结果移出。理解这个数据流与控制流,是掌握边界扫描测试的基石。
4.1 边界扫描单元(BSC)的结构与功能
4.1.1 核心原理:BSC的两种工作模式
BSC本质上是一个可配置的触发器/锁存器组合,它被物理放置在芯片引脚与内部核心逻辑之间。每个BSC至少包含两个关键的数据路径:正常模式(Normal Mode)和测试模式(Test Mode)。在正常模式下,BSC是透明的,引脚信号直接通过BSC进入核心逻辑,或者核心逻辑的输出通过BSC到达引脚,对系统功能毫无影响。在测试模式下,BSC则被“截断”,允许测试数据从TDI串行移入,或者将捕获的引脚状态串行移出。这种设计使得测试逻辑与功能逻辑在物理上隔离,但又在电气上可控。
| BSC功能模式 | 控制信号(来自TAP) | 数据路径 | 典型应用场景 |
|---|---|---|---|
| 正常模式 | Mode=0 | 引脚 ↔ 核心逻辑 | 系统正常运行,测试逻辑透明 |
| 捕获模式(Capture) | Capture=1 | 引脚/核心逻辑 → BSC触发器 | 采样引脚当前电平或核心逻辑输出状态 |
| 移位模式(Shift) | Shift=1 | BSC触发器 ← 前级BSC(TDI方向) | 将测试激励串行移入,或将捕获数据移出 |
| 更新模式(Update) | Update=1 | BSC锁存器 ← BSC触发器 | 将移入的测试激励并行施加到引脚/核心逻辑 |
从结构上看,一个典型的BSC包含一个用于捕获数据的捕获触发器(Capture Flip-Flop)和一个用于输出稳定激励的更新锁存器(Update Latch)。这种“双锁存器”结构(即“主从”结构)是IEEE 1149.1标准的核心要求,它确保了在移位过程中,输出到引脚或核心逻辑的测试激励不会因移位而抖动,从而保证了测试的稳定性。
4.1.2 判断方法与操作流程:如何控制BSC
要控制BSC,必须通过TAP控制器执行特定的指令。操作流程如下:
- 进入测试逻辑复位(Test-Logic-Reset):将TMS置高并保持5个TCK上升沿,确保TAP状态机回到初始态。
- 移入指令:在“Shift-IR”状态,通过TDI串行移入指令码(如EXTEST、SAMPLE/PRELOAD、BYPASS等)。指令码的长度由芯片的指令寄存器宽度决定(通常为8位或更长)。
- 更新指令:在“Update-IR”状态,将移入的指令码锁存到指令寄存器中,此时TAP控制器会根据指令选择相应的数据寄存器路径(如BSR、Bypass或IDCODE)。
- 操作数据寄存器:在“Shift-DR”状态,通过TDI向选中的寄存器(如BSR)移入数据,或通过TDO移出数据。
4.1.3 案例拆解:用EXTEST指令控制引脚输出
假设我们需要通过边界扫描将芯片的PIN_5(连接到LED阳极)驱动为高电平,以验证该引脚与PCB走线的连接性。具体操作如下:
- 执行SAMPLE/PRELOAD指令,将BSR中对应PIN_5的更新锁存器预置为0(低电平),避免LED在测试开始时误亮。
- 执行EXTEST指令,此时所有BSC的输出端与核心逻辑断开,输出状态由更新锁存器决定。
- 在Shift-DR状态,根据BSR的位序(通常从靠近TDO的单元开始移入),将对应PIN_5的位设置为1,其余位设置为0(或保持安全值)。
- 进入Update-DR状态,将数据从捕获触发器锁存到更新锁存器,PIN_5立即输出高电平,LED点亮。
通过测量LED是否点亮,即可判断芯片PIN_5到LED之间的PCB走线是否存在开路或短路。若LED未亮,则需检查该网络上的焊点、过孔等。
4.1.4 常见误区与总结复盘
- 误区一:认为BSC只用于测试,不影响功能。实际上,如果BSC的更新锁存器在正常模式下未被正确初始化,上电后可能输出不确定电平,导致功能异常。因此,芯片上电后应尽快通过TAP执行SAMPLE/PRELOAD或BYPASS指令,使BSC进入透明状态。
- 误区二:混淆捕获触发器和更新锁存器的时序。捕获是在Capture-DR状态沿TCK上升沿采样,而更新是在Update-DR状态沿TCK下降沿(或上升沿,取决于实现)锁存。理解这一时序差异,对于分析测试失败原因至关重要。
- 总结:BSC是边界扫描的“神经末梢”,其双锁存器结构保证了测试激励的稳定性和捕获数据的准确性。掌握其四种工作模式(正常、捕获、移位、更新)是进行后续所有边界扫描操作的基础。
4.2 边界扫描寄存器(BSR)的配置与链结构
4.2.1 核心原理:BSR的组成与位序
边界扫描寄存器并非一个独立的物理寄存器,而是由芯片所有I/O引脚对应的BSC串联而成的移位寄存器链。链的长度等于芯片的数字I/O引脚数量(包括双向引脚、输入引脚和输出引脚)。BSR的位序(Bit Order)在IEEE 1149.1标准中并未强制规定,但通常遵循从TDI到TDO的物理连接顺序。每个BSC在链中的位置决定了其对应的数据位。例如,靠近TDI的BSC对应BSR的最低位(LSB),靠近TDO的BSC对应最高位(MSB)。
4.2.2 配置方法与操作流程:如何确定BSR位序
要正确配置BSR,必须获取芯片的BSDL(Boundary Scan Description Language)文件。BSDL文件是芯片厂商提供的标准描述文件,它详细定义了:
- 芯片的引脚封装信息。
- 每个引脚的BSC单元编号(Cell Number)及其在BSR链中的位置。
- 每个BSC的控制属性(如是否支持控制使能、是否包含输出使能控制)。
- 指令寄存器的长度和操作码。
操作流程如下:
- 从芯片厂商官网或EDA工具库中获取BSDL文件。
- 使用文本编辑器或专业的边界扫描工具(如JTAG Technologies、XJTAG等)打开BSDL文件。
- 在BSDL文件中查找“PORT MAPPING”和“BOUNDARY_REGISTER”部分,即可获得每个引脚对应的BSC单元编号和位序。
-- 示例BSDL片段(简化)
attribute BOUNDARY_REGISTER of MY_IC : entity is
-- num cell port function safe ccell disval rslt
"0 (BC_1, PIN_1, input, X)," &
"1 (BC_1, PIN_2, output3, X, 2, 0, Z)," &
"2 (BC_1, PIN_3, bidir, X, 4, 0, Z)," &
"3 (BC_4, *), " & -- 控制单元,用于使能输出
"4 (BC_1, PIN_4, output3, X, 3, 0, Z)";
在上述示例中,PIN_2是一个三态输出引脚,其输出使能由第3号BSC单元(控制单元)控制。当控制单元输出为0时,PIN_2的输出为高阻态(Z)。
4.2.3 案例拆解:通过BSR实现引脚级互连测试
考虑一个简单的板级互连测试场景:芯片A的PIN_10连接到芯片B的PIN_20。我们需要验证这条网络是否存在开路或短路。
| 步骤 | 操作 | 芯片A的BSR操作 | 芯片B的BSR操作 |
|---|---|---|---|
| 1 | 预载 | 执行SAMPLE/PRELOAD,将PIN_10对应的BSC更新锁存器置为0 | 执行SAMPLE/PRELOAD,将PIN_20对应的BSC更新锁存器置为0 |
| 2 | 驱动 | 执行EXTEST,将PIN_10对应的BSC位设置为1 | 执行EXTEST,将PIN_20对应的BSC位设置为0(作为接收端) |
| 3 | 捕获 | 执行INTEST(或CLAMP),捕获PIN_10的输入状态 | 执行EXTEST,在Capture-DR状态捕获PIN_20的输入状态 |
| 4 | 移出 | 通过TDO移出捕获数据,检查PIN_10是否读到1 | 通过TDO移出捕获数据,检查PIN_20是否读到1 |
如果芯片B的PIN_20捕获到1,说明网络连接良好;如果捕获到0,则可能存在开路(驱动端未送达)或对地短路。如果捕获到不确定值,则可能存在与其他网络的短路。
4.2.4 常见误区与总结复盘
- 误区一:忽略BSR链的长度。如果BSR链很长(例如超过1000个单元),移入/移出数据将耗费大量时间。此时应考虑使用旁路寄存器来缩短移位路径,只测试感兴趣的引脚。
- 误区二:手动计算BSR位序。在复杂芯片中,BSR位序可能不按引脚编号顺序排列,手动计算极易出错。务必依赖BSDL文件或专业工具。
- 总结:BSR的配置核心在于理解BSDL文件。它不仅是位序的字典,更是控制属性的说明书。正确解析BSDL是进行高效、安全边界扫描测试的前提。
4.3 旁路寄存器与IDCODE寄存器
4.3.1 核心原理:旁路寄存器(Bypass Register)
旁路寄存器是一个仅包含1位的移位寄存器。当TAP控制器执行BYPASS指令时,TDI与TDO之间仅通过这1位寄存器相连。其作用是:当板上有多颗芯片级联成JTAG链时,如果某颗芯片不需要参与本次测试,可以将其置于旁路模式,从而大大缩短整个链的移位长度,提高测试效率。例如,一个包含10颗芯片的JTAG链,每颗芯片的BSR长度为100位,总链长为1000位。如果只测试其中一颗,其余9颗置于旁路模式,则总链长变为 100 + 9 = 109位,移位时间缩短近90%。
4.3.2 核心原理:IDCODE寄存器
IDCODE寄存器是一个32位的只读移位寄存器,它存储了芯片的制造商ID、器件编号和版本号。当TAP控制器执行IDCODE指令(通常为默认指令)时,TDI与TDO之间连接IDCODE寄存器。上电后,TAP控制器默认执行IDCODE指令,因此通过TDO可以自动读出芯片的ID,用于验证芯片是否正确安装、型号是否匹配。IDCODE的位定义遵循JEDEC标准:
- 位[31:28]:版本号(Version)。
- 位[27:12]:器件编号(Part Number)。
- 位[11:1]:制造商ID(Manufacturer ID),遵循JEDEC标准编码。
- 位[0]:固定为1(LSB)。
4.3.3 操作流程与案例:利用IDCODE进行板级诊断
在PCB调试中,如果JTAG链无法正常工作,首先应读取链上所有芯片的IDCODE。操作流程如下:
- 将TMS置高,保持5个TCK周期,进入Test-Logic-Reset状态。
- 将TMS置低,进入Run-Test/Idle状态。
- 依次进入Shift-DR状态(此时默认指令为IDCODE),在TCK驱动下,从TDO移出32位数据。
- 将移出的32位数据与BSDL文件中预期的IDCODE比对。
案例:某板卡上有3颗芯片(U1、U2、U3)级联。上电后读取IDCODE,发现U1的IDCODE正确,但U2的IDCODE全为0,U3的IDCODE全为1。分析:U2的IDCODE全为0,可能原因是U2的TDI引脚虚焊或TAP控制器未上电;U3的IDCODE全为1,可能原因是U3的TDO引脚虚焊,导致输出被上拉电阻拉高。通过进一步测量U2的TCK和TMS引脚波形,最终定位为U2的TDI引脚焊盘氧化导致接触不良。
4.3.4 常见误区与总结复盘
- 误区一:认为旁路寄存器可以随意使用。实际上,BYPASS指令的执行也需要经过完整的TAP状态机流程(Shift-IR、Update-IR等),不能直接“跳过”。
- 误区二:忽略IDCODE的默认指令属性。如果芯片不支持IDCODE指令,上电后默认指令可能是BYPASS,此时读出的数据将是1位,而非32位。因此,在读取IDCODE前,应先查阅芯片数据手册确认其默认指令。
- 总结:旁路寄存器是提升测试效率的利器,IDCODE寄存器是板级诊断的“身份证”。两者都是TAP控制器管理下的标准数据寄存器,熟练掌握其操作是进行复杂JTAG链调试的基础。
4.4 通过边界扫描实现芯片引脚级的控制与观测
4.4.1 核心原理:控制与观测的两种基本操作
引脚级控制与观测是边界扫描测试的核心能力,主要通过以下两种指令实现:
- EXTEST(外部测试):将BSC的更新锁存器与核心逻辑断开,输出端直接由更新锁存器驱动。此时,可以通过BSR向引脚施加测试激励,并捕获来自其他芯片的响应。这是板级互连测试的主要手段。
- SAMPLE/PRELOAD(采样/预载):在正常功能运行状态下,捕获引脚的实际状态到捕获触发器(SAMPLE),同时可以将预定的测试数据预先载入更新锁存器(PRELOAD),为后续切换到EXTEST做好准备。
4.4.2 操作流程:从预载到外部测试的完整序列
- 上电初始化:确保TAP控制器处于Test-Logic-Reset状态。
- 预载(PRELOAD):执行SAMPLE/PRELOAD指令,在Shift-DR状态移入安全数据,在Update-DR状态将数据锁存到更新锁存器。此步骤确保所有引脚输出为已知安全电平。
- 切换指令:执行EXTEST指令。此时,BSC的输出端切换到更新锁存器,引脚输出由预载数据决定。
- 施加激励:在Shift-DR状态,移入新的测试向量(激励),在Update-DR状态更新输出。
- 捕获响应:在Capture-DR状态,捕获引脚上的实际电平到捕获触发器。
- 移出结果:在Shift-DR状态,将捕获的数据通过TDO移出,与预期值比对。
4.4.3 案例拆解:一个完整的板级互连测试闭环
背景:某通信板卡上有FPGA(U1)和CPLD(U2)通过8位并行总线相连。生产测试中发现约5%的板卡在功能测试时总线数据错误。初步怀疑是PCB走线存在微短路或虚焊。
目标:通过边界扫描精确定位故障网络。
操作步骤:
- 获取U1和U2的BSDL文件,确认总线引脚对应的BSC位序。
- 编写测试向量:将U1的8位总线引脚设为输出,驱动为0xAA(10101010);将U2的8位总线引脚设为输入。
- 执行EXTEST,U1驱动0xAA,U2捕获数据。
- U2捕获结果为0xA8(10101000),即第2位(bit1)错误,预期为1,实际为0。
- 分析:bit1网络可能存在对地短路,或者U1的bit1引脚虚焊导致无法驱动高电平。
- 使用万用表测量U1的bit1引脚到U2的bit1引脚之间的电阻,发现阻值约为12Ω,远低于正常值(应接近0Ω)。进一步检查,发现该网络在PCB走线转弯处有毛刺,与相邻地网络间距过小,导致微短路。
结果:修复PCB走线后,重新测试,U2捕获数据恢复为0xAA,功能测试通过。
复盘:边界扫描测试不仅验证了连接性,还通过精确的位级诊断,将故障定位到具体的网络和引脚,大大缩短了排障时间。同时,该测试向量仅需几十个TCK周期即可完成,非常适合产线批量测试。
4.4.4 常见误区与总结复盘
- 误区一:忽略引脚的三态控制。对于双向总线,必须通过BSC的控制单元正确设置方向。如果方向设置错误,可能导致总线冲突。
- 误区二:认为边界扫描可以覆盖所有故障。对于模拟信号、电源、地、时钟等非数字引脚,边界扫描无法直接测试。这些网络需要依赖其他测试方法(如飞针测试、ICT)。
- 总结:通过EXTEST和SAMPLE/PRELOAD指令的组合,边界扫描实现了对数字引脚的非侵入式控制与观测。它是板级互连测试、故障诊断和系统调试中不可或缺的技术手段。
综上所述,边界扫描寄存器与单元构成了JTAG测试的物理基础。从BSC的双锁存器结构,到BSR的链式配置,再到旁路寄存器与IDCODE寄存器的辅助作用,每一个环节都服务于“引脚级控制与观测”这一核心目标。掌握这些知识,工程师不仅能高效地完成板级互连测试,还能在系统调试中快速定位故障,提升产品的可测试性与可靠性。