Altifigence Academy

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.

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.

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

data[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.

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