20 / 37 · Konzept
generate: mit Schleifen statische Schaltungen aufbauen
Erzeugen Sie mit genvar und generate-if benannte Hierarchien und prüfen Sie die Lane-Anordnung.
Lektionen sind frei lesbar. Schreibe dich ein, um deinen Fortschritt zu speichern.
Die Schleife erzeugt Instanzen, keine Taktzyklen
genvar/generate wiederholt vor der Ausführung statische Struktur. Eine Schleife in always_comb beschreibt prozedurale Berechnung, deren Hardware die Synthese bestimmt. Keine davon bedeutet automatisch eine Iteration je Takt; serielle Verarbeitung braucht Zustand und Steuerung. Hier zerfällt der packed-Bus in LANES Wörter mit je W Bits; jedes liefert eine Parität. Beide Parameter müssen positiv sein.
module lane_parity #(
parameter integer W = 8,
parameter integer LANES = 3
) (
input logic [W*LANES-1:0] data,
output logic [LANES-1:0] parity
);
genvar lane;
generate
for (lane = 0; lane < LANES; lane = lane + 1) begin : g_lane
wire [W-1:0] word_data;
assign word_data = data[lane*W +: W];
assign parity[lane] = ^word_data;
end
endgenerate
endmoduledata[base +: W] wählt W Bits ab base in Richtung größerer Indizes; W ist konstant. W=8, LANES=3 verbindet 7:0 mit Lane 0,15:8 mit Lane 1 und 23:16 mit Lane 2. g_lane erzeugt stabile Hierarchien wie g_lane[1].word_data.
Lane-Reihenfolge lesen
data=24'h03_01_80 enthält von Lane 0 an 80,01,03. Die Paritäten 1,1,0 ergeben parity[2:0]=011. Das links dargestellte Byte ist Lane 2. Trennen Sie Index, Anzeige und Übertragung. Alle Lanes rechnen gleichzeitig ohne registrierte Latenz. Mehr LANES bedeutet mehr Logik, keine zusätzlichen Zyklen. Fanout, Verdrahtung und physikalisches Timing müssen zusätzlich geprüft werden.
generate-if wählt feste Struktur
Die Bedingung ist konstant, etwa ein Parameter für ein optionales Register. Ein dynamisches Signal gehört in kombinatorische oder getaktete Logik. Ein ergänztes Register ändert Gültigkeit, Vertrag und Checker. Deaktivieren Sie einen Bus nicht durch Größe Null: [−1:0] ist keine sichere Null-Bit-Struktur. Lehnen Sie die Konfiguration ab oder behalten Sie in einem statischen Zweig eine definierte Schnittstelle.
Übung: vertauschte Lanes finden
Prüfen Sie das Beispiel und setzen Sie jeweils ein Bit in einer Lane: nur die zugehörige Parität ändert sich. Zwei gesetzte Bits ergeben gerade Parität 0. Gleiche Daten in allen Lanes verdecken vertauschte Ausschnitte. Extrahieren Sie Lanes numerisch in der Referenz und zählen Sie Einsen. Prüfen Sie W=1,8 und LANES=1,3 für Mindestgrößen, Bytebreite und Hierarchie. Registrieren Sie anschließend die Parität und definieren Sie Reset, enable und den Vergleich mit aktuellem Bus oder an der vorherigen Flanke erfassten Daten.