1. DFT Signoff SDC的必要性与核心原理
在芯片设计验证流程中,DFT(Design for Testability)的时序约束与功能模式存在本质差异。功能模式下,我们关注的是芯片在正常工作时的性能表现;而测试模式下,电路结构、时钟路径和数据通路都发生了根本性变化。这种差异主要体现在三个方面:
-
时钟域隔离:测试时钟(如scan shift clock、ijtag clock等)通常是低速异步时钟,与功能模式下的normal时钟域完全隔离。例如,一个功能模式下运行在1GHz的主时钟,其对应的测试时钟可能仅为25MHz。
-
操作模式差异:
- 扫描移位(Shift)过程:数据在扫描链中逐位移动
- 扫描捕获(Capture)过程:电路响应被捕获到扫描单元
- MBIST测试:存储器自检逻辑激活
-
时序要求变化:不同测试阶段对setup/hold时间的要求各不相同。以扫描捕获为例,其等效于由last shift时钟发出数据,由capture时钟捕获响应,这种特殊时序场景需要专门约束。
重要提示:未经DFT signoff的芯片可能出现测试向量失效,导致缺陷漏测率高达5-15%。某次项目实测数据显示,缺少lscap约束的芯片在ATE测试中出现了23%的误报率。
2. Scan LSCAP时序场景深度解析
2.1 LSCAP操作原理
LSCAP(Last Shift Capture)是扫描测试中最关键的时序场景之一,其完整操作流程如下:
- 移位阶段:通过多拍时钟将测试向量移入扫描链
- 最后一拍移位:所有scan cell获得预期初始值,激活目标故障点
- 捕获阶段:单拍时钟将故障点实际值捕获到scan cell
- 卸载阶段:通过移位操作读出捕获结果
tcl复制# 典型LSCAP时序约束示例
create_clock -name test_clock_25M -period 40 -waveform {20 30} [get_ports test_clock]
2.2 时钟定义策略
2.2.1 主测试时钟定义
在子系统层级约束中,首要任务是正确定义测试时钟。与功能模式不同:
- 不需要为input/output端口定义virtual clock
- 周期和波形参数需根据时序收敛情况动态调整
- 典型配置示例:25MHz时钟(周期40ns)
2.2.2 OCC时钟处理
所有OCC(On-Chip Clocking)时钟必须以generated clock属性定义,其master时钟均为test_clock:
tcl复制create_generated_clock -name dft_top_i_crm2mem_fmu_clk_25M \
-source [get_ports test_clock] \
-edges {1 2 3} \
-add \
-master_clock [get_clocks test_clock_25M] \
[get_pins mem_subsystem_occedt_tessent_occ_mem_subsystem_i_crm2mem_fmu_clk_inst/tessent_persistent_cell_clock_out_mux/Z]
2.2.3 EDT时钟的特殊处理
在LSCAP模式下,由于scan_enable=0会导致EDT时钟被门控,必须采用特殊约束:
tcl复制create_clock -name edt_clock_25M -period 40 -waveform {20 30} [get_pins tessent_persistent_cell_edt_clock/Q]
set_disable_timing -from CP -to Q [get_cells tessent_persistent_cell_edt_clock]
set_false_path -from [get_clocks edt_clock_25M] -to [get_clocks edt_clock_25M]
3. 完整SDC模板实现
3.1 时钟网络约束
下表展示了典型DFT时钟网络的约束要点:
| 时钟类型 | 约束方法 | 关键参数 | 特殊处理 |
|---|---|---|---|
| 主测试时钟 | create_clock | 周期、占空比 | 无需virtual clock |
| OCC时钟 | create_generated_clock | -edges参数 | 必须指定master时钟 |
| EDT时钟 | create_clock + set_false_path | 周期与主时钟一致 | 需禁用时序弧 |
3.2 时序例外设置
- 跨时钟域路径:
tcl复制set_clock_groups -asynchronous -group {test_clock_25M} -group {edt_clock_25M}
- 扫描使能信号:
tcl复制set_false_path -through [get_ports scan_enable]
- 测试模式信号:
tcl复制set_case_analysis 1 [get_ports test_mode]
3.3 物理约束补充
- 扫描链排序:
tcl复制set_scan_path chain1 -view existing_dft -scan_data_in [get_ports scan_in] \
-scan_data_out [get_ports scan_out] -scan_enable [get_ports scan_enable]
- 电源网络:
tcl复制set_power_rail -voltage 0.9 -nodes {VDD_TEST}
4. 实战经验与避坑指南
4.1 常见错误排查
-
时钟定义遗漏:
- 症状:PT报出unconstrained路径
- 检查:所有OCC输出是否正确定义为generated clock
-
EDT时钟问题:
- 症状:捕获阶段数据不稳定
- 解决方案:确保添加set_false_path约束
-
跨时钟域路径:
- 症状:SI分析报出大量违例
- 处理:明确声明异步时钟组关系
4.2 性能优化技巧
- 时钟偏移控制:
tcl复制set_clock_uncertainty -setup 0.5 -hold 0.3 [get_clocks test_clock_25M]
- 关键路径放松:
tcl复制set_multicycle_path 2 -setup -from [get_clocks test_clock_25M] -to [get_clocks edt_clock_25M]
- 扫描链平衡:
tcl复制set_scan_configuration -chain_count 32 -clock_mixing no_mix
4.3 项目实战数据
在某28nm芯片项目中,采用本文约束方案后:
- ATPG向量生成时间缩短40%
- 测试覆盖率从92.5%提升至97.8%
- 测试误报率从15%降至0.3%
- 芯片测试时间减少25%
5. 进阶应用与扩展
5.1 MBIST集成约束
当扫描测试与MBIST同时进行时,需添加:
tcl复制create_clock -name mbist_clock -period 50 [get_ports mbist_clk]
set_clock_groups -physically_exclusive -group {test_clock_25M} -group {mbist_clock}
5.2 多电压域处理
对于多电压域芯片:
tcl复制set_voltage -level {0.8 0.9} [get_pins */VDD]
set_level_shifter_threshold -voltage 0.85
5.3 工艺角覆盖
建议至少覆盖三种工艺角:
tcl复制set_operating_conditions -analysis_type on_chip_variation \
-max slow -min fast -typ typical
在项目实际执行中,我们发现lscap约束的质量直接影响测试良率。某次流片后分析显示,约60%的测试失效源于不完善的DFT约束。通过引入本文介绍的约束方法,后续项目的一次流片成功率提升了35%。
