Prioritätsencoder
Teil des Abschnitts RTL-Design und Verifikation der Verilog-Journey von Coddy. Lektion 2 von 38.
Ein Encoder ordnet ein Anforderungsbit einem Index zu. Mehrere aktive Anforderungen benötigen eine explizite Prioritätsregel. Eine if/else-if-Kette gibt früheren Zweigen Priorität; ein separates Gültigkeitssignal unterscheidet keine Anforderung von Index null.
Relevanter Auszug; umgebende Deklarationen und Verbindungen werden in der Aufgabe bereitgestellt.
if (req[3]) code = 3;
else if (req[2]) code = 2;
else if (req[1]) code = 1;
else code = 0;Der erste wahre Zweig gewinnt, wodurch das höchstwertige Anforderungsbit Priorität erhält.
Gib die Prioritätsreihenfolge an und definiere die Ausgabe für keine Anfrage ausdrücklich.
Aufgabe
MittelKodiere das höchstwertige gesetzte Bit von 4-Bit-req in code. Setze valid, wenn irgendeine Anfrage vorhanden ist; wenn req null ist, sind code und valid null. Ausgabespalten: code, valid. Alle Stimuluswerte sind bekannte Binärwerte.
Vervollständige design.v und bewahre die Modulnamen und Ports. 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 Simulationsterminierung hinzu. Die erwartete Ausgabe besteht aus einer Zeile dezimaler Werte pro Beobachtung, getrennt durch ein Leerzeichen und abgeschlossen durch einen Zeilenumbruch.
Probier es selbst
module dut (input [3:0] req, output reg [1:0] code, output reg valid);
// Ersetzen Sie diesen Platzhalter durch Ihr Design.
initial code = 0;
initial valid = 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