Bedingtes Generate
Teil des Abschnitts RTL-Design und Verifikation der Verilog-Journey von Coddy. Lektion 14 von 38.
Ein generate-if wählt mithilfe eines konstanten parameter eine Hardwarestruktur aus. Für eine bestimmte Instanz wird nur ein Zweig elaboriert. Ein prozedurales If oder ein bedingter Ausdruck mit einem Signal wählt das Verhalten zur Laufzeit aus; es ersetzt nicht die generate-Konfiguration.
Relevanter Auszug; umgebende Deklarationen und Verbindungen werden in der Aufgabe bereitgestellt.
generate
if(INVERT) begin: inverted
assign y = ~a;
end else begin: direct
assign y = a;
end
endgenerateDer parameter legt fest, welcher Treiber für diese Instanz erstellt wird.
Verwende generate-if für konstante Konfigurationen und die gewöhnliche RTL-Auswahl für Laufzeitsteuerungen.
Aufgabe
MittelVerwende ein bedingtes generate: MODE=0 lässt a unverändert; MODE=1 invertiert alle acht Bits von a. Der Eingang b wird nicht verwendet. MODE ist entweder 0 oder 1. Die Testbench instanziiert beide Konfigurationen und gibt zuerst y0 und dann y1 aus.
Vervollständige design.v und bewahre seine Modulnamen und Ports. Die gesperrte testbench.v liefert Eingangsänderungen und gibt die Ausgänge aus, nachdem sie sich stabilisiert haben. Sie wählt ein Szenario mithilfe eines Simulatorarguments wie +CASE=1 aus; 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, durch ein Leerzeichen getrennt und mit einem Zeilenumbruch abgeschlossen.
Probier es selbst
module dut #(parameter MODE=0) (input [7:0] a,b, output [7:0] y);
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