故障诊断入门:故障字典与诊断算法

各位工程师朋友,今天我们来聊聊故障诊断。说实话,我刚入行那会儿,觉得只要测试能抓到坏芯片就够了。直到有一次,一个客户退回的芯片,测试报告只写了“FAIL”,但具体哪里坏了,完全不知道。那叫一个抓瞎。

从那以后,我深刻理解了——测试不只是判断好坏,更要定位故障。这就是故障诊断的价值。

故障字典(Fault Dictionary)概念

故障字典,说白了就是一本“故障-响应”对照表。你想想看,每个故障都会在输出端产生特定的响应模式。我们把所有可能的故障和它们的响应都记录下来,就形成了字典。

核心思想: 故障 → 输出响应(签名) → 查字典 → 定位故障

我习惯把故障字典分为两类:

  • 精确字典:每个故障对应唯一的输出模式。理想情况,但实际很难做到。
  • 压缩字典:多个故障可能共享一个签名。节省存储,但分辨率下降。

举个例子,一个简单的电路有10个节点,每个节点可能发生“ stuck-at-0”或“ stuck-at-1”故障。那么字典里就有20个条目。每个条目记录:输入向量 → 输出响应。

// 故障字典示例(简化)
// 故障ID: 节点名_故障类型
// 响应: 输出端观测值

Fault_001: N5_SA0 → 输出 = 1010
Fault_002: N5_SA1 → 输出 = 0101
Fault_003: N8_SA0 → 输出 = 1001
...

嗯,这里要注意:字典的大小会随着电路规模指数增长。我在项目中遇到过,一个百万门级的芯片,完整字典能到几个GB。所以实际应用中,我们通常用压缩字典。

诊断分辨率

诊断分辨率,就是你能把故障定位到多小的范围。分辨率越高,定位越精确。

分辨率等级 定位范围 实际意义
高 单个节点/单元 直接找到具体故障点
中 几个节点/一条路径 需要进一步排查
低 整个模块/区域 只能知道大概位置

为什么分辨率会下降?原因很多:

  • 等价故障:两个不同故障产生完全相同的输出。比如某个门的输入和输出 stuck-at 相同值。
  • 冗余逻辑:某些故障根本不影响输出,无法被检测到。
  • 测试向量有限:向量越多,分辨率越高,但测试时间也越长。

我的经验: 诊断分辨率不是越高越好。我曾经为了追求极致分辨率,加了大量测试向量,结果测试时间翻了三倍,良率分析反而更复杂了。找到平衡点才是关键。

诊断算法:路径追踪

路径追踪,这个名字很形象。就是从故障输出端,沿着信号路径往回找,直到找到故障源。

算法步骤:

  1. 从观测到错误的输出端开始
  2. 检查该输出端的驱动门
  3. 判断哪个输入引脚导致了错误
  4. 沿着该输入继续往回追踪
  5. 重复直到找到原始故障点

我刚开始学这个算法时,总觉得它太简单。直到有一次,一个复杂的时序故障,用路径追踪硬是找到了一个被忽略的hold time违例点。嗯,有时候最简单的工具最有效。

注意: 路径追踪假设故障是单点的。如果存在多个故障同时发生,路径追踪可能会给出错误的方向。我曾经踩过这个坑,花了三天才意识到是双故障。

诊断算法:效应传播

效应传播,和路径追踪正好相反。它是从可能的故障点出发,看故障效应能否传播到输出端。

算法思路:

  • 假设某个节点有故障
  • 计算该故障的效应能否通过后续逻辑传播到输出
  • 如果能传播,且输出与实测一致,则该节点是候选故障点
  • 遍历所有节点,找出所有候选

效应传播的好处是:可以处理多故障情况。但计算量比路径追踪大得多。

// 效应传播伪代码
for each node in circuit:
    inject fault at node
    propagate fault effect through gates
    if output matches observed failure:
        add node to candidate list

实际项目中,我通常把两种算法结合使用:先用路径追踪快速缩小范围,再用效应传播做精确验证。就像侦探破案,先找线索,再确认证据。

知识体系总览

下面这张图,是我自己整理的故障诊断知识体系。你可以把它当作一个思维导图来看。

故障诊断知识体系 故障字典 精确字典 压缩字典 存储所有故障-响应映射 诊断分辨率 高 中 低 定位精度:单节点→模块级 诊断算法 路径追踪 效应传播 从输出往回找 vs 从故障往外推 三者关系: 故障字典提供数据基础 → 诊断分辨率衡量定位精度 → 诊断算法实现定位过程 实践建议 1. 小规模电路用精确字典,大规模用压缩字典 2. 先路径追踪快速定位,再效应传播验证

这张图把三个核心概念串起来了。你想想看,故障字典是“数据库”,诊断分辨率是“精度指标”,诊断算法是“搜索方法”。三者缺一不可。

一句话总结: 故障诊断就是“查字典找故障,用算法定位,靠分辨率衡量精度”。

好了,关于故障诊断入门就聊到这里。这些概念看起来简单,但真正用好需要大量实践。我建议你找个简单的电路,自己动手建个故障字典试试。纸上得来终觉浅,绝知此事要躬行。

可可精品资料库