第一篇:概念篇 ------ 什么是 VCDSTIL?为什么需要它?
系列:《VCDSTIL 实战:从仿真波形到 ATE 测试向量》第 1 篇(共 5 篇)
背景:芯片测试面临的转换难题
在数字芯片的开发流程中,设计工程师与测试工程师往往使用截然不同的"语言"。
设计端使用 仿真器 (如 ModelSim、VCS)来验证电路功能。仿真器产出的波形文件是 VCD(Value Change Dump) 或 EVCD(Extended VCD) 格式,其记录方式是 事件驱动(Event-Based) 的------它只记录信号发生变化的那一刻,精确到皮秒级别。
测试端使用 ATE(Automatic Test Equipment,自动测试设备) 来对真实芯片施加激励并捕获响应。ATE 使用 STIL(Standard Test Interface Language) 格式来描述测试向量,其工作方式是 周期驱动(Cycle-Based) 的------时钟周期是一切的基本单位,所有信号的驱动和采样都必须以固定的时钟周期来描述。
这两种范式之间存在一道天然的鸿沟:
| 维度 | VCD/EVCD(仿真) | STIL(ATE 测试) |
|---|---|---|
| 时间模型 | 事件驱动,连续时间轴 | 周期驱动,离散时钟周期 |
| 信号方向 | 通常不定义方向 | 必须明确 In / Out / InOut |
| 数据量 | 可以非常巨大 | 需要压缩为有限数量的波形 |
| 格式标准 | IEEE 1364 | IEEE 1450 |
手动将 VCD 转换为 STIL 是一项极其繁琐且容易出错的工作。VCDSTIL 正是为了自动化这一转换过程而生的工具。
VCDSTIL 的核心概念
VCDSTIL 的核心任务一句话概括:
将事件驱动的仿真结果(VCD/EVCD 文件)自动转换为周期驱动的 ATE 测试程序(STIL 文件)。
其转换过程分为以下几个关键步骤:
1. 划分周期(Cycle Division)
VCDSTIL 首先根据用户指定的 测试周期宽度(Tester Cycle) 将连续的 VCD 时间轴切分成一个个离散的时钟周期。
例如,若 DUT 工作在 2.5 MHz,对应周期为 400 ns,则工具会以每 400 ns 为一个单元切割整个波形时间轴。
2. 归纳波形(Waveform Collection)
切分完成后,工具分析每个周期内各信号的变化模式,将不同的波形形状归纳整理。相同的波形只保留一份,最终形成一张 波形表(WaveformTable)。
3. 生成向量(Vector Generation)
每个时钟周期与波形表中对应的波形进行匹配,生成最终的 测试向量(Pattern)。
整体流程如下图所示:
VCD/EVCD 文件
│
▼
划分周期(按 cycle_width)
│
▼
提取引脚方向信息(Pins File)
│
▼
归纳波形模式(Timing File)
│
▼
生成 STIL(Waveforms + Vectors)
三种工作模式
VCDSTIL 通过命令行参数 -work_mode 支持三种运行模式,三者对应转换流程的不同阶段:
模式一:gen_pins------生成引脚文件
bash
VCDSTIL -setup setup.py -work_mode gen_pins
此模式分析 VCD 文件中出现的所有信号,自动生成一份 引脚定义文件(pins.csv)。
注意 :VCD 格式本身不携带信号方向信息,因此工具默认将所有引脚标记为输入(in)。用户需要在生成后手动编辑该文件,根据 DUT 规格书修正方向,并为双向引脚(InOut)添加 I/O 控制信号。
模式二:gen_timing------生成时序文件
bash
VCDSTIL -setup setup.py -work_mode gen_timing
此模式基于引脚文件,从 VCD 中自动提取各引脚的波形,生成 时序定义文件(timing.csv)。
该文件包含每个引脚在各种情况下的波形描述,是工具用于最终生成 STIL 的核心数据。
模式三:默认模式------生成 STIL
bash
VCDSTIL -setup setup.py
默认模式综合利用引脚文件和时序文件,完成从 VCD 到 STIL 的最终转换,输出完整的 STIL 工作空间。
实例 DUT 介绍:Intel I8254
本系列教程以经典的 Intel I8254 可编程计数器/定时器芯片作为示例 DUT。
芯片简介
I8254 是一款提供三路独立 16 位计数器的定时器芯片,每路计数器支持最高 10 MHz 的时钟输入,广泛应用于早期 PC 系统中的时间管理。
引脚方向定义
I8254 共有以下引脚,方向如下:
| 引脚名 | 方向 | I/O 控制信号 |
|---|---|---|
| A0, A1 | Input | --- |
| CLK0, CLK1, CLK2 | Input | --- |
| CS_ | Input | --- |
| D0 ~ D7 | InOut | in: D_dir=1,out: D_dir=0 |
| GATE0, GATE1, GATE2 | Input | --- |
| OUT0, OUT1, OUT2 | Output | --- |
| RD_, WR_ | Input | --- |
| D_dir | Input | --- |
关键点:双向总线 D0~D7 的方向控制
D0~D7 是数据总线,工作在双向模式。其传输方向由 D_dir 信号控制:
D_dir = 1:数据总线为输入方向(CPU 写入 DUT)D_dir = 0:数据总线为输出方向(DUT 输出到 CPU)
在 VCD 文件中,D_dir 是一个普通的信号;但在 STIL 中,它扮演着控制双向引脚 I/O 切换的核心角色,必须在 pins.csv 的 I/O Control 列中显式声明。
时序参数选择
I8254 工作在 2.5 MHz,对应 时钟周期 = 400 ns 。这是用户在运行 VCDSTIL 时需要指定的 cycle_width 参数值。
另外,仿真开始阶段(前 1600 ns)通常包含复位等初始化操作,不属于有效测试数据,因此 start_time 设置为 1600 ns,告知工具跳过这段时间。
小结
本篇介绍了 VCDSTIL 存在的工程背景,以及它的核心概念和三种工作模式。理解这些基础对于后续正确配置和使用工具至关重要。
核心要点回顾:
- VCD 是事件驱动的,STIL 是周期驱动的,两者范式不同,需要工具桥接
- VCDSTIL 的工作流分三步:提取引脚 → 提取时序 → 生成 STIL
- VCD 不含信号方向信息,必须由用户手动补充
- 双向引脚(InOut)需要在 pins.csv 中定义 I/O 控制信号
cycle_width和start_time是最关键的两个配置参数
下一篇将通过 图形界面(GUI) 完整走一遍转换流程,让你对整个操作有直观的感受。
下一篇 :[第二篇:GUI 实操篇 ------ 手把手用图形界面完成第一次转换](#第二篇:GUI 实操篇 —— 手把手用图形界面完成第一次转换)