Überlauf und Sättigung
Teil des Abschnitts RTL-Design und Verifikation der Verilog-Journey von Coddy. Lektion 9 von 38.
Ein Überlauf bei vorzeichenbehafteten Zahlen bedeutet, dass das mathematische Ergebnis nicht in die gewählte Breite von signed passt. Er unterscheidet sich vom Übertrag bei vorzeichenlosen Zahlen. Bei der Addition von signed-Werten tritt ein Überlauf auf, wenn Eingaben mit gleichem Vorzeichen zu einem Ergebnis mit geändertem Vorzeichen führen. Eine Sättigung begrenzt den Wert auf einen darstellbaren Grenzwert, anstatt ihn überlaufen zu lassen.
Relevanter Auszug; umgebende Deklarationen und Verbindungen werden in der Aufgabe bereitgestellt.
assign overflow = (a[7] == b[7]) && (sum[7] != a[7]);Eingaben mit unterschiedlichen Vorzeichen können bei einer signed-Addition keinen Überlauf verursachen; bei Eingaben mit gleichen Vorzeichen muss das Vorzeichen des Ergebnisses überprüft werden.
Überprüfe den signed-Überlauf unabhängig vom Übertrag; erweitere vor der Implementierung der Sättigung.
Aufgabe
MittelAddiere signed 8-Bit-Werte a und b. Gib das umgeschlagene signed-Ergebnis y und overflow=1 nur dann zurück, wenn die exakte mathematische Summe außerhalb des Bereichs von -128 bis 127 liegt. Ausgabespalten: y, overflow. Alle Stimuluswerte sind bekannte Binärwerte.
Vervollständige design.v und behalte die Modulnamen und Ports bei. Das gesperrte testbench.v liefert Eingangsänderungen und gibt die Ausgaben aus, nachdem sie sich stabilisiert haben. Es 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 dezimaler Werte pro Beobachtung, durch ein Leerzeichen getrennt und mit einem Zeilenumbruch abgeschlossen.
Probier es selbst
module dut (input signed [7:0] a, input signed [7:0] b, output signed [7:0] y, output overflow);
// Ersetzen Sie diesen Platzhalter durch Ihr Design.
assign y = 0;
assign overflow = 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 SummeÜbe selbstständig: Online-Verilog-Compiler