将字符串值传递给SystemVerilog参数

将字符串值传递给SystemVerilog参数,verilog,system-verilog,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 但是,由于“define”创建全局宏,因此模拟总是给出“file2.t

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

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

if(ch_ID==1)
  `define FILE_OUT file1.txt
else
  `define FILE_OUT file2.txt 
但是,由于“define”创建全局宏,因此模拟总是给出“file2.txt”输出

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

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

memory #(.FILE_OUT (FILE_OUT)) mem
这给了我一个错误——“FILE_OUT”应该是一个常量值

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

有人能帮我解决这个问题吗


您没有显示足够的代码,无法确切知道问题的原因。您不能在没有其他上下文的情况下使用语句文件\u 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

您没有显示足够的代码,无法确切了解问题的原因。您不能在没有其他上下文的情况下使用语句文件\u 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

如果
条件是推断生成块,并且参数的作用域是局部的

if(ch_ID==1)
   parameter FILE_OUT= "file1.txt"; // scope: genblk1.FILE_OUT
else
   parameter FILE_OUT= "file2.txt"; // scope: genblk2.FILE_OUT
// parent scope: genblk1.FILE_OUT and genblk2.FILE_OUT exist, not FILE_OUT
解决方案,内联操作:

parameter FILE_OUT= (ch_ID==1) ? "file1.txt" : "file2.txt";
// FILE_OUT exists in the module's scope with the desired name

如果条件是推断生成块,并且参数的作用域是局部的,
示例

if(ch_ID==1)
   parameter FILE_OUT= "file1.txt"; // scope: genblk1.FILE_OUT
else
   parameter FILE_OUT= "file2.txt"; // scope: genblk2.FILE_OUT
// parent scope: genblk1.FILE_OUT and genblk2.FILE_OUT exist, not FILE_OUT
解决方案,内联操作:

parameter FILE_OUT= (ch_ID==1) ? "file1.txt" : "file2.txt";
// FILE_OUT exists in the module's scope with the desired name

我正在寻找的示例!不幸的是,这在模拟中对我不起作用。我得到一个错误,即localparam不是我所寻找的常量!不幸的是,这在模拟中对我不起作用。我得到一个错误,即localparam不是常量