第二讲:测试基础理论——故障模型、覆盖率与ATPG

各位同学,今天咱们聊聊测试理论的基础。说实话,刚入行那会儿,我觉得这些理论挺枯燥的。直到有一次,我设计的芯片在ATE上跑了三天三夜,结果一个隐藏的桥接故障愣是没测出来……从那以后,我再也不敢轻视这些“纸上谈兵”的东西了。

2.1 故障模型:芯片为什么会坏?

芯片制造不是完美的。晶圆上的灰尘、光刻的偏差、金属线的断裂,都会让芯片“生病”。我们需要把这些“病”抽象成数学模型,才能用计算机去分析、去测试。

2.1.1 Stuck-at 故障(固定故障)

这是最经典的模型。说白了,就是某条信号线“卡死”在了0或1,怎么都拉不回来。

  • Stuck-at-0 (SA0):信号永远为0
  • Stuck-at-1 (SA1):信号永远为1

举个例子,一个两输入与非门,如果输出端SA0了,那不管输入怎么变,输出永远是0。我遇到过一颗芯片,功能仿真全过,但ATE上就是报错。最后定位发现,是某个关键路径上的缓冲器输出端SA1了。嗯,这种故障占了芯片缺陷的60%以上,是DFT的“基本功”。

核心要点:Stuck-at模型假设故障是永久性的,且每次只考虑一个故障点(单故障模型)。实际中多故障也存在,但单故障模型已经能覆盖绝大多数情况。

2.1.2 Transition 故障(跳变故障)

Stuck-at管的是静态,但芯片是动态工作的。信号从0变1,或者从1变0,如果变得太慢,就会出问题。这就是Transition故障。

  • Slow-to-Rise:上升沿太慢,在规定时间内没到1
  • Slow-to-Fall:下降沿太慢,在规定时间内没到0

我印象很深的一个项目,芯片在低温下工作正常,高温下就随机出错。查了半天,发现是某个寄存器到组合逻辑的路径上,一个PMOS管驱动能力不足,导致Slow-to-Rise。这种故障在先进工艺(比如7nm以下)越来越常见,因为线宽小、电压低,时序裕量越来越紧张。

个人经验:Transition测试需要两个连续的时钟周期——第一个周期把信号“初始化”到相反值,第二个周期再“捕获”跳变结果。所以测试向量比Stuck-at长得多,但值得。

2.1.3 Bridging 故障(桥接故障)

两条相邻的金属线,因为工艺缺陷“搭”在了一起,这就是桥接。短路后,两条线互相影响,逻辑行为完全乱套。

桥接类型 行为描述 典型场景
Wired-AND 两条线短接后,输出为两者相与 CMOS工艺中常见
Wired-OR 两条线短接后,输出为两者相或 某些特殊工艺
Dominant 一条线“压倒”另一条线 驱动能力差异大时

桥接故障最难搞,因为它不是单一信号的问题,而是两个信号之间的“互动”。我曾经在一条数据总线上吃过亏——两条相邻的位线桥接了,导致数据读写总是错位。ATE上跑了所有Stuck-at向量,覆盖率99%,但就是抓不到这个bug。后来加了Bridging测试才定位到。

避坑指南:不要以为Stuck-at覆盖率高就万事大吉。Bridging和Transition故障在先进工艺中占比越来越高,必须单独建模、单独测试。

2.2 测试覆盖率:你到底测了多少?

覆盖率是个“数字游戏”,但也是个“良心活”。你想想看,如果我说“测试覆盖率99%”,听起来很牛对吧?但如果那1%恰好是芯片的关键路径,那这颗芯片就是颗定时炸弹。

2.2.1 常见的覆盖率指标

  • Stuck-at覆盖率:被测试向量“激活并观察到”的故障点比例。行业标准通常要求>98%。
  • Transition覆盖率:跳变故障的覆盖比例。先进工艺要求>90%。
  • 桥接覆盖率:桥接故障的覆盖比例。这个比较难做,通常>85%就算不错。
  • 动态覆盖率:包括Toggle覆盖率、路径覆盖率等,用于衡量测试向量的“活动程度”。

