0

VHDL で問題が発生しました。私はエンティティに取り組んでいます。ライブラリ STD_LOGIC_1164 と NUMERIC_STD のみを含めました。2 つの異なる構成で 2 つの信号 A と B を比較しました。

定義 (関連する適切な場所で):

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.All;

signal A   : STD_LOGIC_VECTOR(15 downto 0);
signal B   : STD_LOGIC_VECTOR(63 downto 0);

最初の構成:

report "A = "              & integer'image(to_integer(unsigned(A)));
report "B(15 downto 0) = " & image(to_integer(unsigned(B(15 downto 0))));

if A=B(15 downto 0) then
    report "Equal";
else
    report "Un-Equal";
end if;

2 番目の構成:

report "A = "              & integer'image(to_integer(unsigned(A)));
report "B(15 downto 0) = " & image(to_integer(unsigned(B(15 downto 0))));

if unsigned(A)=unsigned(B(16 down to 0)) then
    report "Equal";
else
    report "Un-Equal";
end if;

ご覧のとおり、2 番目のケースにはキャスト関数 "unsigned" のみを含めました。A と B(15 ~ 0) が等しい場合のシミュレーション レポートは次のようになります。

最初のステートメントの場合:

A=1000
B(15 downto 0)=1000
Un-Equal

2 番目のステートメントの場合:

A=1000
B(15 downto 0)=1000
Equal

したがって、2 番目のステートメントは完全に機能します。これの理由は何ですか?また、最初のステートメントが間違っている場合、シミュレーターがエラーを出力しないのはなぜですか?

4

0 に答える 0