Es tut mir leid, diese Frage zu stellen, die meiner Meinung nach sehr grundlegend ist, aber ich kann keine Antwort finden. Das folgende Beispiel funktioniert eindeutig. Aber ich möchte die Deklaration der Drähte ay und by weglassen.
module sub(output reg y);
endmodule
module top(input wire sel,output wire x);
wire ay,by;
sub a(.y(ay));
sub b(.y(by));
assign x= sel ?ay:by;
endmodule
Module haben einen Namen. Kann man deren Ports direkt ansprechen? Wenn ja, wie ist die korrekte Syntax? Das funktioniert nicht (in Quartus)
module sub(output reg y);
endmodule
module top(input wire sel,output wire x);
sub a();
sub b();
assign x= sel ?a.y:b.y;
endmodule
Nein, das ist nicht möglich.
Die module.wire
Syntax funktioniert in einigen Systemen, aber alle Synthesewerkzeuge erfordern, dass Sie die Ports richtig verwenden.
Drahtdeklarationen können weggelassen werden und in den meisten Fällen wird ein 1 Bit breiter Draht impliziert. Dies wird im Allgemeinen als schlechte Vorgehensweise angesehen, da Sie am Ende zu Breitenabweichungen kommen, wenn Sie vergessen, diese breiter als 1 Bit zu deklarieren.
module sub(output reg y);
endmodule
module top(input wire sel,output wire x);
//wire ay,by; No wire declaration
sub a(.y(ay)); //1 bit wide wire implied
sub b(.y(by));
assign x= sel ?ay:by;
endmodule
Unverbundene Ausgänge werden durch Synthese wegoptimiert.
Fabio Dalla Libera
pjc50