Daten für Simulation aus einer Datei lesen (VHDL)

Gast #2684727
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
Gast #2685612
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
Persönliche Seite #2685749
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
Gast #2687029
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?
Gast #2687602
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.
Angehängte Dateien:
Persönliche Seite #2690938
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
Gast #2691100
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.
Persönliche Seite #2694177
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren