Kombinatorische Funktionen
Teil des Abschnitts RTL-Design und Verifikation der Verilog-Journey von Coddy. Lektion 11 von 38.
Eine Verilog-function kapselt eine Berechnung ohne Zeitaufwand zur Wiederverwendung innerhalb eines Moduls. Deklariere ihre Rückgabebreite, Eingabeargumente und lokalen Variablen und assign dann das Ergebnis dem Namen der function zu. Kombinatorische Funktionen enthalten keine Verzögerungen oder Ereignissteuerungen; eine Schleife mit festen Grenzen kann wiederholte Logik beschreiben.
Relevanter Auszug; umgebende Deklarationen und Verbindungen werden in der Aufgabe bereitgestellt.
function [7:0] gray;
input [7:0] value;
begin gray = value ^ (value >> 1); end
endfunctionDas Aufrufen der function berechnet einen Ausdruck, ohne Simulationszeit hinzuzufügen.
Weise auf jedem Pfad das Ergebnis der function zu und halte kombinatorische Funktionen frei von Zeitsteuerungen.
Aufgabe
MittelImplementiere eine Verilog-function gray, die einen vorzeichenlosen 8-Bit-Binärwert mithilfe von value XOR (value um eins nach rechts verschoben) in Gray-Code umwandelt. Weise y durch Aufrufen der function mit a zu. Ausgabespalten: y. Alle Stimuluswerte sind bekannte Binärwerte.
Vervollständige design.v und bewahre dessen 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 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 [7:0] a, output [7:0] y);
// Ersetzen Sie diesen Platzhalter durch Ihr Design.
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