Hier mal ein kleines Dualport-RAM inklusive Testbench. Obwohl Dualport wird hier nur sequentiell geschrieben und gelesen. Man weiss ja nie (Shit happens). Ich verstehe die Fehlermeldung nicht. Warum tritt diese auf und warum besteht anfangs zwischen data_in und data_out eine Differenz von eins, später von zwei ? Ab wievielen Zeilen sollte man den Dateianhang verwenden ? Dank euch
Hallo, Ich hab hier leider gerade kein ModelSim, aber hast du mal geguckt, ob alle internen STD_LOGIC(_VECTOR) Signale einen Initalwert bekommen? Die Fehlermeldung tritt auf wenn man ein std_logic element casten will, dass aber noch (durch fehlende Initialisierung) einen U Wert hat. PS: Du hast in deinem Testbench noch
1 | use ieee.std_logic_unsigned.all; |
stehen, das ist unnötig, da durch
1 | use ieee.numeric_std.all; |
komplett abgedeckt Gruß
Hallo, mir ist aufgefallen : in der TB im state reading setzt du die neue Read-Adresse und liest gleichzeitig das Datum ein. Das setzt aber voraus, dass die Read- Adresse vorher schon richtig anlag. Das ist bei Dir der Fall, da Du die Read-Adresse per default auf 0 setzt und auch dort mit Schreiben anfängst. Wenn Du im state idle z.B. address = 1 setzt dürfte die TB aber schon im übernächsten clock mit Fehler abbrechen. Vielleicht ist das auch ein Grund für die merkwürdige Verschiebung ?!
Vielen Dank für den Hinweis auf das Casting. Der Fehler tritt bei 25ns, sprich der dritten positiven Taktflanke auf, folglich im Zustand reading. Der Fehler liegt in der Anweisung (Habs mal ausgeklammert): data_out <= to_integer(unsigned(data_out_internal)); Ist mir aber trotzdem schleierhaft ! Der Wert wird aus dem RAM gelesen. Der Ausgang des RAM´s wird mit '0' initialisiert. to_integer sollte auch bei natural funktionieren, da natural = subtype von integer.
Wo Schleier? Der RAM wird wohl nicht initialisiert sein, da liest der Simulator aus einer nie beschriebenen zelle "UUUU". check mal signal ram : ram_type := (others => "00000000");
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.