2016-12-15 2 views
0

Ich möchte die folgende über eine Schnittstelle, wie folgendSynthetisieren SV inteface dereferencing Ports

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 

Eine Instanz der Schnittstelle definiert synthetisieren, ist in meiner Top-Modul deklarieren, wie folgend

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

I dann verbinden Sie den Schnittstellenanschluss mit meinem Modul

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

Ich habe einen Fehler von Design co mpiler während der Ausarbeitung (Analyse lief gut)

Kann jemand einen Workaround vorschlagen? Ich will nicht die Portkarte des DUT modifizieren, die ein Vermächtnis Verilog 2001 Code ist

Simulation mit NCVLOG funktioniert gut, obwohl dank viel

Antwort

0

Die modport Informationen sollten in der Verbindung nicht angegeben werden. Der von Ihnen verwendete Modport sollte in der Port-Deklaration des Moduls über die Schnittstelle deklariert werden.

Wenn Sie Ihre Schnittstelle in dem Modul deklarieren, in dem Sie sie verwenden möchten, müssen Sie nicht jeden Port angeben.

Ich denke, dass Sie den Code ändern müssen, damit er DC entspricht. Aber es ist für das Beste, da die Verwendung von Schnittstellen Ihren Code kürzer und klarer macht.

FYI, ein kurzes Beispiel der Schnittstellenauslastung:

Schnittstelle Erklärung

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

Quelle Modul Decl

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

Dest Modul Decl

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

zu p Modul

module top(); 

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

Ich benutze dies mit Design Compiler ohne Probleme bisher.

Verwandte Themen