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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Gustl B. (-gb-)


Bewertung
0 lesenswert
nicht 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:
signal daten: std_logic_vector(7 downto 0):=(others => '0');
type slv_file is file of std_logic_vector(7 downto 0);
file datenfile: slv_file open write_mode is "Datei.bin";

Und dann im getakteten Prozess:
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-)


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

Und im Prozess dann:
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)


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


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


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


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

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.

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