2. 测试原理入门
各位同学,今天我们来聊聊测试原理中最核心的两个概念——故障模型和测试覆盖率。说实话,这两个东西你搞懂了,DFT的大门就算推开了一半。
我记得刚入行那会儿,带我的老工程师跟我说过一句话:「你连芯片会怎么坏都不知道,你怎么测它?」这句话我一直记到现在。嗯,今天我就把这句话背后的东西,掰开了讲给你们听。
一、故障模型:芯片「生病」的几种方式
芯片制造出来,不是每一颗都能正常工作。工艺偏差、材料缺陷、甚至一粒灰尘,都可能导致芯片「生病」。那这些「病」长什么样?这就是故障模型要回答的问题。
业界最常用的两种模型,一个是Stuck-at,一个是Transition Delay。我一个个说。
1. Stuck-at 故障模型(固定故障)
Stuck-at,说白了就是某个节点「卡死」了。要么一直为0,要么一直为1。我们管它叫Stuck-at-0(SA0)和Stuck-at-1(SA1)。
举个例子:一个与非门,输入A和B,输出Y。如果Y stuck-at 0了,那不管A和B怎么变,Y永远是0。这芯片肯定废了。
核心要点:
- Stuck-at-0(SA0):节点永久为逻辑0
- Stuck-at-1(SA1):节点永久为逻辑1
- 每个节点理论上存在两种故障
- 实际测试中,我们只关心「可测」的故障
我在项目中遇到过一件事。有一次做一颗MCU的DFT,仿真覆盖率做到99%了,结果流片回来发现有个模块死活测不过。查了半天,原来是那个模块的复位信号线在版图上被一根电源线压住了,导致复位信号一直为1。这就是典型的Stuck-at-1故障。嗯,从那以后我每次做版图检查,都会特别留意信号线的走线密度。
2. Transition Delay 故障模型(跳变延迟故障)
Stuck-at模型只能测「静态」的坏,但芯片还有「动态」的坏。什么意思?就是节点能跳变,但跳得太慢了。
你想想看,芯片工作在1GHz,一个时钟周期只有1ns。如果某个路径上的门延迟从正常的0.2ns变成了0.8ns,那这个路径在1ns内就完不成跳变。数据还没传过去,下一个时钟沿就来了——结果就是采样到错误的值。
Transition Delay模型就是专门抓这种问题的。它分两种:
- Slow-to-Rise(STR):从0变1太慢
- Slow-to-Fall(STF):从1变0太慢
我的经验:Transition Delay测试需要两个连续的时钟周期。第一个周期把节点设置到初始值,第二个周期让它跳变并采样。这叫「双周期测试」。很多新手容易忽略这个时序要求,导致测试向量写错了都不知道。
二、测试覆盖率:你的测试够不够「狠」?
有了故障模型,我们就能算覆盖率了。覆盖率说白了就是:你测到的故障,占所有可能故障的百分比。
公式很简单:
测试覆盖率 = (检测到的故障数 / 总故障数) × 100%
但这里有个坑——「总故障数」怎么算?
业界常用的做法是:每个输入输出节点,都假设存在SA0和SA1两种故障。比如一个2输入与非门,有3个节点(A、B、Y),那就是6个故障。整个芯片加起来,可能几百万甚至上千万个故障。
| 覆盖率类型 | 说明 | 行业常见目标 |
|---|---|---|
| Stuck-at覆盖率 | 检测到的SA0/SA1故障占比 | ≥98% |
| Transition覆盖率 | 检测到的STR/STF故障占比 | ≥90% |
| 桥接故障覆盖率 | 检测到的短路故障占比 | 视工艺而定 |
注意:覆盖率不是越高越好。我曾经见过一个团队,为了把覆盖率从99.2%追到99.5%,多花了三周时间。结果流片回来,那0.3%的故障根本不影响功能。所以我的建议是:Stuck-at做到98%以上,Transition做到90%以上,就可以收手了。剩下的交给良率分析和系统测试去兜底。
三、核心逻辑:一张图看懂
下面这张图,是我自己总结的测试原理核心逻辑。你把它记住了,后面学什么都快。
这张图想表达什么?很简单:故障模型是基础,测试生成是手段,覆盖率是度量,良率是最终目标。四者环环相扣,缺一不可。
四、避坑指南:我踩过的几个坑
最后,分享几个我亲身踩过的坑,你们以后遇到了能少走弯路。
- 坑一:只做Stuck-at,不做Transition。 我曾经有一款芯片,Stuck-at覆盖率99.5%,结果量产时发现高频下大量失效。后来一查,全是Transition故障。从那以后,我每个项目都强制要求Transition覆盖率≥90%。
- 坑二:忽略「不可测故障」。 有些故障因为电路结构的原因,天生测不到。比如一个三态门的输出,如果使能端永远为0,那输出就是高阻态,SA0和SA1都测不了。这些故障要单独列出来,分析原因,而不是直接忽略。
- 坑三:覆盖率数字好看,但测试向量质量差。 我见过有人用ATPG工具跑出99%的覆盖率,但生成的测试向量全是「0 0 0 0...」这种无效向量。为什么?因为工具把很多冗余故障算进去了。所以我的习惯是:跑完ATPG后,一定要做故障仿真验证,确保每个向量真的能测到故障。
一个小技巧:在做故障仿真时,可以随机抽取100个故障,手动验证它们是否真的能被测试向量检测到。如果这100个里有一个没测到,那你的覆盖率数据就要打个问号了。这个方法虽然土,但很管用。
好了,关于故障模型和测试覆盖率,今天就讲这么多。这些东西看起来简单,但真正用好,需要大量的项目经验积累。你们先把概念吃透,后面我们讲扫描链和ATPG的时候,会反复用到这些知识。
可可精品资料库