3. 扫描链设计(Scan Chain)

扫描链是结构化 DFT 的核心技术,通过将普通时序单元替换为可扫描单元,在测试模式下将寄存器连接成一条或多条移位寄存器链,从而实现对内部状态的直接控制与观测。本节从原理、架构对比到插入流程,系统讲解扫描链设计的工程要点。

3.1 扫描链基本原理

扫描链的核心思想是在测试模式下,将芯片内部的触发器(Flip-Flop)重新配置为串行移位寄存器。通过扫描输入(Scan In, SI)端口将测试向量移入寄存器链,捕获电路响应后,再通过扫描输出(Scan Out, SO)端口将结果移出,与预期值比较。

关键概念: 扫描链将时序电路的测试问题转化为组合逻辑的测试问题,大幅降低 ATPG 复杂度。
扫描链基本结构示意图 Scan In 组合逻辑 A FF1 (可扫描) 组合逻辑 B FF2 (可扫描) Scan Out Scan Clock Scan Enable 测试模式:Scan Enable=1,FF 首尾串联形成移位寄存器 功能模式:Scan Enable=0,FF 正常连接组合逻辑

3.2 Muxed-D 与 LSSD 架构对比

业界主流的扫描单元架构有两种:Muxed-D(多路复用型)和 LSSD(电平敏感扫描设计)。两者在面积、时序、测试时钟等方面存在显著差异。

对比维度 Muxed-D LSSD
基本单元 标准 D 触发器 + 输入多路选择器 双锁存器(L1/L2)结构
时钟需求 单时钟(功能时钟复用) 双非重叠时钟(A/B 或 C1/C2)
面积开销 较低(约 10%~15%) 较高(约 20%~30%)
时序影响 增加 MUX 延迟,影响功能路径 锁存器时序更宽松,对功能路径影响小
测试时钟频率 可与功能时钟相同 通常低于功能时钟
DC 扫描能力 支持(需额外控制) 天然支持(电平敏感)
工业应用 主流 ASIC/SoC 首选 IBM、高可靠性/军工芯片
工程建议: 对于大多数消费电子和通信芯片,Muxed-D 架构因面积小、时钟简单而成为首选。LSSD 适用于对时序余量要求苛刻或需要高可靠性的设计。
Muxed-D 与 LSSD 单元结构对比 Muxed-D 单元 D SI ──┤MUX├── D 触发器 SE ──┤ ├ Q 单时钟,面积小 LSSD 单元 D ──┤ L1 锁存器 ├──┤ L2 锁存器 ├── Q SI ──┤ (C1时钟) ├──┤ (C2时钟) ├ C1 ──┤ ├ C2 ──┤ ├ SO 双非重叠时钟,时序更稳健 Muxed-D 适合面积敏感、时钟资源有限的 SoC 设计 LSSD 适合高性能、高可靠性、对时序余量要求严苛的设计

3.3 扫描链插入流程

扫描链插入是 DFT 实现的关键步骤,通常由 EDA 工具自动完成。以下为标准插入流程,分为 6 个主要阶段:

  1. 设计准备(Pre-DFT):确认 RTL 代码风格符合 DFT 要求,避免异步复位、门控时钟等不可控结构。
  2. 库单元映射:将标准触发器替换为可扫描触发器(如 SDFF),并确保库中包含完整的扫描单元。
  3. 扫描链配置:定义扫描链数量、长度、扫描端口(SI/SO/SE/SCLK),以及链的平衡策略。
  4. 自动插入(Insert Scan):EDA 工具根据约束自动完成扫描链的 stitching(缝合),生成扫描网表。
  5. 验证与仿真:运行扫描链验证(Scan Chain Verification),检查移位功能是否正确。
  6. ATPG 与覆盖率分析:生成测试向量,评估测试覆盖率,必要时调整链结构。
关键指标: 扫描链插入后需检查 scan chain continuity(链连续性)和 scan chain length balance(链长度平衡),确保测试时间与覆盖率满足要求。
扫描链插入流程(6 阶段) 1. 设计准备 RTL 检查 2. 库单元映射 替换 SDFF 3. 链配置 数量/长度 4. 自动插入 Stitching 5. 验证仿真 链连续性 6. ATPG 分析 覆盖率评估 迭代优化 工具命令示例(Synopsys DFT Compiler): set_scan_configuration -chain_count 8 -clock_mixing mix_clocks insert_dft

3.4 扫描链插入的工程要点

在实际项目中,扫描链插入并非简单的工具一键操作,需要关注以下工程细节:

  • 链长度平衡:各扫描链长度差异应控制在 5% 以内,避免测试时间受最长链限制。
  • 时钟域处理:跨时钟域的触发器应分配到不同扫描链,或使用专门的隔离单元。
  • 扫描端口复用:SI/SO 通常复用功能 I/O,需确保测试模式下端口方向正确。
  • 功耗控制:扫描移位时大量寄存器同时翻转,需评估动态功耗,必要时插入门控时钟。
  • 压缩技术:对于大规模芯片,可结合 X-tolerant 压缩技术减少测试数据量。
常见陷阱: 扫描链插入后必须进行 post-DFT 时序分析,因为扫描单元的 MUX 延迟可能破坏功能路径的建立时间。建议在插入前预留 5%~10% 的时序余量。

3.5 扫描链验证与调试

扫描链插入完成后,需通过以下验证确保链的正确性:

验证项目 方法 预期结果
链移位测试 输入 0101... 模式,检查输出 输出与输入一致(延迟 N 个周期)
链连续性 扫描链 ATPG 向量 所有链通过,无断路/短路
捕获测试 加载向量 → 捕获 → 移位输出 捕获响应与预期匹配
IDDQ 测试 静态电流测量 无异常漏电
// 扫描链验证 Tcl 脚本示例(Synopsys DFT Compiler)
# 设置扫描配置
set_scan_configuration -chain_count 4 \
                       -chain_length 500 \
                       -clock_mixing mix_clocks \
                       -add_dedicated_scan_ports false

# 插入扫描链
insert_dft

# 验证扫描链
verify_scan_chain -type shift
verify_scan_chain -type capture

# 报告扫描链信息
report_scan_chain -verbose > scan_chain_report.rpt
report_scan_path -verbose > scan_path_report.rpt
调试技巧: 当扫描链验证失败时,首先检查 Scan Enable 信号是否在所有扫描单元上正确连接,其次检查时钟树是否在测试模式下正常工作。使用 report_scan_chain -show_connection 可快速定位断点。