回答:
これは、一部の人々(特に物理的な電子機器のバックグラウンドを持つ人々)に役立つアナロジーです。
A component
はコンパイラに「ある時点でこれを呼び出すようなピンが付いたものになるでしょうが、今のところは心配しないでください」と伝えます。一種の「ソケット」を定義します。続いて、その「ソケット」に「つながる」ものを説明することができます。
entity
名前とそのコンパイラは、その「ソケット」(したがって、「ワイヤ」に接続すること)に「プラグに」缶ピンのセットで特定の何かです。
あなたがいないことに注意必要があるcomponent
あなたは「ソケット」は個別に定義する必要はありませんので、コンパイラはすでに実体について知っている意味「直接インスタンス化」を行うことができます。実際、それは私の推奨されるアプローチです。そうでなければ、component
同期を保つための追加レベルです。
VerilogとVHDLを混在させ、VHDL内でVerilogブロックを使用する必要がある場合は、コンポーネントを使用する必要があります。次に、これcomponent
がソケットであり、コンパイラ/エラボレーターがVerilogをソケットにプラグインできるのはかなり後のことです。
エンティティが複数持つことができ、デザインユニットへの本当のインタフェースであるアーキテクチャ。 エンティティは物の出し入れ方法を定義し、アーキテクチャはデザインユニットの動作方法を定義します。したがって、同じエンティティによって記述される同じ機能を実装する複数の方法を使用できます。
A コンポーネントは、理想的又は「仮想」デザインユニットです。トップダウン設計を行う場合(つまり、下位レベルブロックを設計する前に最上位レベルをまとめる場合)、コンポーネントを使用して、設計ユニットに期待するインターフェイスのタイプを記述できます。これは、将来の実際の実装のためのプレースホルダーまたはブラックボックスと考えることができます。
構成を使用するをすると、特定のコンポーネントインスタンスをエンティティ定義にバインドます。ここで、どのポートをどのポートに接続する必要があるかをマップできます。これは、理想的な意味で定義されたコンポーネントが実際に実装されたエンティティにどのようにマッピングされるかをマッピングします。
実際にはには、コンポーネントは通常不要であり、通常使用されない別のレベルの抽象化を作成することがわかりました。エンティティを直接インスタンス化し、エンティティのインスタンスに使用するアーキテクチャを参照することにより、コンポーネントの使用(および必要性)をスキップできます。
例えば:
MyDesignUnit : entity library_name.entity_name(architecture_name)
port map(
...
以下の[1]から:
VHDLのエンティティ、コンポーネント、およびコンポーネントインスタンスには重要な違いがあります。エンティティは設計インターフェースを記述し、コンポーネントはインスタンス(またはサブブロック)として使用されるエンティティのインターフェースを記述し、コンポーネントインスタンスは他の部品や信号に接続されたコンポーネントの別個のコピーです。これらを、自作部品を使用したブレッドボード設計のプロセスと比較する。エンティティとアーキテクチャは、パーツがどのように機能するかのインターフェイスと回路図を記述したデータブックのようなものです。このコンポーネントは、接続方法を説明するパーツに付属する短いピンリストのようなものです。コンポーネントインスタンスは実際の部分そのものであり、それぞれが独立して動作する多くのものを持っている場合があります。
コンテキストと詳細については、[1]を参照してください。
ライン上には多数のVHDLチュートリアルがあります。例[2] [3] ...本(84ページPDF)[4]よさそうです[5]主にリンク[6]
エンティティは、入出力ポートが指定されている設計単位です。エンティティは外部ポートを定義するだけですが、内部の機能は対応するアーキテクチャによって指定されます。コンポーネントは、エンティティとアーキテクチャの両方で構成される完全な設計単位です。最初のステップは、コンポーネントの宣言(名前とポートの指定)、そしてコンポーネントのインスタンス化(ポートマッピング)です。