我正在运行带有不同参数的仿真,这些参数作为参数传递给测试台。我想为这些运行分别转储单独的VCD。我尝试声明一个字符串变量,并使用传递的参数构造文件名,然后将其传递给$ dumpfile。
string file_name;
file_name = "tx_dsp.vcd"
$dumpfile(file_name);
但是我在IES中遇到以下错误:
当前不支持将字符串变量传递给该系统任务/功能
作为一种解决方法,我从命令行定义了文件名,并将其用作$ dumpfile的参数。这是可行的,但是如果测试参数是从测试台内部随机进行的,则无效。
这是模拟器还是SystemVerilog的行为?有解决办法吗?
谢谢。
答案 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节。本节描述对字符串文字的操作。