Wenn ich ein Verilog-Modul "top" und eine Unterkomponente "verilog module" habe, wie instanziere ich die Subkomponente oben?
oben:
%Vor%Unterkomponente:
%Vor% Hinweis
Dies wurde als generische Frage geschrieben, die immer wieder auftaucht und dem Selbstantworten Format folgt. Weitere Antworten und Aktualisierungen werden empfohlen.
Dies wird im Allgemeinen in Abschnitt 23.3.2 von SystemVerilog IEEE Std 1800-2012 behandelt .
Der einfachste Weg besteht darin, im Hauptbereich von oben zu instanziieren, eine benannte Instanz zu erstellen und die Ports der Reihe nach zu verkabeln:
%Vor%Dies wird in Abschnitt 23.3.2.1 von SystemVerilog IEEE Std 1800-2012 beschrieben / p>
Dies hat einige Nachteile, insbesondere in Bezug auf die Port-Reihenfolge des Subkomponenten-Codes. Ein einfaches Refactoring kann die Verbindung unterbrechen oder das Verhalten ändern. zum Beispiel, wenn jemand anders einen Fehler behebt und die Ports aus irgendeinem Grund neu anordnet, indem er die clk- und reset-Reihenfolge wechselt. Es gibt keine Konnektivitätsproblem von Ihrem Compiler, aber wird nicht wie vorgesehen funktionieren.
%Vor%Es wird daher empfohlen, eine Verbindung über benannte Ports herzustellen, dies hilft auch, die Konnektivität von Drähten im Code zu verfolgen.
%Vor%Dies wird in Abschnitt 23.3.2.2 von SystemVerilog IEEE Std 1800-2012 beschrieben.
Wenn Sie jedem Port eine eigene Zeile geben und die Einrückung korrekt durchführt, erhöht dies die Lesbarkeit und die Codequalität.
%Vor%Bis jetzt haben alle Verbindungen, die gemacht wurden, Eingänge und Ausgänge zum Untermodul wiederverwendet und es wurden keine Verbindungskabel erstellt. Was passiert, wenn wir Ausgaben von einer Komponente zur anderen nehmen sollen?
%Vor%Dies funktioniert nominell so, dass automatisch eine Verbindung für clk_sub erstellt wird. Es besteht die Gefahr, sich darauf zu verlassen. Es wird immer nur eine 1-Bit-Leitung standardmäßig erstellt. Ein Beispiel, wo dies ein Problem ist, wäre für die Daten:
Beachten Sie, dass der Instanzname für die zweite Komponente geändert wurde
%Vor%Das Problem mit dem obigen Code ist, dass data_temp nur 1 Bit breit ist, es würde eine Kompilierungswarnung über die Abweichung der Portbreite geben. Die Verbindungsleitung muss erstellt und eine Breite angegeben werden. Ich würde empfehlen, dass alle Verbindungskabel explizit ausgeschrieben werden.
%Vor%Wenn Sie zu SystemVerilog wechseln, stehen ein paar Tricks zur Verfügung, die das Eintippen einer Handvoll Zeichen ersparen. Ich glaube, dass sie die Lesbarkeit des Codes behindern und das Auffinden von Fehlern erschweren können.
Verwenden Sie .port
ohne Klammern, um eine Verbindung zu einem Draht / reg mit demselben Namen herzustellen. Dies kann besonders bei vielen Clicks und Resets gut aussehen, aber auf einigen Ebenen können Sie unterschiedliche Clocks oder Resets erzeugen oder Sie wollen sich eigentlich nicht mit dem Signal desselben Namens, sondern einem modifizierten verbinden, was zu Verdrahtungsfehlern führen kann für das Auge nicht offensichtlich.
Dies wird in Abschnitt 23.3.2.3 von SystemVerilog IEEE Std 1800-2012 beschrieben.
Ein weiterer Trick, von dem ich denke, dass er noch schlimmer ist als der obige, ist .*
, der nicht erwähnte Ports mit Signalen desselben Kabels verbindet. Ich halte dies im Produktionscode für ziemlich gefährlich. Es ist nicht offensichtlich, wenn neue Ports hinzugefügt wurden und fehlen oder dass sie versehentlich eine Verbindung herstellen, wenn der neue Port-Name einen Zähler-Part in der Instancing-Ebene hat, sie automatisch verbunden werden und keine Warnung generiert wird.
Dies wird in Abschnitt 23.3.2.4 von SystemVerilog IEEE Std 1800-2012 beschrieben.
Schauen Sie sich unbedingt den Verilog-Modus und besonders Verilog-Auto an. Ссылка Es ist ein Verilog-Modus für Emacs, aber Plugins existieren zum Beispiel für vi (m?).
Eine Instanziierung kann mit AUTOINST automatisiert werden. Der Kommentar wird um M-x verilog-auto
erweitert und kann anschließend manuell bearbeitet werden.
Erweitert
%Vor% Implizite Leitungen können mit /*AUTOWIRE*/
automatisiert werden. Überprüfen Sie den Link für weitere Informationen.
Tags und Links verilog system-verilog