Hallo zusammen,
ich habe leider gerade ein Problem in meiner Testbench, dort kann ich
nicht wie gewünscht eine Text Line in eine andere kopieren.
Hintergrund: ich möchte gerne eine Text Datei parsen, daraus dann meine
Befehle und Daten gewinnen und anschließend verarbeiten.
Die Textdatei ist wie folgt aufgebaut:
1 | d 01 02 03
|
2 | e 04 05 06 07 08
|
3 | p
|
4 | d 09 0A 0B 0C
|
5 | e 0C 0B 0A
|
6 | p
|
7 | ...
|
Hier ist ein Codebeispiel, wie ich die Daten verwenden will:
1 | process
|
2 | variable vCommand : character;
|
3 | variable vLine : line;
|
4 | variable vLine_D : line;
|
5 | variable vLine_E : line;
|
6 | variable vData_D : std_logic_vector(7 downto 0);
|
7 | variable vData_E : std_logic_vector(7 downto 0);
|
8 | variable vStatus_D: boolean;
|
9 | variable vStatus_E: boolean;
|
10 |
|
11 | begin
|
12 | while vCommand != 'p' loop
|
13 | readline(File, vLine);
|
14 | read(vLine, vCommand);
|
15 | case vCommand is
|
16 | when 'd' => -- load data into line D
|
17 | vLine_D := vLine;
|
18 | when 'e' => -- load data into line E
|
19 | vLine_E := vLine;
|
20 | when 'p' => -- process data
|
21 | NULL;
|
22 | end case;
|
23 | end loop;
|
24 |
|
25 | read(vLine_D, vData_D, vStatus_D);
|
26 | read(vLine_E, vData_E, vStatus_E);
|
27 |
|
28 | while (vStatus_D = TRUE) or (vStatus_E = TRUE) loop
|
29 | -- process data...
|
30 |
|
31 | -- read next data
|
32 | read(vLine_D, vData_D, vStatus_D);
|
33 | read(vLine_E, vData_E, vStatus_E);
|
34 | end loop
|
35 |
|
36 | end process;
|
Zunächst wird aus einer Datei die Zeile ausgelesen, dann das erste
Zeichen als Kommando geparst. Je nach Kommando soll der Rest der Zeile
dann in einen eigenen Speicher gelegt werden, um dann später verarbeitet
zu werden.
Ich vermute, dass die Zuweisung "vLine_D := vLine" nicht funktioniert.
Zumindest liefert mir das anschließende
read(vLine_D, vData_D, vStatus_D); immer den Status FALSE zurück...
Nach einiger Zeit kommt dann sogar noch folgender Fehler
# ** Fatal: (SIGSEGV) Bad handle or reference.
# Time: 95720 ns Iteration: 1 Process: <process>/line__72 File:
<file>
# Fatal error in Process line__72 at <file> line 128
Die Line 128 bezieht sich auf das Read Command, allerdings erst wenn die
Datei vollständig geparst wurde.
Habt ihr eine Idee, was hier der Fehler ist? Leider bin ich auch bei
meinen Google Suchen nicht weitergekommen.
Vele Grüße,
Jürgen