第二章:测试基础理论——故障模型、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不是万能的。它的核心原理其实很简单:

  1. 故障激活:让故障节点产生一个与正常值不同的值
  2. 故障传播:把这个差异传播到某个输出引脚
  3. 敏化路径:确保传播路径上的其他信号不会干扰这个差异

举个例子:一个两输入与非门,输出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测试程序开发。到时候我会带大家手写一个实际的测试程序,把今天学的理论用起来。