Sie deklarieren die Array-Instanz einfach falsch. Statt
type bit2_t is array (0 to 1) of bit;
type record0 is record
bit2 : array (0 to 1) of bit;
end record;
Sie benötigen
type bit2_t is array (integer range <>) of bit;
type record0 is record
bit2 : bit2_t(0 to 1);
end record;
verwenden Wenn Sie ein Array von 2-Bit-Arrays von Bits wollten, würden Sie
type bit2_t is array (0 to 1) of bit;
type bit2_array_t is array (integer range <>) of bit2_t;
type record0 is record
bit2 : bit2_array_t(0 to 7); -- '7' or whatever your range needs to be
end record;
verwenden Sie könnten dies leicht machen allgemeinere durch Ändern der 7
zu einer Konstante, etwas wie bit2 : bit2_array_t(0 to BIT2_ARRAY_LENGTH-1);
.
Wenn Sie einen Datensatztyp haben möchten, der in irgendeiner Weise paramatisiert ist, können Sie dies, wie ich weiß, nur mit Paketgenerika erreichen, wie in this answer erklärt. Ihr Code würde das Paket wie beschrieben verwenden, und dieses Paket würde Ihren Datensatztyp mit Array-Größen basierend auf einem generic
-Parameter deklarieren. Durch Instanziieren des Pakets mit einem anderen Wert für die generic
in jedem Fall könnte Ihre record
unterschiedliche Elementgrößen für diese verschiedenen Fälle haben.
Ich würde anmerken, dass ich glaube nicht, dass Paket-Generics von Synthese-Tools weitgehend unterstützt werden.
Ich verstehe nicht ganz, Ihr zweites Beispiel definiert immer noch den 'bit2_t' Typ, was ich gerne vermeiden würde. –
Yup das ist es. Nur um weniger zu schreiben. Wie können wir in C. tun. –