欢迎光临专业集成电路测试网~~欢迎加入IC测试QQ群:111938408

专业IC测试网

当前位置: 网站主页 > 职业规划 > 职场感悟 >

芯片测试16年,我踩过最深的3个坑

时间:2026-06-28 19:44来源:狗蛋测试说 作者:ictest8_edit 点击:

 

实战系列 #2

做芯片测试这么多年,我犯过的错比做过的项目还多。这篇文章不讲高大上的理论,就说三个让我半夜被叫醒、被老板骂、被客户索赔的真实翻车故事。每个坑背后都是一条用真金白银换回来的测试铁律。

�� 太长不看

坑1:电源针间歇性接触不良,良率掉5个点,花了三天才发现——最难的bug是时好时坏的bug

坑2:Guardband设太紧,良率从92%崩到78%,差点停产——你设的不是余量,是乘法叠加的死刑判决

坑3:OTP trim少烧了5个cycle,3000颗在客户SLT退货——程序中的问题烧进芯片带出厂了

核心教训:先查硬件再看代码;理解统计叠加效应;OTP烧写值必须双人复核+自动回读

上篇文章结尾我说了句"下一期聊聊踩过最深的3个坑"——没想到后台催更的私信把我都炸懵了。好吧,今天不整那些虚的,把这三段血泪史摊开给你看。

先交代一下背景:我十几年前入行的时候跟绝大多数人一样,觉得自己测试技术牛得不行,什么ATE机台、什么向量文件、什么良率分析——学学就会了。直到被现实狠狠地教育了三次,才明白"测试"这两个字的真正分量。

坑1:电源Pin间歇性接触不良——三天找不到原因,最后是一张Shmoo救的命

那是入行头几年的事。

一个新项目导入,CP测试良率一直在82%~84%晃悠。隔壁老王的同款产品稳定在88%~90%,凭什么我就低5个点?

我第一反应:程序有问题。

接下来三天干了什么?

· 把测试向量重写了三遍——没用

· 把Timing参数调了又调——良率纹丝不动

· 把Guardband从±10%缩到±5%又扩回±10%——该多少还是多少

· 打电话问DFT:"你插的scan chain是不是有问题?"——DFT工程师差点顺着网线过来打我

第三天晚上九点,我瘫在机台前面,盯着Shmoo Plot发呆——等等,这个Shmoo不对劲。

Shmoo是啥?简单说就是把电压从低到高、频率从慢到快跑一遍,PASS的格子涂绿色,FAIL的涂红色。正常的Shmoo图应该是左上角一大片绿(低压低频肯定过),右下角一大片红(高压高频肯定挂),中间一条过渡带。

但我看到的Shmoo是这样的:大部分区域是绿的,但有个别的点随机性地冒红色。不是一条边界,是孤立的小红点——就好像有人不小心把红墨水甩到绿背景上。

这是间歇性故障的典型特征。

 

图:Shmoo Plot中绿色的PASS区域里随机散布孤立红色FAIL点——正常的过渡区是一条斜线,而不是散点。出现这种"红墨水甩到绿布上"的图案,基本可以锁定间歇性故障。
我顺着这条线索查下去——把Shmoo缩小到某一条具体的电源Pin,跑了一遍接触电阻监控。结果出来了:

这颗Pin的接触电阻,80%的时候是180 mΩ(完全正常),20%的时候跳到了800 mΩ。而且跳跃毫无规律——不是每颗Die都高,不是每步动作都高,就是随机发作。OS测试那几毫秒它刚好是好的,所以OS全PASS。但等到跑功能测试的时候,大电流一抽(几百毫安级别),根据欧姆定律 V = I × R,800 mΩ 的接触电阻上产生的动态压降(IR Drop)瞬间把芯片内部的 VDD 拉到了正常工作电压以下——Die就复位或跑飞了。不是接触电阻本身暴增,而是固定的大电阻 × 大电流 = 电压坍缩。

最后发现是探针卡上这根针的针尖有点脏,上面粘了一小颗前一批晶圆的硅碎屑。碎屑有时候被压扁了接触就还行,有时候侧翻了接触就崩了。

�� 狗蛋说:"OS全PASS不等于接触没毛病。间歇性接触不良是产线最恶心的bug——没有之一。它只在最关键的瞬间发作,等你回头查的时候又装得人模狗样。对付它的唯一办法:接触电阻监控+Shmoo+趋势分析,三件套缺一不可。"

这条血泪教训值多少钱?这三天产线停着等结论,按每小时5000美元的停机成本算——将近40万美元。加上浪费的晶圆和人力,半百万级别。

