Forum: FPGA, VHDL & Co. Daten für Simulation aus einer Datei lesen (VHDL)


von Dimi S. (Gast)


Lesenswert?

Hallo,

um meinen SDRAM-Kontroller zu testen habe ich die Micron's
SDRAM Model MT48LC8M16A2.V ein wenig erweitert. Jetzt ist es
möglich den Speicher mittels "initial $readmem" mit bestimmte
Daten zu füllen.

Gibt es so was auch bei VHDL?
Leider konnte ich keine Infos dazu finden.

MfG

von hjk (Gast)


Lesenswert?

Ganz einfach über Dateizugriffe...Datei aufmachen und auslesen.

Einfach mal hier kucken:

http://www.stefanvhdl.com/

oder das pdf hier

http://people.sabanciuniv.edu/erkays/el310/io_10.pdf

von Duke Scarring (Gast)


Lesenswert?

hjk schrieb:
> Ganz einfach über Dateizugriffe...Datei aufmachen und auslesen.
Naja, ganz so einfach wie bei Verilog ist es nicht.
Man muß die Daten noch interpretieren.

Dafür kann man sich mit VHDL File-Reader für alles mögliche bauen:
binär, ASCII/dezimal, ASCII/binär, ASCII/hex, Intel-Hex... (BTDT)

Duke

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Duke Scarring schrieb:
> Naja, ganz so einfach wie bei Verilog ist es nicht.
> Man muß die Daten noch interpretieren.
>
> Dafür kann man sich mit VHDL File-Reader für alles mögliche bauen:
> binär, ASCII/dezimal, ASCII/binär, ASCII/hex, Intel-Hex... (BTDT)

Auch das ist mit Verilog wesentlich einfacher, da man die relevante 
Funktionalität der C stdio kopiert hat.

--
Marcus

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Am einfachsten: ein kleines Skript schreiben das aus einer rohen 
Binärdatei eine VHDL-Datei mit einem Array baut.

von hjk (Gast)


Lesenswert?

Das setzt jedoch zwingend ein recompilieren voraus.

Verstehe aber nicht was schwierig an den VHDL File Operationen sein 
soll...hat jemand mal ein Beispiel?

Hatte bisher nie Probleme damit und schon einiges gemacht:
- Bitmap einlesen
- Assembler files
- Text für Interpreter einlesen
- Kommunikation mit anderen Prozessen inklusive Handshake
- Ausgabe als c header file
etc

Wo genau sind da Schwierigkeiten?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

hjk schrieb:
> Verstehe aber nicht was schwierig an den VHDL File Operationen sein
> soll... hat jemand mal ein Beispiel?
> Hatte bisher nie Probleme damit und schon einiges gemacht: ...
Hast du mal ein Beispiel?
https://www.mikrocontroller.net/search?query=fileio+textio

von hjk (Gast)


Angehängte Dateien:

Lesenswert?

Für was genau?

Kann gerne was beisteuern wenn es ein konkretes Problem gibt.

Wenns nur irgentein Beispiel sein soll, siehe Anhang. Dort wird ein 
Bitmap ausgelesen, bearbeitet und zurück geschrieben.

Nicht unbedingt sauber geschrieben, bedingt durch rumtesten, kann man 
ggf aufräumen.

von Michael (Gast)


Lesenswert?

hjk schrieb:
> Für was genau?
> Kann gerne was beisteuern wenn es ein konkretes Problem gibt.

Wofür genau brauchst Du die

"wait for 5 ns;"?

Ist das wegen der realen File-Ausgabe?

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

1
std_buffer := character'val(to_integer(unsigned(CONV_STD_LOGIC_VECTOR(bit'pos(next_vector(0)), 8))));
Man muss VHDL schon lieben. Hat eine Weile gedauert, bis ich den 
relevanten Teil dieser Zeile gefunden hatte. Wo kommt eigentlich die 
read() Funktion her? Ich konnte auf die Schnelle keine Implementierung 
finden, die einen Ausgangs Parameter besitzt, der actual_len 
entspricht.

--
Marcus

von Werner (Gast)


Lesenswert?

Worauf bezieht sich Deine Antwort?

von hjk (Gast)


Lesenswert?

Michael schrieb:
> Wofür genau brauchst Du die
> "wait for 5 ns;"?

Ich schreibe in ein Signal und möchte mir in der Simulation ankucken 
wann was gelesen wurde.

Bei der Ausgabe wird es nicht benötigt.


Marcus Harnisch schrieb:
> Man muss VHDL schon lieben.

warum das?

Wenn ich in der Sprache Utopia 1.0 den Befehl "readbyte" nutze, dann 
weiß ich was ich erhalte und kann ihn benutzen.
Wenn der gleiche Befehl nun in Utopia 2.0 auf einmal "Ruckediguh" heißt, 
dann ist das zwar verwirrend, benutzen kann man ihn aber trotzdem.

Und wenn er in vhdl noch anders heißt, was solls?

Das was dahinter steckt weiß ich nicht, muss ich auch nicht. Ich habe 
das mal irgentwann nach 2 Minuten google gefunden, es funktioniert und 
ich benutzte es.

Ich weiß auch nicht genau wie der Motor meines Autos funktioniert, aber 
ich weiß das er Sprit verbrennt und ich damit fahren kann.
Ich muss nicht verstehen wie alle Einzelheiten funktionieren und weigere 
mich auch nicht einzusteigen bis ich es erforscht habe.

Was ist gegen ein günstiges (wenige Minuten Aufwand) Werkzeug 
einzuwenden das perfekt funktioniert. Nur weil es hässlich ist?

Ich bin mir zu 99% sicher das man das alles schöner hinschreiben kann. 
Doch wozu?
Ich kann mir genauso gut einen Kommentar dahinter schreiben wo steht 
"this line reads one byte from a file" falls ich mal vergessen sollte 
was dort passiert. Wobei selbst das mMn in 5 Sekunden an den 
Variablennamen erkennbar ist.


Nicht falsch verstehen, ich halte deine Fragen weder für unsinnig noch 
für überflüssig. Ich denke aber deswegen nicht das :

Marcus Harnisch schrieb:
> Auch das ist mit Verilog wesentlich einfacher


Weil man so oder so einen Befehl zum lesen eines Bytes braucht und das 
wirklich komplizierte, nämlich das parsen des Files, sich nicht 
voneinander unterscheidet.

Konkret: wenn ich was komplizierteres parse als nur bytes sequentiell 
einzulesen, dann bin ich mit egal welcher Sprache praktisch 
gleichschnell.


Wie gesagt, einfach mal ein Beispiel sagen wo es Probleme gibt, dann 
versuche ich zu helfen. Hab bisher noch nichts gefunden wo vhdl in der 
Hinsicht wesentlich schwieriger (wenn auch ggf hässlicher) wäre.

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

hjk schrieb:
> Weil man so oder so einen Befehl zum lesen eines Bytes braucht und das
> wirklich komplizierte, nämlich das parsen des Files, sich nicht
> voneinander unterscheidet.

Bevor wir abgeschweift sind ging es um ein VHDL Konstrukt vergleichbar 
mit Verilogs $readmem. Abgesehen von diesem Trivialfall bietet Verilog 
mit $fscanf und $sscanf system tasks zum Lesen formatierter Eingabe. Das 
hilft beim Parsen von Dateien schon sehr.

--
Marcus

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.