1

VHDL テスト ファイル a.vhd があります。

猫 a.vhd

package pak is
component b is              -- 1st definition of component b.
end component
end pak;

use work.pak.all;          -- 1st definition visible through this package use clause
entity a is
  port (in1 : in std_logic );
end a;

architecture a of a is

component b                   -- 2nd definition of component b.
  port ( in11 : in std_logic);
end component;

begin
  inst : b port map ( in11=> in1);   -- there are two definitions of component b at this instance.
end a;

entity b is
port (in11 : in std_logic);
end b;

architecture b of b is
begin
end b;

そのため、modelsim を実行すると、オーバーライドされたコンポーネントの警告/エラーは発生しませんでした。パッケージで宣言された同じ名前のコンポーネントよりも、アーキテクチャで宣言されているコンポーネントを常に優先しますか。LRMがそれについて何を言っているのか誰か教えてもらえますか? これを説明してください。

4

1 に答える 1

4

この特定の例では、「a」で「inst」としてインスタンス化するコンポーネントは、work.pak.b のポート宣言が異なるため、アーキテクチャで宣言されたコンポーネント「b」であることが確実です。

A にポートがない "b" をインスタンス化した場合、work.pack.b が表示されます。

ただし、これらのいずれかと「エンティティ b」との間に固有のリンクがないことを理解してください。デザインがエラボレートされるとき (シミュレーションの開始時など) にのみ、ツールはコンポーネント宣言と実際に一致する "b" を探します。この場合、「a」で宣言された「b」は見つかりますが、「work.pak.b」に一致するエンティティは見つかりません。

この段階で、構成 (個別の構成、またはアーキテクチャ A に埋め込まれた構成ステートメント) を使用して、特定のエンティティ "work.b" を "b" にバインドできます。ポート宣言が一致しないため、これは「work.pak.b」では機能しません。

于 2013-03-12T14:31:08.147 に答える