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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.