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的配置机制,以及如何通过标准指令驱动这些寄存器完成引脚级测试,并辅以实际工程案例说明其应用价值。

边界扫描寄存器与单元(BSC)结构及控制路径 芯片核心逻辑 (系统功能电路) Core Logic BSC 单元 (Cell 1) BSC 单元 (Cell N) 芯片引脚 PIN_1 芯片引脚 PIN_N 边界扫描寄存器链(BSR Chain)— 移位路径 TAP控制器 (状态机 + 指令寄存器) 旁路寄存器 Bypass (1-bit) IDCODE寄存器 32-bit TDI TDO TCK/TMS 引脚信号路径 核心逻辑数据路径 BSR移位链 TDI/TDO串行数据 TCK/TMS控制

上图展示了边界扫描测试的核心架构:芯片的每个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=1BSC触发器 ← 前级BSC(TDI方向)将测试激励串行移入,或将捕获数据移出
更新模式(Update)Update=1BSC锁存器 ← BSC触发器将移入的测试激励并行施加到引脚/核心逻辑

从结构上看,一个典型的BSC包含一个用于捕获数据的捕获触发器(Capture Flip-Flop)和一个用于输出稳定激励的更新锁存器(Update Latch)。这种“双锁存器”结构(即“主从”结构)是IEEE 1149.1标准的核心要求,它确保了在移位过程中,输出到引脚或核心逻辑的测试激励不会因移位而抖动,从而保证了测试的稳定性。

4.1.2 判断方法与操作流程:如何控制BSC

要控制BSC,必须通过TAP控制器执行特定的指令。操作流程如下:

  1. 进入测试逻辑复位(Test-Logic-Reset):将TMS置高并保持5个TCK上升沿,确保TAP状态机回到初始态。
  2. 移入指令:在“Shift-IR”状态,通过TDI串行移入指令码(如EXTEST、SAMPLE/PRELOAD、BYPASS等)。指令码的长度由芯片的指令寄存器宽度决定(通常为8位或更长)。
  3. 更新指令:在“Update-IR”状态,将移入的指令码锁存到指令寄存器中,此时TAP控制器会根据指令选择相应的数据寄存器路径(如BSR、Bypass或IDCODE)。
  4. 操作数据寄存器:在“Shift-DR”状态,通过TDI向选中的寄存器(如BSR)移入数据,或通过TDO移出数据。
经验提醒:在实际调试中,务必先执行SAMPLE/PRELOAD指令,将安全的已知值(如0x00或0xFF)预载入BSC的更新锁存器,然后再切换到EXTEST指令。否则,在切换到EXTEST的瞬间,BSC输出到引脚的信号将是未知的,可能驱动外部器件产生不确定状态,甚至导致总线冲突。

4.1.3 案例拆解:用EXTEST指令控制引脚输出

假设我们需要通过边界扫描将芯片的PIN_5(连接到LED阳极)驱动为高电平,以验证该引脚与PCB走线的连接性。具体操作如下:

  1. 执行SAMPLE/PRELOAD指令,将BSR中对应PIN_5的更新锁存器预置为0(低电平),避免LED在测试开始时误亮。
  2. 执行EXTEST指令,此时所有BSC的输出端与核心逻辑断开,输出状态由更新锁存器决定。
  3. 在Shift-DR状态,根据BSR的位序(通常从靠近TDO的单元开始移入),将对应PIN_5的位设置为1,其余位设置为0(或保持安全值)。
  4. 进入Update-DR状态,将数据从捕获触发器锁存到更新锁存器,PIN_5立即输出高电平,LED点亮。

通过测量LED是否点亮,即可判断芯片PIN_5到LED之间的PCB走线是否存在开路或短路。若LED未亮,则需检查该网络上的焊点、过孔等。

风险提示:EXTEST指令会将所有数字引脚的输出状态强制为BSC中预载的值。如果这些引脚连接了外部高驱动能力的器件(如电机驱动、电源使能端),错误的预载值可能导致设备误动作。因此,在执行EXTEST前,必须仔细核对原理图,确保预载值不会引发安全事故。

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的控制属性(如是否支持控制使能、是否包含输出使能控制)。
  • 指令寄存器的长度和操作码。

操作流程如下:

  1. 从芯片厂商官网或EDA工具库中获取BSDL文件。
  2. 使用文本编辑器或专业的边界扫描工具(如JTAG Technologies、XJTAG等)打开BSDL文件。
  3. 在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,则可能存在开路(驱动端未送达)或对地短路。如果捕获到不确定值,则可能存在与其他网络的短路。

