200行Perl 语言实现 VCD 转ATE测试pattern ---VCD的解析

4 篇文章 0 订阅
2 篇文章 0 订阅

*前言:VCD(Value Change Dump),VCD和DVD没啥关系。是IC设计仿真时,由EDA仿真软件产生的一种波形存储文件。如下代码。*

$date Wed Oct 20 15:04:11 2021 $end
$version libsigrok 0.5.2 $end
$comment
  Acquisition with 16/16 channels at 200 MHz
$end
$timescale 1 ns $end
$scope module libsigrok $end
$var wire 3 $1 BS [2:0] $end
$var wire 1 ! 0 $end
$var wire 1 " 1 $end
$var wire 1 # 2 $end
$var wire 1 $ 3 $end
$var wire 1 % 4 $end
$var wire 1 & 5 $end
$var wire 1 ' 6 $end
$var wire 1 ( 7 $end
$var wire 1 ) 8 $end
$var wire 1 * 9 $end
$var wire 1 + 10 $end
$var wire 1 , 11 $end
$var wire 1 - 12 $end
$var wire 1 . 13 $end
$var wire 1 / 14 $end
$var wire 1 0 15 $end
$upscope $end
$enddefinitions $end
#0 1! 1" 1# 0$ 0% 1& 1' 0( 0) 0* 0+ 0, 0- 0. 0/ 00
#2499371545 0'
#2499372810 
0#
b000 $1
#2499998855 0!
#2500004690 1$
#2500009360 0" 0$
#2500014030 1$
#2500018695 1"
#2500018700 0$
#2500023370 1$
#2500028040 0" 0$
#2500032710 1$
#2500037380 0$
#2500042045 1$
#2500046715 1" 0$
#2500051380 1$
#2500056050 0" 0$
#2500060720 1$
#2500065385 1"
#2500065390 0$

代码块里面就是vcd 文档节选。vcd的产生方法有好几种。可以从 $version 后面信息去判断。1,libsigrok 0.5.2,是通过逻辑分析仪抓取的测试波形,通过配套的软件输出的vcd。2,ModelSim Version 6.6,是通过modelsim软件仿真输出的vcd。3,Synopsys VCS version N-2017.12-SP2_Full64 ,是 Synopsys 的VCS软件输出的vcd文档。不同的软件输出的vcd文档,格式略有不同。

VCD 文档 整体包含了三个部分。header section , variable definition section,value change section。

VCD关键字以$开头(但是变量标识符也可以以$开头)。通常,每个关键字都以一个$end关键字结束。

header section

$date Wed Oct 20 15:04:11 2021 $end
$version libsigrok 0.5.2 $end
$comment
  Acquisition with 16/16 channels at 200 MHz
$end
$timescale 1 ns $end
$scope module libsigrok $end

header section 部分会记录文件仿真日期和仿真信息,还会记录到仿真时的时间精度。

$date :VCD是生成的时间.

$version:仿真软件的版本信息。

$comment :注释指令,这里是插入了逻辑分析仪采样时的速率。

$timescale: 软件仿真生成VCD使用的时间精度。

variable definition section

$scope module libsigrok $end
$var wire 3 $1 BS [2:0] $end
$var wire 1 ! 0 $end
$var wire 1 " 1 $end
$var wire 1 # 2 $end
$var wire 1 $ 3 $end
$var wire 1 % 4 $end
$var wire 1 & 5 $end
$var wire 1 ' 6 $end
$var wire 1 ( 7 $end
$var wire 1 ) 8 $end
$var wire 1 * 9 $end
$var wire 1 + 10 $end
$var wire 1 , 11 $end
$var wire 1 - 12 $end
$var wire 1 . 13 $end
$var wire 1 / 14 $end
$var wire 1 0 15 $end
$upscope $end
$enddefinitions $end

$scope :指示被记录变量的作用范围。

$var :指示当前标识符和信息名对应关系.这里就是定义,信号的位宽,标识符,和对应的信号名字。因为是逻辑分析仪抓取的型。所有的信号都以通道数字0 -15 标出。未有信号名字。由VCS 产生的 $var wire 1 7 D0P $end $var wire 1 8 D0N $end 。

$upscope :指示设计层次结构的变化

$enddefinitions :标识头信息区和节点信息区的结束。

value change section:

#0 1! 1" 1# 0$ 0% 1& 1' 0( 0) 0* 0+ 0, 0- 0. 0/ 00
#2499371545 0'
#2499372810 
0#
b000 $1
#2499998855 0!
#2500004690 1$
#2500009360 0" 0$
#2500014030 1$
#2500018695 1"
#2500018700 0$
#2500023370 1$
#2500028040 0" 0$
#2500032710 1$
#2500037380 0$
#2500042045 1$
#2500046715 1" 0$
#2500051380 1$
#2500056050 0" 0$
#2500060720 1$
#2500065385 1"
#2500065390 0$

按时间顺序变化的值都会被vcd文档所记录。

# 表示变化时刻。 0或1表示信号变化的值。后面紧跟的是信号的标识符。表示那个信号进行了变化。#0 表示在0时刻时,后面是0-15 信号通道的初始化值。 #2499371545 0'表示在2499371545nS 时刻时信号 6 逻辑由1变成了0。

对于向量(多位)信号,格式是用字母'b'或'b'表示的信号 b000 $1

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值