Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library ieee;
- use ieee.std_logic_1164.all;
- use ieee.std_logic_unsigned.all;
- ENTITY Liczby IS
- PORT(
- clk : IN STD_LOGIC;
- reset : IN STD_LOGIC;
- a : IN STD_LOGIC;
- b : IN STD_LOGIC;
- numery : IN std_logic_vector(3 DOWNTO 0);
- --bloczki : IN STD_LOGIC_VECTOR(1 downto 0);
- sel : INOUT std_logic_vector(6 DOWNTO 0); --wiersze wyswietlacza ustawiane od dołu
- q : INOUT std_logic_vector(27 DOWNTO 0)
- );
- END Liczby;
- ARCHITECTURE a OF Liczby IS
- TYPE STATE_TYPE IS (s0, s1, s2, s3, s4);
- TYPE LICZBA_TYPE IS (l0, l1, l2, l3, l4, l5, l6, l7, l8, l9);
- TYPE BLOCK_TYPE IS (b1,b2,b3,b4);
- SIGNAL state : STATE_TYPE;
- SIGNAL number : LICZBA_TYPE;
- SIGNAL blocks : BLOCK_TYPE;
- SIGNAL dclk : STD_LOGIC;
- SIGNAL with_number : std_logic_vector(3 DOWNTO 0);
- SIGNAL with_block : std_logic_vector(1 DOWNTO 0);
- signal counter : INTEGER;
- BEGIN
- PROCESS (numery, a,b)
- BEGIN
- with_number <= numery;
- with_block(0) <= a;
- with_block(1) <= b;
- END PROCESS;
- PROCESS (clk)
- BEGIN
- if (clk'EVENT AND clk = '1') THEN
- counter <= counter+1;
- if(counter = 50000) THEN
- counter <=0;
- dclk <= not dclk;
- end if;
- end if;
- END PROCESS;
- WITH with_number SELECT
- number <= l1 when "0001",
- l2 when "0010",
- l3 when "0011",
- l4 when "0100",
- l5 when "0101",
- l6 when "0110",
- l7 when "0111",
- l8 when "1000",
- l9 when "1001",
- l0 when others;
- WITH with_block SELECT
- blocks <= b1 when "11",
- b2 when "10",
- b3 when "01",
- b4 when others;
- PROCESS (dclk, reset)
- BEGIN
- IF reset = '1' THEN
- state <= s0;
- ELSIF (dclk'EVENT AND dclk = '1') THEN
- CASE state IS
- WHEN s0=>
- state <= s1;
- WHEN s1=>
- state <= s2;
- WHEN s2=>
- state <= s3;
- WHEN s3=>
- state <= s4;
- WHEN s4=>
- state <= s0;
- END CASE;
- END IF;
- END PROCESS;
- PROCESS (state)
- BEGIN
- CASE state IS
- WHEN s0 => -- STANY
- CASE number IS -- LICZBY W STANIE
- WHEN l0 =>
- sel <= "0111110";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000001";
- when b2 =>
- q <= x"0000020";
- when b3 =>
- q <= x"0000400";
- when b4 =>
- q <= x"0008000";
- END CASE;
- WHEN l1 =>
- sel <= "1001000";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000001";
- when b2 =>
- q <= x"0000020";
- when b3 =>
- q <= x"0000400";
- when b4 =>
- q <= x"0008000";
- END CASE;
- WHEN l2 =>
- sel <= "1100110";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000001";
- when b2 =>
- q <= x"0000020";
- when b3 =>
- q <= x"0000400";
- when b4 =>
- q <= x"0008000";
- END CASE;
- WHEN l3 =>
- sel <= "0100010";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000001";
- when b2 =>
- q <= x"0000020";
- when b3 =>
- q <= x"0000400";
- when b4 =>
- q <= x"0008000";
- END CASE;
- WHEN l4 =>
- sel <= "0001000";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000001";
- when b2 =>
- q <= x"0000020";
- when b3 =>
- q <= x"0000400";
- when b4 =>
- q <= x"0008000";
- END CASE;
- WHEN l5 =>
- sel <= "1000110";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000001";
- when b2 =>
- q <= x"0000020";
- when b3 =>
- q <= x"0000400";
- when b4 =>
- q <= x"0008000";
- END CASE;
- WHEN l6 =>
- sel <= "0111110";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000001";
- when b2 =>
- q <= x"0000020";
- when b3 =>
- q <= x"0000400";
- when b4 =>
- q <= x"0008000";
- END CASE;
- WHEN l7 =>
- sel <= "0000011";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000001";
- when b2 =>
- q <= x"0000020";
- when b3 =>
- q <= x"0000400";
- when b4 =>
- q <= x"0008000";
- END CASE;
- WHEN l8 =>
- sel <= "0110110";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000001";
- when b2 =>
- q <= x"0000020";
- when b3 =>
- q <= x"0000400";
- when b4 =>
- q <= x"0008000";
- END CASE;
- WHEN l9 =>
- sel <= "0000110";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000001";
- when b2 =>
- q <= x"0000020";
- when b3 =>
- q <= x"0000400";
- when b4 =>
- q <= x"0008000";
- END CASE;
- END CASE;
- WHEN s1 =>
- CASE number IS -- LICZBY W STANIE
- WHEN l0 =>
- sel <= "1000001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000002";
- when b2 =>
- q <= x"0000040";
- when b3 =>
- q <= x"0000800";
- when b4 =>
- q <= x"0010000";
- END CASE;
- WHEN l1 =>
- sel <= "1000100";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000002";
- when b2 =>
- q <= x"0000040";
- when b3 =>
- q <= x"0000800";
- when b4 =>
- q <= x"0010000";
- END CASE;
- WHEN l2 =>
- sel <= "1010001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000002";
- when b2 =>
- q <= x"0000040";
- when b3 =>
- q <= x"0000800";
- when b4 =>
- q <= x"0010000";
- END CASE;
- WHEN l3 =>
- sel <= "1000001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000002";
- when b2 =>
- q <= x"0000040";
- when b3 =>
- q <= x"0000800";
- when b4 =>
- q <= x"0010000";
- END CASE;
- WHEN l4 =>
- sel <= "0001100";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000002";
- when b2 =>
- q <= x"0000040";
- when b3 =>
- q <= x"0000800";
- when b4 =>
- q <= x"0010000";
- END CASE;
- WHEN l5 =>
- sel <= "1001001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000002";
- when b2 =>
- q <= x"0000040";
- when b3 =>
- q <= x"0000800";
- when b4 =>
- q <= x"0010000";
- END CASE;
- WHEN l6 =>
- sel <= "1001001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000002";
- when b2 =>
- q <= x"0000040";
- when b3 =>
- q <= x"0000800";
- when b4 =>
- q <= x"0010000";
- END CASE;
- WHEN l7 =>
- sel <= "0000001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000002";
- when b2 =>
- q <= x"0000040";
- when b3 =>
- q <= x"0000800";
- when b4 =>
- q <= x"0010000";
- END CASE;
- WHEN l8 =>
- sel <= "1001001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000002";
- when b2 =>
- q <= x"0000040";
- when b3 =>
- q <= x"0000800";
- when b4 =>
- q <= x"0010000";
- END CASE;
- WHEN l9 =>
- sel <= "1001001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000002";
- when b2 =>
- q <= x"0000040";
- when b3 =>
- q <= x"0000800";
- when b4 =>
- q <= x"0010000";
- END CASE;
- END CASE;
- WHEN s2 =>
- CASE number IS -- LICZBY W STANIE
- WHEN l0 =>
- sel <= "1000001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000004";
- when b2 =>
- q <= x"0000080";
- when b3 =>
- q <= x"0001000";
- when b4 =>
- q <= x"0020000";
- END CASE;
- WHEN l1 =>
- sel <= "1111111";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000004";
- when b2 =>
- q <= x"0000080";
- when b3 =>
- q <= x"0001000";
- when b4 =>
- q <= x"0020000";
- END CASE;
- WHEN l2 =>
- sel <= "1001001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000004";
- when b2 =>
- q <= x"0000080";
- when b3 =>
- q <= x"0001000";
- when b4 =>
- q <= x"0020000";
- END CASE;
- WHEN l3 =>
- sel <= "1001001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000004";
- when b2 =>
- q <= x"0000080";
- when b3 =>
- q <= x"0001000";
- when b4 =>
- q <= x"0020000";
- END CASE;
- WHEN l4 =>
- sel <= "0001010";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000004";
- when b2 =>
- q <= x"0000080";
- when b3 =>
- q <= x"0001000";
- when b4 =>
- q <= x"0020000";
- END CASE;
- WHEN l5 =>
- sel <= "1001001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000004";
- when b2 =>
- q <= x"0000080";
- when b3 =>
- q <= x"0001000";
- when b4 =>
- q <= x"0020000";
- END CASE;
- WHEN l6 =>
- sel <= "1001001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000004";
- when b2 =>
- q <= x"0000080";
- when b3 =>
- q <= x"0001000";
- when b4 =>
- q <= x"0020000";
- END CASE;
- WHEN l7 =>
- sel <= "1100001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000004";
- when b2 =>
- q <= x"0000080";
- when b3 =>
- q <= x"0001000";
- when b4 =>
- q <= x"0020000";
- END CASE;
- WHEN l8 =>
- sel <= "1001001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000004";
- when b2 =>
- q <= x"0000080";
- when b3 =>
- q <= x"0001000";
- when b4 =>
- q <= x"0020000";
- END CASE;
- WHEN l9 =>
- sel <= "1001001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000004";
- when b2 =>
- q <= x"0000080";
- when b3 =>
- q <= x"0001000";
- when b4 =>
- q <= x"0020000";
- END CASE;
- END CASE;
- WHEN s3 =>
- CASE number IS -- LICZBY W STANIE
- WHEN l0 =>
- sel <= "1000001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000008";
- when b2 =>
- q <= x"0000100";
- when b3 =>
- q <= x"0002000";
- when b4 =>
- q <= x"0040000";
- END CASE;
- WHEN l1 =>
- sel <= "1000000";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000008";
- when b2 =>
- q <= x"0000100";
- when b3 =>
- q <= x"0002000";
- when b4 =>
- q <= x"0040000";
- END CASE;
- WHEN l2 =>
- sel <= "1000101";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000008";
- when b2 =>
- q <= x"0000100";
- when b3 =>
- q <= x"0002000";
- when b4 =>
- q <= x"0040000";
- END CASE;
- WHEN l3 =>
- sel <= "1001001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000008";
- when b2 =>
- q <= x"0000100";
- when b3 =>
- q <= x"0002000";
- when b4 =>
- q <= x"0040000";
- END CASE;
- WHEN l4 =>
- sel <= "1111101";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000008";
- when b2 =>
- q <= x"0000100";
- when b3 =>
- q <= x"0002000";
- when b4 =>
- q <= x"0040000";
- END CASE;
- WHEN l5 =>
- sel <= "1001001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000008";
- when b2 =>
- q <= x"0000100";
- when b3 =>
- q <= x"0002000";
- when b4 =>
- q <= x"0040000";
- END CASE;
- WHEN l6 =>
- sel <= "1001001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000008";
- when b2 =>
- q <= x"0000100";
- when b3 =>
- q <= x"0002000";
- when b4 =>
- q <= x"0040000";
- END CASE;
- WHEN l7 =>
- sel <= "0010001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000008";
- when b2 =>
- q <= x"0000100";
- when b3 =>
- q <= x"0002000";
- when b4 =>
- q <= x"0040000";
- END CASE;
- WHEN l8 =>
- sel <= "1001001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000008";
- when b2 =>
- q <= x"0000100";
- when b3 =>
- q <= x"0002000";
- when b4 =>
- q <= x"0040000";
- END CASE;
- WHEN l9 =>
- sel <= "1001001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000008";
- when b2 =>
- q <= x"0000100";
- when b3 =>
- q <= x"0002000";
- when b4 =>
- q <= x"0040000";
- END CASE;
- END CASE;
- WHEN s4 =>
- CASE number IS -- LICZBY W STANIE
- WHEN l0 =>
- sel <= "0111110";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000010";
- when b2 =>
- q <= x"0000200";
- when b3 =>
- q <= x"0004000";
- when b4 =>
- q <= x"0080000";
- END CASE;
- WHEN l1 =>
- sel <= "1000000";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000010";
- when b2 =>
- q <= x"0000200";
- when b3 =>
- q <= x"0004000";
- when b4 =>
- q <= x"0080000";
- END CASE;
- WHEN l2 =>
- sel <= "1100010";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000010";
- when b2 =>
- q <= x"0000200";
- when b3 =>
- q <= x"0004000";
- when b4 =>
- q <= x"0080000";
- END CASE;
- WHEN l3 =>
- sel <= "0110110";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000010";
- when b2 =>
- q <= x"0000200";
- when b3 =>
- q <= x"0004000";
- when b4 =>
- q <= x"0080000";
- END CASE;
- WHEN l4 =>
- sel <= "0001000";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000010";
- when b2 =>
- q <= x"0000200";
- when b3 =>
- q <= x"0004000";
- when b4 =>
- q <= x"0080000";
- END CASE;
- WHEN l5 =>
- sel <= "0110001";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000010";
- when b2 =>
- q <= x"0000200";
- when b3 =>
- q <= x"0004000";
- when b4 =>
- q <= x"0080000";
- END CASE;
- WHEN l6 =>
- sel <= "0110010";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000010";
- when b2 =>
- q <= x"0000200";
- when b3 =>
- q <= x"0004000";
- when b4 =>
- q <= x"0080000";
- END CASE;
- WHEN l7 =>
- sel <= "0001111";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000010";
- when b2 =>
- q <= x"0000200";
- when b3 =>
- q <= x"0004000";
- when b4 =>
- q <= x"0080000";
- END CASE;
- WHEN l8 =>
- sel <= "0110110";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000010";
- when b2 =>
- q <= x"0000200";
- when b3 =>
- q <= x"0004000";
- when b4 =>
- q <= x"0080000";
- END CASE;
- WHEN l9 =>
- sel <= "0110110";--'1';
- CASE blocks IS
- when b1 =>
- q <= x"0000010";
- when b2 =>
- q <= x"0000200";
- when b3 =>
- q <= x"0004000";
- when b4 =>
- q <= x"0080000";
- END CASE;
- END CASE;
- END CASE;
- END PROCESS;
- END a;
Advertisement
Add Comment
Please, Sign In to add comment