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?
Ich stimme dieser Lösung zu. – Robby
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