Metavalue detected, returning 0 ?

Gast #927986
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
Angehängte Dateien:
Gast
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ß
Gast
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 ?!
Gast
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.
Gast
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");

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.