Nach meinen Kommentaren, scheint es viele Kompilierungsfehlern im angegebenen Code. Dennoch habe ich versucht, sie nach meinem Verständnis zu lösen.
Um unterschiedlicheDATA_WIDTH
Instanzen zu erstellen, muss die Schnittstelle front_interface
Informationen über DATA_WIDTH
in verschiedenen Instanzen erhalten. So, Hinzufügen eines Arrays von Parametern zu front_interface
Einheit. Die Größe dieses Arrays wird durch NO_OF_IN_PORTS
Parameter bestimmt.
Weiter müssen Sie generate
Block zum Erstellen mehrere Instanzen von front_port
verwenden. Jede Instanz nimmt ein Element aus dem Parameterarray der front_interface
Entität auf.
Ich habe folgenden Code erstellt, die die Standardwerte überschreiben von DATA_WIDTH und erzeugen Instanzen mit einzigartigen Datenbreiten.
interface front_port #(parameter DATA_WIDTH = 4);
logic [DATA_WIDTH - 1 : 0] data;
logic acknowledge;
modport f_interface(input data, output acknowledge);
initial
begin : DEBUG_DISPLAY
$display("DATA_WIDTH for %m is %0d",DATA_WIDTH);
end
endinterface
// Use array DATA_WIDTH here, for varying data widths.
interface front_interface #(parameter NO_OF_IN_PORTS = 3, int DATA_WIDTH[NO_OF_IN_PORTS] = '{1,2,3});
genvar i;
generate // generate block for multiple instances
begin : MULTIPLE_INSTANCES
for(i=0;i<NO_OF_IN_PORTS;i++)
begin : UNIQUE_DATA_WIDTH
// Pick up each element from array to create varying DATA_WIDTH instances
front_port #(.DATA_WIDTH(DATA_WIDTH[i])) front_ports();
end
end
endgenerate
endinterface
module A #(parameter NO_OF_IN_PORTS = 3)
(front_interface fi_if);
endmodule
module testbench;
// Override DATA_WIDTH here for different instances
front_interface #(.NO_OF_IN_PORTS(3), .DATA_WIDTH('{4,5,6})) my_front_interface();
A #(.NO_OF_IN_PORTS(3)) a1(my_front_interface);
endmodule
Output:
DATA_WIDTH for testbench.my_front_interface.MULTIPLE_INSTANCES.UNIQUE_DATA_WIDTH[0].front_ports.DEBUG_DISPLAY is 4
DATA_WIDTH for testbench.my_front_interface.MULTIPLE_INSTANCES.UNIQUE_DATA_WIDTH[1].front_ports.DEBUG_DISPLAY is 5
DATA_WIDTH for testbench.my_front_interface.MULTIPLE_INSTANCES.UNIQUE_DATA_WIDTH[2].front_ports.DEBUG_DISPLAY is 6
Siehe this page für in einer Entität Array von Parametern übergeben. Auch SystemVerilog IEEE 1800-2012 Abschnitt 27 ist hilfreich für generate
Blöcke.
Sie sind sicher, über die Verwendung von geschachtelte Module? Beim Instanziieren des Moduls 'A' ist das Eingabeargument' my_front_interface' vom Typ 'front_interface', aber die Instanz' my_front_interface' ist vom Typ 'front_interface'. Die Moduldeklaration könnte wie folgt aussehen:' modul A ... (front_interface fr_if) '. – sharvil111
In Bezug auf die Variable 'DATA_WIDTH' brauchen Sie nicht einfach ein Array von Instanzen zu erstellen, sondern einen' generate' Block, um mehrere Instanzen mit variierenden Datenbreiten zu erstellen. Siehe [diesen Link] (http://www.asic-world.com/verilog/verilog2k2.html) und [diese Frage] (http://stackoverflow.com/questions/17734329/system-verilog-parameters-in- generate-block) für 'generate' Blockbeispiel. – sharvil111
Ok. Vielen Dank. Wenn das der Fall ist, wie ordne ich die erzeugten Instanzen mit variierendem Datenbreitenparameter Front_interface zu? –