从混乱到标准:STIL、WGL、PCL 的前世今生

说实话,我刚入行那会儿,最头疼的就是测试程序的语言问题。

每家ATE厂商都有自己的格式,换台机器就得重写一套。我印象很深,有一次项目紧急,要在Teradyne和Advantest之间来回倒腾测试向量,差点没把人逼疯。后来我才明白,这几套语言的存在,其实各有各的命。

这节课,我就带你把它们的底裤扒干净。


为什么需要这么多语言?

说白了,芯片测试的流程太长了。从设计仿真到ATE执行,中间隔了好几个部门。每一站都有自己的“方言”。

我个人习惯把它们分成三类:

  • STIL:设计端用的,描述测试意图和时序
  • WGL:仿真转过来的,带波形和向量
  • PCL:ATE厂商自己的“机器指令”

你想想看,如果设计工程师画了时序图,测试工程师得手动翻译成机台指令,那出错率得多高。STIL就是为了解决这个“翻译”问题而生的。

一句话总结:STIL 是“意图”,WGL 是“波形”,PCL 是“动作”。


STIL:设计工程师的“普通话”

STIL的全称是 Standard Test Interface Language,IEEE 1450标准。

我个人觉得,STIL是三种语言里最“优雅”的一个。它不关心你用的是哪家ATE,只关心你要测什么、什么时候测。

举个例子,一个简单的Scan Chain时序描述:

SignalGroups {
    scan_in = 'SI';
    scan_out = 'SO';
    scan_clk = 'CLK';
}
Timing {
    WaveformTable "functional" {
        'scan_in'  { 0 { '0'; } 1 { '1'; } }
        'scan_clk' { 0 { '0'; } 1 { 'P'; } }
    }
}
PatternBurst "scan_test" {
    PatList { scan_chain_test; }
}

嗯,这里要注意。STIL最大的坑是什么?是它的时序定义特别严格。我曾经见过一个团队,因为STIL文件里一个“P”和“D”的时序单位写错了,导致整个向量在ATE上跑飞。

我的建议:如果要用STIL,一定要和设计团队对齐“周期”和“时间单位”的约定。IC实验室里经常用ns,但ATE上可能用ps,差一个量级就全完蛋。


WGL:仿真世界的“快照”

WGL,也就是 Waveform Generation Language。它其实是用来描述仿真输出的波形。

我在项目中遇到过这样的情况:设计组跑完了仿真,丢给我一个VCD文件,但ATE根本不认。WGL就是中间的“胶水”。它把仿真波形里的周期、电平、跳变点,一条条拆开,变成ATE能懂的向量。

WGL的典型格式长这样:

TIMING_UNIT ns;
WAVEFORM "func" {
    PERIOD 100.0;
    WAVES {
        "CLK":  P { 0 50; 1 50; };
        "DATA": D { 0 100; 1 100; };
    }
}
PATTERN "pattern_001" {
    VECTORS {
        "00110011";
    }
}

WGL有个很讨厌的地方:它不包含时序约束。它就是纯粹的“波形快照”。所以你拿到了WGL文件,还得自己配一套时序描述文件。否则ATE读进去只是“信号在动”,根本不知道什么时候该采结果。

注意:WGL通常不含timing信息。别以为有了WGL就可以直接下ATE,你还需要一套独立的“时序定义文件”或“波形表”。


PCL:ATE的“机器语言”

PCL,Pattern Control Language,一般是ATE厂商自己定的。

我接触过的ATE主要有两种:Teradyne 用 IG-XL,Advantest 用 TDL(Test Description Language)。不同厂商的PCL完全不同,但逻辑是共通的——它告诉机台:什么时间、给什么电压、走什么向量、判断什么结果。

PCL的特点很明显:

  • 快:PCL是编译到机台指令集的,执行速度最快
  • 硬:一旦写好,很难跨平台迁移
  • 全:从向量、时序到DUT电源、继电器控制,全都能写

我曾经在Advantest上写过一段PCL,用来控制一个混合信号模块的同步采样。说实话,写起来挺痛苦的——每个位都要手动设置,但跑起来是真快,毫秒级就能扫完几万个向量。


如何选择?

明白了各自的特点,选择就简单了。我一般按“项目阶段”来决定:

阶段 推荐语言 原因
设计验证 STIL 设计组习惯STIL,便于迭代修改
仿真输出转ATE WGL 仿真器直接导出WGL,效率最高
量产测试 PCL ATE原生格式,性能和稳定性最优
跨平台移植 STIL + WGL 保留设计意图,减少手动重写

个人经验:如果项目时间紧,直接选PCL。但如果产品生命周期长、要流片多次,我建议保留一份STIL源文件做“主控”,后续只是编译到不同ATE的PCL而已。


三种语言的切换:一个真实案例

我记得有个项目,芯片有50多条Scan链,数百万个向量。设计组给了STIL,ATE那边只认IG-XL的PCL。

我的做法是:

  1. 先校验STIL文件里的时序定义是否完整
  2. 用工具把STIL转成WGL(这一步10分钟搞定)
  3. 再写个脚本把WGL转成IG-XL的Pattern格式(这一步花了两天调试)

你猜怎么着?最后跑起来,一个向量都没错。但这只因为我们在第一步就堵死了时序单位的坑。否则后面全白干。

避坑提醒:STIL→WGL→PCL的转换,最容易出问题的是“时序缩放”。我曾经因为ATE的时钟周期是20ns,而STIL文件里写的是20.0但单位是ns,结果ATE按20.0ns理解没问题。但如果设计组用了ps单位,工具默认按ns理解,那就全错了。所以转换前必须对齐单位。


核心逻辑图:三种语言的关系

下面的图,我用一个简单的关系图帮你理清这三者的定位。你不会再多看一眼就明白了。

测试程序语言核心关系图 STIL 设计意图 & 时序 WGL 仿真波形 & 向量 PCL ATE 机器指令 时序定义 波形编译 核心链条: 设计组定义测试意图(STIL)→ 仿真器生成波形(WGL)→ ATE编译成执行指令(PCL) 每一次转换都在“丢掉”一些信息,所以保留原始STIL文件至关重要。 常见陷阱: • 时序单位不统一(ns/ps) • WGL 缺少 timing 约束 • PCL 编译后无法逆向恢复为 STIL • 跨平台迁移必须保留原始 STIL 最佳实践: • 以 STIL 为主控源文件 • 自动化转换脚本做 WGL→PCL • 每次ATE程序发布前,回归比对向量 • 在版本控制中同时保留三种格式

好了,这一章就到这里。这三种语言就像工具箱里的三把扳手,没有谁比谁高级,只有谁更顺手。STIL保设计意图,WGL保仿真波形,PCL保执行效率。你根据项目的阶段去选,就不会跑偏。