Forum: FPGA, VHDL & Co. string in VHDL mit Werten belegen


von noips (Gast)


Lesenswert?

Hallo,

ich würde gerne einen String mit Werten 'a' bis 'z' belegen aber ich 
habe Null Ahnung wie man das macht. Mein Versuch sieht so aus:
1
signal str  : string(0 to 25);
2
  
3
begin
4
  process begin
5
    for i in 0 to 25 loop
6
      str(i) <= 'a' + i;
7
    end loop;
8
  end process;

Der ispLever sagt aber, dass der den Operator + nicht kennt.

Wie mache ich so etwas denn richtig? Könnte mir bitte jemand helfen!

Vielen Dank!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

noips schrieb:
> Der ispLever sagt aber, dass der den Operator + nicht kennt.
Du kannst nicht einfach zwei verschiedene Datentypen aufeinander 
addieren...

> Wie mache ich so etwas denn richtig? Könnte mir bitte jemand helfen!
Als Denkanstoss die attribute 'val und 'pos:
str(i) <= character'val(character'pos('a') + i);

von noips (Gast)


Lesenswert?

Danke für den Denkanstoss!

Ich würde das gleiche jetzt gerne mit einem Array von Vektoren, statt 
mit einem String machen. Habe unterschiedliches ausprobiert aber zu 
keinem Ergebnis gekommen.
Ich hätte es gerne so wie unten, aber da gibt es auch Probleme mit dem + 
Operator. Ist so etwas überhaupt irgendwie möglich?
1
type uchar_arr is array (0 to 255) of std_logic_vector(7 downto 0);
2
signal str : uchar_arr;
3
  
4
begin
5
  process begin
6
    for i in 0 to 255 loop
7
      str(i) <= "00000000" + i;
8
    end loop;
9
  end process;

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Nimm die numeric_std Lib und dann schreibst du:
str(i) <= std_logic_vector(to_unsigned(i,8));

http://www.lothar-miller.de/s9y/archives/14-Numeric_Std.html

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.