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


von Urs (Gast)


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.(?)

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

VHDL-Code zum Lesen der Dateien schreiben?

von Matthias (Gast)


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.

von Urs (Gast)


Lesenswert?

Gibt es dazu eine Bechreibung, oder kann das bitte etwas im Detail 
formuliere ?

Danke

von Philip K. (plip)


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.

von Gast (Gast)


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.

von GagoSoft (Gast)


Lesenswert?

Mit textio kann man beliebige Dateien lesen, am einfachsten sind jedoch 
Textdateien...
1
architecture ...
2
file textinput : text open read_mode is "input.txt";
3
4
  readInput : process is
5
  variable l : line;
6
  variable i : integer;
7
  variable c : character;
8
  begin
9
    ....  
10
    while not endfile(textinput) loop
11
      readline(textinput,l); -- liest eine Zeile Text ein
12
      read(l,i); -- liest einen integer aus der Zeile
13
        ... irgentetwas mit i tun
14
      read(l,c); -- liste einen Char aus der Zeile (zB ',')
15
    end loop
16
    wait;  -- dieser Process wartet nun für immer
17
  end process readInput;

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

von Gast (Gast)


Lesenswert?

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

von Gast (Gast)


Lesenswert?

Du findest die textio.vhd im Quelltext auf deinem PC, einfach mal 
reinschauen.

von Gast (Gast)


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?

von Gast (Gast)


Lesenswert?

Gib dem read keinen std_logic_vector mit, sondern einen bit_vector. Dann 
gehts.

von damicha (Gast)


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.

von Gast(1) (Gast)


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.

von Gast (Gast)


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.

von Gast (Gast)


Lesenswert?

Achso, und die ganze Rechnerei geht auch nur mit std_logic. Also 
umwandeln.

von Gast(1) (Gast)


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).

von Gast (Gast)


Lesenswert?

Zeig mal deine Lesefunktion und die definierten Signale.

von Gast(1) (Gast)


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.

von Gast (Gast)


Lesenswert?

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

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.