Array mit nur einem Element

OP #2514946
Lesenswert?
• ▲
▼
Hallo,

Kann mir jemand erklären warum man ein Signal oder eine Konstante eines 
Arrays mit nur einem Element nicht initialisieren kann. Der Compiler 
meldet "Integer literal 3 is not of type t_i". Aber warum? Mittels 
Zuweisung scheint es ja zu gehen. siehe Beispiel!

------------------------------------------------------------------------ 
-------

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity test is
end test;

architecture behavior of test is

type t_i is array (natural range <>) of integer;

constant i1 : t_i := (3,5);         -- OK
constant i2 : t_i := (3);           -- compile failure
signal i3   : t_i(0 to 1) := (3,5); -- OK
signal i4   : t_i(0 to 0) := (3);   -- compile failure
signal i5   : t_i(0 to 0);          -- OK

begin

i5(0) <= 3;  -- OK

end behavior;
Persönliche Seite #2515067
Lesenswert?
• ▲
▼
Thomas Wendt schrieb:
> Kann mir jemand erklären warum man ein Signal oder eine Konstante eines
> Arrays mit nur einem Element nicht initialisieren kann. Der Compiler
> meldet "Integer literal 3 is not of type t_i". Aber warum? Mittels
> Zuweisung scheint es ja zu gehen.

Die Initialisierung mit "(3)" ist einfach nur ein arithmetischer 
Ausdruck, der äquivalent zum Literal "3" ist, und daher keiner gültigen 
"array aggregate expression" entspricht. Man kann sich jetzt durch das 
LRM arbeiten und schauen, ob das Verhalten korrekt ist. Ein 
kommerzieller Compiler, den Du vermutlich auch verwendest, meckert 
jedenfalls.

Bei Deiner Zuweisung verwendest Du ja ganz explizit das Element mit dem 
Index 0.

Gruß
Marcus

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