从那以后我定了条规矩:每个新项目导入,跑Fun Test之前必须先跑全Pin接触电阻扫描(四线法),低于同批次历史均值3σ才放行。接触电阻本身不做Shmoo——它是定值测量——但电源Pin的良率趋势分析(Trend Analysis / Distribution Mapping)要跑。当某根Pin的接触电阻分布出现长尾,或者均值出现漂移,就是该清洁探针卡了。

坑2:Guardband设太紧,良率从92%崩到78%,产线差点停产

踩第一个坑的时候我学乖了——"得留余量,得加Guardband"。

然后矫枉过正,直接翻了第二个坑。

入行第三年,我负责一个高速ADC芯片的FT测试。Datasheet上的AC Timing规格是:

· Setup Time: 2.0 ns min

· Hold Time: 1.5 ns min

· Clock-to-Output: 5.0 ns max

我心想,留点余量稳妥——于是在测试程序里写了:

· Setup Time Limit: 2.5 ns min(加了0.5 ns Guardband)

· Hold Time Limit: 2.0 ns min(加了0.5 ns)

· Clock-to-Output Limit: 4.5 ns max(减了0.5 ns)

还不止——所有DC参数也加了Guardband:

· VOH: 从2.4V min 改到 2.5V min

· VOL: 从0.4V max 改到 0.3V max

· 静态电流IDDQ: 从10 μA max 改到 5 μA max

然后开跑。

良率跳水——从92%直接干到了78%。

我当时疯了。"不可能啊,我明明是在帮品质把关,怎么良率崩了?"

后来被一个老工程师拉去小黑板前上了一课。他写了一个公式给我看:

 

图:假设单项PASS概率97%,随着测试项数量增加,复合良率呈指数级下降。50项测试时,即使每一项看似只缩了2~3个百分点,复合起来良率从92%崩溃到78%以下。
假设一个芯片有50项测试,每项测试的PASS概率是P。

如果所有测试独立,总良率 Y = P⁵⁰。

我说这我懂。他说那你算算——你的 Guardband 让这 5 项测试的 PASS 概率从 99.99% 降到 97% 甚至 90%,如果 50 项全部如此,良率是多少?
0.97⁵⁰ ≈ 21.8%。

我后背一凉。

他接着说:但你别慌——以上是假设所有测试项相互独立的极端情况。实际上,ADC 的 Setup Time、Hold Time、Clock-to-Output、IDDQ、VOH/VOL 在工艺角上是高度正相关的。工艺跑 Fast Corner,时序参数一起变快,电流也一起变大;跑 Slow Corner 则反之。因为相关性,复合良率不至于崩到 21.8%——但依然会跌得很惨。

再算笔细账:我设的那些Guardband,每一个单项的PASS概率大概是这样:

· Setup Time +0.5 ns: 99.7% → 97%(实际分布边缘有尾巴)

· Hold Time +0.5 ns: 99.7% → 97%

· VOH +0.1V: 99.5% → 96%

· IDDQ砍一半: 99% → 88%(这个最狠,IDDQ本身就是小尾巴分布)

IDDQ那项最致命——5 μA的限值把一大批正常芯片的Die-to-Die工艺波动也判了死刑。不同晶圆、不同批次的IDDQ均值漂移1~2 μA是完全正常的。我那个5 μA的限值等于把正常工艺波动也当成故障了。

参数 Datasheet规格 我设的Guardband 单项PASS概率变化
Setup Time ≥2.0 ns ≥2.5 ns 99.99% → 97%
Hold Time ≥1.5 ns ≥2.0 ns 99.99% → 97%
Clock-to-Output ≤5.0 ns ≤4.5 ns 99.99% → 96%
VOH ≥2.4 V ≥2.5 V 99.99% → 96%
IDDQ ≤10 μA ≤5 μA 99.9% → 90%

复合良率 = 0.97 × 0.97 × 0.96 × 0.96 × 0.90 × (其他45项平均99.99%) ≈ 78%——跟实际完全吻合。

�� 狗蛋说:"Guardband是一个乘法游戏。单项缩1%,50项缩完就是40%的良率损失。Guardband必须基于实测分布(Datalog)来设,不能拍脑袋。拍脑袋的后果就是——你用100%的努力,干掉了92%的良率,只挽回了0.1%的缺陷漏出。不是一个划算的买卖。"

后来怎么做的?

· 先跑5000颗Die的Datalog,画出每一项的实测分布

