将字符串值传递给SystemVerilog参数

dmm*_*dmm 1 verilog system-verilog

我在将字符串值传递给SystemVerilog中的泛型参数时遇到问题.模块实例化如下所示.内存将一些值写入FILE_OUT,这是一个通用参数.我需要为不同的内存实例生成两个不同的文件 - "file1.txt"和"file2.txt".

最初我尝试使用`define指令:

if(ch_ID==1)
  `define FILE_OUT file1.txt
else
  `define FILE_OUT file2.txt 
Run Code Online (Sandbox Code Playgroud)

但是,由于`define创建了全局宏,因此模拟总是给出输出"file2.txt"

然后我尝试将文件名作为参数传递

if(ch_ID==1)
  parameter FILE_OUT= "file1.txt"
else
  parameter FILE_OUT= "file2.txt"

memory #(.FILE_OUT (FILE_OUT)) mem
Run Code Online (Sandbox Code Playgroud)

这给了我错误 - "FILE_OUT"应该是一个常数值".

SV不支持字符串值作为参数吗?如果没有,为什么我在使用时接受字符串值`define

有人可以帮我解决这个问题吗?

在此输入图像描述

dav*_*_59 6

您没有显示足够的代码来确切地知道问题的原因.你不能有语句FILE_OUT ="string"l没有其他一些上下文.你应该做的是

module #(int ch_ID) component1(...);

localparam string FILE_OUT = $sformatf("file%0d.txt",ch_ID);

memory #(.FILE_OUT (FILE_OUT)) m1(...);

endmodule
Run Code Online (Sandbox Code Playgroud)