Breitensichere Parameter
Teil des Abschnitts RTL-Design und Verifikation der Verilog-Journey von Coddy. Lektion 12 von 38.
Die Grundlagen haben konfigurierbare Breiten eingeführt. Wiederverwendbares RTL muss auch die kleinste zulässige Breite verarbeiten, die Größe von Zwischenausdrücken bewusst festlegen und fest codierte Bitpositionen vermeiden. Die Replikation {WIDTH{1'b1}} erstellt eine an die Breite angepasste Maske. Parameter sind Elaborationskonstanten, keine Laufzeitsteuerungen.
Relevanter Ausschnitt; umgebende Deklarationen und Verbindungen werden in der Aufgabe bereitgestellt.
wire [WIDTH:0] sum;
assign sum = {1'b0,a} + {1'b0,b};
assign y = sum[WIDTH] ? {WIDTH{1'b1}} : sum[WIDTH-1:0];Sowohl die Übertragsposition als auch der Sättigungswert passen sich an die konfigurierte Breite an.
Teste die gesetzlich zulässige Mindestbreite und leite jeden breitenabhängigen Ausschnitt und jede Konstante aus Parametern ab.
Aufgabe
MittelErstelle einen WIDTH-Bit-Inkrementierer, der die niedrigen WIDTH Bits von a+1 zurückgibt. Die Eingabe b wird nicht verwendet. Dasselbe Modul muss sowohl für WIDTH=1 als auch für größere Bitbreiten funktionieren. WIDTH ist positiv. Die gesperrte Testbench instanziiert die WIDTH-Werte 1, 4 und 8 und verwendet für schmalere Instanzen die niedrigen Bits von a und b. Die Ausgabespalten sind y1, y4 und y8 in Dezimaldarstellung.
Vervollständige design.v und bewahre die Modulnamen und Ports. Die gesperrte testbench.v liefert Eingabeänderungen 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, durch jeweils ein Leerzeichen getrennt und mit einem Zeilenumbruch abgeschlossen.
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