Forum: FPGA, VHDL & Co. Array of Strings


von rupert (Gast)


Lesenswert?

Hallo,

für eine Testbench wollte ich gerne ein array von strings haben, die mir 
mode infos für das Terminal ausgeben, aber unterschiedlichen Längen 
haben.
Ein einfaches array erstellen geht wohl nicht, durch die 
unterschiedlichen Stringlängen. Was ich bis jetzt gefunden habe ist 
folgendes:
1
type line_vector is array(0 to 2) of line;
2
variable modes : line_vector := (
3
  new string'("mode on"),
4
  new string'("mode test"),
5
  new string'("mode off")
6
);

Wenn ich mir jetzt aber einen mode ausgeben lasse möchte in Modelsim 
Terminal
mit z.B.
1
report modes(0) severity note;

Bekomme ich die Fehlermeldung:
"Target type std.STANDARD.STRING in variable assignment is different 
from expression type std.TEXTIO.LINE."

Ich würde aber einen String erwarten.

Hat jemand mit sowas schon Erfahrung, bzw. gibt es eine 
(einfache)Konvertierung von Line nach String ?

von Markus F. (mfro)


Lesenswert?

der Typ "line" ist zunächst mal nix anderes als ein Zeiger (access) auf 
String. Du kannst den entsprechend verwenden oder den Stringzeiger 
gleich selber bauen:
1
--  Hello world program.
2
use std.textio.all; -- Imports the standard textio package.
3
4
--  Defines a design entity, without any ports.
5
entity hello is
6
end hello;
7
8
architecture behaviour of hello is
9
    type str_acc is access string;
10
    type str_acc_arr is array (1 to 10) of str_acc;
11
12
    constant CHARS : string := "ABCDEFGHIJK";
13
begin
14
    process
15
        variable l : str_acc_arr;
16
    begin
17
        for i in 1 to 10 loop
18
            l(i) := new string(1 to i);
19
            for j in 1 to i loop
20
                l(i)(j) := CHARS(j);
21
            end loop;
22
        end loop;
23
24
        for i in 1 to 10 loop
25
            report "i=" & integer'image(i) & ", l(i)=" & l(i).all severity note;
26
        end loop;
27
        wait;
28
   end process;
29
end behaviour;

von rupert (Gast)


Lesenswert?

Vielen Dank. Das hilft mir sehr weiter und macht das ganze 
verständlicher.

Gibt es für den Zeiger, access Typ irgendwo eine Auflistung welche 
Attribute man verwenden kann ? wie z.B. das ".all"

von Markus F. (mfro)


Lesenswert?

rupert schrieb:
> Vielen Dank. Das hilft mir sehr weiter und macht das ganze
> verständlicher.
>
> Gibt es für den Zeiger, access Typ irgendwo eine Auflistung welche
> Attribute man verwenden kann ? wie z.B. das ".all"

.all ist kein Attribut, sondern einfach das "Dereferezierungs-Suffix".

Sehr viel mehr gibt es über access Typen auch gar nicht zu wissen 
(deallocate fehlt noch und die Tatsache, dass es für Array- und 
Record-Member eine verkürzte Schreibweise gibt, bei der man auf das .all 
verzichten kann).

Ansonsten hat es - soweit bekannt - noch niemandem geschadet, ein gutes 
Buch zu lesen ;). Ashenden's "Designer's Guide to VHDL" ist definitiv 
ein solches (auch wenn access-Typen dort nur ein paar Seiten der 
Schwarte ausmachen).

: Bearbeitet durch User
von Ingo L. (corrtexx)


Lesenswert?

rupert schrieb:
> variable modes : line_vector := (
mach mal
1
variable modes : line_vector := )

SCNR

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.