Verilog: Ist eine Verbindung ohne Kabel möglich?

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

Antworten (2)

Nein, das ist nicht möglich.

Die module.wireSyntax funktioniert in einigen Systemen, aber alle Synthesewerkzeuge erfordern, dass Sie die Ports richtig verwenden.

Danke. Wofür werden die Instanznamen dann verwendet? nur für Berichte?
Sie werden immer dann verwendet, wenn Sie eine bestimmte Instanz identifizieren müssen, z. B. in SDC-Einschränkungen. Sie werden auch beim Export in andere Dateiformate verwendet.

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.

danke, aber mein Ziel war es, die Verbindung in der Modulinstanzierung wegzulassen.
Warum würden Sie das tun wollen? wie auch immer, nein, das kannst du nicht und würde zu einer wirklich schlechten Programmierpraxis führen. Verilog beschreibt Hardware und wie sie angeschlossen ist.
Aus dem gleichen Grund, aus dem Sie, wenn Sie eine Struktur in c haben, über structName.member auf ihre Mitglieder zugreifen können
Aber Ihre Beschreibung von Hardware und Konnektivität ist nicht nur die Funktionalität. Sofern Sie nicht über die Verifizierung eines Designs sprechen, haben Sie unterschiedliche Ansätze.