vcd(valuechange dump) 是用ascii记录了被选择信号在仿真过程中的变化情况,同时还记录了一些测试向量生成时的仿真信息,例如仿真时间精度等.目前常用的vcd主要有两种格式:
四值格式:记录了信号的数值变化情况,这里的数值仅包含0,1,x,z,不包含相关信号强度的信息;
扩展格式:记录了信号数值变化的所有情况;
本文仅以四值格式vcd为例进行详述.
1 vcd生成常用的系统任务在verilog中尝试用以下的系统任务保存测试向量vcd.
1.1 $dumpfile该任务主要用来指定要生成的vcd文件名.
【示例】
1.2 $dumpvars该任务主要用来指定将那些变量的信息保存到$dumpfile指定的vcd文件中,其格式主要有两种:一种是有参数的,一种是没有参数的.
无参数:
该任务执行后将会将所有的变量变化情况都记录到vcd文件中.
有参数:
该任务的第一个参数用来指定从当前层开始向下记录多少层的模块的信号变化情况,第二个参数指定记录信号开始的模块(例化名).当第一个参数设置为0时将会将指定的层以下的所有层次的信号变化情况都记录下来,这里需要注意,此时的参数0-只是对后续模块参数有效,对于变量参数不影响.
【示例】仅记录top层下的所有信号的变化情况,但是不记录例化在top层下的所有信号的变化情况.
【示例】记录从top层开始的所有模块中信号的变化情况.
【示例】记录特定模块以下所有层信号变化情况和其他模块变量的变化情况
记录了top.mod1及其所有层次的信号的变化情况,同时也记录了top.mod2.net1的变化情况,但是这里需要注意的是,第一个参数的作用对象为模块mod1,不是mod2.net1.
1.3 dumpoff和dumpondumpvars调用后在调用的时间槽的最后开始记录信号的变化情况,当时用dumpoff时记录挂起,此时将会产生一个记录检查点,检查点中记录的所有被选择的变量值为x,当再次使用dumpon后,挂起的记录将会继续进行,而在dumpoff和$dumpon之间的变化将不会进行记录,而是以x作为记录.
【示例】
1.4 $dumpall该任务会在vcd文件中创建一个检查点,其中记录了当前时刻所要记录的信号的值,这里需要注意,vcd记录功能使能后,vcd仅记录随着时间递增有变化的信号,如果相关的信号没有发生变化,那么将不会在对应时段进行记录,但是如果使用dumpall那么不管当前时刻前后相关信号是否发生变化,所有要被记录的信号都会记录到vcd中.当该命令紧跟着dumpvars时,将不会在vcd记录中出现,因为此时该命令的功能与$dumpvars一致,即记录所有要被记录的变量信号的值.
1.5 $dumplimit该任务可以限定vcd文件的大小,其中参数的单位为字节,当记录的vcd文件大小达到限制,将会在文件的末尾插入如下语句表示vcd文件记录的大小已经达到设定值:
1.6 $dumpflush该任务主要用来清理vcd文件占用的系统缓存,当然在清理之前会将缓存中的数据保存到vcd文件中,一般情况下只有仿真结束了才能对vcd文件进行操作,在代码中增加该任务,可以在放真的过程中对vcd文件进行操作,因为该任务在仿真过程中将缓存中的数据更新到vcd中,所以不用等到仿真结束即可查看vcd文件.
2 vcd文件格式vcd文件通常由三部分组成:头信息区(headerinformation),节点信息区(node information),数值变化区(value change).vcd文件的开始部分为头信息区,其中包括vcd产生日期、仿真器版本以及仿真时间精度等信息.节点信息区主要记录了哪些变量信号将被记录在vcd中以及在vcd中对应这些变量信号的标识符(ascii,字符的范围从!到~,在码表中对应的十进制数为33到126).数值变化区主要记录了那些随着仿真时间推移发生变化的变量信号.
注意事项:
vcd中记录的数据是区分大小写的;vcd不会仅记录一个矢量的一部分,也不会记录表达式;记录信号的数据格式vcd中记录的变量一般主要包括标量和矢量,每种类型的信号被记录在vcd中的方式也略有差异.
标量变量一般记录时,标识符与具体对应数值之间没有空格;矢量变量记录时,需要分两种情况:矢量变量每一位对应一个标识符,此时记录的每一位与记录标量变量一样;矢量变量整体对应一个标识符时,此时标识符与对应记录的数值之间有一个空格,记录数值的格式为:;一般矢量数字的格式为右对齐,可能记录数据本身的位数与矢量定义不一致,此时会对数据的高位进行填充处理,一般遵循的高位补充规则如下表所示:
【示例】
从向量中可以看到,信号rio2_refclk_m[3:0]在时刻#5000000、#6500000、#12000000分别为4'b1111,4'b0000,4'b1111.这里大家需要注意矢量变量在vcd中记录的格式.
2.2 vcd中常见的关键字在vcd文件中,常见关键字命令如下表所示:
2.2.1 $comment主要是在vcd中插入一些注释提示信息等.
2.2.2 $date主要记录了vcd是生成的时间.
2.2.3 $enddefinitions标识头信息区和节点信息区的结束.
2.2.4 $scope主要指示被记录变量的作用范围,一般对于以下模块关键字进行范围标志:module,task,function,begin(具有label),fork(具有label).
2.2.5 $timescale指示vcd生成时使用的时间精度.
2.2.6 $upscope指示设计层次结构的变化,主要是从当前层跳转到比当前层更高一级的层次时使用,即表示当前层相关描述已经结束.
2.2.7 $version指示产生vcd的仿真器的名字和版本等信息.
2.2.8 $var指示当前标识符和信息名对应关系.
2.2.9 $dumpall指示当前为一个检查点,记录了所有要被记录的信号的值,而不管该信号是否发生变换.
2.2.10 $dumpoff该命令后所有被记录的信号的值为x,直到遇到$dumpon;
2.2.11 $dumpon表示再次使能了记录变量有效变化到vcd.
2.2.10 $dumpvars其后紧跟着所有要被记录的变量信号的初始值.
【示例】注意示例中各关键字说明
广东省培育智能机器人战略性新兴产业集群行动计划(2021—2025年)
CANopen远程IO耦合器可有效扩展自动化控制范围
电池管理系统的趋势、课题和对策
土壤水分温度盐分PH速测仪的功能及技术参数
ExaGrid的未来计划中没有闪存介质
VCD内部解剖详述
小米6Plus、红米Pro2、小米MIUI9最新消息 :小米6Plus、红米Pro2、小米MIUI9即将发布你最期待谁?
美光向NPE机构转让半导体专利,引发投机性诉讼担忧
全方位测评桑塔纳·浩纳
新Nokia6体验:一部外观平淡但皮实耐用的「诺基亚」
线束连接器端子退针的3个主要原因是什么?
ST爱立信4G LTE芯片可减少50%的电量消耗
索尼KV-S29MHl型图像模糊色调异常
iPhone12或成本提高,但不会加价
使用NVIDIA AI软件套件管理容器化工作负载
WiSA SoundSend斩获CES 2021创新奖
晟矽微电24位高精度MCU—MS32F7223荣获2023年度最佳MCU奖
长虹引领家电智能化 人工智能电视步入3.0时代
华为开发出新的平台沃土数字平台 汇聚众多数字化产业
瑞萨电子推出的RL78家族微控制器