簡體   English   中英

Systemverilog:在宏實例化模塊時,有沒有辦法使信號唯一?

[英]Systemverilog: Is there a way to make signal unique in macro instantiating a module?

我有一個這樣的宏:

`define BOB_STAGE(_BUS_IN, _BUS_OUT) \
   bob_module auto_``_BUS_OUT``_bob_module ( .bus_in(_BUS_IN), .bus_out(_BUS_OUT) );

(注意_BUS_OUT成為實例名稱的一部分,以創建唯一的實例。)

因此,這些信號在各處使用,並將連接的信號輸入為1信號輸出,但輸出信號被索引。

使用示例:

`BOB_STAGE( {A,B,C,D}, OUT[1] );

問題是concat {}和index []都弄亂了模塊實例名稱中的自動分配。

我想解決此問題,而無需在信號名稱中添加其他輸入,並且在宏外部也沒有臨時信號。

是否有某種方法可以將帶有索引的輸出信號名稱轉換為唯一的字符串...例如使用$ sformatf,然后用下划線替換索引括號?

還是有其他方法可以使信號名稱唯一化但保持其合法性? 類似atoi()使其基於信號名稱成為唯一數字嗎?

您可以轉義名稱以允許在標識符中使用符號

`define BOB_STAGE(_BUS_IN, _BUS_OUT) \
   bob_module \auto_``_BUS_OUT``_bob_module ( .bus_in(_BUS_IN), .bus_out(_BUS_OUT) );

`BOB_STAGE( {A,B,C,D}, OUT[1] );

會變成

bob_module \auto_OUT[1]_bob_module ( .bus_in(_BUS_IN), .bus_out(_BUS_OUT) );

這實際上是您在SystemVerilog中創建標識符所能做的限制。

您可以在宏中再添加一個參數來解決該問題。

您的宏可能看起來像這樣:

`define BOB_STAGE(_BUS_IN, _BUS_OUT, _NO) \
   bob_module auto_``_BUS_OUT``_``_NO``_bob_module ( .bus_in(_BUS_IN), .bus_out(_BUS_OUT[_NO]) );

現在您的宏用法將如下所示:

`BOB_STAGE( {A,B,C,D}, OUT, 1 );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM