我正在运行模拟,使用作为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节。本节介绍对字符串文本的操作。