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