Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SytemVerilog中将字符串变量(不是字符串文字)传递给$dumpfile系统任务?_Verilog_Simulation_System Verilog_Cadence - Fatal编程技术网

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

如何在SytemVerilog中将字符串变量(不是字符串文字)传递给$dumpfile系统任务?,verilog,simulation,system-verilog,cadence,Verilog,Simulation,System Verilog,Cadence,我正在运行模拟,并将不同的参数作为plus args传递到测试台。我想为每个运行转储单独的VCD。我尝试声明一个字符串变量,并使用传递的参数构造文件名,然后将其传递到$dumpfile string file_name; file_name = "tx_dsp.vcd" $dumpfile(file_name); 但我在IES中遇到以下错误: 当前不支持将字符串变量传递到此系统任务/函数 作为一种解决方法,我从命令行定义了文件名,并将其用作$dumpfile的参数。这是

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

    string file_name;
    file_name = "tx_dsp.vcd"
    $dumpfile(file_name);
但我在IES中遇到以下错误:

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

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

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

谢谢。

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

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

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

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

reg[N*8:0] file_name;
file_name = "tx_dsp.vcd"
$dumpfile(file_name);
此处,
N
是字符串中的最大字符数


请参阅LRM中的第11.10节。本节介绍对字符串文字的操作

它起作用了!谢谢我希望使用内置的字符串方法。我将字符串变量复制到packed reg数组,并将其传递到$dumpfile。现在它可以毫无怨言地编译。
reg[N*8:0] file_name;
file_name = "tx_dsp.vcd"
$dumpfile(file_name);