2016-07-18 79 views
2

嗨,我很努力讓我的頭部環繞接口...起初他們似乎很簡單,但一旦我開始使用參數化的接口,我只是不能將這些部分落實到位。系統verilog參數化接口,如何

說我有接口

interface my_if #( 
    parameter H_WIDTH = 64, 
    parameter L_WIDTH = 8 
); 
logic [H_WIDTH -1:0] a; 
logic [L_WIDTH -1:0] b; 
logic     ready; 
modport in (input a, input b, output valid); 
modport out(output a, output b, input ready); 
endinterface; 

,我想用它作爲我的模塊中的端口

module my_module (
logic input clk, 
logic input rst, 
my_if.in my_if 
); 

首先,我不明白怎麼設置我的iterface 我的參數已嘗試以下代替以上內容:

my_if(#.H_WIDTH((64), .L_WIDTH(64)) my_if() 

my_if(#.H_WIDTH((64), .L_WIDTH(64)).in my_if() 

不編譯...

但我怎麼然後設置我的接口的參數? PLZ幫助我搜索了大量的例子,但它們都非常基礎。

BTW的解決方案,具有合成,因爲這不是驗證

回答

2

您設置interface實例的參數正是你所設置的參數module以同樣的方式;當它被實例化時。沒有語法允許您設置接口端口的參數。參數值基於實例化模塊時連接到端口的接口實例。

當您正在合成的頂級模塊具有接口端口時,會出現問題。它與頂層模塊具有需要覆蓋的參數時類似。您需要檢查您正在使用的工具的綜合手冊,瞭解如何手動覆蓋參數。

3

你快到了!在您的頂層模塊(你實例接口),你只需要改變:

my_if(#.H_WIDTH((64), .L_WIDTH(64)) my_if() 

my_if # (.H_WIDTH(64), .L_WIDTH(64)) my_if() 

,你應該是好去。 IEEE 1800-2012 LRM有關於該主題的部分(25.8參數化接口),您應該繼續。

+0

實際上 模塊my_module( 邏輯輸入CLK, 邏輯輸入首先, my_if.in my_if ); 是正確的解決方案 – rasmus

1

實際上,這是在第一位置

module my_module (
logic input clk, 
logic input rst, 
my_if.in my_if 
); 

此 模塊my_module( 邏輯輸入端CLK, 邏輯輸入RST, my_if#(.H_WIDTH(64),.L_WIDTH正確的方式(64 ))my_if() ); 顯然不合法。

參數設置在接口連接到另一個模塊的地方! my_if#(.H_WIDTH(64),.L_WIDTH(64))my_if_()被使用。像這樣

module top (
input clk, 
input rst 
); 

my_if # (.H_WIDTH(64), .L_WIDTH(64)) temp(); 

my_module inst_1 
(
clk   (clk), 
rst   (rst), 
my_if   (temp_if) 
); 


my_module inst_2 
(
clk   (clk), 
rst   (rst), 
my_if   (temp_if) 
); 
endmodule 
1

在Synopsys DC流中,建議創建一個簡化的SystemVerilog包裝來覆蓋接口和模塊參數。

如果你有機會獲得Synopsys的文檔看

HDL編譯器的SystemVerilog用戶指南 自下而上分層精