· Guardband只设在分布的自然尾巴上(mean ± 6σ),而不是拍脑袋

· IDDQ改用Delta-IDDQ(每颗Die跟自己比,而非统一阈值)

· 把50项Guardband缩到只有5项关键参数加Guardband

· 良率从78%回升到90%

这条血泪教训值多少钱?两周低良率产出加上人工排查和重新校准的时间,综合损失约 10万美元

坑3:OTP trim少烧了5个cycle,客户退回来3000颗

这个坑是最大的。因为它涉及的不是良率高低,而是质量事故

入行第四年,一个SoC项目在FT测试阶段。一切顺利——良率稳定在88%,Datalog看起来干干净净,Spec review过了三遍。Release。

三个月后,客户传真过来了——不对,现在是邮件了——一封标题带"URGENT"的邮件:你们供的批次A,在客户系统级测试(SLT)中失效率达到3.1%。

3000颗失效。

我整个人是懵的。FT良率88%,SLT翻出来3%——这意味着我们把有缺陷的芯片当Good Ship出去了。Underkill。

第一反应又是"是不是客户系统有问题?"——但人家把失效分析的报告一起发过来了,示波器截图、逻辑分析仪波形、定位到了具体模块。

我把退回来的芯片上ATE重新跑了一遍。猜怎么着?

FT全PASS。

这就不是一个良率问题——是测试程序自身有盲区。某种缺陷只在真实系统的工作条件下才会暴露,ATE上测不出来。

我开始逐行检查测试程序。

查了三天,找到了。但问题不是某条 wait指令——而是一行 OTP烧写代码

 

图:芯片SPI接口的 MISO 驱动时序。SPI_TURN_DLY控制从命令接收完成到MISO输出使能之间的核心时钟周期数。OTP中烧入的值直接决定了这个延时。

这颗SoC的SPI从机模块里有一个固件可配的寄存器,叫 SPI_TURN_DLY。它控制芯片在收到SPI读命令后、驱动MISO数据之前插入多少个内部核心时钟周期的延时。

简单说——SPI_TURN_DLY的值决定了一颗芯片在SPI总线上"多快回应"主设备。这个值通过FT测试流程中的 JTAG访问写入芯片的OTP(一次可编程存储单元),出厂后芯片启动时固件从OTP读出这个值来初始化SPI模块
所以:
ATE上设的 SPI_TURN_DLY→ 烧进OTP → 芯片出厂带着走 → 到了客户SLT里还是这个值。

那到底哪里出了问题?

FT测试的OTP烧写序列里有一行,本应写 SPI_TURN_DLY = 8(8个核心周期),但实际写了 0x03(3个核心周期)。

这少了的5个周期(核心时钟180 MHz,每个周期≈5.56 ns,5个周期≈27.8 ns)就是全部问题的根源——不是「数据来得太慢来不及采样」,恰恰相反,是数据来得太快,bus contention了

场景 SPI_TURN_DLY 输出使能时机 后果
设计规格 8 (44.4 ns) 命令结束后等足44.4 ns才驱动MISO → 主设备已完成输出,总线进入高阻 干净切换
实际烧入 3 (16.7 ns) 命令结束后仅16.7 ns就驱动MISO → 主设备的MISO输出级可能还在active或transitioning Bus Contention

SPI 是同步总线,数据来得早不等于更好。这里的问题是这个:

标准 SPI 读操作中,主设备(ATE 或客户 MCU)驱动 MISO 信号线直到发送完最后一个 command bit,然后释放总线(三态)。从设备等一段时间后接管 MISO,开始驱动 response data。
SPI_TURN_DLY控制的就是这个「从三态切换到驱动」的等待时间。

正常值 8 个周期:主设备有充足时间完成最后一个 SCK 边沿并释放 MISO 总线 → 从设备干干净净地接管 → 数据稳定。

错误值 3 个周期:从设备提前 5 个 cycle就开始驱动 MISO。这时主设备的输出级可能还没完全释放,两端同时驱动 MISO 这根线——Bus Contention(总线冲突)。MISO 上的信号被两边同时拉,波形出现中间态、毛刺、不完整跳变,接收端采样到的数据就错了。

那为什么这个错误能在FT里PASS?

原因一:ATE 的电气环境好,Contention 被掩盖了。

ATE 的 PCB 走线极短(<2 cm),负载电容小,数字通道驱动能力强。即使两端同时驱动,信号在短距离内仍然能快速 settle 到正确电平。加上 ATE 的采样窗口宽(wait 150给了充足的采样余量),即使在 contention 期间波形有毛刺,采样时刻已经过了混乱期,读到的数据仍然是对的。所以 FT 怎么跑怎么 PASS。

