测试覆盖率概述:定义、类型与良率关系

各位工程师朋友,今天我们聊聊测试覆盖率。这词儿你肯定天天见,但真把它吃透的人不多。我刚开始做DFT那会儿,也觉得覆盖率就是个数字,跑个工具就出来了。直到有一次,一个芯片测试良率死活上不去,我才真正开始重视它。

说白了,测试覆盖率就是衡量我们测试做得有多「全」的指标。它回答一个核心问题:芯片里那些可能出错的点,我们到底测到了多少?

测试覆盖率的定义

官方定义很绕,我用自己的话讲:测试覆盖率 = (被测试到的故障点数量) / (所有可能的故障点数量)

举个例子。你设计了一个芯片,里面有100万个晶体管。理论上,每个晶体管都可能短路或开路。如果你的测试向量能检测出其中95万个故障,那覆盖率就是95%。

嗯,这里要注意:覆盖率不是越高越好。追求100%往往意味着测试成本爆炸式增长。我个人习惯,把目标定在95%-98%之间,剩下的交给工艺和设计冗余去兜底。

核心公式:

测试覆盖率 = (检测到的故障数) / (总故障数) × 100%

这个数字直接决定了你的芯片能不能「测得出、测得快、测不贵」。

常见覆盖率类型

实际项目中,我们不会只看一个覆盖率。不同测试阶段、不同故障模型,关注点完全不同。我整理了一下,主要有这四种:

1. 结构覆盖率 (SC - Structural Coverage)

这是最基础的。它检查的是芯片内部电路结构有没有被覆盖到。比如,某个逻辑门的输入输出有没有被翻转?某个连线有没有被激励到?

我记得刚入行时,有个老工程师跟我说:「SC覆盖率不到90%,你都不好意思说自己在做DFT。」后来我发现,这话虽然糙,但理不糙。SC是基础,基础不牢,后面全是白搭。

2. 动态覆盖率 (DC - Dynamic Coverage)

这个更贴近实际工作场景。它看的是芯片在真实工作频率下,信号翻转的情况。说白了,就是你的测试向量能不能让芯片「动起来」。

我在项目中遇到过一个问题:SC覆盖率很高,但DC覆盖率很低。结果芯片在低速测试时全过,一上高速就崩。后来加了DC分析,才把问题揪出来。

3. 转换故障覆盖率 (TDF - Transition Delay Fault Coverage)

这个专门针对时序问题。芯片里的信号从0变1,或者从1变0,如果变得太慢,就会出问题。TDF就是测这个的。

你想想看,一个信号本该在1ns内完成翻转,结果花了3ns。这在低速下可能没事,但高速下就是灾难。TDF覆盖率低,往往意味着芯片在高频下会「掉链子」。

4. 内建自测试覆盖率 (BIST - Built-In Self-Test Coverage)

这个比较特殊。它不是靠外部测试设备,而是芯片自己测自己。比如存储器BIST,就是芯片内部生成测试向量,自己检查存储单元有没有坏。

我个人习惯,对于大容量存储器,BIST覆盖率至少要达到99%以上。因为存储器占芯片面积大,一旦有坏点,影响面很广。

覆盖率类型 英文缩写 主要检测对象 典型目标值
结构覆盖率 SC 逻辑门、连线 ≥95%
动态覆盖率 DC 信号翻转、工作频率 ≥90%
转换故障覆盖率 TDF 时序延迟、信号跳变 ≥85%
内建自测试覆盖率 BIST 存储器、模拟模块 ≥99%

我的经验:不要只看一个覆盖率数字。SC高不代表TDF高,DC高不代表BIST高。每个类型都要单独看,综合评估。

覆盖率与良率的关系

这个问题,很多新手会搞混。我直接说结论:覆盖率和良率不是线性关系,但它们是正相关的

良率,指的是生产出来的芯片中,有多少是好的。覆盖率,指的是测试能发现多少故障。两者关系是这样的:

  • 覆盖率低 → 良率可能虚高:因为很多坏芯片没被测出来,被当成好的了。这叫「测试逃逸」。
  • 覆盖率高 → 良率更真实:坏的基本都被筛掉了,剩下的才是真好的。
  • 覆盖率过高 → 良率可能下降:因为测试太严格,把一些本来能用的芯片也判坏了。这叫「过度杀伤」。

我曾经在一个项目里,把TDF覆盖率从85%提到98%。结果良率从92%降到了88%。为什么?因为很多芯片在高速下有一点点延迟,但实际应用场景根本不会触发。这就是过度杀伤。

避坑指南:我曾经因为追求100%覆盖率,把测试时间拉长了3倍,良率反而掉了5个点。后来才明白,覆盖率不是越高越好,要找到那个「甜点」——既能筛掉坏片,又不过度杀伤好片。

所以,我的建议是:

  1. 先定一个合理的覆盖率目标(比如SC 95%,TDF 85%)
  2. 跑测试,看良率
  3. 如果良率太低,检查是不是过度杀伤
  4. 如果良率太高,检查是不是测试逃逸
  5. 反复迭代,找到平衡点

嗯,今天就聊到这儿。下一章我们讲讲如何具体提升覆盖率,包括ATPG工具的使用技巧和一些我踩过的坑。到时候见。