0

次の簡単なテストケースがあります:

library ieee;
use ieee.std_logic_1164.all;

entity top is
end top;

architecture top of top is
component foo
  port (A : std_logic_vector(1 downto 0));
end component;

begin
inst : foo port map (A(1) => '0', A(0) => '0');
end top;

------------------------------------------------

library ieee;
use ieee.std_logic_1164.all;

entity foo is
  port (A : std_logic_vector(1 downto 0));
end foo;

architecture foo of foo is
begin
end foo;

これでmodelsimを実行すると、問題なく動作します。しかし、オプション '-87' を指定して modelsim を実行すると、これが得られないというエラーが表示されます Error: top.vhd(13): (vcom-1451) Actual (enumeration literal '0') for formal "A" is not signal name.。これは VHDL'87 の不正な RTL ですか?

これが VHDL'87 でサポートされていない場合、定数をインスタンス ピンに接続する正しい方法は何でしょうか。

4

1 に答える 1

2

Modelsim の Verror メッセージを調べると、次のようになります。

vcom メッセージ # 1451: 実際の指定子は静的な信号名ではなく、式です。VHDL 1987 ポート マップでは、関連付け要素の実際の指定子は、静的信号名か、引数が静的信号名だけの変換関数呼び出しのいずれかでなければなりません。どの VHDL 言語バージョンのサブプログラム関連リストでも、クラス SIGNAL サブプログラム パラメータに関連付けられた実際のパラメータは、静的なシグナル名でなければなりません。
VHDL の新しいバージョンでは、実際のポート マップに柔軟性を持たせることができます。
-93、-2002、または -2008 スイッチを vcom に使用してみてください。
[DOC: IEEE Std 1076-1987 VHDL LRM - 2.1.1.2 信号パラメーター、
4.3.3.2 関連リスト]
[DOC: IEEE Std 1076-1993 VHDL LRM - 2.1.1.2 信号パラメーター]

したがって、はい、ポート アソシエーションの実際の有効なものには違いがあります。-1993 の「自由化」は、それ以降のバージョン (-2002、-2008) にも適用されます。

実際には、単なる式ではなく、名前を付ける必要があります。デフォルト値の入力は、開いたままにすることができます。

于 2014-02-27T09:38:47.483 に答える