2016-12-15 5 views
0

Iは合成SVのintefaceを参照解除ポート

smb_if #(.ADDR_SZ(8), .SLAVE_NUM(8)) i_smbif(); 

Iを以下のように私のトップモジュールで宣言され

interface smb_if #(
    parameter shortint ADDR_SZ = 8, 
    parameter shortint DATA_SZ = 8, 
    parameter shortint SLAVE_NUM = 8 
); 
    logic [DATA_SZ-1:0] wrdata; 
    logic [DATA_SZ-1:0] rddata [SLAVE_NUM-1:0]; 
    logic [ADDR_SZ-1:0] rdaddr; 
    logic [ADDR_SZ-1:0] wraddr; 
    logic     wr;     // =1 means 'write, =0 means 'read 
    logic     wrcmd;    // 
    logic     rd;     // =1 means 'write, =0 means 'read 
    logic     rdcmd;    // =1 means 'write, =0 means 'read 
    logic [ADDR_SZ-1:0] rdaddr_old; 
    logic     clrcmd; 
    logic [SLAVE_NUM-1:0] sel ; // one-hot; =1 means 'selected' 
    modport master (
    input rddata, output wrdata, output rdaddr, output rdaddr_old, output clrcmd, output wraddr, 
    output wr, output wrcmd, output rd, output rdcmd, output sel 
); 
    modport slave (
    output rddata, input wrdata, input rdaddr, input rdaddr_old, input clrcmd, input wraddr, 
    input wr, input wrcmd, input rd, input rdcmd, input sel 
); 

endinterface:smb_if 

インタフェースのインスタンスを以下のように定義されたインターフェースを使用して、以下の合成たいインターフェイスポートを私のモジュールに接続してください

.smb_page_sel  (i_smbif.master.sel    ), // Page selection 
.smb_addw   (i_smbif.master.wraddr   ), // data address for write 
.smb_dataw   (i_smbif.master.wrdata   ), // data to be written on a write cycle 
.smb_wr    (i_smbif.master.wr    ), // from SMB top: what diff with wr? 
.smb_wrcmd   (i_smbif.master.wrcmd    ), // register file write command 
.smb_addptr   (i_smbif.master.rdaddr   ), // data address for read 
.smb_rd    (i_smbif.master.rd), 
// etc. 

私はデザインco精緻化中のmpiler(解析は正常に実行されました)

誰かが回避策を提案できますか?私は おかげでずっと

答えて

0

modport情報は、接続で指定すべきではないもののNCVLOGと2001コード

シミュレーションは、正常に動作し、レガシーのverilogにあるDUTのポートマップを変更する必要はありません。 使用するmodportは、インターフェイスを使用してモジュールのポート宣言で宣言する必要があります。

インターフェイスを使用するモジュールで宣言する場合は、各ポートを指定する必要はありません。

DCに準拠するようにコードを変更する必要があると思います。しかし、インターフェイスを使用することで、コードを短く、より明確にすることが最善です。

FYI、インタフェースの利用の簡単な例:

インターフェイスに

module destination(
    Channel.dst myChannel_in 
); 
    //Do stuff 
endmodule 

供述

module source(
    Channel.src myChannel_out 
); 
    //Do stuff 
endmodule 

Destはモジュール供述宣言

interface channel(
    logic request; 
    logic acknowledge; 
    modport src (output request, input acknowledge); 
    modport dst (input request, output acknowledge); 
endinterface 

ソース・モジュールpモジュール

module top(); 

    Channel myChannel(); 
    source u_source(
    .myChannel_out(myChannel) 
); 
    destination u_destination(
    .myChannel_in(myChannel) 
); 
endmodule 

これはこれまでのところ問題なしでこれをDesign Compilerで使用しています。

関連する問題