第二章:测试基础理论——故障模型、ATPG原理与DFT基础概念
各位同学,大家好。今天我们聊聊测试理论中最核心的几个概念。说实话,我刚入行那会儿,觉得这些理论离实际挺远的。直到有一次,一颗芯片在ATE上测了三天三夜,死活找不到问题,最后发现是一个最基础的stuck-at故障没覆盖到……嗯,从那以后,我再也不敢小看这些“基础理论”了。
2.1 故障模型:芯片为什么会坏?
芯片制造出来,不是每一颗都能正常工作。为什么?因为制造过程中会有各种物理缺陷。但物理缺陷千奇百怪,我们不可能为每一种缺陷都设计测试向量。所以,我们需要故障模型——把物理缺陷抽象成逻辑层面的模型。
2.1.1 Stuck-at 故障模型
这是最经典的故障模型,也是我最早接触的。说白了,就是假设某个节点永远固定在逻辑0或逻辑1。
- Stuck-at-0 (SA0):节点永远输出0
- Stuck-at-1 (SA1):节点永远输出1
举个例子:一个与门,输入A和B,输出Y。如果Y stuck-at-0了,那不管A和B怎么变,Y永远是0。
实际项目中的坑:
我曾经遇到一个案子,芯片功能测试全过,但量产良率只有60%。查了两个月,最后发现是一个内部节点因为金属残留,形成了SA1故障。但我们的测试向量只覆盖了SA0……从那以后,我养成了一个习惯:SA0和SA1的覆盖率必须分别看,不能只看总覆盖率。
Stuck-at模型覆盖了大约80%-90%的制造缺陷。但它有个局限——它假设故障是静态的。也就是说,它不考虑时序问题。
2.1.2 Transition 故障模型
芯片频率越来越高,很多问题出在“变化”的过程中。Transition故障模型就是用来抓这类问题的。
它模拟的是:一个节点从0变1(上升沿),或者从1变0(下降沿)时,速度太慢,导致在下一个时钟沿到来时,还没稳定到目标值。
- Slow-to-Rise (STR):上升太慢
- Slow-to-Fall (STF):下降太慢
测试时,我们需要两个向量:第一个向量把节点设置到初始值,第二个向量触发跳变,然后在下一个时钟沿捕获结果。
我的经验:
Transition测试对时序要求很苛刻。我个人习惯在做ATPG时,把Transition和Stuck-at分开跑。因为Transition的测试向量长度通常是Stuck-at的2-3倍,如果混在一起,调试起来会很痛苦。
2.1.3 Bridging 故障模型
芯片越做越小,线间距越来越窄。两条相邻的金属线之间,可能因为颗粒物或刻蚀残留,形成短路——这就是Bridging故障。
Bridging模型有两种主流方式:
- Wired-AND / Wired-OR:两条线短路后,逻辑值取与或者或
- Dominant Bridge:一条线“主导”另一条线的逻辑值
说实话,Bridging模型在ATPG里用得不多,因为它的故障数量太大了——一个100万门的芯片,可能的Bridging故障对是天文数字。但它在良率分析中非常有用。
注意:
Bridging故障有时候会表现为“间歇性”的——温度一高就出现,温度一低就消失。我曾经被这种问题折磨了整整两周,最后发现是两条线之间有一个微小的金属毛刺,在高温下膨胀才短路。所以,如果你遇到“时好时坏”的芯片,别急着怀疑测试程序,先查查Bridging。
2.2 ATPG原理:自动生成测试向量
ATPG,全称Automatic Test Pattern Generation。说白了,就是让工具自动帮你生成测试向量,不用你手动写。
但ATPG不是万能的。它的核心原理其实很简单:
- 故障激活:让故障节点产生一个与正常值不同的值
- 故障传播:把这个差异传播到某个输出引脚
- 敏化路径:确保传播路径上的其他信号不会干扰这个差异
举个例子:一个两输入与非门,输出Y。如果我们要测Y的SA0故障:
- 激活:让Y正常输出1(即输入A=0,B=任意)
- 传播:Y直接就是输出,不需要额外传播
- 敏化:不需要
但如果是内部节点,传播路径就复杂多了。
ATPG的覆盖率目标:
| 故障类型 | 典型目标覆盖率 | 我的建议 |
|---|---|---|
| Stuck-at | >98% | 尽量做到99%以上 |
| Transition | >90% | 高频芯片建议95% |
| Bridging | 不单独设目标 | 结合良率分析使用 |
ATPG工具有很多,比如Synopsys的TetraMAX、Mentor的FastScan。我个人习惯用TetraMAX,它的debug界面比较友好。但工具只是工具,关键还是理解原理。
2.3 DFT基础概念:为测试而设计
DFT,Design for Test。你想想看,如果芯片内部所有节点都直接连到引脚上,测试会变得多简单?但现实是,芯片引脚有限,内部节点成千上万。所以,我们需要DFT——在芯片设计阶段,就加入一些专门用于测试的电路。
2.3.1 扫描链(Scan Chain)
这是DFT最核心的技术。原理很简单:把所有的触发器(Flip-Flop)串联成一条链。测试时,我们可以通过这条链,把测试数据“扫”进去,然后捕获结果,再“扫”出来。
扫描链的好处:
- 内部节点变得“可观测”和“可控制”
- ATPG覆盖率大幅提升
- 测试时间可控(链越长,测试时间越长)
避坑指南:
我曾经在一个项目中,为了省面积,把扫描链做得特别长——一条链上挂了5000个触发器。结果测试时间长得离谱,ATE的测试成本直接翻倍。后来我学乖了:一般每条链控制在500-1000个触发器,面积和测试时间之间要平衡。
2.3.2 边界扫描(Boundary Scan)
这是针对芯片引脚级别的测试技术。IEEE 1149.1标准,也就是我们常说的JTAG。它可以在不拆芯片的情况下,测试PCB上的互连。
边界扫描的四个基本信号:
- TDI:测试数据输入
- TDO:测试数据输出
- TCK:测试时钟
- TMS:测试模式选择
我记得有一次,一块PCB上有一颗BGA封装的芯片,引脚间距只有0.4mm,万用表根本没法测。最后就是用边界扫描,几分钟就定位到了一根虚焊的引脚。
2.3.3 内建自测试(BIST)
BIST,Built-In Self-Test。让芯片自己测试自己。最典型的是Memory BIST——在芯片内部集成一个测试控制器,自动对SRAM进行读写测试。
BIST的好处:
- 不需要外部ATE生成复杂向量
- 可以在系统级测试中使用
- 对高频测试特别有效
但BIST也有缺点:它会增加芯片面积,大约5%-10%。而且,BIST只能测它自己设计好的故障类型,灵活性不如扫描链。
一个重要的提醒:
DFT不是万能的。我见过一些团队,DFT覆盖率做到99.5%,但流片回来良率还是低。为什么?因为DFT覆盖的是“制造缺陷”,不是“设计错误”。如果你的设计本身就有bug,DFT是测不出来的。所以,功能验证和DFT测试是互补的,不是替代关系。
2.4 小结
这一章我们讲了三个核心概念:
- 故障模型:Stuck-at、Transition、Bridging,把物理缺陷抽象成逻辑模型
- ATPG原理:自动生成测试向量,核心是激活、传播、敏化
- DFT基础:扫描链、边界扫描、BIST,让芯片变得可测
这些理论看起来枯燥,但每一个都是前人踩过无数坑总结出来的。我个人觉得,理解这些基础,比学会用工具更重要。工具每年都在更新,但原理几十年没变过。
下一章,我们会讲ATE测试程序开发。到时候我会带大家手写一个实际的测试程序,把今天学的理论用起来。