4、测试项与测试向量:DC参数测试、AC参数测试、功能测试与扫描链测试

各位工程师,大家好。今天我们聊聊测试项和测试向量。这部分内容,说白了就是告诉测试机台:「你要测什么,以及怎么测。」

我刚开始带项目时,总觉得测试向量是设计团队的事。后来吃过亏才明白——量产测试的成败,一半取决于你对测试项的理解深度。嗯,咱们一个一个来看。

4.1 DC参数测试:芯片的「体检」

DC测试,测的是直流特性。它不关心信号跳变快不快,只关心电压、电流对不对。我个人习惯把DC测试分成三类:接触测试、漏电流测试、功耗测试。

4.1.1 接触测试(Continuity Test / Open-Short Test)

这是上电后的第一件事。说白了,就是检查芯片的每个引脚和测试机台之间有没有「搭上」。如果某个引脚虚焊了,或者测试探针没扎好,后面的测试全是白费功夫。

怎么测? 很简单。对电源和地引脚,我们施加一个小电流(比如100μA),然后测电压。如果电压很低(接近0V),说明接触良好。如果电压很高(接近开路电压),说明没接触上。

核心判断逻辑:

  • 对VDD/VSS引脚:施加 -100μA 电流,测电压。正常值在 -0.8V 到 -1.2V 之间(二极管压降)。
  • 对信号引脚:施加 +100μA 电流,测电压。正常值在 0.6V 到 0.8V 之间。

避坑指南: 我曾经遇到过一个批次,接触测试良率只有60%。排查了三天,最后发现是测试探针的针尖磨损了,导致接触电阻偏大。从那以后,我要求产线每1000次接触就自动校准一次探针压力。

4.1.2 漏电流测试(IDDQ / Leakage Test)

漏电流,是衡量芯片「静态功耗」的关键指标。你想想看,芯片在待机状态下,电流应该趋近于0才对。如果漏电流偏大,说明工艺有问题,或者芯片内部有短路。

测试方法: 给芯片施加额定电压(比如1.8V),所有输入引脚置为固定电平(0或1),然后测量VDD上的电流。

工艺节点 典型漏电流(待机) 异常阈值
180nm < 1μA > 10μA
65nm < 10μA > 100μA
28nm < 50μA > 500μA

为什么漏电流会变大?我遇到过一种情况:芯片在制造过程中,栅氧化层出现了针孔缺陷。这种缺陷在功能测试时可能发现不了,但漏电流测试一测一个准。所以,我建议把IDDQ测试放在功能测试之前,作为一道「安检门」。

4.1.3 功耗测试(Power Consumption Test)

功耗测试分两种:静态功耗和动态功耗。静态功耗就是上面说的漏电流。动态功耗,是芯片在工作状态下的电流消耗。

测试技巧: 我个人习惯用「跑向量法」测动态功耗。给芯片灌入一个典型工作向量(比如全速运行某个通信协议),然后测量平均电流。注意,这里要设置一个合理的采样窗口,避开上电瞬间的浪涌电流。

小提示: 如果你发现某颗芯片的功耗比同类高20%以上,别急着判废。先检查一下测试向量是不是让芯片进入了「全速翻转」模式。有些芯片在特定向量下会触发内部自测模式,功耗会异常升高。我踩过这个坑,后来在测试规范里加了一条:「功耗测试向量必须经过设计团队确认。」

4.2 AC参数测试:芯片的「速度」

AC测试,测的是时序特性。它决定了芯片能不能在目标频率下正常工作。说白了,就是检查信号从A点走到B点,到底花了多少时间。

4.2.1 建立时间与保持时间(Setup/Hold Time Test)

这是数字芯片最核心的时序参数。建立时间,是数据在时钟沿到来之前必须保持稳定的最短时间。保持时间,是时钟沿之后数据必须保持稳定的最短时间。

怎么测? 用ATE(自动测试设备)的时序边沿搜索功能。ATE会逐步移动数据相对于时钟的延迟,直到找到芯片能正确采样的边界。

// 伪代码示例:建立时间测试
for (delay = 0ns; delay < 5ns; delay += 0.1ns) {
    设置数据相对于时钟的延迟为 delay;
    施加测试向量;
    读取输出结果;
    if (输出正确) {
        记录当前 delay 为通过点;
    } else {
        记录当前 delay 为失败点;
    }
}
建立时间 = 最后一个通过点 - 时钟沿;

