3. 扫描链设计 (Scan Chain)

扫描链是结构化 DFT 的基石,它将普通时序电路中的触发器替换为具有扫描功能的特殊触发器,并在测试模式下将这些触发器串联成一条或多条移位寄存器链。通过扫描链,测试工程师可以直接从芯片引脚控制(扫描输入)和观测(扫描输出)内部节点的状态,从而将复杂的时序测试问题简化为组合逻辑测试问题。

3.1 扫描触发器结构

扫描触发器的核心是在标准 D 触发器的基础上增加一个多路选择器(MUX),用于在正常工作模式(D 端)和测试模式(扫描输入端 SI)之间切换数据来源。常见的扫描触发器结构包括:

  • Muxed-D 扫描触发器:最主流的结构,面积和延迟开销小。
  • LSSD (Level-Sensitive Scan Design):使用锁存器对,对时钟毛刺不敏感,但面积较大。
  • 时钟门控扫描触发器:集成时钟门控逻辑,用于低功耗设计。
关键指标: 扫描触发器的面积开销通常比普通触发器增加 10%~25%,延迟增加约 1~2 个门延迟。

下图展示了 Muxed-D 扫描触发器的内部结构:

Muxed-D 扫描触发器结构 D SI SE MUX 2:1 0 1 D-FF (CK) CK Q SE=0: 正常模式,数据从 D 输入;SE=1: 扫描模式,数据从 SI 输入。 Q 端同时连接组合逻辑和下一级触发器的 SI 端。

3.2 扫描链插入流程

扫描链插入是 DFT 流程中的核心步骤,通常在逻辑综合之后、物理设计之前完成。标准流程如下:

步骤 阶段 输入/输出 关键检查点
1 RTL 检查 RTL 代码 → 可测性规则检查报告 异步置位/复位、时钟门控、三态总线
2 综合与映射 RTL → 门级网表 (含普通触发器) 时序约束、面积预估
3 扫描替换 普通触发器 → 扫描触发器 扫描触发器库单元可用性
4 扫描链排序 确定触发器连接顺序 物理距离、时钟域、功耗
5 扫描链缝合 SI → SO 连接,生成扫描使能网络 扫描使能信号扇出、时钟树平衡
6 验证与仿真 扫描链网表 → 功能与时序仿真 移位正确性、捕获时序
工程实践: 扫描链插入通常使用 EDA 工具(如 Synopsys DFT Compiler、Cadence Genus)自动完成。但工程师需要手动指定扫描链数量、扫描使能信号名称、以及是否对某些时钟域或存储器进行旁路。

下图展示了从 RTL 到扫描链网表的完整流程:

扫描链插入流程 RTL 设计 (Verilog/VHDL) 逻辑综合 (普通 D-FF) 扫描替换 (Scan-FF) 扫描链缝合 (SI→SO 连接) 验证与仿真 (DRC/时序) 扫描链网表 (含 SE 网络) 迭代优化:修复 DRC 违例、调整扫描链顺序 关键输入: 门级网表、扫描定义文件 (SPF/STIL)、时钟与复位约束。 关键输出: 扫描链网表、扫描链描述文件 (Scan Chain Description)、测试协议文件。 常见问题: 扫描使能信号扇出过大、跨时钟域扫描链时序违例、存储器 BIST 与扫描链冲突。

3.3 扫描使能控制

扫描使能(Scan Enable, SE)信号是扫描链的控制核心,它决定了触发器的工作模式。SE 信号的设计直接影响测试时序和芯片性能。

3.3.1 扫描使能的工作模式

模式 SE 电平 触发器行为 时钟要求
正常模式 0 D 端数据输入,正常功能逻辑 功能时钟
移位模式 1 SI 端数据输入,数据沿扫描链移位 扫描时钟(通常为功能时钟)
捕获模式 0 D 端数据输入,捕获组合逻辑响应 捕获时钟(1~2 个脉冲)
时序风险: SE 信号在移位模式与捕获模式之间切换时,必须保证所有触发器在同一时钟沿完成模式切换。如果 SE 信号到达不同触发器的时间偏差过大(SE 时钟偏差),可能导致部分触发器仍在移位而部分已进入捕获,造成测试失败。

3.3.2 扫描使能网络设计

SE 信号通常是一个全局信号,需要驱动芯片内所有扫描触发器。其设计要点包括:

  • 低延迟偏差: 使用 H 树或平衡树结构分配 SE 信号,确保各触发器 SE 端延迟偏差在 100ps 以内。
  • 高扇出缓冲: SE 信号扇出可能达到数万甚至数十万,需要插入多级缓冲器(Buffer Tree)来驱动。
  • 测试模式隔离: 在正常模式下,SE 信号应保持为 0,且不干扰功能逻辑。通常通过测试模式选择信号(Test Mode)来门控 SE。
  • 多链独立控制: 对于多扫描链设计,每条链可以拥有独立的 SE 信号,以实现并行移位或分时测试。

下图展示了扫描使能信号的分配网络:

扫描使能 (SE) 信号分配网络 SE 源 BUF1 BUF2 BUF3 BUF1a BUF1b BUF2a BUF2b BUF3a BUF3b FF FF FF FF FF FF SE 信号通过 H 树结构逐级缓冲,确保各触发器 SE 端延迟偏差最小化。

3.3.3 扫描使能时序约束

在测试综合阶段,需要为 SE 信号设置专门的时序约束,以确保测试模式下的时序收敛:

# 扫描使能时序约束示例 (Synopsys Design Constraints)
# 设置 SE 信号为测试模式输入
set_test_mode -type scan -enable_port [get_ports scan_enable]

# 设置 SE 信号的最大延迟
set_max_delay 2.0 -from [get_ports scan_enable] -to [all_registers -data_pins]

# 设置 SE 信号的时钟偏差约束
set_clock_uncertainty -setup 0.3 [get_clocks test_clock]
set_clock_uncertainty -hold 0.2 [get_clocks test_clock]

# 设置 SE 信号在捕获模式下的时序检查
set_false_path -from [get_ports scan_enable] -to [all_registers -clock_pins] -setup
设计建议: 对于高性能芯片,建议使用独立的测试时钟(Test Clock)来驱动扫描链,与功能时钟分离。这样可以避免功能时钟树上的额外负载,同时允许测试时钟具有不同的频率和占空比。