9

最初の VHDL クラスのときから頭を悩ませていたので、ここに質問を投稿することにしました。

宣言されたエンティティ (およびそのアーキテクチャ) があり、それを別のアーキテクチャ内でインスタンス化したい場合、インスタンス化する前に、この包含アーキテクチャ内で「エンティティ」(コンポーネント) を再宣言する必要があるように見えるのはなぜですか?

コンパイラは、名前だけでインスタンス化をそのアーキテクチャに一致させるほどスマートではありませんか? コンポーネント宣言の必要性はどこにありますか?

4

2 に答える 2

13

必要に応じて、コンポーネントを直接インスタンス化できます。

  MyInstantiatedEntity : entity work.MyEntity_E
    generic map (
        config          => whatever)
    port map (
        clk             => signal1,
        clk_vid         => signal2,
        ...

コンポーネント宣言を作成すると、構成仕様などを介してインスタンス化にバインドされるものを変更する追加機能が提供されます。

于 2010-09-04T16:01:00.247 に答える
3

学生時代に VHDL の割り当てを行ったときは、すべてのコードを 1 つのファイルにまとめる必要があったため、モジュールごとに 1 つのファイルを作成できるかどうか、またどのように作成したかを覚えていません。

そうは言っても、C や C++ でプロトタイプ、構造体、クラスなどを定義するのとほぼ同じ方法で使用する場合は、動作を定義するときに使用するエンティティを宣言する必要があります。ここでの違いは、VHDL でこの「再宣言」用のヘッダー ファイルを定義する余裕がないことです (少なくとも同等のものはないと思います)。したがって、これを行う必要があることは、私にとって完全に合理的だと思われます。VHDL が登場したのは、C が非常に一般的であり、コンパイラが今日のように「十分にスマート」ではなかったときであることに注意してください。

VHDL の第一人者はこれについて決定的な答えを持っているかもしれませんが、これが私が理解している方法です。

于 2010-09-04T08:16:30.720 に答える