注意: 我曾经在测试一款高速SerDes芯片时,发现建立时间测试总是失败。查了三天,最后发现是ATE的时钟抖动太大。ATE的时钟源本身就有±50ps的抖动,而芯片的建立时间要求只有100ps。这种情况下,你测出来的结果其实是ATE的抖动,不是芯片的真实性能。解决方案:用芯片内部的PLL输出作为参考时钟,或者用低抖动的外部时钟源。

4.2.2 传输延迟(Propagation Delay Test)

传输延迟,是信号从输入到输出所经历的时间。对于通信芯片来说,这个参数直接决定了数据链路的延迟。

测试方法: 在输入端施加一个跳变沿,然后在输出端测量跳变沿出现的时间差。注意,要分别测上升沿延迟和下降沿延迟,因为CMOS工艺中PMOS和NMOS的驱动能力不同,两个延迟往往不一样。

参数 典型值(65nm) 测试条件
tPLH(低到高) 2.5ns VDD=1.2V, 25°C
tPHL(高到低) 2.8ns VDD=1.2V, 25°C

4.3 功能测试:芯片的「智商」

功能测试,就是验证芯片能不能完成它设计好的功能。对于通信芯片来说,功能测试通常包括:寄存器读写、数据通路检查、协议握手等。

测试向量的生成: 我个人习惯用ATPG(自动测试向量生成)工具。但注意,ATPG生成的向量覆盖率很高,但向量长度也很大。对于量产测试,我们需要在覆盖率和测试时间之间做平衡。

我的经验: 功能测试向量不要全部用ATPG生成。我建议把测试向量分成两部分:

  • 结构化向量: 由ATPG生成,覆盖90%以上的固定故障。
  • 功能向量: 由设计团队提供,覆盖关键路径和典型应用场景。

这样既能保证覆盖率,又能避免ATPG向量「测了不该测的东西」。

4.4 扫描链测试:芯片的「X光」

扫描链测试,是DFT(可测试性设计)的核心。它把芯片内部的寄存器连接成一条长长的移位寄存器链。测试时,我们把测试数据串行灌入扫描链,然后捕获内部状态,再串行读出。

为什么需要扫描链? 你想想看,芯片内部有成千上万个节点,你不可能用探针一个个去测。扫描链相当于给芯片装了一个「内部监控系统」,让你能直接看到每个寄存器的状态。

测试流程:

  1. 扫描移位: 把测试向量串行移入扫描链。
  2. 捕获: 施加一个时钟脉冲,让组合逻辑的输出被捕获到寄存器中。
  3. 扫描输出: 把捕获到的结果串行移出,与期望值比较。
// 扫描链测试向量示例(简化版)
// 假设扫描链长度为 100 位
// 测试向量:0xABCDEF...(100位)
// 期望响应:0x123456...(100位)

// 步骤1:移位输入
for (i = 0; i < 100; i++) {
    SCAN_IN = test_vector[i];
    施加时钟脉冲;
}

// 步骤2:捕获
施加捕获时钟脉冲;

// 步骤3:移位输出
for (i = 0; i < 100; i++) {
    output[i] = SCAN_OUT;
    施加时钟脉冲;
}

// 比较
if (output == expected_response) {
    测试通过;
} else {
    测试失败,记录故障位;
}

避坑指南: 我曾经遇到一个项目,扫描链测试良率只有70%。排查后发现,是扫描链的时钟树设计有问题。扫描链在移位模式下需要很高的时钟频率(通常100MHz以上),但设计团队只考虑了功能模式下的时钟树,导致扫描模式下时钟偏斜过大。从那以后,我要求所有项目在扫描链测试前,必须先做「扫描链完整性测试」——就是灌入一串全0和全1,看能不能完整地移出来。这一步能快速发现扫描链的物理缺陷。

4.5 测试向量的优化策略

量产测试,时间就是金钱。一个测试向量如果太长,会直接拉低产能。我分享几个优化策略:

  • 向量压缩: 用LFSR(线性反馈移位寄存器)生成伪随机向量,代替全遍历向量。覆盖率可能下降1-2%,但测试时间能缩短50%。
  • 多链并行: 把一条长扫描链拆成多条短链,并行测试。比如一条1000位的链拆成10条100位的链,测试时间直接缩短10倍。
  • 动态向量调整: 根据前几颗芯片的测试结果,动态调整后续芯片的测试向量。如果某类故障从未出现,可以跳过对应的向量。

嗯,关于测试项和测试向量,今天就聊到这里。记住一句话:测试向量不是越多越好,而是越「准」越好。下一章,我们会聊聊测试程序开发与ATE平台适配,到时候见。