When my years back I used a 74LS448 and a 74LS447 to drive a bcd screen here is a simple
hex to seven segment converter four inputs and 7 outputs I did not include the select
mux for switching displays
The circuit to mux the displays I do not deal with it in this module
The RTL view
library ieee;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_1164.all;
entity seven_segment is
port(
hex_in :in std_logic_vector ( 3 downto 0);
seven_seg_out : out std_logic_vector (6 downto 0)
);
end;
architecture seven_seg_arc of seven_segment is
begin
process (hex_in)
begin
case ( hex_in ) is --abcdefg
when "0000" => seven_seg_out <= "0000001"; -- 0
when "0001" => seven_seg_out <= "1001111"; -- 1
when "0010" => seven_seg_out <= "0010010"; -- 2
when "0011" => seven_seg_out <= "0000110"; -- 3
when "0100" => seven_seg_out <= "1001100"; -- 4
when "0101" => seven_seg_out <= "0100100"; -- 5
when "0110" => seven_seg_out <= "0100000"; -- 6
when "0111" => seven_seg_out <= "0001111"; -- 7
when "1000" => seven_seg_out <= "0000000"; -- 8
when "1001" => seven_seg_out <= "0000100"; -- 9
when "1010" => seven_seg_out <= "0001000"; -- A
when "1011" => seven_seg_out <= "1100000"; -- B
when "1100" => seven_seg_out <= "0110001"; -- C
when "1101" => seven_seg_out <= "1000010"; -- D
when "1110" => seven_seg_out <= "0110000"; -- E
when "1111" => seven_seg_out <= "0111000"; -- F
when others => seven_seg_out <= "0000000";
end case;
end process;
end; -- seven_seg_arc