从“无法分类”到清晰定位:ATPG中AU故障的深度诊断方法论
在芯片测试领域,ATPG(自动测试模式生成)工程师最头疼的莫过于面对大量标记为"AU"(ATPG Untestable)的故障点,尤其是那些被归类为"unclassified"的模糊地带。当覆盖率停滞在31.43%,而AU占比高达45.13%时,传统的随机排查就像在迷宫中盲目行走。本文将分享一套经过实战验证的分层诊断框架,帮助工程师从混沌中建立秩序。
1. 构建AU故障的初步诊断矩阵
面对数百个AU故障点,首要任务是建立优先级评估体系。通过report_faults -fault_type AU -unclassified命令输出的原始数据,需要转化为可操作的洞察:
# 典型AU故障分类统计命令 report_faults -summary -fault_type AU -class unclassified > au_analysis.rpt关键评估维度应包括:
| 评估指标 | 高优先级特征 | 低优先级特征 |
|---|---|---|
| 故障点分布密度 | 集中在特定功能模块 | 随机分散在全芯片 |
| 时序深度 | 位于时序路径末端 | 靠近扫描链输入端 |
| 电路结构 | 连接异步复位/置位端 | 普通组合逻辑路径 |
| 工具警告信息 | 伴随DRC违例警告 | 仅有常规AU标记 |
提示:优先检查那些在多个pattern中持续出现的AU故障点,它们往往指向系统性设计约束问题而非随机噪声。
2. 解码fault_status背后的真实语义
ATPG工具报告的DS/DI/AU等状态代码需要结合电路上下文才能准确解读。通过set_gate_report获取的故障状态信息,实际上反映了工具对电路可控制性和可观测性的评估:
set_gate_report -pattern_index 0 -fault_status_detail常见状态码的深层含义:
AU (ATPG Untestable)
工具无法生成测试该故障的pattern,通常由于:- 时序路径违反建立/保持时间
- 存在无法控制的初始化状态
- 测试约束与功能约束冲突
DI (Detected by Implication)
通过逻辑蕴涵而非直接仿真检测到,可能掩盖潜在的可测试性问题UC (Undetected Uncontrolled)
故障点控制端无法被扫描链设置,常见于:// 典型问题案例:异步复位未约束 always @(posedge clk or posedge async_rst) if (async_rst) q <= 1'b0;
注意:状态为AU的故障点中,约60%实际上可通过约束优化转为可测试故障,关键在于准确识别根本原因。
3. 基于CAPTURE_PROCedure的时序分析技术
当常规方法无法定位AU根源时,需要深入分析pattern应用时的电路状态。CAPTURE_PROCedure与error_pattern的组合使用可以揭示隐藏的时序问题:
# 捕获特定pattern下的电路状态 set_gate_report -pattern_index 42 -capture_procedure DETAILED report_gate -error_pattern 42 -level 3 > timing_debug.log典型分析流程:
建立时间违例诊断
检查故障点前级触发器的时钟到Q延迟是否超过后级电路的建立时间要求保持时间违例排查
观察测试模式下时钟偏移是否导致数据过早变化信号完整性验证
通过波形分析确认是否存在毛刺导致误采样
案例:某28nm设计中发现AU故障集中出现在时钟域交叉区域,最终确认是测试模式下时钟相位关系与功能模式不一致导致。
4. 复位约束的系统性解决方案
实践中,超过35%的unclassified AU故障源于复位信号约束不完整。同步复位信号的正确处理方式:
# 正确约束同步复位信号的ATPG命令序列 set_dft_signal -type TestReset -active_state 1 -hookup_pin [get_pins sync_reset] set_atpg -capture_cycles 2 -mask_reset关键实施要点:
复位信号静态约束
确保测试期间复位处于非激活状态:set_static_dft_signal -name sync_reset -active_state 0多时钟域协调
对异步复位进行同步化处理:// RTL层面同步化示例 always @(posedge clk) begin sync_reset_stage1 <= async_reset; sync_reset_stage2 <= sync_reset_stage1; end模式切换保护
添加测试模式指示信号防止功能复位干扰:add_primary_input -name test_mode set_dft_signal -type TestMode -active_state 1 -hookup_pin test_mode
5. 实战:从混沌到清晰的Debug案例
某5G基带芯片项目中,ATPG阶段出现以下异常现象:
- AU故障占比从初始15%逐渐增加到43%
- 生成的221条pattern中,有效率仅77.34%
- 故障点主要集中于DSP模块的寄存器阵列
分层诊断过程:
范围缩小
使用report_faults -fault_type AU -class unclassified -module DSP定位问题区域状态分析
通过set_gate_report发现多个寄存器在capture周期处于不定态根因定位
结合error_pattern分析确认是共享控制信号在测试模式下失效解决方案
增加测试模式下的信号保持约束:set_dft_signal -type Constant -active_state 1 -hookup_pin [get_pins dsp_ctrl/enable]
最终覆盖率从31.43%提升至89.67%,AU占比降至6.2%。这个案例印证了系统性方法相比随机尝试的效率优势。