2016-12-15 22 views
0

我想合成使用被定義爲以下合成SV inteface提領港口

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_if #(.ADDR_SZ(8), .SLAVE_NUM(8)) i_smbif(); 

我下面那麼接口端口連接到我的模塊

.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. 

我從設計共同的錯誤製作過程中的mpiler(分析確實運行良好)

任何人都可以提出解決方法嗎?我不想改變它是一個傳統的Verilog代碼2001

模擬與NCVLOG工作正常,但由於 多

回答

0

的modport信息不能在連接中指定的DUT的端口映射。 您使用的modport應在使用該接口的模塊的端口聲明中聲明。

如果你在你想要使用它的模塊中聲明你的接口,那麼你不必指定每個端口。我認爲你將不得不修改代碼以使其符合DC。但是,最好的方式是使用界面使您的代碼更加簡潔。

FYI,接口利用率的一個簡單的例子:

接口聲明

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

源模塊DECL

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

目的地模塊DECL

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

要p模塊

module top(); 

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

我在Design Compiler中使用了這個功能,目前爲止沒有任何問題。