ModelSIM mit Daten aus file füttern

Gast #794761
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.
Gast #795279
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.
Gast #800967
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
Gast #809794
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?
Gast #809873
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.
Gast #809930
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.
Gast #809960
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).

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