VHDL Probleme mit zugriff auf Array

Gast #2217155
Lesenswert?
• ▲
▼
Hallo,

habe ein Problem mit dem Ansprechen von Arrays in VHDL kann mir jemand 
Helfen?


Deklaration des Arrays:
1
type S_array is array(15 downto 0) of std_logic_vector (3 downto 0);
2
    constant S1 : S_array := (x"2",x"5",x"1",x"9",x"E",x"A",x"C",x"8",x"6",x"4",x"7",x"F",x"D",x"B",x"0",x"3");
3
    constant S2 : S_array := (x"B", x"4", x"1", x"F", x"0", x"3", x"E", x"D", x"A", x"8", x"7", x"5", x"C", x"2", x"9", x"6" );
4
    constant S3 : S_array := (x"D", x"A", x"B", x"1", x"4", x"3", x"8", x"9", x"5", x"7", x"2", x"C", x"F", x"0", x"6", x"E" );
1
     variable l  : unsigned (3 downto 0);
2
     variable r : unsigned (3 downto 0);
3

4

5
    input1 := unsigned(din (31 downto 24));
6
    input2 := unsigned(din (23 downto 16));
7
    input3 := unsigned(din (15 downto 8));
8
    input4 := unsigned(din (7 downto 0));
9

10
    -- prozedut input1
11
    l := (input1 and x"0F") srl 4;
12
    r :=  input1 and x"F0";
13
    
14
    state := S1(l xor r);

als Fehlermedung kommt immer
ncvhdl_p: *E,INTYMM (./HDL/fox64Sigma4Datapath.vhdl,57|15): array index 
type mismatch [6.4].

Zeite 51 ist genau die Zeite wo aus dem Array was ausgelesen wird.

Danke Une
Gast #2218016
Lesenswert?
• ▲
▼
Hallo Duke,

habe es versucht mit
1
 state := S1( to_integer( l xor r));

nun kommt aber folgende Fehler in der gleichen Zeile:
ncvhdl_p: *E,EXPTYP (./HDL/fox64Sigma4Datapath.vhdl,57|15): expecting an 
expression of type UNSIGNED 87[8.4] 93[8.5].

Une
Gast #2218131
Lesenswert?
• ▲
▼
Une schrieb:
> nun kommt aber folgende Fehler in der gleichen Zeile:
> ncvhdl_p: *E,EXPTYP (./HDL/fox64Sigma4Datapath.vhdl,57|15): expecting an
> expression of type UNSIGNED 87[8.4] 93[8.5].
Dann eben so:
1
    state := S1( to_integer( unsigned(l xor r)));

Duke

P.S.: Falls Du gerade erst mit VHDL anfängst und den Code auch noch 
synthetisieren willst, vergiss die Variablen für's erste...
Moderator (Firma: Titel) Persönliche Seite #2219495
Lesenswert?
• ▲
▼
Was war der Grund, wrum keiner dein Problem sehen konnte. Die Definition 
von state wurde nicht gepostet. Offenbar hat ist state ein 
std_logic_vector... :-/
1
type S_array is array(15 downto 0) of std_logic_vector (3 downto 0);
2
    constant S1 : S_array := .....
3
:
4
    state := S1(...);

Dann hättest du also auch "einfach" so schreiben können:
1
state := std_logic_vector(S1(to_integer(unsigned(l xor r))));

Fazit: es ist in VHDL elementar wichtig, sich über die zu verwendenen 
Datentypen ausführlich Gedanken zu machen. Sonst artet das immer gleich 
in eine Konvertierungsorgie aus...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren