3. 扫描链设计(Scan Chain)
扫描链是结构化 DFT 的核心技术,通过将普通时序单元替换为可扫描单元,在测试模式下将寄存器连接成一条或多条移位寄存器链,从而实现对内部状态的直接控制与观测。本节从原理、架构对比到插入流程,系统讲解扫描链设计的工程要点。
3.1 扫描链基本原理
扫描链的核心思想是在测试模式下,将芯片内部的触发器(Flip-Flop)重新配置为串行移位寄存器。通过扫描输入(Scan In, SI)端口将测试向量移入寄存器链,捕获电路响应后,再通过扫描输出(Scan Out, SO)端口将结果移出,与预期值比较。
关键概念: 扫描链将时序电路的测试问题转化为组合逻辑的测试问题,大幅降低 ATPG 复杂度。
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 适用于对时序余量要求苛刻或需要高可靠性的设计。
3.3 扫描链插入流程
扫描链插入是 DFT 实现的关键步骤,通常由 EDA 工具自动完成。以下为标准插入流程,分为 6 个主要阶段:
- 设计准备(Pre-DFT):确认 RTL 代码风格符合 DFT 要求,避免异步复位、门控时钟等不可控结构。
- 库单元映射:将标准触发器替换为可扫描触发器(如 SDFF),并确保库中包含完整的扫描单元。
- 扫描链配置:定义扫描链数量、长度、扫描端口(SI/SO/SE/SCLK),以及链的平衡策略。
- 自动插入(Insert Scan):EDA 工具根据约束自动完成扫描链的 stitching(缝合),生成扫描网表。
- 验证与仿真:运行扫描链验证(Scan Chain Verification),检查移位功能是否正确。
- ATPG 与覆盖率分析:生成测试向量,评估测试覆盖率,必要时调整链结构。
关键指标: 扫描链插入后需检查 scan chain continuity(链连续性)和 scan chain length balance(链长度平衡),确保测试时间与覆盖率满足要求。
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 可快速定位断点。