测试基础理论:故障模型与测试覆盖率
各位同学,今天我们来聊聊测试理论中最核心的两个概念——故障模型和测试覆盖率。说实话,我刚入行那会儿,觉得这些理论挺枯燥的。直到有一次,一颗芯片在ATE上测了三天三夜,结果客户那边一上电就挂了……嗯,从那以后,我再也不敢轻视这些基础理论了。
一、什么是故障模型?
故障模型,说白了就是我们对芯片内部可能出现的物理缺陷的一种数学抽象。你想想看,芯片制造过程中,掺杂浓度偏差、光刻对准误差、金属线断裂……这些物理缺陷千奇百怪,我们不可能为每一种缺陷都设计测试向量。所以,我们需要一个模型——用有限的几种故障类型,去覆盖尽可能多的实际缺陷。
我个人习惯把故障模型分成三大类:
- 结构故障模型:关注电路拓扑结构的变化
- 时序故障模型:关注信号传播延迟的变化
- 耦合故障模型:关注信号线之间的相互影响
下面我们逐个展开讲。
二、Stuck-at 故障模型
Stuck-at 模型是最经典、最基础的故障模型。它的思想很简单:假设某条信号线要么永远固定在逻辑0(Stuck-at-0,简称SA0),要么永远固定在逻辑1(Stuck-at-1,简称SA1)。
核心要点:一个节点同时存在SA0和SA1两种故障可能。对于n个节点的电路,理论上最多有2n个Stuck-at故障。
我在项目中遇到过这样一个案例:一颗MCU芯片的GPIO输出始终为低,怎么查都查不出原因。后来用扫描链抓了一下内部状态,发现是输出缓冲器的使能信号线发生了SA0故障。你看,一个简单的Stuck-at模型,就帮我们定位了问题。
Stuck-at模型的优点很明显:
- 模型简单,计算复杂度低
- 与工艺无关,通用性强
- 测试生成算法成熟(D算法、PODEM等)
但它也有局限:
- 无法覆盖时序相关的故障
- 对某些桥接故障不敏感
- 实际缺陷可能表现为间歇性故障,而非永久性固定
小提示:在实际项目中,我通常用Stuck-at覆盖率作为测试质量的"底线"指标。如果Stuck-at覆盖率达不到95%以上,我会建议重新审视测试方案。
三、Transition 故障模型
Transition故障模型,也叫跳变故障模型。它关注的是信号从0到1(上升沿)或从1到0(下降沿)的跳变过程是否正常。
为什么会需要这个模型?你想想看,随着工艺节点不断缩小,信号线的RC延迟越来越显著。一根金属线可能因为电阻过大,导致信号跳变速度变慢,甚至完全无法完成跳变。这就是Transition故障。
Transition故障分为两种:
- Slow-to-Rise (STR):信号从0到1的跳变太慢,在时钟采样时仍未达到高电平
- Slow-to-Fall (STF):信号从1到0的跳变太慢,在时钟采样时仍未达到低电平
我记得有一次,一颗28nm工艺的芯片在低温下工作正常,但高温下频繁出错。我们用Transition测试向量一跑,发现一条关键路径上的缓冲器在高温下驱动能力下降,导致STR故障。这就是Transition模型的价值——它能捕捉到Stuck-at模型看不到的时序问题。
注意:Transition测试需要两个连续的时钟周期——第一个周期施加初始值并启动跳变,第二个周期捕获结果。所以测试向量长度通常是Stuck-at的两倍。
四、Bridging 故障模型
Bridging故障模型,顾名思义,就是两条信号线之间发生了意外的短路。在深亚微米工艺中,金属线间距越来越小,Bridging故障的发生概率显著上升。
Bridging故障的建模比Stuck-at复杂得多:
- AND桥接:两条线短路后,逻辑表现为线与(如果驱动能力相同)
- OR桥接:两条线短路后,逻辑表现为线或
- Dominant桥接:其中一条线的驱动能力远强于另一条,强驱动线"压倒"弱驱动线
我曾经处理过一个案例:一颗SoC芯片的I2C总线偶尔出现数据错误。用Stuck-at和Transition测试都查不出问题,最后用Bridging测试才发现——SDA线和SCL线之间有一个微小的金属桥接,只有在特定数据模式下才会触发。嗯,从那以后,我对Bridging模型就格外重视了。
实战建议:对于先进工艺(28nm以下),我建议在测试方案中至少包含以下Bridging测试:
- 相邻金属线之间的桥接
- 同层金属线的平行桥接
- 不同层金属线的交叉桥接
五、其他常见故障模型
除了上面三种,还有几个故障模型值得了解:
| 故障模型 | 描述 | 适用场景 |
|---|---|---|
| IDDQ故障 | 静态电流异常增大 | 检测CMOS电路中的短路缺陷 |
| Open故障 | 信号线断路 | 检测金属线断裂、过孔失效 |
| Delay故障 | 信号传播延迟超出预期 | 检测路径延迟缺陷 |
| Coupling故障 | 信号线之间的串扰 | 检测高密度布线中的干扰 |
六、测试覆盖率概念
测试覆盖率,简单说就是——你的测试向量能检测到多少故障。但这里有个坑:覆盖率不是越高越好,而是要在成本和收益之间找到平衡点。
常见的覆盖率指标有:
- Stuck-at覆盖率:检测到的Stuck-at故障数 / 总Stuck-at故障数
- Transition覆盖率:检测到的Transition故障数 / 总Transition故障数
- Bridging覆盖率:检测到的Bridging故障数 / 总Bridging故障数
- 动态故障覆盖率:考虑时序因素的覆盖率
行业经验值:
- Stuck-at覆盖率:≥98%(消费类芯片),≥99.5%(车规芯片)
- Transition覆盖率:≥90%(消费类芯片),≥95%(车规芯片)
- Bridging覆盖率:≥85%(视工艺节点而定)
我曾经犯过一个错误:为了追求100%的Stuck-at覆盖率,增加了大量冗余测试向量,导致测试时间翻了三倍。结果呢?多出来的那2%覆盖率,一个实际缺陷都没抓到。所以我现在做测试方案时,会先设定一个合理的覆盖率目标,然后通过故障仿真来验证——而不是盲目追求数字。
七、覆盖率与测试质量的关系
这里我要强调一个观点:高覆盖率不等于高质量。
为什么?因为覆盖率只反映了"我们测试了哪些故障",但没反映"我们没测试哪些故障"。举个例子:
- 你的Stuck-at覆盖率是99%,但芯片中实际存在的缺陷是Bridging故障——那这99%的覆盖率就毫无意义
- 你的Transition覆盖率是95%,但测试向量只覆盖了低频路径——那高频路径上的缺陷就漏掉了
所以,我建议的做法是:
- 根据芯片的应用场景,确定最相关的故障模型
- 为每个故障模型设定合理的覆盖率目标
- 用故障仿真验证覆盖率,而不是用公式计算
- 结合良率数据,持续优化测试方案
我的经验:在项目初期,我会先跑一遍Stuck-at测试,确保基础覆盖率达标。然后根据芯片的薄弱环节(比如高频路径、长走线、高密度区域),有针对性地增加Transition和Bridging测试。这样既保证了测试质量,又控制了测试成本。
八、小结
好了,今天的内容就到这里。总结一下:
- 故障模型是测试理论的基石,Stuck-at、Transition、Bridging是三种最常用的模型
- 测试覆盖率是衡量测试质量的指标,但不要盲目追求数字
- 实际项目中,要根据芯片特点和应用场景,选择合适的故障模型和覆盖率目标
下一章,我们会聊聊测试向量生成的具体方法。到时候我会分享一些我在ATE上调试测试向量的实战经验,保证干货满满。
公众号:蓝海资料掘金营,微信deep3321