第四章 扫描链插入方法:全扫描与部分扫描、扫描链插入流程、扫描链平衡与优化、扫描链诊断
扫描链(Scan Chain)是DFT(可测试性设计)中最核心的硬件基础设施,它将芯片中的时序单元(触发器)转换为可控、可观测的测试端口。本章将系统讲解扫描链插入的完整知识体系:从全扫描与部分扫描的策略选择,到扫描链插入的工程流程,再到扫描链平衡与优化的方法,最后深入扫描链诊断技术。理解本章内容,是掌握ATPG测试向量生成的前提——因为测试向量的质量与效率,直接取决于扫描链的结构设计与实现质量。
上图展示了扫描链插入方法的整体知识框架。本章将按照“策略选择→流程实施→平衡优化→诊断调试”的逻辑主线,逐一深入剖析每个环节的核心原理与工程实践要点。
4.1 全扫描与部分扫描:策略选择的权衡艺术
4.1.1 核心原理
全扫描(Full Scan)是指将设计中所有时序单元(D触发器、锁存器等)全部替换为可扫描的扫描触发器(Scan Flip-Flop, SFF),并将它们串联成一条或多条扫描链。全扫描的核心优势在于:测试时,所有时序单元的状态可以被完全控制(通过扫描输入)和完全观测(通过扫描输出),从而将复杂的时序测试问题转化为组合逻辑测试问题,大幅提升故障覆盖率(通常可达95%以上)。
部分扫描(Partial Scan)则只选择部分关键时序单元进行扫描替换。选择哪些触发器进入扫描链,通常基于以下准则:处于关键路径上的触发器、控制信号较多的触发器、或对测试覆盖率贡献最大的触发器。部分扫描的动机在于降低面积开销和时序性能损失,但代价是测试覆盖率下降,且ATPG工具需要处理剩余的非扫描时序单元,生成测试向量的复杂度显著增加。
4.1.2 判断方法:如何选择扫描策略
在实际工程中,选择全扫描还是部分扫描,需要综合评估以下因素:
| 评估维度 | 全扫描 | 部分扫描 |
|---|---|---|
| 故障覆盖率目标 | ≥95%,可达到99%+ | 通常80%-90%,取决于选择比例 |
| 面积开销 | 增加5%-10%(SFF面积更大) | 增加2%-5% |
| 时序性能影响 | 关键路径延迟增加约5%-8% | 仅影响被替换的路径 |
| ATPG复杂度 | 低,工具处理简单 | 高,需处理时序反馈回路 |
| 测试向量长度 | 较短,测试时间可控 | 较长,可能需要更多向量 |
| 设计复杂度 | 低,流程成熟 | 高,需要精细的触发器选择 |
对于大多数SoC和ASIC设计,推荐采用全扫描。只有在以下特殊场景下才考虑部分扫描:超高速设计(如SerDes、RF前端)中关键路径时序余量极小;面积极度受限的芯片(如低成本MCU);或某些模拟/混合信号模块中不适合插入扫描单元。
set_scan_style 或 set_scan_element)预先标记可扫描的触发器,避免后期网表级修改带来的时序和功能风险。
4.1.3 案例拆解:某AI加速芯片的扫描策略决策
某AI加速芯片设计,工艺7nm,工作频率1.2GHz,包含约200万个触发器。初始方案采用全扫描,但综合后时序分析发现,有约3%的路径(主要分布在高速SRAM接口和AI计算阵列的关键路径)时序余量不足,无法满足1.2GHz目标。
分析过程:团队对比了两种方案:方案A,全扫描+关键路径优化(增加流水线级数);方案B,部分扫描(仅将非关键路径的约85%触发器纳入扫描链)。方案A需要修改RTL架构,项目周期延长6周;方案B只需在综合时设置例外约束,但预期覆盖率从98%降至91%。
决策与结果:最终选择方案A的变体——全扫描,但对关键路径上的触发器使用低开销扫描单元(如无多路选择器的扫描输出型触发器),同时优化时钟树综合以补偿延迟。最终实现1.18GHz频率,覆盖率97.8%,测试向量数量比部分扫描方案少40%。
4.2 扫描链插入流程:从RTL到网表的工程化实施
4.2.1 标准插入流程
扫描链插入通常在逻辑综合阶段完成,主流EDA工具(如Synopsys DFT Compiler、Cadence Genus)支持以下标准流程:
- RTL分析与扫描就绪检查:检查RTL中是否存在不可扫描的时序单元(如异步置位/复位的触发器、门控时钟等),并生成扫描就绪报告。
- 扫描单元替换:将普通D触发器替换为扫描触发器(如SDFF、SDFFR),并保留原始功能逻辑。
- 扫描链配置:定义扫描链数量、扫描输入/输出端口、链的起始和结束触发器。
- 扫描链连接:将扫描触发器按指定顺序串联,形成完整的扫描链。
- 扫描链验证:通过形式验证(Formal Verification)确认扫描替换后的网表功能与原网表一致(在测试模式下)。
- ATPG就绪输出:生成包含扫描链信息的网表文件(如Verilog网表)和DFT约束文件(如SDC中的
set_scan_chain约束)。
4.2.2 关键操作细节
在扫描链插入过程中,以下操作细节直接影响后续ATPG效果:
- 扫描链数量选择:扫描链数量越多,每条链长度越短,测试时间越短,但需要更多扫描端口(或通过压缩技术减少端口)。典型设计每500-2000个触发器配置一条扫描链。
- 扫描端口复用:扫描输入/输出通常复用功能IO端口,通过测试模式信号(如
test_mode)进行切换。需要确保复用端口在功能模式下不受影响。 - 扫描时钟处理:扫描移位时使用移位时钟(通常与功能时钟同源或独立),需要确保时钟在扫描模式下正确切换,避免时钟毛刺。
- 异步信号处理:所有异步置位/复位信号在扫描模式下必须被强制无效(通过测试模式信号控制),否则会导致扫描移位时状态不确定。
// 扫描链插入后的网表示例(Verilog片段)
module top_scan (
input wire clk, rst_n, test_mode,
input wire scan_in_0, scan_in_1,
output wire scan_out_0, scan_out_1,
// ... 功能端口
);
// 扫描触发器实例化
SDFFRX1 ff_0 (.D(data_0), .SI(scan_in_0), .SE(test_mode),
.CK(clk), .RN(rst_n), .Q(q_0), .QN(qn_0));
SDFFRX1 ff_1 (.D(data_1), .SI(q_0), .SE(test_mode),
.CK(clk), .RN(rst_n), .Q(q_1), .QN(qn_1));
// ... 链继续连接
assign scan_out_0 = q_1; // 链0输出
endmodule
4.2.3 案例拆解:扫描链插入中的时钟域交叉问题
某通信芯片设计包含3个时钟域(1.2GHz核心域、400MHz外设域、32kHz低功耗域),共150万触发器。在扫描链插入时,工程师最初将所有触发器按功能时钟域分组,形成3条长扫描链。但ATPG仿真发现,跨时钟域的扫描链路径存在保持时间违例。
分析:由于不同时钟域的时钟树延迟差异较大(最大偏差达2.1ns),扫描移位时跨域路径的保持时间无法满足。解决方案是:将扫描链按时钟域完全隔离,每个时钟域独立成链,并在跨域路径上插入扫描专用延迟缓冲器(Scan Delay Buffer)。
实施与结果:重新配置为5条扫描链(核心域2条、外设域2条、低功耗域1条),每条链长度控制在30万触发器以内。在跨域路径上插入约200个延迟缓冲器,保持时间违例全部修复。最终测试覆盖率从94.2%提升至97.1%,测试时间缩短35%。
4.3 扫描链平衡与优化:提升测试效率的关键
4.3.1 扫描链平衡的核心原理
扫描链平衡是指多条扫描链的长度尽量一致,以最小化测试时间。测试时间与最长扫描链的长度成正比(假设并行移位),因此链长差异过大会导致测试时间浪费。理想情况下,所有扫描链长度差异应控制在10%以内。
扫描链优化还包括以下维度:
- 时序优化:确保扫描路径(SI→Q)的建立时间和保持时间满足要求,避免在扫描移位时出现时序违例。
- 功耗优化:扫描移位时大量触发器同时翻转,导致动态功耗激增。可通过分组移位(不同链在不同时间移位)或降低移位频率来缓解。
- 布线优化:扫描链连接应尽量短,减少布线拥塞和信号延迟。EDA工具通常支持基于物理信息的扫描链重构。
4.3.2 优化方法与操作流程
| 优化目标 | 方法 | 工具支持 | 注意事项 |
|---|---|---|---|
| 链长均衡 | 按触发器数量平均分配;按物理位置分组 | DFT Compiler set_scan_chain 的 -balance 选项 | 避免跨时钟域链 |
| 时序收敛 | 插入扫描缓冲器;调整链顺序 | PrimeTime 时序分析 | 缓冲器增加面积 |
| 功耗降低 | 链分组移位;门控扫描时钟 | PowerArtist 功耗分析 | 增加控制逻辑复杂度 |
| 布线优化 | 物理感知扫描链重构 | ICC2 / Innovus 的 scan reorder | 需在布局布线阶段执行 |
4.3.3 案例拆解:扫描链平衡的完整调优过程
某汽车电子MCU芯片,包含80万触发器,初始配置为4条扫描链,链长分别为:链0=25万、链1=22万、链2=18万、链3=15万。测试向量数量为12000个,每个向量需要最长链的移位周期数(25万)加上捕获周期,总测试时间为:12000 × (250000 + 2) ≈ 3×10^9 个时钟周期。
优化目标:将测试时间缩短至2×10^9周期以内。
操作步骤:
- 使用
set_scan_chain -balance true重新配置,将触发器按物理区域重新分配,形成5条链,每条约16万触发器。 - 对跨区域的长连线路径插入扫描缓冲器(共约350个),修复保持时间违例。
- 将5条链分为两组,组间使用不同的移位时钟相位(相差180°),降低瞬时功耗。
结果对比:优化后最长链为16.5万触发器,测试时间降至 12000 × (165000 + 2) ≈ 1.98×10^9 周期,满足目标。面积增加约0.3%(缓冲器开销),功耗峰值降低22%。
4.4 扫描链诊断:定位故障的工程利器
4.4.1 扫描链故障类型与诊断原理
扫描链本身也可能存在制造缺陷,常见的扫描链故障包括:
- 固定故障(Stuck-at Fault):扫描链中某个节点的信号固定为0或1,导致移位数据无法正确传递。
- 转换故障(Transition Fault):扫描触发器无法在时钟沿正确捕获数据,通常由时序问题引起。
- 桥接故障(Bridging Fault):扫描链相邻信号线短路,导致逻辑错误。
- 时钟故障:扫描时钟信号异常,导致部分触发器无法移位。
扫描链诊断的基本方法是:通过扫描链测试模式(如简单的移位模式 1010... 或 0101...),观察扫描输出数据与期望数据的差异,结合故障字典或逻辑推理,定位故障发生的具体触发器位置。
4.4.2 诊断流程与工具支持
- 链测试(Chain Test):加载简单的移位向量,检查扫描链完整性。如果输出与期望不符,则链存在故障。
- 故障定位:使用ATPG工具(如Tessent Diagnosis)分析失败日志,通过故障字典匹配或基于路径追踪的算法,确定故障触发器。
- 物理分析:将逻辑定位结果映射到物理版图,结合良率分析数据,确认故障根因(如金属桥接、接触孔失效等)。
4.4.3 案例拆解:扫描链诊断的完整闭环
某5nm工艺的GPU芯片在量产测试中,发现约0.3%的芯片在扫描链测试阶段失败。失效模式为:扫描链2的输出在移位第1024个周期后出现数据错误。
诊断过程:
- 使用Tessent Diagnosis对100颗失效芯片进行诊断,所有芯片的故障都定位在扫描链2的第1024-1026个触发器附近。
- 物理版图分析发现,该区域存在一条长距离的扫描链布线(约800μm),且与相邻的电源线平行走线。
- 进一步分析确认,该处存在金属层桥接风险(设计规则检查DRC通过,但工艺偏差导致桥接)。
解决方案:修改扫描链布线,将该段走线改为更高金属层并增加间距;同时在该区域增加冗余通孔。修改后,量产良率提升0.25%,扫描链测试失效率降至0.02%以下。
4.5 本章总结与工程实践建议
扫描链插入是DFT流程中最具工程挑战性的环节之一。本章的核心要点可归纳为:
- 策略选择:优先采用全扫描,仅在极端时序或面积约束下考虑部分扫描,且需充分评估ATGP复杂度和覆盖率损失。
- 流程规范:严格遵循“RTL检查→扫描替换→链配置→验证”的标准流程,特别关注时钟域隔离和异步信号处理。
- 平衡优化:链长均衡是测试时间优化的关键,同时要兼顾时序、功耗和布线质量。
- 诊断能力:建立完善的扫描链诊断机制,将测试数据转化为设计和工艺改进的 actionable insights。
在实际项目中,建议在RTL设计阶段就引入DFT工程师参与架构评审,提前规划扫描链结构。在综合阶段,通过多次迭代优化扫描链配置,并在布局布线后再次验证扫描链时序。只有将扫描链设计作为一项系统工程来对待,才能为后续ATPG向量生成奠定坚实基础,实现高覆盖率、低测试成本的目标。