Forum: FPGA, VHDL & Co. Datei schreiben - und zwar nicht als Text


von Gustl B. (-gb-)


Lesenswert?

Moin,
ich habe in der Simulation SLVs und möchte die 1:1 binär in eine Datei 
schreiben. Das sind ziemlich viele, die sollen also einfach nacheinander 
in der Datei stehen.

Jetzt habe ich das so probiert:
1
signal daten: std_logic_vector(7 downto 0):=(others => '0');
2
type slv_file is file of std_logic_vector(7 downto 0);
3
file datenfile: slv_file open write_mode is "Datei.bin";

Und dann im getakteten Prozess:
1
write(datenfile, daten);

Die Datei wird auch geschrieben, aber sie enthält nicht den SLV daten 
sondern andere Werte die ich mir nicht erklären kann. Eigentlich nur 
x"02" und x"03".
Eine Fehlermeldung bekomme ich ebenfalls nicht.
Tja, woran könnte das liegen und wie mache ich das richtig?

Vielen Dank!

von Gustl B. (-gb-)


Lesenswert?

So, geht, aber nicht direkt als SLV sondern als character.
1
signal daten: std_logic_vector(7 downto 0):=(others => '0');
2
type slv_file is file of character;
3
file bytefile: slv_file open write_mode is "UART.bin";

Und im Prozess dann:
1
write(bytefile, character'val(to_integer(unsigned(daten))));

Danke René D. Beitrag "Re: std_logic_vector nach character konvertieren/umwandeln"
Dafür braucht es dann auch kein
use std.textio.all;
oder/und
use IEEE.std_logic_textio.all;

Aber es geht weiter, was wenn ich zusätzlich in der selben Testbench 
auch noch Text schreiben will? Dann brauche ich ja auch noch TextIO und 
das definiert ja write vielleicht anders?!

Funktioniert wunderbar, auch mit eingebundenem TextIO funktioniert das 
oben und ich kann wunderbar character schreiben ohne Zeilenumbruch oder 
so weil kein Text und gleichzeitig mit TextIO werden Zeilen geschrieben 
als Text.

von Blechbieger (Gast)


Lesenswert?

Wenn Funktionen in mehreren Libraries identische Namen haben nicht mit 
use .all einbinden sondern jedes Mal mit dem vollen Namen in der Form 
Libraryname.funktionsname() aufrufen.

von Gustl B. (gustl_b)


Lesenswert?

Genau, ich dachte das müsste ich hier machen, muss ich aber nicht.
Warum verstehe ich nicht. Das write() ist einmal Zeile, Daten und einmal 
Datei, Zeile.
Aber egal, funktioniert.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Gustl B. schrieb:
> Genau, ich dachte das müsste ich hier machen, muss ich aber nicht.
> Warum verstehe ich nicht. Das write() ist einmal Zeile, Daten und einmal
> Datei, Zeile.
> Aber egal, funktioniert.

Das liegt daran, dass VHDL das ueberladen von Funktionen erlaubt.

Ich kann nur empfehlen mal von Peter Ashenden das Buch "The Designer's 
Guide to VHDL - Third Edition" zu besorgen, zu lesen und zu verstehen. 
Kostet vll. 50€, aber die sind wirklich gut investiert.

von Gustl B. (-gb-)


Lesenswert?

Na dann lerne ich tatsächlich mal die Sprache die ich täglich verwende. 
Ist gekauft, danke für den Tipp!

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.