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工具生成向量的过程,本质上是在做「自动推理」。它要回答三个问题:

  1. 怎么让故障点的值跟正常值相反?(故障激活)
  2. 怎么把故障点的值传到输出端?(故障传播)
  3. 怎么设置其他输入,让传播路径畅通?(一致性约束)

这就是经典的 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 知识体系 ATPG 概念 故障模型 ATPG 算法 核心目标 • 高故障覆盖率 • 向量数量少 • 测试时间短 故障类型 • Stuck-at (SA0/SA1) • Transition Delay (STR/STF) • 其他:Bridging, Open • 故障等价与 collapsing 算法演进 • D算法 (基础) • PODEM (回溯) • FAN (扇出分析) • SOCRATES (学习) 三者关系 故障模型定义「测什么」→ ATPG算法决定「怎么测」→ 最终目标是「测得好」 注:实际项目中,ATPG工具会综合使用多种算法和策略 © DFT 测试与断言联合应用实战

这张图把ATPG的三大块串起来了。左边是概念,中间是故障模型,右边是算法。你顺着箭头看,就能理解它们之间的依赖关系。

我个人建议,初学者先把Stuck-at模型吃透,再去看Transition Delay。算法部分了解一下D算法和PODEM就够了,剩下的交给工具。毕竟,你不需要自己写ATPG工具,但你需要知道工具在干什么,以及为什么有时候它搞不定。

一句话总结:ATPG就是用故障模型来指导工具生成测试向量,目标是花最少的时间,测出最多的缺陷。Stuck-at是基本功,Transition Delay是进阶,算法是工具的事——但你得懂原理,才能用好工具。

嗯,这一章的内容就到这儿。ATPG是个大话题,后面我们还会结合具体的DFT结构(比如扫描链)来讲怎么实际跑ATPG。到时候你会看到,理论跟实践之间,还是有不少差距的。