プロセス文で7セグメントデコーダーを作る

pp.117-118
論理式でも記述できないことはないがプロセス文のほうが遙かに容易である。

テキストはアノードコモンを使っているが、手持ちはカソードコモンしかなかったので、ここではカソードコモンを使う。したがって論理はテキストとは反転する。

library IEEE;
use IEEE.std_logic_1164.all;

entity dec_7seg is
    port(
        DIN  : in  std_logic_vector(3 downto 0);
        SEG7 : out std_logic_vector(6 downto 0)
    );
end dec_7seg;


architecture RTL of dec_7seg is
begin
    process(DIN)
    begin

        case DIN is
           --  cathodeコモン
           --   -- a --
           --   |     |
           --   f     b
           --   |     |
           --   -- g --
           --   |     |
           --   e     c
           --   |     |
           --   -- d --
           --  センシティビティリストにはすべてのケースをもれなく記述する。
           --                     "gfedabc"
            when x"0"   => SEG7 <= "0111111";
            when x"1"   => SEG7 <= "0000011";
            when x"2"   => SEG7 <= "1011110";
            when x"3"   => SEG7 <= "1001111";
            when x"4"   => SEG7 <= "1100011";
            when x"5"   => SEG7 <= "1101101";
            when x"6"   => SEG7 <= "1111101";
            when x"7"   => SEG7 <= "0000111";
            when x"8"   => SEG7 <= "1111111";
            when x"9"   => SEG7 <= "1101111";
           --when x"A"   => SEG7 <= "1110111";
           --when x"b"   => SEG7 <= "1111001";
           --when x"C"   => SEG7 <= "0111100"; -- when x"c"   => SEG7 <= "1011000"
           --when x"d"   => SEG7 <= "1011011";
           --when x"E"   => SEG7 <= "1111100";
           --when x"F"   => SEG7 <= "1110100";
            when others => SEG7 <= "0000000";  -- その他はothersで表現する。
        end case;

    end process;
end RTL;

今、9を表示している。
f:id:ti-nspire:20201222050713j:plain:h300 f:id:ti-nspire:20201222050649p:plain:h300