3. 测试生命周期

测试生命周期:@Before与@After管理测试资源 学习卡片

任务说明

本案例针对ATE(自动测试设备)测试程序开发中的DC参数测试场景,要求编写一段可独立运行的测试程序,测量芯片输入引脚的漏电流(IIH/IIL),并根据给定的规格限值判定测试结果是否通过。漏电流测试是芯片输入端口最基本的DC特性验证项,用于确认输入引脚在施加高/低电平电压时,流入或流出引脚的电流是否处于允许范围内,从而发现栅氧化层缺陷、ESD保护电路异常或工艺偏差等问题。

测试原理与判定逻辑

漏电流测试分为两类:输入高电平漏电流(IIH)——在输入引脚施加VIH(如2.0V)时,流入引脚的电流;输入低电平漏电流(IIL)——在输入引脚施加VIL(如0.8V)时,从引脚流出的电流。测试机通过PMU(参数测量单元)对引脚施加指定电压并测量实际电流值,将测量值与规格上下限比较,若在限内则判定PASS,否则判定FAIL。本案例实现一个最小完整的测试程序框架,包含引脚配置、电压施加、电流测量、规格比较与结果输出。

代码实现

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

// ---------- 测试机PMU抽象接口 ----------
typedef struct {
    double voltage;      // 施加电压 (V)
    double current;      // 测量电流 (A)
    int    status;       // 0: 正常, 1: 过流保护
} PMU_Channel;

// 模拟PMU施加电压并测量电流(实际ATE中由硬件完成)
// 此处用线性模型模拟:I = (V - Vth) / R + I_leak
void pmu_force_voltage_measure_current(PMU_Channel *ch, double v_force) {
    ch->voltage = v_force;
    // 模拟输入引脚特性:阈值0.5V,等效电阻10kΩ,固有漏电流1μA
    double vth = 0.5;
    double r_in = 10000.0;
    double i_leak_fixed = 1e-6;
    if (v_force > vth) {
        ch->current = (v_force - vth) / r_in + i_leak_fixed;
    } else {
        ch->current = i_leak_fixed;
    }
    ch->status = 0;
}

// ---------- 测试项数据结构 ----------
typedef struct {
    const char *name;       // 测试项名称
    double v_force;         // 施加电压 (V)
    double i_low_limit;     // 电流下限 (A)
    double i_high_limit;    // 电流上限 (A)
    double measured;        // 实测电流 (A)
    bool   pass;            // 判定结果
} LeakageTestItem;

// ---------- 测试执行函数 ----------
void run_leakage_test(LeakageTestItem *item, PMU_Channel *pmu) {
    pmu_force_voltage_measure_current(pmu, item->v_force);
    item->measured = pmu->current;
    // 规格判定:下限 ≤ 测量值 ≤ 上限
    if (pmu->status == 0 &&
        item->measured >= item->i_low_limit &&
        item->measured <= item->i_high_limit) {
        item->pass = true;
    } else {
        item->pass = false;
    }
}

// ---------- 结果打印 ----------
void print_result(const LeakageTestItem *item) {
    printf("%-8s V=%.2fV  I=%.3eA  [限值: %.3e ~ %.3e A]  %s\n",
           item->name, item->v_force, item->measured,
           item->i_low_limit, item->i_high_limit,
           item->pass ? "PASS" : "FAIL");
}

// ---------- 主程序 ----------
int main(void) {
    // 定义测试项:IIH (V=2.0V, 上限10μA) 和 IIL (V=0.8V, 下限-10μA)
    LeakageTestItem tests[] = {
        {"IIH", 2.0, -10e-6, 10e-6, 0, false},
        {"IIL", 0.8, -10e-6, 10e-6, 0, false}
    };
    int num_tests = sizeof(tests) / sizeof(tests[0]);

    PMU_Channel pmu = {0, 0, 0};

    printf("===== 输入引脚漏电流测试 =====\n");
    for (int i = 0; i < num_tests; i++) {
        run_leakage_test(&tests[i], &pmu);
        print_result(&tests[i]);
    }

    // 汇总判定
    bool all_pass = true;
    for (int i = 0; i < num_tests; i++) {
        if (!tests[i].pass) {
            all_pass = false;
            break;
        }
    }
    printf("-----------------------------\n");
    printf("整体结果: %s\n", all_pass ? "PASS" : "FAIL");
    return all_pass ? 0 : 1;
}

代码说明

上述代码实现了完整的漏电流测试闭环:pmu_force_voltage_measure_current函数模拟PMU对引脚施加指定电压并返回测量电流(实际ATE中由测试机硬件完成,此处用线性模型模拟以便独立运行);run_leakage_test函数执行单次测试并依据规格上下限判定PASS/FAIL;主程序中定义了两个测试项——IIH(施加2.0V)和IIL(施加0.8V),规格限值均设为±10μA。程序运行后逐项打印测量值与判定结果,最后输出整体结论。

落地与验证

运行方式:将代码保存为leakage_test.c,在装有GCC的Linux环境中执行:

gcc -o leakage_test leakage_test.c
./leakage_test

验证方法:观察程序输出的各项测量电流值是否在限值范围内,以及最终整体结果是否为PASS。由于代码中模拟的输入引脚特性固定(阈值0.5V、等效电阻10kΩ、固有漏电流1μA),可预先推算:施加2.0V时电流约为(2.0-0.5)/10000 + 1e-6 = 1.51e-4A = 151μA,超出10μA上限,因此IIH项应判定FAIL;施加0.8V时电流约为(0.8-0.5)/10000 + 1e-6 = 3.1e-5A = 31μA,同样超出上限,IIL项也应判定FAIL。整体结果为FAIL,退出码为1。

判定标准:若程序输出的测量值与上述推算一致,且FAIL判定正确,则说明测试程序逻辑正确。在实际ATE环境中,将pmu_force_voltage_measure_current函数替换为测试机API调用(如V93000的tmu_force_voltage),并修改规格限值为芯片数据手册中的实际值,即可用于量产测试。

漏电流测试程序执行流程与数据流 主程序 main() 定义测试项数组 测试项配置 IIH: V=2.0V, 限±10μA IIL: V=0.8V, 限±10μA (来自数据手册) for 每个测试项 调用 run_leakage_test() pmu_force_voltage_measure _current() 施加电压 → 测量电流 规格比较 下限 ≤ 测量值 ≤ 上限 ? → PASS / FAIL print_result() 打印测量值与判定 汇总整体 PASS/FAIL 循环处理下一个测试项 程序控制 测试执行 PMU测量 判定逻辑 结果输出

预期输出

根据代码中模拟的引脚特性,程序运行后的预期输出如下(此结果由代码逻辑直接推出,非实测数据):

===== 输入引脚漏电流测试 =====
IIH      V=2.00V  I=1.510e-04A  [限值: -1.000e-05 ~ 1.000e-05 A]  FAIL
IIL      V=0.80V  I=3.100e-05A  [限值: -1.000e-05 ~ 1.000e-05 A]  FAIL
-----------------------------
整体结果: FAIL

两个测试项均超出规格上限,整体判定FAIL,程序返回退出码1。在实际ATE测试中,若测量值落在规格范围内,则对应测试项显示PASS,整体结果由所有测试项共同决定。