2、测试向量基础:测试向量定义、ATE测试原理、故障模型简介
2.1 测试向量到底是什么?
说白了,测试向量就是一份「芯片考题」。
你想想看,一颗芯片造出来,你怎么知道它好不好用?你得给它输入一些信号,然后看它输出对不对。这些输入信号和期望输出,组合在一起,就是测试向量。
我个人习惯把测试向量理解成一张「问答卷」:
- 输入激励:你问芯片的问题(比如:把A端口拉高,B端口拉低)
- 期望响应:芯片应该给出的正确答案(比如:输出端口C应该是高电平)
我在项目中遇到过一件事:有一次流片回来,芯片功能看起来都正常,但ATE测试就是报错。查了三天,最后发现是测试向量里一个时序约束写错了。嗯,从那以后我每次生成向量都会做一遍「黄金仿真」来比对。
核心要点:测试向量不是随便写的,它必须覆盖芯片的所有功能路径和故障模式。一个好的测试向量集,能让故障覆盖率做到95%以上。
2.2 ATE测试原理——芯片的「体检仪」
ATE(Automatic Test Equipment)就是自动测试设备。你可以把它想象成医院的体检仪器,只不过它体检的对象是芯片。
ATE的工作原理其实不复杂:
- 加载测试向量:把写好的测试向量灌进ATE的存储器里
- 施加激励:ATE按照向量里的时序,把信号送到芯片的管脚上
- 采集响应:ATE同时读取芯片的输出信号
- 比对结果:把采集到的输出和期望值做对比,一致就Pass,不一致就Fail
这里有个坑,我必须要提醒你——ATE的时序精度。ATE本身有固定的时间分辨率,比如1ns步进。如果你的测试向量要求0.5ns的精度,ATE根本做不到。我曾经因为这个原因,不得不重新调整整个测试方案。
小技巧:写测试向量时,尽量把时序放宽到ATE能支持的步进倍数。比如ATE是1ns步进,你就用2ns、3ns,别用1.5ns。
2.3 故障模型简介——芯片会怎么坏?
做测试向量之前,你得先知道芯片可能出什么毛病。这就是故障模型存在的意义。
常见的故障模型有这几类:
| 故障类型 | 描述 | 实际案例 |
|---|---|---|
| 固定故障(Stuck-at) | 某个节点永远固定在0或1 | 电源短路到地,信号线永远为0 |
| 桥接故障(Bridging) | 两条信号线意外连在一起 | 金属线之间短路,造成逻辑错误 |
| 延迟故障(Delay) | 信号传播时间超出预期 | 晶体管老化,门延迟变大 |
| 开路故障(Open) | 信号线断开 | 过流烧断金属线,信号悬空 |
为什么要有这些模型?因为你不可能测试每一种物理缺陷。芯片里几亿个晶体管,每个都可能出问题。但通过故障模型,你可以把问题归类,然后用有限的测试向量覆盖绝大多数情况。
我记得有一次做抗辐照芯片测试,客户要求覆盖「单粒子翻转」导致的软错误。这种故障用传统的固定故障模型根本测不出来。后来我们专门设计了「动态测试向量」,在运行过程中反复注入翻转,才把这个问题搞定。
注意:故障模型只是对真实物理缺陷的近似。不要以为覆盖了所有模型,芯片就100%没问题。实际测试中,总有一些「怪毛病」是模型没考虑到的。
2.4 测试向量与故障模型的关系
这两者的关系,说白了就是「靶子」和「箭」。
故障模型是靶子——告诉你芯片可能坏在哪里。测试向量是箭——你得射中这些靶子,才能验证芯片的好坏。
举个例子:
- 如果故障模型是「节点A stuck-at 0」
- 那测试向量就必须设计一个场景:让节点A在正常时应该是1
- 如果芯片输出是0,说明节点A确实 stuck-at 0了
- 如果输出是1,说明节点A没问题
你想想看,一个芯片有成千上万个节点,每个节点都要这样测一遍。所以测试向量的设计,本质上是一个「优化问题」——用最少的向量,覆盖最多的故障。
我个人习惯的做法是:先用自动测试向量生成工具(ATPG)跑一遍,然后手动补充一些边界情况。工具能覆盖80%,剩下的20%靠经验。
2.5 本章知识体系
下面这张图,帮你理清本章的核心逻辑:
我的建议:刚开始学测试向量时,别急着写代码。先把故障模型搞清楚,再想怎么测。方向对了,向量怎么写都行。方向错了,写再多也是白搭。
公众号:蓝海资料掘金营,微信deep3321