2016-09-21 8 views
1

VHDLのどのバージョンでも、おそらく2008年に宣言される前に型を使用できますか?VHDL(2008)で宣言される前に型を使用する

など。私は、エンティティのアーキテクチャでは、この配列の宣言があります。同じアーキテクチャのセクションで

type my_array is array (integer range <>) of my_type; 

そして、まだのが、後で私はこれを持っているファイルで:

type my_type is record 
    my_field: signed(31 downto 0); 
end record; 

今は、この中で、次のエラーが発生しますVivado:

[シンセ8から1031] my_typeが宣言されていない

解決策はもちろん、レコード宣言を配列宣言の上に移動することです。しかし、これは非常に複雑で面倒なものになります(基本的には依存関係を考慮して型をトポロジー的に並べ替える必要があるため)。

このようなものは、すべての主要なプログラミング言語でサポートされているので、おそらくVHDLにも存在すると思います。 VHDL 2008に追加されたこのことについて読んでもぼんやりと読んでいますが、VHDL 2008のクイックテストは否定的でした。

タイプが同じアーキテクチャ、同じファイル、しかし数行下にまだ宣言されているので、宣言される前にVHDLの型を使用することは可能ですか?

+1

VHDL-2008の汎用タイプが役立ちます。 –

+0

Hmm。ジェネリックスは複雑な依存関係を単純化するのに役立つかもしれませんが、一般的には簡単に問題を解決することはできません(なぜなら、ジェネリックスを別々にプラグインすることに注意する必要があります。 – Piedone

答えて

2

VHDLのどのバージョンでも、おそらく2008年に宣言される前にタイプを使用できますか?

IEEE STD 1076年から2008年6宣言

6.1一般

言語は、宣言によって明示的または暗黙的に宣言されている固有表現のいくつかの種類を定義します。各エンティティの名前は、識別子として、または演算子のシンボルまたは文字リテラルのいずれかとして、宣言によって定義されます。
...
宣言の各形式について、言語規則は、宣言のスコープと呼ばれる特定のテキスト領域を定義します(12.2を参照)。宣言...

12.2スコープ

宣言の範囲、アーキテクチャ体を除いて、直ちに閉鎖宣言領域の端部に宣言の先頭から延びています。アーキテクチャ本体のスコープは、アーキテクチャ本体の最初から最後まで拡張されます。どちらの場合でも、宣言のスコープのこの部分は、イミディエートスコープと呼ばれます。

12。3可視性

宣言は、スコープの特定の部分でのみ表示されます。この部分は、PSL検証単位、パッケージ宣言、または保護された型宣言以外の設計単位の宣言を除き、宣言の終わりに始まります。この場合、予約語が発生した直後に、デザイン単位、パッケージ宣言、または保護された型の宣言が含まれます。この規則は、明示的宣言と暗黙的宣言の両方に適用されます。

タイプが宣言される前に参照を停止するのは表示ルールです。

VHDLはインターフェイスタイプ宣言(ジェネリック型)以外の型の前方宣言をサポートしていませんが、例のようにサブタイプに対してはmy_arrayが表示されます。

ブライアンは有用性がピーターAshendenの本VHDL 2008ちょうど新しいスタッフにまとめたタイプの者に限定欠け合成ベンダーのサポートだけでなく、制限(6.5.3インタフェース型宣言を参照)であることを示してジェネリック型:

1.1汎用型

VHDL-2008は、正式なジェネリック型とは、使用する方法をカバーするルールの数を定義します。正式ジェネリックタイプ名は、ファイルタイプまたは保護タイプを除いて、任意の制約タイプを表す可能性があります。エンティティは、そのようなすべてのタイプに対して利用可能な操作が適用可能であると仮定することができます。新しいものを使った割り当て。タイプの修飾とタイプ変換。平等と不平等の操作。正式ジェネリック型は、ファイル要素または属性の型として使用することはできません。さらに、実際の型がアクセス型でなく、アクセス型のサブ要素を含まない場合には、明示的に宣言された定数の型またはシグナル(ポートを含む)としてのみ使用できます。信号の場合、ドライバーの更新とイベント検出には、実際のタイプの事前定義された等価演算子が使用されます。

+0

それは悲しいことですが、私は不便な真実で生きなければならないと思います。あなたは偶然のアクセスタイプのような間接的な回避策を知っていますか? – Piedone

2

アクセスタイプのため、不完全な型宣言は次のように、連結リストの型を可能にするために、参照することができ、特別な場合、そこにあることに注意してください:しかし、これは使用しないで

type value_cell; -- Incomplete declaration 

type value_ptr is access value_cell; -- value_cell only for access type 

type value_cell is record -- Full declaration 
    value  : bit_vector(0 to 3); 
    next_cell : value_ptr; 
end record value_cell; 

は、宣言前の型、アクセス型は合成可能ではありませんが、テストベンチコードにとっては便利なテクニックです。

+0

これは私の場合を解決するものとまったく同じように見えます。しかし、あなたが言うように、これは合成可能ではなく、バマーです...私は残念なことに合成可能なコードのためにこれを必要とします。 – Piedone

関連する問題