*前言: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