Forum: FPGA, VHDL & Co. Array mit nur einem Element


von Thomas W. (donka)


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;

von SuperWilly (Gast)


Lesenswert?

Folgendes geht:
1
signal i4   : t_i(0 to 0) := (others => 3);

VG, SuperWilly

von Engineer (Gast)


Lesenswert?

Funktioniert das?
1
signal i4   : t_i(0) := (3);

von Alo (Gast)


Lesenswert?

>Funktioniert das?
>signal i4   : t_i(0) := (3);


Nein:

Expecting a type name, found type conversion (to t_i) instead.

von SuperWilly (Gast)


Lesenswert?

Folgendes geht auch:
1
signal i4   : t_i(0 to 0) := (0 => 3);


VG, SuperWilly

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


Lesenswert?

Oder so:
1
 signal i4   : t_i(0 to 0) := (others => 3);

von Marcus H. (mharnisch) Benutzerseite


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

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


Lesenswert?

Einen hab' ich noch...  ;-)
1
 signal i4   : t_i(0 to 0) := (3, others => 0);

von SuperWilly (Gast)


Lesenswert?

>Einen hab' ich noch...  ;-)
>signal i4   : t_i(0 to 0) := (3, others => 0);

Ich liebe VHDL!

;-) SuperWilly

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.