簡體   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