VHDL case文

VHDLのcase文で'-'(don't care)を使用したら思ったとおりに動作しなかった。

 

 

 DIN : in std_logic_vector(4 downto 0);
 DEC_OUT : out std_logic_vector(5 downto 0) );

とする。

 

~~NG~~~~~~~~~~~~~~~~~~~~~~~~~

process (DIN)

case DIN is

  when "-0000" => DOUT <= "000111";

  when "01110" => DOUT <= "111110";

  when "11110" => DOUT <= "111111";

  when others   =>   DOUT <= "ZZZZZZ";

end case;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

DIN(4)をif文で切り替えたら期待通りの動作となった。

 

~~OK~~~~~~~~~~~~~~~~~~~~~~~~~

signal OP : std_logic_vector(3 downto 0);

signal Flag : std_logic;

begin

  OP <=DIN(3 downto 0);

  Flag <= DIN(4);

process (OP, Flag)

case OP is

  when "0000" => DOUT <= "000111";

  when "1110" =>

    if Flag = '0' then

       DOUT <= "111110";

    else

       DOUT <= "111111";

    end if;

  when others   =>   DOUT <= "ZZZZZZ";

end case;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

OK例でもprocess(DIN)とすると期待通りに動作しない。