4. WGL语言入门:语言结构、向量格式、事件格式、时序格式
各位同学,今天我们来聊聊WGL语言。说实话,我刚入行那会儿,第一次看到WGL文件,脑子里就两个字——「天书」。满屏的ASCII字符,密密麻麻的时间戳,根本不知道从哪看起。但后来我明白了,WGL就是芯片测试界的「通用语言」,你搞懂了它,就等于拿到了和ATE机台对话的钥匙。
4.1 WGL语言的整体结构
WGL文件,说白了就是一个纯文本文件。它用关键字来组织信息,有点像早期的HTML。我个人习惯把WGL文件想象成「三明治」:
- 头部:定义测试的基本信息,比如测试名、时间单位、电压条件
- 主体:核心内容,包括向量、时序、事件
- 尾部:结束标记,告诉机台「文件读完了」
一个典型的WGL文件长这样:
WGL_VERSION 2.0;
TEST_NAME "my_chip_test";
TIMING_UNIT 1ns;
VECTOR $vectors;
...
END_VECTOR;
TIMING $timing;
...
END_TIMING;
EVENTS $events;
...
END_EVENTS;
END_TEST;
嗯,这里要注意:每个关键字后面必须加分号。我见过不少新手工程师漏掉分号,结果ATE机台直接报错,半天找不出原因。
4.2 向量格式:测试的核心
向量格式,就是告诉机台「每个周期,每个管脚该干什么」。它由三部分组成:
- 管脚名:比如CLK、DATA、RESET
- 状态值:0、1、Z(高阻)、X(未知)
- 时间点:这个状态在什么时候生效
举个例子:
VECTOR $vectors;
PERIOD 100ns;
FORCE_PI {CLK=0, DATA=1, RESET=1} @ 0ns;
FORCE_PI {CLK=1, DATA=0, RESET=1} @ 50ns;
MEASURE_PO {Q=1} @ 90ns;
END_VECTOR;
我在项目中遇到过一件事:有个同事写向量时,把FORCE_PI和MEASURE_PO的时间点搞反了。结果测试一直报错,他查了两天才发现——原来是机台在错误的时间点采样了输出。你想想看,这种低级错误多耽误事。
核心要点:向量格式中,FORCE_PI是驱动输入,MEASURE_PO是采样输出。时间点必须严格对齐PERIOD。
4.3 事件格式:精细控制每个管脚
事件格式比向量格式更灵活。它允许你为每个管脚单独定义「什么时候变、变成什么」。说白了,向量格式是「批量操作」,事件格式是「单点精调」。
事件格式的语法:
EVENT $events;
CLK: 0ns RISE, 50ns FALL;
DATA: 0ns 0, 20ns 1, 80ns Z;
RESET: 0ns 1, 10ns 0, 200ns 1;
END_EVENTS;
这里RISE表示上升沿,FALL表示下降沿。数字0/1/Z直接写就行。
为什么要用事件格式?我举个例子:你有一个异步复位信号,它可能在任意时刻拉低。用向量格式你得写很多个周期,但用事件格式,一行就搞定了。我曾经用事件格式帮团队把一个测试向量文件从5000行压缩到了800行,效率提升很明显。
个人技巧:事件格式特别适合处理异步信号、毛刺注入、时序裕量测试。我建议你把事件格式当作「手术刀」,专门处理那些向量格式搞不定的精细场景。
4.4 时序格式:定义测试的「节拍」
时序格式,就是定义测试的「时钟节拍」。它告诉机台:什么时候采样、什么时候驱动、什么时候保持。
一个典型的时序定义:
TIMING $timing;
WAVEFORM clk_wf {
0: 0ns D, 50ns D;
1: 0ns D, 50ns D;
}
WAVEFORM data_wf {
0: 0ns D, 100ns D;
1: 0ns D, 100ns D;
}
TIMING_MODE tmode1 {
CLK: clk_wf;
DATA: data_wf;
}
END_TIMING;
这里WAVEFORM定义了波形模板,TIMING_MODE把模板分配给具体管脚。D表示驱动(Drive),Z表示高阻,X表示未知。
为什么会这样设计?因为ATE机台需要知道每个管脚在每个时刻的精确行为。你想想看,如果CLK的上升沿和DATA的采样点没对齐,测试结果肯定不准。
避坑指南:我曾经在时序格式里把D和Z搞混了,结果机台把高阻状态当成了驱动,导致电流测试全部失败。后来我养成了一个习惯:写完时序格式后,先用仿真器跑一遍,确认波形没问题再上机台。
4.5 三种格式的关系
为了让你更直观地理解,我画了一张图:
从图中你可以看到:向量格式是「骨架」,定义了大框架;事件格式是「肌肉」,负责精细动作;时序格式是「神经」,控制着整个节奏。三者缺一不可。
4.6 实战中的小技巧
最后,分享几个我这些年积累的经验:
- 命名规范:管脚名、波形名、时序模式名,尽量用有意义的英文。别用clk1、wf2这种,三个月后你自己都看不懂。
- 注释要写:WGL支持注释,用//开头。我习惯在每个关键段落前加注释,说明这段是测什么功能的。
- 版本控制:WGL文件一定要纳入版本管理。我见过有人改了文件不记录,结果回退时找不到原始版本,只能重写。
- 先仿真后上机:永远先用仿真器验证WGL文件的正确性。上机台一次的成本,够你仿真一百次了。
总结一下:WGL语言并不难,难的是把三种格式灵活组合,写出高效、准确的测试向量。多练、多写、多踩坑,你也能成为WGL高手。
公众号:蓝海资料掘金营,微信deep3321