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



我正在运行模拟,使用作为plusargs传递给测试平台的不同参数。我想为每次运行转储一个单独的 VCD 文件。我尝试声明一个字符串变量并使用传递的参数构造文件名,并将其传递给$dumpfile

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

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

当前不支持将字符串变量传递给此系统任务/函数

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

这是模拟器还是系统Verilog的行为?

根据SystemVerilog LRM,这应该是可能的。在 21.7.1.1 中,它说:

dumpfile_task ::=
$dumpfile ( filename ) ;

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

您在示例中使用了字符串数据类型(上述文档中的第 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节。本节介绍对字符串文本的操作。

最新更新