Forum: FPGA, VHDL & Co. vhdl Stimuli aus Dateien


von Tombo (Gast)


Lesenswert?

Es geht bei meiner Frage um die Simulation. Deren Bedeutung bekommt man 
ja intensiv erklärt, aber leider sind die ja fast noch komplizierter, 
als die Synthese an sich.
So strauchel ich auch und zwar dabei, als erstes Ziel einfach Testdaten 
aus einer Datei zu lesen.

Es gibt ja mehrere Lösungen, wie so eine Datei aussehen kann. z.B. eine 
csv Datei mit Hex werten, csv mit dezimal Werten, eine Binardatei oder 
(was wohl am einfachsten ist zu Beginn) eine Datei mit 
Stringrepräsentationen der Stimuli. Also so bei 4 bit breiten Stimuli.

1100
1010
0000
(..)

Also pro Zeile nur ein Wert der Verarbeitet wird. Komplizierter und 
damit komfortabler werden möchte ich wenn ich so Erfahrung habe.

Nun zum Problem. Ich habe mir std.textio angeschaut und versucht eine 
ganz einfache Testbench zu machen. Das dut ist einfach 4 bit in und 
Ausgabe an 4 bit out.
Das (hoffentlich) Relevante aus der Testbench
1
LIBRARY ieee;
2
USE ieee.std_logic_1164.ALL;
3
use std.textio.all;
4
5
(...)
6
7
stim_proc: process(clk)  
8
  
9
file infile: text;
10
variable L : LINE;
11
variable str_stimulus: string(dat'range);
12
--variable stimulus : std_logic_vector(7 downto 0);
13
  
14
   begin    
15
  file_open(infile,"noname.txt",READ_MODE);
16
    
17
  wait until rising_edge(clk);
18
  
19
  while not endfile(infile) loop
20
    readline(infile, L);
21
    if( L'length = 0 ) then next;
22
    read( L, str_stimulus);
23
    dat <= to_std_logic_vector(str_stimulus); --dat ist ein 4bit std_logic_vector. Eingang vom dut
24
  end loop;
25
26
    --  wait;
27
end process;

Das funktioniert nicht. <to_std_logic_vector> is not declared. Ist das 
der einzige Fehler? Wie wandle ich den gelesenen String in den 
std_logic_vector um.
Mache ich es grundsätzlich richtig und wie handhabt ihr Testdaten, die 
aus einer Datei kommen? Man liest da leider sehr wenig auf den 
einschlägigen vhdl Seiten

von Clemens M. (panko)


Lesenswert?

Habe ich mir so hinklamüsert für 'simulierte' Tastatureingabe von einem 
uart z.B. In Anlehnung an deinen code
Wenn es um andere Datenformate geht oder fuchsige Parser muss ich 
passen, ich übe vhdl sehr selten, aber immerhin ein Anfang vielleicht.
1
file hfile: text  open read_mode is "testfile.txt";
2
variable l: LINE;
3
variable chr : character;
4
variable bin : std_logic_vector(dat'range):=(others=>'0');
5
variable end_of_line : boolean := false;
6
7
while not endfile(hfile) loop
8
  readline(hfile, l );
9
  if(l'length /= 0) then       
10
    read(l , chr , end_of_line);   
11
       
12
    while end_of_line loop
13
       read(l , chr_stimulus, end_of_line);
14
       bin <= std_logic_vector(to_unsigned(character'pos(chr), bin'length));
15
    end loop;   
16
  end if;         
17
wait until rising_edge(clk);

von Str2Logic (Gast)


Lesenswert?

Googeln ergibt "TXT_UTIL.vhd". Enthält viele
nützliche Tools wie to_std_logic_vector...

von Tombo (Gast)


Lesenswert?

danke soweit!

Wenn ich dies package für eine Testbench benutzen möchte, übernehme ich 
es in das Projekt.
Wenn ich dann    use work.text_util.all    sage, meckert ise: Cannot 
find <text_util> in library <isim_temp>

sollte das nciht so funktionieren?

von Str2Logic (Gast)


Lesenswert?

TXT_UTIL, nicht TEXT_UTIL !!

von Tombo (Gast)


Lesenswert?

omg! verkriech

Danke dir!

von Franziskus (Gast)


Lesenswert?

TXT_UTILL und TXT_UTTIL sind auch sehr hilfreich.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Als zusätzlichen Tipp.

Der Kurs hatte mir die Tomaten aus den Augen entfernt.

http://www.stefanvhdl.com/

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.