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;
Gast
#2514967
Folgendes geht:
1 | |
VG, SuperWilly
Gast
#2514972
Funktioniert das?
1 | |
Gast
#2514974
>Funktioniert das? >signal i4 : t_i(0) := (3); Nein: Expecting a type name, found type conversion (to t_i) instead.
Gast
#2514978
Folgendes geht auch:
1 | |
VG, SuperWilly
Oder so:
1 | |
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
Einen hab' ich noch... ;-)
1 | |
Gast
#2516183
>Einen hab' ich noch... ;-) >signal i4 : t_i(0 to 0) := (3, others => 0); Ich liebe VHDL! ;-) SuperWilly
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.