164 lines
5.1 KiB
VHDL
164 lines
5.1 KiB
VHDL
----------------------------------------------------------------------------------
|
|
-- Company:
|
|
-- Engineer:
|
|
--
|
|
-- Create Date: 20:36:54 02/07/2023
|
|
-- Design Name:
|
|
-- Module Name: sevseg - Behavioral
|
|
-- Project Name:
|
|
-- Target Devices:
|
|
-- Tool versions:
|
|
-- Description:
|
|
--
|
|
-- Dependencies:
|
|
--
|
|
-- Revision:
|
|
-- Revision 0.01 - File Created
|
|
-- Additional Comments:
|
|
--
|
|
----------------------------------------------------------------------------------
|
|
library IEEE;
|
|
use IEEE.STD_LOGIC_1164.ALL;
|
|
|
|
-- Uncomment the following library declaration if using
|
|
-- arithmetic functions with Signed or Unsigned values
|
|
--use IEEE.NUMERIC_STD.ALL;
|
|
|
|
-- Uncomment the following library declaration if instantiating
|
|
-- any Xilinx primitives in this code.
|
|
--library UNISIM;
|
|
--use UNISIM.VComponents.all;
|
|
|
|
entity sevseg is
|
|
Port ( UINT16 : in STD_LOGIC_VECTOR (15 downto 0);
|
|
CLK : in STD_LOGIC;
|
|
SEGMENTS : out STD_LOGIC_VECTOR (7 downto 0);
|
|
DIGITS : out STD_LOGIC_VECTOR (3 downto 0)
|
|
);
|
|
end sevseg;
|
|
|
|
architecture Behavioral of sevseg is
|
|
|
|
signal DIGIT0: std_logic_vector (3 downto 0);
|
|
signal DIGIT1: std_logic_vector (3 downto 0);
|
|
signal DIGIT2: std_logic_vector (3 downto 0);
|
|
signal DIGIT3: std_logic_vector (3 downto 0);
|
|
|
|
signal SEGMENTS0: std_logic_vector (7 downto 0);
|
|
signal SEGMENTS1: std_logic_vector (7 downto 0);
|
|
signal SEGMENTS2: std_logic_vector (7 downto 0);
|
|
signal SEGMENTS3: std_logic_vector (7 downto 0);
|
|
|
|
signal digitsaux: std_logic_vector (3 downto 0);
|
|
|
|
begin
|
|
|
|
DIGIT0 <= UINT16 (3 downto 0);
|
|
DIGIT1 <= UINT16 (7 downto 4);
|
|
DIGIT2 <= UINT16 (11 downto 8);
|
|
DIGIT3 <= UINT16 (15 downto 12);
|
|
DIGITS <= not digitsaux;
|
|
|
|
process(UINT16)
|
|
begin
|
|
case DIGIT0 is
|
|
when "0000" => segments0 <= "00111111";
|
|
when "0001" => segments0 <= "00000110";
|
|
when "0010" => segments0 <= "01011011";
|
|
when "0011" => segments0 <= "01001111";
|
|
when "0100" => segments0 <= "01100110";
|
|
when "0101" => segments0 <= "01101101";
|
|
when "0110" => segments0 <= "01111101";
|
|
when "0111" => segments0 <= "00000111";
|
|
when "1000" => segments0 <= "01111111";
|
|
when "1001" => segments0 <= "01101111";
|
|
when "1010" => segments0 <= "01110111";
|
|
when "1011" => segments0 <= "01111100";
|
|
when "1100" => segments0 <= "00111001";
|
|
when "1101" => segments0 <= "01011110";
|
|
when "1110" => segments0 <= "01111001";
|
|
when "1111" => segments0 <= "01110001";
|
|
when others => segments0 <= "10000000";
|
|
end case;
|
|
case DIGIT1 is
|
|
when "0000" => segments1 <= "00111111";
|
|
when "0001" => segments1 <= "00000110";
|
|
when "0010" => segments1 <= "01011011";
|
|
when "0011" => segments1 <= "01001111";
|
|
when "0100" => segments1 <= "01100110";
|
|
when "0101" => segments1 <= "01101101";
|
|
when "0110" => segments1 <= "01111101";
|
|
when "0111" => segments1 <= "00000111";
|
|
when "1000" => segments1 <= "01111111";
|
|
when "1001" => segments1 <= "01101111";
|
|
when "1010" => segments1 <= "01110111";
|
|
when "1011" => segments1 <= "01111100";
|
|
when "1100" => segments1 <= "00111001";
|
|
when "1101" => segments1 <= "01011110";
|
|
when "1110" => segments1 <= "01111001";
|
|
when "1111" => segments1 <= "01110001";
|
|
when others => segments1 <= "10000000";
|
|
end case;
|
|
case DIGIT2 is
|
|
when "0000" => segments2 <= "00111111";
|
|
when "0001" => segments2 <= "00000110";
|
|
when "0010" => segments2 <= "01011011";
|
|
when "0011" => segments2 <= "01001111";
|
|
when "0100" => segments2 <= "01100110";
|
|
when "0101" => segments2 <= "01101101";
|
|
when "0110" => segments2 <= "01111101";
|
|
when "0111" => segments2 <= "00000111";
|
|
when "1000" => segments2 <= "01111111";
|
|
when "1001" => segments2 <= "01101111";
|
|
when "1010" => segments2 <= "01110111";
|
|
when "1011" => segments2 <= "01111100";
|
|
when "1100" => segments2 <= "00111001";
|
|
when "1101" => segments2 <= "01011110";
|
|
when "1110" => segments2 <= "01111001";
|
|
when "1111" => segments2 <= "01110001";
|
|
when others => segments2 <= "10000000";
|
|
end case;
|
|
case DIGIT3 is
|
|
when "0000" => segments3 <= "00111111";
|
|
when "0001" => segments3 <= "00000110";
|
|
when "0010" => segments3 <= "01011011";
|
|
when "0011" => segments3 <= "01001111";
|
|
when "0100" => segments3 <= "01100110";
|
|
when "0101" => segments3 <= "01101101";
|
|
when "0110" => segments3 <= "01111101";
|
|
when "0111" => segments3 <= "00000111";
|
|
when "1000" => segments3 <= "01111111";
|
|
when "1001" => segments3 <= "01101111";
|
|
when "1010" => segments3 <= "01110111";
|
|
when "1011" => segments3 <= "01111100";
|
|
when "1100" => segments3 <= "00111001";
|
|
when "1101" => segments3 <= "01011110";
|
|
when "1110" => segments3 <= "01111001";
|
|
when "1111" => segments3 <= "01110001";
|
|
when others => segments3 <= "10000000";
|
|
end case;
|
|
end process;
|
|
|
|
process (CLK)
|
|
begin
|
|
if(CLK'event and CLK = '1') then
|
|
case digitsaux is
|
|
when "0001" =>
|
|
digitsaux <= "0010";
|
|
SEGMENTS <= not segments1;
|
|
when "0010" =>
|
|
digitsaux <= "0100";
|
|
SEGMENTS <= not segments2;
|
|
when "0100" =>
|
|
digitsaux <= "1000";
|
|
SEGMENTS <= not segments3;
|
|
when others =>
|
|
digitsaux <= "0001";
|
|
SEGMENTS <= not segments0;
|
|
end case;
|
|
end if;
|
|
end process;
|
|
|
|
end Behavioral;
|
|
|