BGA 封装把焊点藏在芯片肚子底下,针床测不到,飞线也够不着。IEEE 1149.1 的解法是在每个 I/O 引脚旁边塞一个微型扫描单元,串成链,靠 TDI/TDO 就能观测和驱动所有引脚。这个单元就是 Boundary Scan Cell,简称 BSC。
很多人看 BSC 电路只停留在"带 MUX 的扫描寄存器"这个印象上,其实它的每一个门、每一个时钟沿都经过仔细推敲。今天把它彻底拆开,从电路结构到 Tessent 仿真验证,一条线讲透。
图1:Boundary Scan 整体架构
一座桥,四个端口,两个 MUX
BSC 本质上是一座可控的桥,平时透明,测试模式下接管数据通路。它对外暴露四个端口:PI 接收来自核心逻辑或 Pad 的数据;PO 把数据送向 Pad 或核心逻辑;SI 接前一级 BSC 的移位输出;SO 接后一级 BSC 的移位输入。这四个端口把 BSC 串成一条边界扫描链,环绕在芯片四周。
输入端有一个二选一 MUX,由 selectJtagInput 控制。为 0 时 PI 直通 PO,芯片正常跑功能;为 1 时 SI 接入移位链路。输出端也有一个 MUX,由 selectJtagOutput 控制,决定 PO 走正常功能路径还是改由更新寄存器驱动。
图2:BSC 详细电路——Capture 与 Update 寄存器级联
两个寄存器,正沿加负沿的讲究
电路中间两级寄存器是 BSC 的灵魂。reg1 是捕获寄存器,由 clockBscan 正沿触发;reg2 是更新寄存器,由 updateBscan 控制,通常是负沿触发的锁存器或下降沿 DFF。reg1 的输出既送给 reg2,也直接作为 bscanShiftOut 送给下一级 BSC。
为什么非要两个寄存器,而且用相反的时钟沿?第一是 retiming 解决 clock skew。芯片边界上的 I/O Pad 物理位置分散,TCK 时钟树到每个 BSC 的延迟差异很大。正沿捕获、负沿更新的组合,天然把 setup/hold 窗口错开半个周期,时序裕量直接翻倍。第二是效率:正沿加负沿让数据在一个 TCK 周期内完成 capture-to-update,如果都用正沿就要浪费一个周期。这种结构在 Tessent 的 Cell Library 里通常叫 BC_1 型 BSC,是工业界最主流的实现。
图3:IEEE 1149.1 TAP 控制器状态机
三种模式,TAP 控制器说了算
TAP 控制器通过 selectJtagInput 和 selectJtagOutput 决定 BSC 的工作模式。SAMPLE 模式最温和,芯片正常跑功能,BSC 只是顺手把 PI 上的数据抓进 reg1,不影响任何信号路径,相当于在边界上装了一个逻辑分析仪。
EXTEST 模式是 BSC 的老本行,板级互连测试全靠它。此时 selectJtagOutput 置 1,PO 改由 reg2 输出驱动。测试机台通过 TDI 移入测试向量,经过 Update-DR 锁存到 reg2,然后强制推到 Pad 上驱动 PCB 走线。输入 BSC 的 reg1 在 Capture-DR 采样 Pad 响应,再移出到 TDO 比对。虚焊、短路、断路,一测便知。
图4:板级多芯片 JTAG 菊花链连接
Tessent 怎么仿真 BSC
用 Tessent Shell 做 Boundary Scan 插入和仿真,分两个阶段。第一阶段插 BSC 硬件,在 Shell 里设置 context 为 dft -rtl,读入网表和 Cell Library,打开边界扫描:set_dft_specification_requirements -boundary_scan on,然后 create_dft_specification 生成规格,process_dft_specification 插入 BSC。extract_icl 这一步非常关键,它检查 BSC 链是否首尾相连、TCK 是否覆盖所有 BSC、控制信号是否正确译码。ICL 违例不解决,后面的仿真基本跑不通。
set_context dft -rtl -design_id rtl1
set_dft_specification_requirements -boundary_scan on
create_dft_specification
process_dft_specification
extract_icl
第二阶段 create_pattern_specification 和 process_patterns_specification 自动生成测试向量。Tessent 会在 TSDB 目录下吐出 Verilog testbench、STIL 向量文件和 VCS 编译脚本。这些 testbench 是工具根据 ICL 自动生成的,里面包含了 TAP 状态机的完整激励:从 Test-Logic-Reset 进入 Shift-IR 加载 EXTEST 指令,再进入 Shift-DR 移入向量,经过 Update-DR 更新到 reg2,Capture-DR 采样响应,最后移出比对。
图5:Tessent EBSCAN 架构
仿真通过的判定很直接:checker 对比 TDO 移出的数据与 STIL 预期值。最常见的错误是 reg1 和 reg2 的时钟沿搞反了,导致 capture 和 update 抢在同一个沿上,数据还没稳定就被锁进 reg2,TDO 值自然 mismatch。
踩坑提醒:很多项目做 BSCAN 仿真时 Pad 的 PU/PD 没正确约束,导致 EXTEST 模式下 Pad 输出出现不定态。Tessent 的 PostLV-BCAD-Edits 会修改网表,把 Pad 控制引脚接到可控节点上,避免悬空。
BSC 看起来只是一个小小的扫描寄存器,但它承载了从芯片到板级的一整套测试哲学。理解两个寄存器为什么用相反时钟沿、两个 MUX 怎么解码模式,是做好 DFT 的基础。而在 Tessent 工具链里,BSC 仿真不再是手写 testbench 的体力活,工具会根据 ICL 自动生成完整的 TAP 激励和 checker,但前提是你得明白工具在验证什么,以及它可能在哪里埋坑。