Forum: FPGA, VHDL & Co. Metavalue detected, returning 0 ?


von Hans-Werner (Gast)


Angehängte Dateien:

Lesenswert?

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

von Gast (Gast)


Lesenswert?

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ß

von Mark (Gast)


Lesenswert?

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 ?!

von Hans-Werner (Gast)


Lesenswert?

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.

von Gelassener (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.