4、ATPG基础:ATPG概念、故障模型(Stuck-at、Transition Delay)、ATPG算法简介
好,咱们进入DFT的核心环节——ATPG。说实话,我刚入行那会儿,觉得ATPG就是个黑盒子,把网表丢进去,出来一堆测试向量。后来自己踩过坑才明白,不懂ATPG原理,你连测试覆盖率为什么上不去都查不出来。
4.1 ATPG到底是什么?
ATPG,全称Automatic Test Pattern Generation,自动测试向量生成。说白了,就是让EDA工具自动帮你生成一组输入激励,用来检测芯片内部有没有制造缺陷。
我习惯这么理解:你把芯片想象成一个黑盒子,ATPG就是在找「怎么按按钮,能让盒子里坏掉的那个零件暴露出来」。嗯,这个比喻虽然糙,但道理不糙。
ATPG的核心目标有三个:
- 高故障覆盖率——尽量多的缺陷能被测到
- 向量数量少——测试时间短,测试成本低
- 测试时间短——ATE机台是按秒收费的,贵得很
这三个目标其实是互相矛盾的。覆盖率想高,向量就会多;向量少了,有些难测的故障就漏掉了。我在项目中就遇到过这种取舍,最后只能根据产品定位来权衡——消费电子可以松一点,车规芯片必须死磕覆盖率。
4.2 故障模型——你得知道芯片会怎么坏
ATPG不是凭空生成的,它需要知道「我们要测什么样的故障」。这就引出了故障模型的概念。
你想想看,芯片制造过程中可能出现的缺陷千奇百怪,总不能一个个去枚举吧?所以业界总结出了几种典型的故障模型,用它们来近似模拟真实的物理缺陷。
4.2.1 Stuck-at 故障模型
这是最经典、最基础的故障模型。它假设某个节点永久性地 stuck at 0 或 stuck at 1。比如一根连线断了,它可能就永远挂在电源或地上了。
Stuck-at 故障分两种:
- SA0 (Stuck-at 0):节点永远为0
- SA1 (Stuck-at 1):节点永远为1
一个电路里,每个节点都可能有两种故障状态。所以总的故障数大约是 2 × 节点数。不过实际中很多故障是等价的,工具会做故障 collapsing,把等价的故障合并掉。
关键点:Stuck-at 模型测的是静态故障,也就是芯片上电后一直存在的缺陷。它不关心时序,只关心逻辑值对不对。
我记得有一次,一个同事死活想不通为什么某个节点的SA0故障覆盖率总是0%。我帮他一看,那个节点是个常数0的输入,SA0本来就是正常态,当然测不到。这种低级错误,嗯,谁还没犯过呢。
4.2.2 Transition Delay 故障模型
Stuck-at 模型有个局限——它测不到时序相关的缺陷。比如一条路径变慢了,信号跳变需要更长时间才能稳定,这种问题Stuck-at是抓不到的。
Transition Delay 故障模型就是用来干这个的。它模拟的是节点从0→1或1→0的跳变过程变慢,导致在下一个时钟沿来临时,信号还没稳定到正确的值。
Transition Delay 也分两种:
- Slow-to-Rise (STR):从0变1变慢了
- Slow-to-Fall (STF):从1变0变慢了
测试Transition Delay需要两个连续的向量:第一个向量把节点设置到初始态,第二个向量让它跳变,然后在下一个时钟沿捕获结果。这叫「双向量测试」。
注意:Transition Delay测试对时序要求很高。我曾经在一个项目中,因为时钟树综合没做好,导致Transition Delay测试的误判率高达30%。后来花了整整两周调时钟skew,才把误判压下去。所以,做Transition Delay之前,先确认你的时钟树是干净的。
4.3 ATPG算法简介——工具是怎么工作的
ATPG工具生成向量的过程,本质上是在做「自动推理」。它要回答三个问题:
- 怎么让故障点的值跟正常值相反?(故障激活)
- 怎么把故障点的值传到输出端?(故障传播)
- 怎么设置其他输入,让传播路径畅通?(一致性约束)
这就是经典的 D算法 的核心思想。D表示正常为1故障为0,D#表示正常为0故障为1。工具沿着路径往前推,直到输出端。
后来业界又发展出了几种更高效的算法:
| 算法 | 核心思想 | 优缺点 |
|---|---|---|
| D算法 | 基于D立方的敏化路径 | 简单但效率低,适合小电路 |
| PODEM | 面向目标的回溯搜索 | 比D算法快,有回溯机制 |
| FAN | 多路径敏化 + 扇出分析 | 进一步减少回溯次数 |
| SOCRATES | 静态学习 + 动态学习 | 工业级标准,效率高 |
现在的商业工具,比如TetraMAX、FastScan,底层基本都是SOCRATES的变体。它们还会结合一些随机向量生成和故障模拟,先跑一轮随机向量把好测的故障干掉,再用ATPG定向处理那些顽固故障。
我的经验:不要指望ATPG工具能100%覆盖所有故障。有些故障是「冗余故障」——因为电路结构本身的原因,这个故障永远无法被激活或传播。遇到这种情况,要么改设计,要么接受这个不可测的事实。我一般会设一个98%的目标,剩下的2%留给冗余故障和边界情况。
4.4 知识体系总览
下面这张图,是我自己总结的ATPG知识框架。你可以把它当成一个导航图,学完这章后对照着看看自己掌握了多少。
这张图把ATPG的三大块串起来了。左边是概念,中间是故障模型,右边是算法。你顺着箭头看,就能理解它们之间的依赖关系。
我个人建议,初学者先把Stuck-at模型吃透,再去看Transition Delay。算法部分了解一下D算法和PODEM就够了,剩下的交给工具。毕竟,你不需要自己写ATPG工具,但你需要知道工具在干什么,以及为什么有时候它搞不定。
一句话总结:ATPG就是用故障模型来指导工具生成测试向量,目标是花最少的时间,测出最多的缺陷。Stuck-at是基本功,Transition Delay是进阶,算法是工具的事——但你得懂原理,才能用好工具。
嗯,这一章的内容就到这儿。ATPG是个大话题,后面我们还会结合具体的DFT结构(比如扫描链)来讲怎么实际跑ATPG。到时候你会看到,理论跟实践之间,还是有不少差距的。