从混乱到标准: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。
我的做法是:
- 先校验STIL文件里的时序定义是否完整
- 用工具把STIL转成WGL(这一步10分钟搞定)
- 再写个脚本把WGL转成IG-XL的Pattern格式(这一步花了两天调试)
你猜怎么着?最后跑起来,一个向量都没错。但这只因为我们在第一步就堵死了时序单位的坑。否则后面全白干。
避坑提醒:STIL→WGL→PCL的转换,最容易出问题的是“时序缩放”。我曾经因为ATE的时钟周期是20ns,而STIL文件里写的是20.0但单位是ns,结果ATE按20.0ns理解没问题。但如果设计组用了ps单位,工具默认按ns理解,那就全错了。所以转换前必须对齐单位。
核心逻辑图:三种语言的关系
下面的图,我用一个简单的关系图帮你理清这三者的定位。你不会再多看一眼就明白了。
好了,这一章就到这里。这三种语言就像工具箱里的三把扳手,没有谁比谁高级,只有谁更顺手。STIL保设计意图,WGL保仿真波形,PCL保执行效率。你根据项目的阶段去选,就不会跑偏。