Dumping VPD文件
文章参考:《VCS/VCSi User Guide》前言
可使用如下方式产生一个VPD文件:- 使用系统任务——用于Verilog设计;
- 使用UCLI——用于VHDL、Verilog和混合设计;
- 使用DVE
一、使用系统任务?
VCS提供如下的Verilog系统任务:
- 是否使能Dumping;
- 覆盖VPD文件;
- Dump多维度队列和内存;
- 捕获增量周期信息
1. 是否使能Dumping
可以使用Verilog系统任务$vcdpluson和 $vcdplusoff控制是否使用VPD格式dumping仿真历史。
注意:默认的VPD文件名为vcdplus.vpd。但我们可使用 $vcdplusfile替换默认文件名。
$vcdpluson语法格式:
$vcdpluson (level |"LVL=integer", scope*, signal*);
level | LVL=integer_variable :
指定要下降以记录信号值更改的层次结构作用域级别数(如果是0,将会把所有作用域实例记录到层次结构的末尾;默认值为0)。
可使用“LVL=integer_variable”指定层次结构作用域级别的数。在本例中,integer_variable 指定要下降的级别以记录信号值的变化。
scope:
指定记录信号值更改的作用域名称(默认为全部)。
signal:
指定记录信号值变化的信号名称(默认为全部)。
注意:在语法中,* 表示参数可以有一个包含多个值的列表(对于作用域或信号)。
$vcdplusoff语法格式:
$vcdplusoff (level |"LVL=integer", scope*, signal*);
例子:
`timescale 1ns/1ns
module test();
...
initial
begin
$vcdpluson; // Enable Dumpling
$vcdplusoff(test.risc1.alu1); // Does not dump signal
// value
...
end
...
endmodule
上面的示例,将这个设计使能dumping。但通过使用$vcdplusoff将实例alu1以及低于alu1层次结构的实例们取消使能dumping。
注意:如果多个 $vcdpluson 命令导致给定信号被保存,则该信号将继续保存,直到将等效数量的 $vcdplusoff 命令应用于该信号。
2. 覆盖VPD文件名
$vcdpluson默认将仿真历史记录在vcdplus.vpd文件中。但我们可以通过使用系统任务 $vcdplusfile覆盖默认文件名:
$vcdplusfile ("filename.vpd");
$vcdpluson ();
注意:在使用$vcdplusfile指定文件名后,必须在其之后使用 $vcdpluson(),从而实现覆盖默认vpd文件名。
例如:
`timescale 1ns/1ns
module test();
...
initial
begin
$vcdplusfile("my.vpd); // Dumps signal value changes
// in my.vpd
$vcdpluson; // Enable Dumping
...
end
...
endmodule
以上示例中,使用my.vpd替代默认的vcdplus.vpd文件,将真个设计的信号变量改变值记录到my.vpd文件中。
3. Dump多维度队列和内存
本节介绍提供对多维数组 (MDA) 的可见性的系统任务和功能。
对于可见的MDA数据具有以下两种方法:
- 方法1。使用系统任务 $vcdplusmemon和 $vcdplusmemoff,从而在每次 MDA 有数据更改时都会记录数据。
注意:我们应该使用编译选项 +memcbk 来使用这些系统任务。。 - 方法2。使用系统函数 $vcdplusmemorydump,从而仅在调用任务时存储数据。