2016-06-20 4 views
2

kann ich schreiben:Wie erstellt man einen Datensatz mit einem Array-Feld, ohne einen Typ für das Array in VHDL zu definieren?

type bit2_t is array (0 to 1) of bit; 
type record0 is record 
    bit2 : bit2_t; 
end record; 

Aber ich würde es tun, ohne definieren bit2_t, da ich es nicht brauchen, so etwas wie:

type record0 is record 
    bit2 : array (0 to 1) of bit; 
end record; 

Aber wenn ich versuche, dass GHDL 0.34 sagt:

type mark expected in a subtype indication 

Antwort

0

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.

+0

Ich verstehe nicht ganz, Ihr zweites Beispiel definiert immer noch den 'bit2_t' Typ, was ich gerne vermeiden würde. –

+0

Yup das ist es. Nur um weniger zu schreiben. Wie können wir in C. tun. –

Verwandte Themen