我个人习惯,在项目初期就定好覆盖率目标。比如:Stuck-at 99%,Transition 95%,桥接 90%。达不到?那就加测试点、加扫描链、加BIST。别等到流片了才后悔。

2.2.2 覆盖率与测试质量的关系

覆盖率不是万能的。举个例子,你测了100万个故障点,但芯片的“致命缺陷”可能只体现在一个特定的时序路径上。覆盖率再高,如果测试向量没“踩”到那个点,也是白搭。

所以,我经常跟团队说:覆盖率是必要条件,不是充分条件。除了看数字,还要看测试向量的“质量”——是不是覆盖了所有功能模式?是不是覆盖了边界条件?是不是覆盖了最差工艺角?

核心公式:测试质量 = 覆盖率 × 测试向量多样性 × 工艺角覆盖

2.3 ATPG基本原理:计算机如何生成测试向量?

ATPG(Automatic Test Pattern Generation)就是让计算机自动生成测试向量。你想想看,一个百万门的芯片,手动写测试向量?写到猴年马月去。ATPG就是干这个的。

2.3.1 ATPG的核心思想

ATPG的本质是“激活-传播”过程:

  1. 激活(Activate):让故障点产生一个“错误信号”。比如,对于SA0故障,你需要让该点正常值为1,这样故障才会“暴露”为0。
  2. 传播(Propagate):把这个错误信号“传”到某个可观察的输出端(比如扫描链的输出)。
  3. 敏化(Sensitize):确保传播路径上的其他信号不会“淹没”这个错误信号。

说白了,就是“制造矛盾,然后看矛盾能不能传到外面去”。

2.3.2 常用ATPG算法

算法 原理 优缺点
D算法 用D(正常1故障0)和D'(正常0故障1)表示故障,通过立方体运算传播 经典但效率低,适合小规模电路
PODEM 从输出反向回溯,逐步确定输入值 比D算法快,但可能陷入局部最优
FAN 改进PODEM,加入扇出分析和多路径传播 工业级常用,效率高
基于SAT的ATPG 将测试生成转化为布尔可满足性问题 适合复杂故障,但计算量大

我最早接触ATPG时,用的是D算法。那时候电路规模小,跑个几千门的电路还行。后来到了百万门级别,D算法直接“卡死”。换成PODEM和FAN后,速度快了不止一个数量级。现在工业界主流工具(比如TetraMAX、FastScan)用的都是FAN的变种。

2.3.3 ATPG的挑战

  • 故障数量爆炸:一个百万门芯片,Stuck-at故障点就有几百万个。ATPG必须高效地“剪枝”,只处理有意义的故障。
  • 时序问题:Transition和Bridging故障涉及时序,ATPG需要处理时钟周期、建立时间、保持时间等约束。
  • 压缩与编码:生成的测试向量不能太大,否则ATE的存储和测试时间都受不了。所以ATPG工具通常会做“测试压缩”。

我的建议:不要完全依赖ATPG的默认设置。根据芯片的工艺、频率、功耗要求,手动调整ATPG的参数。比如,对于高频模块,增加Transition测试的权重;对于低功耗模块,减少不必要的Toggle。

2.4 本章知识体系

下面这张图,把本章的核心逻辑串起来了。你可以把它当作“测试理论地图”,以后遇到具体问题,回来看看这张图,思路会清晰很多。

测试基础理论框架图 测试基础理论框架 故障模型 测试覆盖率 ATPG基本原理 Stuck-at Transition Bridging Stuck-at覆盖率 Transition覆盖率 桥接覆盖率 D算法 PODEM FAN 核心逻辑 故障模型 → 定义“芯片怎么坏” 测试覆盖率 → 衡量“测了多少” ATPG → 解决“怎么测”

好了,这一章的内容就到这里。故障模型、覆盖率、ATPG,这三者是DFT的“铁三角”。你理解得越深,后面做扫描链、BIST、Boundary Scan的时候就越得心应手。记住,理论不是用来背的,是用来指导实践的。下次遇到芯片测试失败,别急着改代码,先想想:是哪个故障模型没覆盖到?覆盖率是不是虚高?ATPG的向量是不是没踩到关键点?