第2章:故障模型基础

各位同学,今天我们来聊聊ATPG的基石——故障模型。说实话,我刚入行那会儿,觉得故障模型就是一堆理论,跟实际工作关系不大。直到有一次,我负责一款通信芯片的测试,因为对故障模型理解不深,漏掉了一个关键故障,导致流片回来才发现问题……嗯,从那以后,我再也不敢小看这部分内容了。

2.1 固定故障模型(Stuck-at Fault)

固定故障模型,说白了就是假设电路中的某个节点永远卡死在逻辑0或逻辑1。这是最经典、最常用的故障模型。你想想看,芯片制造过程中,金属线断裂、晶体管短路,都可能造成这种问题。

我个人习惯把固定故障分为两类:

  • Stuck-at-0(SA0):节点永远输出0
  • Stuck-at-1(SA1):节点永远输出1

举个例子,一个两输入与非门(NAND),输入A和B,输出Y。如果A点发生SA0故障,那么无论B怎么变,Y永远输出1。为什么?因为NAND门只要有一个输入为0,输出就是1。

关键点:每个节点理论上存在两个故障(SA0和SA1),但实际测试时我们只关心那些能改变电路行为的故障。我在项目中遇到过,有些故障虽然存在,但根本测不出来——这就是后面要讲的故障等效问题。

2.2 过渡故障模型(Transition Fault)

固定故障测的是静态问题,但芯片在实际工作中是动态的。信号从0变1,或者从1变0,这个过程如果太慢,就会出问题。过渡故障模型就是用来捕捉这类时序问题的。

过渡故障分两种:

  • 慢上升(Slow-to-Rise):信号从0变1时,速度太慢
  • 慢下降(Slow-to-Fall):信号从1变0时,速度太慢

我记得有一次调试一款高速ADC,功能测试全过,但一到高频就出错。后来用过渡故障模型一测,发现某条关键路径上的缓冲器存在慢上升故障。嗯,这就是过渡故障的典型应用场景。

我的经验:过渡故障测试需要两个向量——第一个初始化节点状态,第二个触发跳变。千万别搞反顺序,否则测出来的全是假故障。

2.3 桥接故障模型(Bridging Fault)

桥接故障,顾名思义,就是两条本不该相连的线连在了一起。芯片制造过程中,金属线之间的间距越来越小,桥接故障的发生率其实不低。

桥接故障有两种行为模式:

  • 线与(Wired-AND):两条线短路后,输出取两者的与值
  • 线或(Wired-OR):两条线短路后,输出取两者的或值

你可能会问:「那到底用哪种?」说实话,这取决于工艺和设计。我个人习惯在早期评估时两种都试试,看哪种更贴近实际失效情况。

注意:桥接故障的测试向量生成比固定故障复杂得多。我曾经因为忽略了一个桥接故障,导致芯片在高温下频繁死机。后来加测了桥接故障,问题才解决。

2.4 故障等效与故障支配

这部分内容,说白了就是帮你「偷懒」的。芯片里有成千上万个节点,每个节点两个故障,全测一遍不现实。所以我们需要找到那些「测一个等于测多个」的故障。

故障等效

两个故障,如果它们在所有测试向量下的表现完全一样,那它们就是等效的。比如一个与非门,输入A的SA0故障,和输出Y的SA1故障,其实是等效的——因为A为0时,Y必为1。

我建议你记住几个常见的等效关系:

门类型 等效故障对
与非门 输入SA0 ↔ 输出SA1
或非门 输入SA1 ↔ 输出SA0
反相器 输入SA0 ↔ 输出SA1

故障支配

故障支配比等效更「霸道」一些。如果故障A能检测到所有故障B能检测到的测试向量,那故障A就支配了故障B。换句话说,你只要测了A,B就不用测了。

举个例子,一个三输入与非门,输出端的SA0故障,支配了所有输入端的SA1故障。为什么?因为只要输出卡在0,任何输入变化都改变不了它——这比单个输入卡在1要「严重」得多。

实用技巧:在做ATPG时,先做故障等效压缩,再做故障支配压缩。我一般能压缩掉40%-60%的故障,测试时间直接减半。你想想看,这省下来的时间,够喝多少杯咖啡了?

2.5 小结

好了,这一章的内容就到这儿。固定故障是基础,过渡故障管时序,桥接故障抓短路,等效和支配帮我们省力。下一章我们聊聊ATPG算法,那才是真正烧脑的部分。

最后提醒一句:别光看书,找个小电路自己跑一遍ATPG工具,感受一下故障模型是怎么工作的。我当年就是这么过来的,效果比死记硬背好十倍。