www.mikrocontroller.net

Forum: FPGA, VHDL & Co. ModelSIM mit Daten aus file füttern


Autor: Urs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte präparierte Files, die ich in CSV-habe, ins Modelsim 
bekommen, um eine Schaltung damit zu füttern. Wie macht man das?

MentorSupport Schweiz hat die Meinung, daß es geht, weiss aber auch 
nicht, wie.(?)

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
VHDL-Code zum Lesen der Dateien schreiben?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In VHDL mit dem package textio. Mit Tcl lässt sich im Modelsim sicher 
auch was machen aber als Teil der VHDL-Testbench ist es imho sinnvoller.

Wir benutzen in der Arbeit das Paket PCK_FIO. Ich habs bisher nur zur 
Ausgabe benutzt aber zum Einlesen gibt es sicher auch was drin.

Autor: Urs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es dazu eine Bechreibung, oder kann das bitte etwas im Detail 
formuliere ?

Danke

Autor: Philip Kirchhoff (plip)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab da noch irgendwo was aus nem Praktikumsversuch rumliegen, was in 
etwa in die Richtung geht. Werds mal suchen und hier posten.
Ich fand allerdings die Handhabung von Textfiles etwas umständlich. Da 
gehts mit Binärfiles deutlich einfacher.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Google mal nach vhdl und textio.
Das ganze geht so in Richtung parsen der Datei, man muss das Format also 
genau kennen und kann dann Zeichenketten an selbst definierten 
Positionen als Signale verwenden.

Autor: GagoSoft (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit textio kann man beliebige Dateien lesen, am einfachsten sind jedoch 
Textdateien...

architecture ...
file textinput : text open read_mode is "input.txt";

  readInput : process is
  variable l : line;
  variable i : integer;
  variable c : character;
  begin
    ....  
    while not endfile(textinput) loop
      readline(textinput,l); -- liest eine Zeile Text ein
      read(l,i); -- liest einen integer aus der Zeile
        ... irgentetwas mit i tun
      read(l,c); -- liste einen Char aus der Zeile (zB ',')
    end loop
    wait;  -- dieser Process wartet nun für immer
  end process readInput;

mfg GagoSoft
----------------------------------
wer Rechtschreibfehler findet, darf sie behalten, Inhaltliche Fehler
nehme ich gerne zurück

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es irgendwo eine Beschreibung dafür, was readline genau macht?
Ich verstehe nicht, wieso ich zwei Befehle brauche.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du findest die textio.vhd im Quelltext auf deinem PC, einfach mal 
reinschauen.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe folgendes Problem: Ich will Bitvektoren einlesen. Nach der 
obigen Methode ist ihm der Integer zu groß: Das file compiliert zwar, 
aber er stört sich an der Tatsache, daß der gelesene String ausserhalb 
der Integerwerte liegt, was auch stimmt, da es 64bit sind.

Gebe ich dem read-Befehl aber einen sdt_logic_vector mit, finder er "no 
feasible entries for read()".

Wie bekomme ich die Bitvektoren rein?

Das fileformat ist so :

010100101......0010010 <- 64bit (kanal1)
110010010010.....10100 <- 64bit (kanal2)
......
01001001010.....101001 <- 64bit (kanal8)

Ich muss immer 8 solcher 64er Werte (Videodaten) nacheinander lesen und 
auf DACs schicken. Dann kommt der nächste 8er-Block. Das mit den 
Schleifen habe ich am laufen, aber mir fehlt die Syntax für die Bits. 
Muss ich jedes Bit als einzelnen Character einlesen?

Noch eins: Wenn ich den Lese-Process auskommentiere, start zwar die 
Simulation und alles andere läuft, aber er findet das file nicht. Wo 
muss das hin, bzw. wie gebe ich ihm den Dateinamen und -Pfad an?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gib dem read keinen std_logic_vector mit, sondern einen bit_vector. Dann 
gehts.

Autor: damicha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Noch eins: Wenn ich den Lese-Process auskommentiere, start zwar die
>Simulation und alles andere läuft, aber er findet das file nicht. Wo
>muss das hin, bzw. wie gebe ich ihm den Dateinamen und -Pfad an?

Der Pfad ist relativ zum aktuellen Simulationsverzeichnis. Wenn Du in 
der Modelsim Shell mal pwd eingibst bekommst Du den aktuellen Pfad. 
Dateien in anderen Verzeichnissen kannst Du dann z.B. in der Form:

constant FILENAME_DATA : string := "../data/data_x.dat";

erreichen.

Autor: Gast(1) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(bitvektor) Wie mache ich das ?

Das mit dem Pfad hat etwas mit Win zu tun, er stört sich an Spaces in 
den Foldernamen. Wenn ich auf C arbeite, geht es.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Signal eben als bit_vector definieren statt std_logic_vector. 
Bit_vector kann nur 0 und 1, std_logic_vector noch U, Z usw. Wenn du das 
brauchst, musst du das noch umwandeln, kurze Funktion mit Schleife.
Es geht nicht mit std_logic_vector, da das read eine ueberladene 
Funktion ist, die zwar fuer bit_vector und integer und einiges weitere 
implementiert ist (siehe textio.vhd) aber nicht fuer std_logic_vector.
Alternativ kannst du ein eigenes read fuer std_logic_vector schreiben, 
einfach das vom bit_vector aus der textio.vhd dafuer uebernehmen bzw. 
erweitern wenn du auch U, Z usw. aus der Datei auslesen willst.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso, und die ganze Rechnerei geht auch nur mit std_logic. Also 
umwandeln.

Autor: Gast(1) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt ein bit, das passend ausgelesen wird. Nun muss ich alle 
bits einer Zeile abklappern, nehme ich an. Wie kriege ich das bit 
jeweils in den vector?

ich möchte sowas machen wie videodat_sig(x) <= geradegelesenes bit. (mit 
x = 63 bis 0).

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeig mal deine Lesefunktion und die definierten Signale.

Autor: Gast(1) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt einen Character genommen und lese jedes Bit so ein. Dann 
geht es mit to_std_logic_vector aus der text_util.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du es so machen willst, dann shifte die Bits nach links ein, dann 
hast du einen Vektor.

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.