基于DC的Scan插入流程全解析

DFT Compiler 核心概念与实操指南

在芯片设计中,可测性设计(DFT)是确保芯片质量的关键环节。Scan Chain作为DFT的核心技术,能够将芯片内部的状态通过串行方式扫描出来,极大地提高了测试覆盖率和故障诊断能力。本文将详细介绍基于Synopsys Design Compiler(DC)的Scan插入流程,从DFT Compiler的基本概念到完整的Scan Flow,帮助读者系统掌握这一重要技能。

Scan插入是连接设计综合与制造测试的桥梁------只有正确地插入了Scan Chain,后续的ATPG(自动测试向量生成)才能高效地生成高质量的测试向量,从而在晶圆测试和封装测试中捕获制造缺陷。


一、DFT Compiler 简介

DFT Compiler是Synopsys提供的Scan Test工具,集成在Design Compiler环境中。它最大的优势在于将DFT的实现与综合流程深度融合,使得扫描链的插入对设计者来说更加透明和可控。

1.1 DFT Compiler的核心特点

• 使用Synthesis Flow进行DFT实现,使DFT工作更加透明化

• 可以在RTL阶段较早地开展DFT工作,提前发现并解决问题

• 在Scan过程中可以综合考虑时序、功耗、信号完整性等因素

• 支持Top-Down和Bottom-Up两种设计流程

1.2 工具操作模式

DFT Compiler提供两种操作方式:DC Shell(命令交互模式)和Design Vision(图形界面化模式)。其中,Design Vision特别适合用于DRC Violation的调试,可以直观地定位和解决设计问题。在实际项目中,工程师通常以TCL脚本为主,配合Design Vision进行问题排查。

1.3 命令命名规范

DFT Compiler的命令遵循统一的命名传统,便于记忆和使用:

• set_* :指定相关设置

• report_* :打印/显示相关设置

• reset_* :复位之前的设置

• remove_* :删除之前的设置

1.4 支持的设计流程

DFT Compiler支持两种主要的扫描插入流程:

• Top-Down Flow:对整个设计执行Scan Insertion,适用于较简单的模块化设计

• Bottom-Up Flow:在Block Level完成Scan Insertion,然后集成到Top Level,适用于复杂的层次化设计

此外,根据设计的不同阶段,又可分为:

• Unmapped Flow:从RTL(未映射)阶段开始Scan Insertion,此时工具同时完成综合和扫描插入

• Mapped Flow:从Gate Level(已映射)阶段开始Scan Insertion,工具仅负责扫描单元替换和扫描链串联

图:DFT Compiler 支持的 Unmapped / Mapped Flow


二、创建 Test Protocol

Test Protocol是描述Scan测试行为的"剧本",它定义了在测试模式下的信号时序关系,是整个Scan Flow的基础。创建Test Protocol是Scan Insertion前的关键准备工作。

2.1 读取设计

首先需要指定工艺库并读入设计。可以使用read_ddc或read_verilog命令读入设计文件。需要注意的是,如果读入的是RTL级别的设计,后续还需要执行compile操作;如果读入的是已经综合好的netlist,则可以直接进行后续DFT操作。

2.2 定义DFT信号 --- set_dft_signal 命令详解

set_dft_signal命令是DFT Compiler中最核心的命令之一,用于定义Test Protocol中用到的各种信号。通过该命令,我们可以识别设计中已有的端口(复用function port),避免工具直接修改设计的IO列表。

set_dft_signal \
-view <existing_dft | spec> \
-timing <clock/reset timing> \
-type <signal_type> \
-port <port_list> \
-active_state <0|1> \
-hookup_pin <pin_path>

▸ 2.2.1 -view 选项

-view选项决定DFT信号的使用场景:

• -view spec:用于DFT逻辑插入(insert_dft命令使用),是默认选项

• -view existing_dft:用于DRC检查(dft_drc命令使用)

�� 这两个视图可以简写:-view spec → -v s;-view existing_dft → -v e。使用report_dft_signal命令可以查看当前所有已定义的DFT信号。

▸ 2.2.2 定义各类型DFT信号

【Scan Clock】扫描时钟

set test_default_period 100
set_dft_signal -view existing_dft \
-type ScanClock \
-port clock -timing list 45 55

ScanClock是关键字,-timing选项指定时钟的上升沿和下降沿时刻。这是MUX类型Scan Cell最常用的时钟指定方式。

【Reset Signal】复位信号

set_dft_signal -view existing_dft \
-type Reset \
-port resetn -active_state 0

对于异步复位的寄存器,必须为其提供可控的复位信号,否则DRC检查会失败。-active_state指定高电平还是低电平有效。

