mikrocontroller.net

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


Autor: Hans-Werner (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
use ieee.std_logic_unsigned.all;
 stehen, das ist unnötig, da durch
use ieee.numeric_std.all;
 komplett abgedeckt

Gruß

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?!

Autor: Hans-Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gelassener (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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");

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.