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