Ich bin neu im Systemverilog und versuche, eine Systemverilog-Testbench zu erstellen. Ich habe einen Prüfling, der über einen Multiplexer mit einem von zwei externen Modulen verbunden werden sollte. Ich möchte die Verbindung während der Simulation wechseln und ich möchte Systemverilog-Schnittstellen für die Verbindung zwischen dem DUT und dem Multiplexer sowie die Verbindung zwischen Multiplexer und den beiden externen Modulen verwenden. Die Signale in der Schnittstelle sind bidirektional.SystemVerilog Schnittstellenmultiplexer
Ich habe Schwierigkeiten beim Schreiben des Multiplexers. Ich bekomme einen Fehler für die aktuelle Implementierung, dass die LHS des Ausdrucks keine Verbindung sein kann. Wenn ich den Typ in der Schnittstelle zu Logik ändere, bekomme ich einen Fehler, dass dies bei bidirektionalen Signalen nicht möglich ist. Ich habe versucht, google, aber ich habe keine Tutorials zum Verbinden von Schnittstelle zu Schnittstelle gefunden. Ist das nicht möglich? Oder gibt es eine bessere Art zu tun, was ich versuche zu tun?
Bisher habe ich folgendes:
interface flash_connect_interface;
wire interface_f_cle;
wire interface_f_ale;
endinterface: flash_connect_interface
module flash_connect_testbench_top;
[...]
// Interfaces
flash_connect_interface flash_connect_interface_i0();
flash_connect_interface flash_connect_interface_i1();
flash_connect_interface flash_connect_interface_i2();
// Connecting DUT to interface
flash_connect flash_connect_i0(
.flash_connect_interface_i(flash_connect_interface_i0),
);
// Multiplexer
flash_connect_mux mux1(
.flash_connect_interface_i_0(flash_connect_interface_i0),
.flash_connect_interface_i_1(flash_connect_interface_i1),
.flash_connect_interface_i_2(flash_connect_interface_i2),
.select(sel)
);
nand_model nand_model0 (
.Cle (flash_connect_interface_i1.interface_f_cle),
.Ale (flash_connect_interface_i1.interface_f_ale),
);
nand_model nand_model1 (
.Cle (flash_connect_interface_i2.interface_f_cle),
.Ale (flash_connect_interface_i2.interface_f_ale),
);
[...]
endmodule // end testbench_top
module flash_connect_mux(
flash_connect_interface flash_connect_interface_i_0,
flash_connect_interface flash_connect_interface_i_1,
flash_connect_interface flash_connect_interface_i_2,
input select
);
always_comb begin
// *** Here is the problem ***
if (select == 1'b0) flash_connect_interface_i_1 = flash_connect_interface_i_0;
else flash_connect_interface_i_2 = flash_connect_interface_i_0;
end
endmodule
Vielen Dank für Ihren Kommentar, aber sich leider der Code spielt keine vollständig tun, was ich will: alle Signale bidicrectional sind. In meiner Simulation kann ich folgendes sehen: Für select = 0 werden alle Änderungen an flash_connect_interface_i_1.interface_f_cle an flash_connect_interface_i_0.interface_f_cle übergeben. Aber nicht umgekehrt, die Verbindung ist nicht mehr bidirektional. – Antonio
Im Falle von bidirektionalen Signalen gibt es allgemein qualifizierende Signale, die zum Auslösen der Änderung der Busrichtung verwendet werden. Wir könnten das im Modell auch dazu verwenden, ähnliche Dinge zu tun. –
Meinen Sie, diese Funktionalität in den Multiplexer zu integrieren? Etwas wie: if (dir = 0) assign interface_i_1.interface_f_cle = interface_i_0.interface_f_cle sonst assign interface_i_0.interface_f_cle = interface_i_1.interface_f_cle – Antonio