2

VHDL テストケースで modelsim を実行しているときに上記のエラーが発生し、なぜエラーなのか理解できません。

テストケース:

LIBRARY IEEE;
Use ieee.std_logic_1164.all;

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

a の a のアーキテクチャは次のとおりです。

component b_1 
 port ( in1 : in bit);
end component;


begin
   inst : b_1 port  map ( in1=> **to_Bit**(in11));
end a;
4

2 に答える 2

4

これはモデルシム エラーです。実際には、ポート マップでこの関数を実際の関数として使用することは許可されていないことが報告されるはずです。これは機能します。

LIBRARY IEEE; Use ieee.std_logic_1164.all;

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

architecture a of a is
signal inBit    : Bit;
component b_1 port ( in1 : in bit); end component;

begin 
inBit <= to_bit(in11);
inst : b_1 port map ( in1=> inBit); end a;

ポート マップの実際の値に適用される制限があります。vhdlref を参照してください。

実際のポートまたはシグナルの場合は、静的な名前で示す必要があります (6.1 を参照)。式の場合、実際の式はグローバルに静的な式でなければなりません (7.4 を参照)。

問題は、両方のケースがグローバルに静的でなければならないということです...

于 2012-10-05T08:05:11.130 に答える
0

VHDL-93 では、連想リストで型変換と変換関数を使用できます。変換関数は、引数が 1 つしかない関数の特殊なケースです。

の宣言を見てみましょうto_bit:

function to_bit(s : std_ulogic; xmap : bit := '0') return bit;

to_bit(s)有効な変換関数のように見えますが、宣言に 2 つの引数が含まれているため、そうではありません。が trueの場合、 2 番目の引数xmapが結果として使用されます。is_x(s)

これはModelSim のバグではありませんが、エラー メッセージがわかりにくいかもしれません。ModelSimto_bitは、変換関数であることを意図していますが、2 番目の引数があり、有効な変換関数ではないため、使用を拒否しています。

単純なラッパー関数で問題を解決できます。

function to_bit(s : std_ulogic) return bit is
begin
        return to_bit(s, '0');
end;

to_bitVHDL は関数のオーバーロードをサポートしているため、関数には という名前も付けられることに注意してください。これをパッケージstd_logic_1164に入れるといいでしょう。

于 2017-04-19T10:39:26.167 に答える