三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

从“无法分类”到清晰定位:一次搞定ATPG中AU故障Debug的完整心法

从“无法分类”到清晰定位:一次搞定ATPG中AU故障Debug的完整心法

从“无法分类”到清晰定位: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

典型分析流程:

  1. 建立时间违例诊断
    检查故障点前级触发器的时钟到Q延迟是否超过后级电路的建立时间要求

  2. 保持时间违例排查
    观察测试模式下时钟偏移是否导致数据过早变化

  3. 信号完整性验证
    通过波形分析确认是否存在毛刺导致误采样

案例:某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模块的寄存器阵列

分层诊断过程:

  1. 范围缩小
    使用report_faults -fault_type AU -class unclassified -module DSP定位问题区域

  2. 状态分析
    通过set_gate_report发现多个寄存器在capture周期处于不定态

  3. 根因定位
    结合error_pattern分析确认是共享控制信号在测试模式下失效

  4. 解决方案
    增加测试模式下的信号保持约束:

    set_dft_signal -type Constant -active_state 1 -hookup_pin [get_pins dsp_ctrl/enable]

最终覆盖率从31.43%提升至89.67%,AU占比降至6.2%。这个案例印证了系统性方法相比随机尝试的效率优势。

← 返回列表