3 / 37 · Konzept
Module, Ports und Instanzen: Verbindungen als Verträge
Verbinden Sie kombinatorische Module über benannte Ports und prüfen Sie einzelne Treiber und Hierarchiegrenzen.
Lektionen sind frei lesbar. Schreibe dich ein, um deinen Fortschritt zu speichern.
Eine Modulgrenze ist keine Taktgrenze
Ein Modul fasst Ports und Logik zusammen. Eine Instanz erzeugt nicht automatisch Register oder Taktzyklus. Hintereinandergeschaltete kombinatorische Module bleiben ein kombinatorischer Pfad mit aufsummierten physikalischen Verzögerungen. Erst ein ausdrückliches Register schafft eine Speichergrenze. Dokumentieren Sie Richtung, Bitbreite, Vorzeichen, Treiber und Gültigkeit. Benannte Verbindungen vermeiden Abhängigkeit von der Portreihenfolge.
module select_word #(parameter integer W = 8) (
input logic [W-1:0] a, b,
input logic select_b,
output logic [W-1:0] y
);
assign y = select_b ? b : a;
endmodule
module choose_and_increment (
input logic [7:0] a, b,
input logic select_b,
output logic [8:0] result
);
logic [7:0] chosen;
select_word #(.W(8)) select_u (
.a(a), .b(b), .select_b(select_b), .y(chosen)
);
assign result = {1'b0, chosen} + 9'd1;
endmoduleselect_word ist der Modultyp, select_u der Instanzname. .a(a) verbindet Port a des Untermoduls mit Signal a des übergeordneten Moduls. .W(8) ist eine Elaborationskonfiguration, kein dynamischer Eingang.
Beide Enden prüfen
chosen wird allein von y des Untermoduls getrieben und vom Elternmodul gelesen. Schreiben Sie es nicht zusätzlich aus einem anderen Prozess; logic erlaubt keine Treiberkonflikte. result hat neun Bits für 255+1=256 und erweitert chosen vor der Addition. a=255, b=9, select_b=0 ergibt 256; select_b=1 ergibt 10. Acht Bits verlören im ersten Fall den Übertrag.
Hierarchie, Dateien und Top-Modul
Definitionen dürfen zusammen oder getrennt stehen, der Compiler benötigt beide. Das Top-Modul ist choose_and_increment; select_word als Top ändert die geprüfte Schnittstelle. Eine fehlende Untermoduldatei betrifft die Quellenliste und beweist keinen Logikfehler. Positionsverbindungen können nach Portänderungen andere Signale verbinden. Ein unverbundener Eingang ist keine absichtliche Null: verbinden Sie Konstanten oder dokumentieren Sie ungenutzte Ausgänge und prüfen Sie Diagnosen. Verfolgen Sie Abhängigkeiten gegen kombinatorische Rückkopplung ohne Speicher; Modulgrenzen unterbrechen sie nicht.
Übung: Zusammensetzung unabhängig prüfen
Für (a, b, select_b)=(0,255,0),(0,255,1),(255,0,0),(255,0,1) erwarten Sie 1,256,256,1. Durchlaufen Sie alle 256 ausgewählten Werte für beide select-Werte und wählen Sie den anderen Eingang unterschiedlich, um vertauschte Auswahl zu entdecken. Die Referenz wählt den ganzen Wert a oder b und addiert 1; vergleichen Sie nach Stabilisierung. chosen intern zu lesen könnte denselben Auswahlfehler teilen. Ergänzen Sie danach ein Ausgangsregister und legen Sie Reset, Gültigkeit und zugehörige Eingangsflanke fest. Gleiche Arithmetik kann einen anderen Zeitvertrag haben.