2016-06-20 3 views
2

私は書くことができます:VHDLで配列の型を定義せずに配列フィールドでレコードを作成する方法は?

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

をしかし、私は、私はそれを必要としないので、bit2_tを定義せずにそれをしたいのようなものだろう:

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

しかし、私は、そのGHDL 0.34しようとした場合:

type mark expected in a subtype indication 

答えて

0

単に配列のインスタンスを間違って宣言しているだけです。代わりに

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

のあなたは、あなたが

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; 

を使用するビットの2ビット配列の配列を、望んでいた場合は、これはもう少し汎用的にすることができ

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

を使用する必要があります7を定数に変更すると、bit2 : bit2_array_t(0 to BIT2_ARRAY_LENGTH-1);のようになります。

私が知る限り、何らかの形でパラメータ化されたレコードタイプを使用したい場合は、this answerで説明されているように、パッケージジェネリックを使用してのみこれを達成できます。あなたのコードは記述されているようにパッケージを使用し、このパッケージはgenericパラメータに基づいて配列サイズでレコードタイプを宣言します。それぞれgenericの異なる値を持つパッケージをインスタンス化することにより、recordは異なる場合に異なる要素サイズを持つことができます。

パッケージジェネリックスが合成ツールで広くサポートされているとは思われません。

+0

私はよく分かりませんが、2番目の例ではまだ 'bit2_t'型が定義されています。これは避けたいものです。 –

+0

そうですね。ちょうど少なく書く。私たちはCでできるのと同じように。 –

関連する問題