原因二:客户 SLT 的电气环境差,Contention 暴露了。

客户系统的 SPI 走线长 5~10 cm,负载电容大,温度高达 85°C。Bus Contention 导致的波形畸变在短走线小负载下不致命,但在长走线大负载下就严重了:

· 两端同时驱动 → MISO 上的电压被拉到一个不确定的中间值(不完全高也不完全低)

· 85°C 下输出晶体管的驱动能力下降 → 信号从中间态恢复的时间更长

· PCB 走线长 → MISO 与 SCK 之间产生 skew → 采样时刻正好撞在 contention 造成的混乱窗口上

3.1% 的 SLT 失效,正是这批芯片在 3-cycle 提前驱动下、在客户 PCB 环境中发生了不同程度的 bus contention,导致 MISO 数据被破坏。

为什么改成200 ns就解决了?

不是ATE自己多等50 ns救的——而是 把OTP烧写值修正确了

SPI_TURN_DLY = 0x03(3) → 0x08(8)

改了之后,芯片出厂时带着44.4 ns的内部延时,无论在ATE还是SLT环境里都有充足的时序余量。重新跑了1000颗退回来的芯片,全部PASS

良率没变——因为正常的芯片就算 SPI_TURN_DLY = 3,在ATE的宽窗口里也照样能过。影响只在SLT那端。

�� 狗蛋说:"很多人以为ATE上的 wait指令只影响ATE自己采样,别人家的芯片根本不认。但如果这个 wait背后关联着一条OTP烧写——你改的不是ATE程序,是芯片出厂时的固件配置。一根OTP bit的错误,等芯片走到客户SLT才暴露出来。从发现到定位花了三天,真正的原因在一行代码里藏了三个月。测试程序不是你在机器前写的那几行pattern——是你写进芯片里带出厂的所有东西。"

那这次事故后我做了什么?

· 每条时序路径都跑Shmoo——不光跑VDD vs Frequency,还跑Setup Time vs Hold Time的二维Shmoo。双向的Shmoo才能暴露那种"我觉得够了但其实不够"的死角
· 所有wait/timing参数必须留≥20%余量——从实测边界往回退至少20%

· OTP烧写值双人复核+自动校验——OTP烧写序列的每个trim值在写入前必须有2人签名,写入后自动回读比对。一根OTP bit的错误,三个月后才暴露=40万美元

· FT release前做SLT对比验证——至少取500颗在SLT上跑,确认FT的Bin1(Good)和SLT的Pass之间有≥99.5%的一致性

· 引入"测试覆盖率"追踪——不只是DFT的覆盖率(Fault Coverage),而是功能测试级的Coverage Matrix

这条血泪教训值多少钱?

· 客户退货3000颗,按每颗$15计算 = $45,000的直接损失

· 客户信任损失 + 重新Qualification费用 ≈ $200,000

· 后续三个月的批量加测(100% SLT)≈ $150,000

· 合计将近40万美元。

而且——客户那边采购总监说了一句话我到现在还记得:"你要是再出一次这种问题,你们就是第二供应商了。"

三条铁律——花了100万美元买来的

写到这儿,把三个坑放在一起复盘,你会发现它们有一个共同的根:

表象 根因 铁律
坑1:间歇性接触不良 良率莫名低5% 动态压降(IR Drop)导致功能测试随机失败 先确认硬件环境(接触电阻/脏污),再怀疑软件
坑2:Guardband过紧 良率从92%崩到78% 忽视工艺波动的相关性与复合乘法效应 Guardband必须基于大量Datalog的统计分布(±6σ)
坑3:OTP trim少烧了5个cycle 3000颗SLT退货 OTP寄存器差错导致时序设计余量被实质性压缩(Bus Contention) ATE PASS ≠ 芯片没问题。OTP写入必须双人复核+自动回读验证

这三条铁律,估值大约一百万美元——就是这三个坑的直接经济损失之和。

我不是在跟你开玩笑。做芯片测试的头五年,我犯的错比做的项目还多。每一条铁律都是真金白银砸出来的。你现在读到的不是"最佳实践",是"最贵学费换来的教训"。

如果你刚入行或者还在学校,希望你把这三条刻在脑子里。等你以后在产线上半夜被叫醒的时候——先把Shmoo拉出来看一眼,再碰程序。
 
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
用户名: 验证码: 点击我更换图片