【Constant Signal】常量信号

set_dft_signal -view existing_dft \
-type Constant \
-port atpgmode -active_state 1

在测试模式下,某些信号需要保持固定值才能使DRC通过。例如,指定atpgmode为固定值1,使寄存器选择DFT指定的reset信号。

【Scan Data In / Out】扫描数据输入输出

Scan In

set_dft_signal -view spec -type ScanDataIn \
-port test_si -hookup_pin U1/Z

Scan Out

set_dft_signal -view spec -type ScanDataOut \
-port test_so -hookup_pin U2/A

-hookup_pin选项可以指定额外的连接逻辑。例如指定hookup_pin后,Scan In的连接关系为:test_si → U1/Z → scan chain,而非直接相连。

【Scan Enable】扫描使能信号

同时定义 existing_dft 和 spec 两个视图

set_dft_signal -view exist -active 1 \
-type ScanEnable -port test_se

set_dft_signal -view spec -active 1 \
-type ScanEnable -port test_se \
-hookup_pin U3/Z

ScanEnable信号是最特殊的------它既需要定义为existing_dft视图(DRC检查需要),又需要定义为spec视图(Scan Insertion需要)。两个视图中必须指定一致的active状态。

图:DFT信号定义综合示例

2.3 创建与保存 Test Protocol

定义好所有DFT信号后,使用create_test_protocol命令创建Test Protocol:

create_test_protocol

-infer_asynch

-infer_clock

-capture_procedure single_clock \| multi_clock

Test Protocol一旦创建完成,建议保存下来供后续复用:write_test_protocol -output <filename>。下次使用时可以通过read_test_protocol命令直接读取,无需重新定义信号。


三、DFT DRC 检查

DRC(Design Rule Check)检查是Scan Flow中不可或缺的环节。通过DRC检查,可以及时发现设计中存在的可测性问题,避免在后期ATPG阶段才发现难以修复的缺陷。

3.1 DRC 检查的三个阶段

① RTL DRC(可选)

• 在RTL阶段进行检查,提前发现DFT设计问题

• 可加快项目进度,但会增加设计流程复杂度

• 主要检查规则:D1(时钟可控性)、D3(复位可控性)、D11

② Pre-DFT DRC(必须)

• 在创建Test Protocol之后、Scan Insertion之前执行

• 检查寄存器是否违反设计规则,确定哪些寄存器可以上Scan Chain

• 常见问题:Clock不可控、异步复位/置位信号未被控制

③ Post-DFT DRC(必须)

• Scan Insertion完成后执行

• 验证Scan Chain是否可以trace通

• 评估Scan质量及对ATPG潜在的覆盖率影响

3.2 常用DRC命令

dft_drc -verbose -coverage -sample -pre_dft

• -verbose:打印每个violation的详细信息

• -coverage:在Post-DFT DRC时进行覆盖率评估

• -sample:对fault数量进行百分比采样

• -pre_dft:强制执行Pre-DFT的DRC检查

3.3 常见设计规则

【D类规则】仅在Scan Insertion之前检查:

• D1:寄存器Clock端不可控 → 寄存器无法上chain。需检查clock定义及传递路径

• D2/D3:寄存器Set/Reset端不可控 → 寄存器不会上chain。需指定可控的set/reset信号

【C类规则】在Scan Insertion之后检查:

• C2:当所有clock关掉后,non-scan的clock/set/reset仍处于激活状态 → 易导致低test coverage

3.4 内部信号控制技巧

有时需要对设计内部信号进行控制才能使DRC通过。常用方法包括启用内部pin控制和设置信号初始值:

启用内部pins

set_dft_drc_configuration -internal_pins enable

对内部信号赋初始值

set_test_assume 0 init_reg0/Q
set_test_assume 1 init_reg1/Q


四、Scan Chain 配置

完成DRC检查并修复所有violation后,就可以进行Scan Chain的配置了。set_scan_configuration是最重要的配置命令,它是一个全局设置命令,支持20+选项,且设置是累加的。

4.1 Scan Style --- 扫描单元类型

-style选项指定扫描单元的类型,常用的两种:

• multiplexed_flip_flop(MUX-D FF):通过MUX选择功能数据或扫描数据,最常用的类型

• lssd(Level Sensitive Scan Design):电平敏感扫描设计,对时钟偏斜不敏感

图:MUX-D Flip-Flop Scan Cell 结构

图:LSSD Scan Cell 结构

4.2 Clock Mixing --- 时钟域混合策略

-clock_mixing选项控制同一条Scan Chain上是否允许多个时钟域共存:

• no_mix:不允许混合,每个clock domain独立成链

• mix_edges:允许不同触发沿在同一chain上