关键点:对于双向引脚或三态引脚,必须正确设置其输出使能控制单元(如上述BSDL示例中的ccell)。否则,在EXTEST模式下,引脚可能处于高阻态,无法驱动或捕获正确的逻辑电平。

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。操作流程如下:

  1. 将TMS置高,保持5个TCK周期,进入Test-Logic-Reset状态。
  2. 将TMS置低,进入Run-Test/Idle状态。
  3. 依次进入Shift-DR状态(此时默认指令为IDCODE),在TCK驱动下,从TDO移出32位数据。
  4. 将移出的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引脚焊盘氧化导致接触不良。

风险提示:如果JTAG链中某颗芯片的TDO引脚与下一颗芯片的TDI引脚之间存在开路,则后续所有芯片的IDCODE都将无法正确读取。此时应使用示波器测量TDO/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 操作流程:从预载到外部测试的完整序列

  1. 上电初始化:确保TAP控制器处于Test-Logic-Reset状态。
  2. 预载(PRELOAD):执行SAMPLE/PRELOAD指令,在Shift-DR状态移入安全数据,在Update-DR状态将数据锁存到更新锁存器。此步骤确保所有引脚输出为已知安全电平。
  3. 切换指令:执行EXTEST指令。此时,BSC的输出端切换到更新锁存器,引脚输出由预载数据决定。
  4. 施加激励:在Shift-DR状态,移入新的测试向量(激励),在Update-DR状态更新输出。
  5. 捕获响应:在Capture-DR状态,捕获引脚上的实际电平到捕获触发器。
  6. 移出结果:在Shift-DR状态,将捕获的数据通过TDO移出,与预期值比对。

4.4.3 案例拆解:一个完整的板级互连测试闭环

背景:某通信板卡上有FPGA(U1)和CPLD(U2)通过8位并行总线相连。生产测试中发现约5%的板卡在功能测试时总线数据错误。初步怀疑是PCB走线存在微短路或虚焊。

目标:通过边界扫描精确定位故障网络。

操作步骤:

  1. 获取U1和U2的BSDL文件,确认总线引脚对应的BSC位序。
  2. 编写测试向量:将U1的8位总线引脚设为输出,驱动为0xAA(10101010);将U2的8位总线引脚设为输入。
  3. 执行EXTEST,U1驱动0xAA,U2捕获数据。
  4. U2捕获结果为0xA8(10101000),即第2位(bit1)错误,预期为1,实际为0。
  5. 分析:bit1网络可能存在对地短路,或者U1的bit1引脚虚焊导致无法驱动高电平。
  6. 使用万用表测量U1的bit1引脚到U2的bit1引脚之间的电阻,发现阻值约为12Ω,远低于正常值(应接近0Ω)。进一步检查,发现该网络在PCB走线转弯处有毛刺,与相邻地网络间距过小,导致微短路。

结果:修复PCB走线后,重新测试,U2捕获数据恢复为0xAA,功能测试通过。

复盘:边界扫描测试不仅验证了连接性,还通过精确的位级诊断,将故障定位到具体的网络和引脚,大大缩短了排障时间。同时,该测试向量仅需几十个TCK周期即可完成,非常适合产线批量测试。

实战要点:在编写测试向量时,应避免同时驱动两个芯片的同一网络为相反电平(如一个为1,一个为0),否则可能产生较大电流,损坏器件。建议采用“一驱一采”的模式,即一个芯片驱动,另一个芯片采样。

4.4.4 常见误区与总结复盘

  • 误区一:忽略引脚的三态控制。对于双向总线,必须通过BSC的控制单元正确设置方向。如果方向设置错误,可能导致总线冲突。
  • 误区二:认为边界扫描可以覆盖所有故障。对于模拟信号、电源、地、时钟等非数字引脚,边界扫描无法直接测试。这些网络需要依赖其他测试方法(如飞针测试、ICT)。
  • 总结:通过EXTEST和SAMPLE/PRELOAD指令的组合,边界扫描实现了对数字引脚的非侵入式控制与观测。它是板级互连测试、故障诊断和系统调试中不可或缺的技术手段。

综上所述,边界扫描寄存器与单元构成了JTAG测试的物理基础。从BSC的双锁存器结构,到BSR的链式配置,再到旁路寄存器与IDCODE寄存器的辅助作用,每一个环节都服务于“引脚级控制与观测”这一核心目标。掌握这些知识,工程师不仅能高效地完成板级互连测试,还能在系统调试中快速定位故障,提升产品的可测试性与可靠性。