Menu
Coddy logo textTech

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
endfunction

Jede 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.

challenge icon

Aufgabe

Mittel

Implementiere 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;
endmodule
quiz iconTeste dich selbst

Diese 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

Übe selbstständig: Online-Verilog-Compiler