• mix_clocks:允许不同clock domain在同一chain上

• mix_clocks_not_edges:允许混合clock domain但不混合触发沿

对于跨clock domain的情况,通常需要增加Lock-up Latch来缓解潜在的时序问题。对于不同触发沿的情况,常用策略是:负沿触发器放在chain首,正沿触发器放在chain尾。

4.3 Chain 长度控制

• -chain_count <N>:指定Scan Chain的数量

• -max_length <N>:限制每条chain的最大长度(优先级最高)

• -exact_length <N>:尽量让chain达到指定长度(优先级最低)

优先级排序:max_length > chain_count > exact_length。默认情况下,工具会综合考虑clock-domain、clock-mixing等约束,自动计算最小chain数量。

4.4 Lock-up Latch 配置

当Scan Chain跨越不同时钟域时,需要插入Lock-up Latch来避免时钟偏斜导致的Hold Violation。相关选项包括:

• -add_lockup true|false:启用/禁用跨clock domain的lockup添加(默认true)

• -insert_terminal_lockup true|false:是否在chain尾插入lock-up(默认false)

• -lockup_type latch|flip_flop:指定lockup类型(默认latch)

图:Lock-up Latch 在跨时钟域Scan Chain中的应用

4.5 其他重要选项

• -create_dedicated_scan_ports true|false:是否创建专用scan端口(建议true)

• -internal_clocks none|single|multi:内部时钟处理方式

• -test_mode <name>:指定test mode名称,支持多种scan configuration

• -exclude_elements <list>:指定的寄存器不串入scan chain


五、Scan Preview 与 Scan Insertion

5.1 Scan Preview --- 插入前的预检查

在正式插入Scan Chain之前,强烈建议执行preview_dft命令进行预检查。Preview可以帮我们:

• 检查Scan-Path一致性,发现overlapping path问题

• 确定Scan Chain的数量和长度分布

• 查看Scan Cell的分配顺序和clock信息

• 确认scan link(连线、latch、MUX等)和scan access port

preview_dft -show all # 显示所有scan chain详细信息

图:Preview DFT 输出的 Scan Chain 信息

5.2 Scan Insertion --- 正式插入

完成所有配置和预检查后,执行insert_dft命令正式插入DFT逻辑。在插入过程中,工具会完成以下工作:

• 读取preview信息(如需要则重新运行preview_dft)

• Scan Replacement:将普通寄存器替换为带scan功能的寄存器

• 消除Contention:强制三态端口为单驱动,维护双向端口

• 插入Test Point:如启用了AutoFix,增加test-point逻辑

• Scan Stitch:将可访问的port、scan link、scan cell串联成完整chain

• Violation最小化:通过重新map或unscan减少violation

5.3 DFT Insertion 参数配置

set_dft_insertion_configuration命令可进一步控制插入行为:

• -synthesis_optimization none|all:控制是否进行cell size优化(all=全设计优化,none=仅串chain不优化)

• -preserve_design_name true|false:阻止子模块重命名(避免验证flow受影响)

• -unscan true|false:控制存在violation的flip-flop是否上chain


六、Multi-Mode DFT 多测试模式

在实际芯片测试中,不同的测试阶段(Wafer Probe、Package Test、Burn-in)对Scan Chain的访问方式、可用引脚数和ATE资源有不同的要求。因此,同一个设计中可能需要准备多种Scan架构,这就是Multi-Mode DFT。

6.1 定义 Test Mode

首先声明Test Mode引脚,然后使用define_test_mode命令定义各个模式:

声明Test Mode引脚

set_dft_signal -type TestMode -port list DBC IBN SBN -view spec

定义各模式(使用one-hot编码)

define_test_mode T0 -usage scan -encoding {DBC 0 IBN 0 SBN 0}
define_test_mode T1 -usage scan -encoding {DBC 0 IBN 0 SBN 1}
define_test_mode T2 -usage scan -encoding {DBC 0 IBN 1 SBN 0}
define_test_mode T3 -usage scan -encoding {DBC 0 IBN 1 SBN 1}
...

DFT Compiler会自动插入Test Mode译码电路,支持one-hot或二进制编码方式。不同mode可以采用不同的scan chain配置,通过set_scan_configuration的-test_mode选项来指定。

图:Multi-Mode 译码电路示例

图:不同Test Mode下的Scan Chain结构

6.2 Multi-Mode DRC 注意事项

⚠️ Post-DFT DRC不是同时对所有mode检查的,必须逐个mode运行:

current_test_mode mode_1
dft_drc

current_test_mode mode_2
dft_drc


七、Scan DEF 与物理优化

