如何在SytemVerilog中将字符串变量(不是字符串文字)传递给$ dumpfile系统任务?

时间:2019-07-25 07:14:19

标签: verilog simulation system-verilog cadence

我正在运行带有不同参数的仿真,这些参数作为参数传递给测试台。我想为这些运行分别转储单独的VCD。我尝试声明一个字符串变量,并使用传递的参数构造文件名,然后将其传递给$ dumpfile。

    string file_name;
    file_name = "tx_dsp.vcd"
    $dumpfile(file_name);

但是我在IES中遇到以下错误:

  

当前不支持将字符串变量传递给该系统任务/功能

作为一种解决方法,我从命令行定义了文件名,并将其用作$ dumpfile的参数。这是可行的,但是如果测试参数是从测试台内部随机进行的,则无效。

这是模拟器还是SystemVerilog的行为?有解决办法吗?

谢谢。

1 个答案:

答案 0 :(得分:3)

根据the SystemVerilog LRM,这应该是可能的。在21.7.1.1中,它表示以下内容:

dumpfile_task ::=
$dumpfile ( filename ) ;
     

文件名是一个 字符串文字,字符串数据的表达式   类型 ,或包含字符串的整数数据类型,   命名要打开的文件。文件名是可选的,默认为   字符串文字“ dump.vcd”(如果未指定)。

您在示例中使用的是 string数据类型(上述文档中的第6.16节)。优点是字符串的长度是动态的,并且不会发生截断。

另一方面,字符串文字(LRM中的5.9节)的行为类似于压缩数组。如果您的编译器不支持$dumpvars中的字符串数据类型,则可以尝试将file_name定义为字符串文字:

reg[N*8:0] file_name;
file_name = "tx_dsp.vcd"
$dumpfile(file_name);

在这里,N是字符串中的最大字符数。

也请查看LRM中的11.10节。本节描述对字符串文字的操作。