Kombinatorische ROM-Tabellen
Teil des Abschnitts RTL-Design und Verifikation der Verilog-Journey von Coddy. Lektion 21 von 38.
Eine feste Nachschlagetabelle beschreibt eine schreibgeschützte Zuordnung von Adresse zu Daten. Ein vollständiger case- oder function-Ausdruck kann den Inhalt darstellen. Bei einem kombinatorischen Lesezugriff ändert sich die Ausgabe, sobald sich die Adresse ändert, ohne auf einen Takt warten zu müssen. Das Synthesewerkzeug wählt eine Implementierung; dieser Quelltext garantiert kein bestimmtes FPGA-Speicherprimitive.
Relevanter Auszug; die umgebenden Deklarationen und Verbindungen werden in der Aufgabe bereitgestellt.
function [7:0] lookup;
input [1:0] addr;
begin
case(addr)
0: lookup=3;
1: lookup=5;
2: lookup=8;
3: lookup=13;
default: lookup=0;
endcase
end
endfunctionJede Adresse wählt eine definierte Konstante aus, ohne dass der vorherige Ausgangswert beibehalten wird.
Gib jeden Tabelleneintrag an und unterscheide zwischen der kombinatorischen Nachschlageverzögerung und der registrierten Leseverzögerung.
Aufgabe
MittelImplementiere eine kombinatorische Nachschlagetabelle mit acht Einträgen. Die Adressen 0 bis 7 geben jeweils 3,5,8,13,21,34,55,89 zurück. Verwende eine vollständige, auf case basierende function, um y anzusteuern. Ausgabespalten: y. 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; eine Standardeingabe ist nicht erforderlich. Füge dem Design keine Ausgaben, Verzögerungen oder Simulationsterminierung hinzu. Die erwartete Ausgabe besteht aus einer Zeile mit Dezimalwerten pro Beobachtung, die durch jeweils ein Leerzeichen getrennt ist und mit einem Zeilenumbruch endet.
Probier es selbst
module dut (input [2:0] addr, 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 SummeÜbe selbstständig: Online-Verilog-Compiler