2017-02-27 4 views
1

Ich habe eine parametrisierte Schnittstelle mit Clock-Eingang. Zum Beispiel:SystemVerilog Interface Array mit verschiedenen Parametern

interface itf # (PARAM1 = 16, PARAM2 = 8)(input logic clk); 

Diese Schnittstelle hat einen Modport namens "Slave".

Mein Modul nimmt ein Array dieser Schnittstelle als Eingang (Modport "Slave").

module MyModule #(NB_ITFS = 4)(... itf.slave itfs[NB_ITFS]...); 

In einem Prüfstand Modul für MyModule, würde ich einen generischen Code wie die unterschiedlichen Werte von NB_ITFS testen kann.

Frage: Wie erstelle ich mein Array von Schnittstellen für MyModule Instanciation (unter Berücksichtigung der Tatsache, dass Elemente verschiedene Parameter haben)?

Zum Beispiel habe ich versucht, eine generieren zu verwenden Aussage:

module testbench() 
... 
generate 
    genvar i; 
    for (i = 0; i < NB_ITFS; i++) 
    begin : interfaces 
     itf #(.PARAM1(PARAM1_TABLE[i]), 
       .PARAM2(PARAM2_TABLE[i])) itf_inst (.clk(clk)); 
    end 
endgenerate 
... 
endmodule 

Aber in diesem Fall ist die Schnittstelle Array interfaces[xxx].itf_inst und die Instanciation (und .slave wenn ich den „Slave“ modport auswählen möchten) von MyModule mit interfaces[NB_ITFS].itf_inst.slave löst einen Fehler aus.

Ich habe auch versucht, ohne Erfolg: - eine allgemeine Definition itf itf_inst[NB_ITFS] (.clk(clk)); und versucht, die Parameter mit defparam innerhalb eines generieren Block zu ändern - „virtuelle Schnittstelle“ -Funktion

Jeder Vorschlag?

Antwort

0

Wie wäre Ihre generate in eine andere Schnittstelle setzen:

interface itfa #(NB_ITFS = 4)(input logic clk); 
    ... 
    generate 
    genvar i; 
    for (i = 0; i < 4; i++) 
    begin : interfaces 
     itf #(.PARAM1(i), 
      .PARAM2(i)) itf_inst (.clk(clk)); 
    end 
    endgenerate 
    ... 
endinterface 

und dann mit, dass die Schnittstelle zum MyModule:

module MyModule #(NB_ITFS = 4)(itfa itfs); 
    ... 
endmodule 

Dann können Sie die externe Schnittstelle instanziiert (itfa) und verbinden Sie es zu einer Instanz von MyModule in der üblichen Weise:

module testbench; 
    ... 
    logic clk; 
    ... 
    itfa #(4) itfa_inst (.clk(clk)); 
    ... 
    MyModule #(4) MyModule0 (.itfs(itfa_inst)); 
    ... 
endmodule 

https://www.edaplayground.com/x/254C

+0

Ich stimme dieser Lösung zu. – Robby

+0

Haben Sie noch eine Idee, itf modports in itfa zu implementieren? Ich würde gerne einen "Slave" Modport für itfa erstellen, welches das Array von itf_inst "slave" Modports ist ... – Robby

Verwandte Themen