4、ATPG基础:ATPG原理、故障模型(stuck-at、transition delay)、测试覆盖率
ATPG,全称是 Automatic Test Pattern Generation。说白了,就是自动帮我们生成测试向量的工具。
我刚开始接触 DFT 那会儿,觉得 ATPG 就是个黑盒子。把网表丢进去,出来一堆测试向量,然后拿去跑仿真就完事了。后来踩了几次坑才明白——不懂原理,你连覆盖率为什么上不去都查不出来。
4.1 ATPG 到底在干什么?
ATPG 的核心任务很简单:找出一条路径,让故障能够被观察到。
具体来说,它要做两件事:
- 激励(Stimulus):让故障点的逻辑值跟正常值不一样。比如 stuck-at 0 的故障,你得先让正常值变成 1。
- 传播(Propagation):把这个差异一路传到输出端或者扫描链上,让我们能抓到它。
嗯,这里要注意。ATPG 不是暴力穷举。它用的是算法,比如 D 算法、PODEM、FAN 这些。现代工具基本都用了混合策略,速度比十年前快了好几个数量级。
核心概念:ATPG 的本质是“可控性”和“可观测性”的博弈。你想想看,一个节点如果既难控制又难观察,那它的测试覆盖率肯定高不了。
4.2 故障模型:stuck-at 和 transition delay
故障模型,就是我们对芯片物理缺陷的一种抽象。没有完美的模型,只有够用的模型。
4.2.1 Stuck-at 故障模型
这是最经典的模型。假设某个节点永远 stuck 在 0 或者 stuck 在 1。比如一根线断了,或者某个晶体管短路了。
我个人习惯把 stuck-at 故障分成两类:
- SA0:节点 stuck at 0。正常应该是 1 的时候,它死活拉不起来。
- SA1:节点 stuck at 1。正常应该是 0 的时候,它放不下去。
我在项目中遇到过一件事。有个芯片的某个控制信号,仿真怎么跑都正常。结果流片回来,有一批芯片就是起不来。后来查出来是那个信号线的驱动能力不够,导致高电平被拉低——本质上就是个 SA0 故障。但 ATPG 的 stuck-at 模型其实没覆盖这种“弱驱动”的情况。所以,模型只是模型,别太迷信。
小技巧:Stuck-at 覆盖率做到 98% 以上才算及格。低于 95% 的话,建议先查一下有没有冗余逻辑或者不可控的时钟域。
4.2.2 Transition Delay 故障模型
Stuck-at 模型只能测“静态”的缺陷。但芯片跑起来是动态的,信号有上升沿和下降沿。如果某个路径太慢,信号跳变来不及在时钟周期内完成,就会出错。
Transition delay 模型就是干这个的。它模拟的是:
- Slow-to-rise:上升沿太慢。从 0 变到 1 需要的时间太长。
- Slow-to-fall:下降沿太慢。从 1 变到 0 需要的时间太长。
我建议你记住一点:transition delay 测试需要两个连续的向量。第一个向量把节点设成初始值,第二个向量让它跳变。然后看能不能在下一个时钟沿之前稳定下来。
注意:Transition delay 测试对时序要求很高。我曾经遇到过因为时钟树不平衡,导致 transition 测试覆盖率虚高的情况。说白了,就是工具以为路径能跑通,实际上根本不行。所以,跑 ATPG 之前,一定要先确认 STA 是干净的。
4.3 测试覆盖率:你到底测了多少?
测试覆盖率,就是被测试到的故障数除以总故障数。听起来简单,但这里坑很多。
常见的覆盖率指标有:
| 指标 | 含义 | 我个人的及格线 |
|---|---|---|
| Stuck-at 覆盖率 | 静态故障的覆盖比例 | ≥ 98% |
| Transition 覆盖率 | 动态跳变故障的覆盖比例 | ≥ 90% |
| 动态故障覆盖率 | 包含 path delay 等更复杂的模型 | ≥ 85% |
为什么 stuck-at 要求那么高?因为它是基础。如果 stuck-at 都做不到 98%,说明你的设计里有很多不可控或者不可观测的节点。这些节点在 transition 测试里大概率也是盲区。
我曾经在一个项目里,stuck-at 覆盖率死活卡在 96%。查了两天,发现是一组异步复位信号没做约束。工具以为这些信号是可控的,但实际上复位信号在测试模式下被强制拉死了。嗯,这种坑,踩过一次就记住了。
避坑指南:覆盖率不是越高越好。99.5% 和 99.9% 之间可能差了十倍的计算时间。我一般建议 stuck-at 做到 98.5% 就收手,剩下的 1.5% 往往是冗余逻辑或者不可测的故障,强行去追性价比太低。
4.4 知识体系结构图
下面这张图,是我自己总结的 ATPG 核心逻辑。你看一眼,基本就能把整个流程串起来。
4.5 实战中的几个关键点
最后,分享几个我实际项目里总结出来的经验:
- 别只看总覆盖率。要分模块看。有时候总覆盖率 98%,但某个关键模块只有 85%,那这个芯片照样可能出问题。
- Transition 测试的向量数通常是 stuck-at 的 2~3 倍。如果发现 transition 向量数异常少,大概率是约束没写对。
- 跑 ATPG 之前,先跑一遍 DRC。DRC 不过,ATPG 的结果就是废的。我见过有人 DRC 报了几百个 violation 还硬跑 ATPG,最后覆盖率 99% 但全是假数据。
- 覆盖率低的时候,先查时钟和复位。80% 的覆盖率问题都出在时钟域和复位逻辑上。
个人习惯:我每次跑完 ATPG,都会随机挑 10 个故障,手动追一下它的激励和传播路径。这花不了多少时间,但能帮你发现工具是不是在“作弊”。
好了,ATPG 的基础就聊到这儿。记住一句话:工具是辅助,理解原理才是根本。下次遇到覆盖率上不去,别急着调工具参数,先想想你的故障模型选对了没有。
可可精品资料库