繁体   English   中英

将字符串值传递给SystemVerilog参数

[英]Passing string values to SystemVerilog parameter

我在将字符串值传递给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时它接受一个字符串值?

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

在此处输入图片说明

您没有显示足够的代码来确切知道问题的可能原因。 您不能在其他上下文中使用语句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

if条件推断一个generate块,并且参数在本地范围内。

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

edaplayground上的示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM