Generate-Schleifen
Teil des Abschnitts RTL-Design und Verifikation der Verilog-Journey von Coddy. Lektion 13 von 38.
Eine generate-for-Schleife erzeugt während der Elaborierung wiederholte Hardware. Ihr genvar-Index ist kein sich zur Laufzeit änderndes Register. Benannte generate-Blöcke stellen vorhersehbare hierarchische Namen für die erstellten Instanzen oder Zuweisungen bereit. Die Schleifengrenzen müssen Konstanten zur Elaborierungszeit sein.
Relevanter Auszug; die umgebenden Deklarationen und Verbindungen werden in der Aufgabe bereitgestellt.
genvar i;
generate
for(i=0;i<WIDTH;i=i+1) begin: bitcell
assign y[i] = a[i] ^ b[i];
end
endgenerateJede Iteration entfaltet eine separate Operation auf Bitebene, anstatt einen Taktzyklus zu verbrauchen.
Verwende genvar mit konstanten Grenzen, um eine wiederholte Struktur während der Elaborierung zu beschreiben.
Aufgabe
MittelVerwende eine benannte generate-for-Schleife mit genvar i, um eine kontinuierliche Zuweisung pro Bit zu instanziieren, sodass y[i] = a[i] XOR b[i] erzeugt wird. WIDTH ist positiv. Die gesperrte Testbench instanziiert die WIDTH-Werte 1, 4 und 8 und verwendet bei schmaleren Instanzen die niederwertigen Bits von a und b. Die Ausgabespalten sind y1, y4 und y8 im Dezimalformat.
Vervollständige design.v und bewahre die Modulnamen und Ports. Die gesperrte testbench.v stellt Eingangsänderungen bereit und gibt die Ausgaben aus, nachdem sie sich stabilisiert haben. Sie wählt ein Szenario mithilfe eines Simulatorarguments wie +CASE=1; eine Standardeingabe ist nicht erforderlich. Füge dem Design keine Ausgaben, Verzögerungen oder Simulationsbeendigung hinzu. Die erwartete Ausgabe besteht aus einer Zeile mit Dezimalwerten pro Beobachtung, getrennt durch jeweils ein Leerzeichen und mit einem abschließenden Zeilenumbruch.
Probier es selbst
module dut #(parameter WIDTH=4) (input [WIDTH-1:0] a,b, output [WIDTH-1:0] y);
// Implementiere die parametrisierte Schaltung.
assign y = 0;
endmoduleDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in RTL-Design und Verifikation
1Zuverlässige kombinatorische RTL
Standardwerte verhindern LatchesPrioritätsencoderOne-Hot-ValidierungSichere Case-DekodierungRückblick – Request-Router4Kontrolliertes sequentielles RTL
Priorität von Reset und EnableSättigungszählerPipelining von Daten und ValidErkennen abgetasteter FlankenRückblick – Ereigniszähler2Bitbreiten und vorzeichenbehaftete Arithmetik
Übertragsbits bewahrenVorzeichenbehaftete VergleicheArithmetische RechtsschiebungenÜberlauf und SättigungRückblick – vorzeichenbehaftete Differenz5Speicher und Nachschlagetabellen
Kombinatorische ROM-TabellenSpeicherung in Register-ArraysRegistrierte LeseportsRead-Write-WeiterleitungRückblick – Bank mit zwei Leseports8Abschließende Herausforderungen
Herausforderung – Paritäts-PipelineHerausforderung – MusterereignisseHerausforderung – Begrenzte Summe3Wiederverwendbares RTL
Kombinatorische FunktionenBreitensichere ParameterGenerate-SchleifenBedingtes GenerateRückblick – Wiederverwendbare BitmaskeÜbe selbstständig: Online-Verilog-Compiler