Altifigence Academy

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.

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.

SystemVerilog
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;
endmodule

select_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.

Deine Auswahl gilt für diesen Browser. Du kannst sie jederzeit in der Fußzeile ändern.