私は2つのデザインを持っています:
library ieee;
use ieee.std_logic_1164.all;
entity eq_test1 is
port (a,b : IN std_logic_vector (1 downto 0);
o : OUT std_logic);
end eq_test1;
architecture strange_behavior of eq_test1 is
begin
P: process (a,b)
begin
if a = b then o <= '1';
else o <= '0';
end if;
end process P;
end strange_behavior;
Modelsim で a を「00」に、b を「0L」に強制すると、o が「0」になることが示されます。したがって、L は 0 として解釈されず、"00" = "0L" は false です。Ok。
しかし、同じデザインを追加すると
use ieee.std_logic_unsigned.all;
リストに対して、動作が異なります。次に、"00" = "0L" は true を返すため、L は 0 と同じです (0 は '1' になります)。その未署名のパッケージが含まれていると、「0X」=「0Z」でも true が返されます。
誰でも理由を説明できますか?