1

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

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

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

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

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

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

谢谢。

4

1 回答 1

3

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

dumpfile_task ::=
$dumpfile ( filename ) ;

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

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

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

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

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

另请查看 LRM 中的第 11.10 节。本节介绍对字符串文字的操作。

于 2019-07-25T09:32:18.487 回答