如何在SytemVerilog中将字符串变量(不是字符串文字)传递给$dumpfile系统任务?
我正在运行模拟,并将不同的参数作为plus args传递到测试台。我想为每个运行转储单独的VCD。我尝试声明一个字符串变量,并使用传递的参数构造文件名,然后将其传递到$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的参数。这是
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);