Forum: FPGA, VHDL & Co. Vhdl Textersatz


von Friedrich (Gast)


Lesenswert?

Ich habe folgende Fragestellung: Gibt es in Vhdl einen Textersatz? Zur 
Aufgabenstellung: Daten aus einem Textfile sollen in einer Testbench 
eingelesen werden. Zunächst aus File_1, dann aus File_2 usw. Anstatt 
jedes File (bei mehreren macht es wenig Sinn) separat aufzulisten und 
einzulesen dachte ich an eine Art Schleife. Dazu muss der File Name 
jedoch hochgezählt werden.


'File_i.txt'
-> File einlesen, Counter i hochzählen -> File einlesen ...

Danke für Vorschläge

von Marius W. (mw1987)


Lesenswert?

Du kannst doch auch den String zusammenbauen:
1
a := "File_" & integer'image(i) & ".txt"

Gruß
Marius

von Friedrich (Gast)


Lesenswert?

Danke. Wusste nicht, dass das geht. Schönes Wochenende.

von Friedrich (Gast)


Lesenswert?

Wie lassen sich Files innerhalb eines Prozesses öffnen?

alt:
1
architecture log_to_file of FILE_LOG is
2
 file l_file: TEXT open write_mode is "text.txt";
3
begin
4
  process
5
  begin 
6
  while true loop
7
   writeline(l_file, l);
8
  end loop;
9
  ...

neu:
1
p1: process(newfile)
2
variable a ...
3
begin
4
  if newfile = 1 then
5
     i <= i+ 1;
6
     a := "File_" & integer'image(i) & ".txt"
7
  end;
8
end process p1;
9
10
p2: process
11
  file l_file: TEXT open write_mode is a; 
12
begin
13
  while true loop
14
   writeline(l_file, l);
15
  end loop;
16
end process p2;

Im process p2 müsste ich l_file als Variable definieren. Die 
Beschreibung ist momentan aufgrund der Problematik nicht ausführbar. 
Abhilfe?

von Duke Scarring (Gast)


Lesenswert?

Friedrich schrieb:
> Wie lassen sich Files innerhalb eines Prozesses öffnen?
Mit file_open:
1
    ...
2
        file     stim     : text;
3
        variable status   : file_open_status;
4
        variable l        : line;
5
    ...
6
        file_open( status, stim, file_name);
7
        if status = open_ok then
8
            while not endfile( stim) loop
9
                readline( stim, l);
10
                ...
11
                wait until rising_edge( clk);
12
                ...
13
            end loop;
14
            file_close( stim);
15
        else
16
            report "could not open file (" & file_name & ")"
17
                severity warning;
18
            wait;
19
        end if;
20
   ...

Duke

von Friedrich (Gast)


Lesenswert?

Dein Beispiel ist für das Lesen eines Files, richtig? Wie stelle ich auf 
write mode um? (das file muss erst angelegt werden)
1
 file l_file: TEXT open write_mode is log_file;

von Duke Scarring (Gast)


Angehängte Dateien:

Lesenswert?

Friedrich schrieb:
> Dein Beispiel ist für das Lesen eines Files, richtig?
Ja.

> Wie stelle ich auf write mode um?
Indem Du einen anderen 'file open mode' verwendest:
1
        file_open( status, stim, file_name, append_mode);
2
3
        if status = open_ok then
4
            for i in 0 to 10 loop
5
                write( l, value);
6
                writeline( stim, l);
7
                wait until rising_edge( clk);
8
                value <= i * 2;
9
            end loop;
10
            file_close( stim);
11
        else
12
            report "could not open file (" & file_name & ")"
13
                severity warning;
14
        end if;

Duke

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.