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.(?)
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.
Gibt es dazu eine Bechreibung, oder kann das bitte etwas im Detail formuliere ? Danke
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.
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.
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
Gibt es irgendwo eine Beschreibung dafür, was readline genau macht? Ich verstehe nicht, wieso ich zwei Befehle brauche.
Du findest die textio.vhd im Quelltext auf deinem PC, einfach mal reinschauen.
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?
Gib dem read keinen std_logic_vector mit, sondern einen bit_vector. Dann gehts.
>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.
(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.
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.
Achso, und die ganze Rechnerei geht auch nur mit std_logic. Also umwandeln.
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).
Ich habe jetzt einen Character genommen und lese jedes Bit so ein. Dann geht es mit to_std_logic_vector aus der text_util.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.