3、扫描测试原理:扫描链结构、扫描触发器类型、扫描使能与时序
扫描测试(Scan Testing)是数字集成电路可测试性设计(DFT)的基石。其核心思想是将芯片内部难以直接观测和控制的时序单元(触发器)通过额外的测试逻辑连接成一条或多条移位寄存器链,从而在测试模式下将复杂的时序电路问题转化为组合逻辑测试问题。本章将深入剖析扫描链的物理结构、扫描触发器的类型选择、扫描使能(Scan Enable)信号的控制策略以及相关的时序约束,帮助学员建立从电路结构到测试时序的完整认知。
3.1 扫描链结构与工作原理
核心原理:扫描链的本质是在功能触发器的数据输入端(D)前插入一个二选一多路选择器(MUX),由扫描使能信号(SE)控制选择功能数据路径还是扫描数据路径。当 SE=1 时,所有触发器首尾相连形成移位寄存器链,测试向量通过扫描输入引脚(SI)逐周期移入;当 SE=0 时,触发器恢复功能模式,捕获组合逻辑的响应结果;随后再次置 SE=1,将捕获结果通过扫描输出引脚(SO)移出芯片,与 ATPG(自动测试向量生成)工具预期的响应进行比对。
一条完整的扫描链包含以下关键要素:
- 扫描输入(SI):通常连接芯片的专用测试引脚或复用功能引脚,用于串行输入测试激励。
- 扫描输出(SO):串行输出测试响应,可连接至芯片输出引脚或片上比较器(如 MISR)。
- 扫描使能(SE):全局或局部控制信号,决定触发器工作在移位模式还是捕获模式。
- 扫描时钟(Scan Clock):在移位阶段驱动触发器工作的时钟,通常与功能时钟同源或独立。
扫描链的长度(即链上触发器的数量)直接影响测试时间。假设一条链上有 N 个触发器,加载一个测试向量需要 N 个移位时钟周期,移出响应也需要 N 个周期,因此单向量测试时间约为 2N 个周期。为了平衡测试时间和引脚开销,设计者通常将芯片内的触发器划分为多条长度相近的扫描链,每条链分配独立的 SI/SO 引脚。
set_scan_chain 约束将同一功能模块或同一时钟域的触发器优先分配到同一条链,同时控制每条链的长度差异在 5% 以内,以均衡测试时间。
3.2 扫描触发器类型与选型
根据实现工艺和测试需求的不同,扫描触发器主要有以下几种类型,每种类型在面积、时序和测试可靠性方面各有取舍。
| 类型 | 结构特点 | 面积开销 | 时序影响 | 适用场景 |
|---|---|---|---|---|
| Muxed-D 触发器 | 在 D 输入端前增加 2:1 MUX | 约增加 10%~15% | 增加一个 MUX 延迟 | 标准数字电路,最广泛使用 |
| LSSD(电平敏感扫描设计) | 双锁存器结构,使用两相非重叠时钟 | 约增加 20%~30% | 无竞争风险,时序稳健 | 高性能 CPU、对时序要求极苛刻的设计 |
| 时钟边沿型扫描触发器 | 在时钟路径上插入 MUX 或门控 | 约增加 15% | 可能增加时钟延迟 | 需要独立时钟控制的特殊设计 |
| 双沿触发器(DDR) | 在时钟上升沿和下降沿均采样 | 约增加 25% | 时序收敛难度大 | 低功耗或高速接口设计 |
选型判断方法:对于绝大多数 ASIC 设计,Muxed-D 触发器是默认选择,因为它结构简单、对功能路径的延迟影响最小。LSSD 虽然面积开销大,但消除了时钟竞争问题,特别适合在 5nm 以下先进工艺中作为可选的 DFT 策略。在低功耗设计中,如果使用了多电压域或时钟门控,需要仔细评估扫描触发器的保持时间(Hold Time)是否满足要求,必要时插入保持时间修复单元。
3.3 扫描使能(SE)信号与时序控制
扫描使能信号是扫描测试的核心控制信号,它的时序行为直接决定了测试的可靠性。SE 信号必须在时钟有效沿之前稳定,否则会导致触发器误采样。具体而言,SE 信号需要满足以下时序要求:
- 建立时间(Setup Time):SE 必须在时钟沿到来之前提前 Tsetup 时间稳定,确保 MUX 选择路径正确。
- 保持时间(Hold Time):SE 在时钟沿之后必须保持 Thold 时间不变,防止时钟沿附近的变化影响数据捕获。
- 时钟偏移(Clock Skew):如果 SE 信号到达不同触发器的时间不一致,可能导致部分触发器先进入捕获模式,部分仍在移位模式,造成数据错乱。
在实际工程中,SE 信号通常由测试控制单元(TCU)或 IEEE 1149.1 TAP 控制器产生,并通过专门的时钟树(类似时钟信号的分布网络)进行布线,以保证其到达各触发器的偏差在可控范围内。对于大规模芯片,SE 信号可能需要分成多个域,每个域独立控制,以避免同时翻转引起的 IR Drop 问题。
// 典型扫描测试时序约束(SDC 示例)
// 定义扫描使能信号的时钟域
create_clock -name func_clk -period 10 [get_ports clk]
set_scan_enable -signal [get_ports scan_en] -clock func_clk
set_scan_enable -setup 2.0
set_scan_enable -hold 0.5
// 约束扫描时钟偏移
set_clock_uncertainty -setup 0.3 [get_clocks func_clk]
set_clock_uncertainty -hold 0.2 [get_clocks func_clk]
案例拆解:某 28nm 工艺的 AI 加速芯片,包含约 200 万个触发器,工作频率 1GHz。在 DFT 阶段,设计团队最初将所有触发器划分为 32 条扫描链,每条链约 6 万个触发器。在 ATE(自动测试设备)上执行测试时,发现部分芯片在捕获阶段出现随机故障。通过波形调试发现,SE 信号在芯片内部存在约 0.8ns 的偏移,导致靠近 SE 驱动端的触发器先进入捕获模式,而远端的触发器仍在移位模式,组合逻辑的中间状态被错误捕获。
分析过程:团队使用 SPICE 仿真和片上延迟监控器定位到 SE 信号在第三层金属布线上的 RC 延迟过大。随后采取以下措施:
- 将 SE 信号改为双层金属布线,并增加中继缓冲器(Repeater),将偏移降低至 0.3ns 以内。
- 在 SE 路径上插入延迟匹配单元,确保与时钟路径的延迟差满足建立/保持时间要求。
- 调整 ATPG 工具中的捕获时钟设置,增加一个额外的捕获脉冲(Capture Pulse),允许组合逻辑有更长的稳定时间。
结果对比:修复后,芯片的测试良率从 92.3% 提升至 99.1%,测试时间仅增加了 2%(因增加了一个捕获周期)。该案例表明,SE 信号的时序质量对测试可靠性至关重要,必须在物理实现阶段给予与时钟信号同等的重视。
3.4 扫描时序的完整流程与常见误区
一个完整的扫描测试时序流程包括以下阶段:
| 阶段 | SE 状态 | 时钟行为 | 触发器行为 |
|---|---|---|---|
| 移位加载 | SE=1 | 连续 N 个移位时钟脉冲 | 数据从 SI 逐级移入,形成测试向量 |
| 捕获 | SE=0 | 通常 1~3 个捕获脉冲 | 组合逻辑响应被捕获到触发器 |
| 移位输出 | SE=1 | 连续 N 个移位时钟脉冲 | 捕获结果从 SO 逐级移出,同时可加载下一向量 |
常见误区一:认为 SE 信号只需要在捕获阶段保持低电平即可。实际上,SE 信号在移位阶段和捕获阶段的切换瞬间最容易出现问题。如果 SE 信号在时钟沿附近发生跳变,触发器可能同时看到功能数据和扫描数据,导致亚稳态。
常见误区二:忽略捕获时钟的个数。对于组合逻辑深度较大的设计,一个捕获脉冲可能不足以让信号传播到所有触发器。此时需要增加捕获脉冲数量,但过多的捕获脉冲会增加测试时间并可能掩盖真实故障。通常建议使用 ATPG 工具自动计算所需的捕获脉冲数,或通过静态时序分析(STA)确定最大组合逻辑延迟。
常见误区三:在扫描链插入后不进行后仿真验证。扫描链的物理布线可能引入额外的 RC 延迟,导致移位时钟频率无法达到预期。建议在布局布线后提取寄生参数,对扫描链进行动态仿真,验证最高移位频率是否满足 ATE 的测试频率要求。