Scan Chain的物理优化是现代芯片设计中不可或缺的一环。DC完成Scan Synthesis后,通过SCANDEF文件将Scan Chain信息交付给后端工具(ICC),由ICC完成Scan Chain的物理级优化。

7.1 Physical DFT 设计流程

• Scan Synthesis在DC中完成

• 生成SCANDEF文件交付给ICC

• 在交付前使用check_scan_def验证SCANDEF文件

• ICC进行Scan Chain的re-partitioning和re-ordering

• 降低Scan连线长度、减少阻塞,提高可布线性

图:DC/ICC DFT 协作流程

7.2 什么是 SCANDEF

SCANDEF是LEF/DEF文件的一种特殊类型,它定义了Scan Chain的相关信息。SCANDEF中指定了可被后端工具re-order的"stub" scan chain------即chain segments,其边界是I/O port、Lock-up Latch或MUX。

7.3 Partition 与 Re-order

SCANDEF中定义了Partition(分区),同一Partition内的Scan Chain可以交换flop进行re-order。通过re-order和re-partition操作,后端工具可以:

• 重新排列Scan Chain中flop的顺序,使物理位置相邻的flop串在一起

• 在不同Chain之间交换flop,进一步优化连线

• 显著降低CTS crossing(从优化前的1591次降低到709次)

图:基于SCANDEF的Scan Chain Re-order 示例


八、完整命令流程汇总

下面将整个基于DC的Scan插入流程中涉及的命令按步骤汇总,方便读者在实际项目中参考使用。

|--------|-----------------------------|--------------------------------|
| 步骤 | 命令/操作 | 说明 |
| 1 | read_verilog / read_ddc | 读取设计 |
| 2 | set_dft_signal | 定义DFT信号(clock/reset/SE/SI/SO等) |
| 3 | create_test_protocol | 创建Test Protocol |
| 4 | dft_drc | Pre-DFT DRC检查 |
| 5 | set_scan_configuration | 配置Scan Chain参数 |
| 6 | preview_dft | 预检查Scan Chain信息 |
| 7 | insert_dft | 插入DFT逻辑 |
| 8 | dft_drc + report_scan_chain | Post-DFT验证 |

图:Scan Flow 命令汇总


总结

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| �� 本文要点回顾 1. DFT Compiler集成在DC中,支持Top-Down/Bottom-Up和Unmapped/Mapped多种流程。 2. set_dft_signal是定义DFT信号的核心命令,需同时关注spec和existing_dft两个视图。 3. DRC检查分三个阶段(RTL/Pre-DFT/Post-DFT),是保证Scan质量的关键。 4. set_scan_configuration提供20+选项用于精确控制Scan Chain配置。 5. Multi-Mode DFT满足不同测试阶段的需求,Post-DRC需逐mode检查。 6. SCANDEF连接DC与ICC,使后端可以优化Scan Chain的物理布线。 |

掌握基于DC的Scan插入流程,是每一位DFT工程师的基本功。建议读者在实际项目中反复练习这些命令,深入理解每个选项的含义和适用场景,才能灵活应对各种复杂的设计挑战。

相关推荐
Trouvaille ~3 天前
【Redis篇】Redis 渐进式遍历与数据库管理
数据库·redis·缓存·中间件·数据库管理·后端开发·scan
迷失的小猫10 天前
Tessent MBIST Flow 实战全解析
dft·mbist
迷失的小猫11 天前
Scan Test Point 插入全解析
dc·tessent·test point
DarrenHChen_EDA24 天前
【汽车芯片功能安全分析与故障注入实践 13】FMEDA Update:从 Measured DC 和 Residual FIT 到可追溯安全表格
dc·功能安全·fit·故障注入·汽车芯片·fmeda·measured dc
DarrenHChen_EDA1 个月前
【汽车芯片功能安全分析与故障注入实践 09】Safety Mechanism 不是越多越好:如何选择 Parity/ECC/Lockstep?
dc·功能安全·ecc·汽车芯片·parity·lockstop
DarrenHChen_EDA1 个月前
【汽车芯片功能安全分析与故障注入实践 08】Diagnostic Coverage 是怎么算出来的?
dc·功能安全·汽车芯片·fmeda
DarrenHChen_EDA1 个月前
【Backend Flow工程实践 16】从 Scan Chain 到 Placement:测试结构为什么会影响后端布局?
eda·dft·apr·placement·scan chain·backend flow·可测性设计
科学创新前沿2 个月前
物理信息神经网络:从数据驱动到物理嵌入的科学计算新范式!
人工智能·深度学习·dft·pinn·流体力学·固体力学·断裂力学
ezreal_pan3 个月前
Redis SCAN 命令使用指南(华为云Redis版)
redis·scan