LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_arith.ALL; USE ieee.std_logic_unsigned.ALL; ENTITY zong IS PORT(set1,set2,start,clk,rst,input,speed:IN std_LOGIC; led:OUT STD_LOGIC_VECTOR(15 DOWNTO 0); q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); bit:OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END zong; ARCHITECTURE a1 OF zong IS TYPE state IS(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16); SIGNAL style:state; SIGNAL clk1:std_LOGIC; SIGNAL num3: INTEGER RANGE 15 DOWNTO 0; SIGNAL num4: INTEGER RANGE 7 DOWNTO 0; BEGIN p6: process(clk,speed) begin if (clk'event and clk='1') then if speed ='1' then -- clk1<=clk; clk1<=not clk1; else clk1<=clk; end if; end if; end process; p1:PROCESS(clk1,rst) BEGIN IF rst='0' THEN style<=s0; ELSIF clk1'event AND clk1='1' THEN IF start='1' THEN CASE style IS WHEN s0=> style<=s1; WHEN s1=> style<=s2; WHEN s2=> style<=s3; WHEN s3=> style<=s4; WHEN s4=> style<=s5; WHEN s5=> style<=s6; WHEN s6=> style<=s7; WHEN s7=> style<=s8; WHEN s8=> style<=s9; WHEN s9=> style<=s10; WHEN s10=> style<=s11; WHEN s11=> style<=s12; WHEN s12=> style<=s13; WHEN s13=> style<=s14; WHEN s14=> style<=s15; WHEN s15=> style<=s16; WHEN s16=> style<=s1; END CASE; END IF; END IF; END PROCESS; p2:PROCESS(set1,set2,style) BEGIN if set1='1' and set2 = '1' then CASE style IS WHEN s0=> led<="0000000110000000"; WHEN s1=> led<="0000001111000000"; WHEN s2=> led<="0000011111100000"; WHEN s3=> led<="0000111111110000"; WHEN s4=> led<="0001111111111000"; WHEN s5=> led<="0011111111111100"; WHEN s6=> led<="0111111111111110"; WHEN s7=> led<="1111111111111111"; WHEN s8=> led<="0111111111111110"; WHEN s9=> led<="0011111111111100"; WHEN s10=> led<="0001111111111000"; WHEN s11=> led<="0000111111110000"; WHEN s12=> led<="0000011111100000"; WHEN s13=> led<="0000001111000000"; WHEN s14=> led<="0000000110000000"; WHEN s15=> led<="0000000000000000"; WHEN s16=> led<="0000000000000000"; END CASE; elsif set1='1' and set2 = '0' then CASE style IS WHEN s0=> led<="1110000000000000"; WHEN s1=> led<="0111000000000000"; WHEN s2=> led<="0011100000000000"; WHEN s3=> led<="0001110000000000"; WHEN s4=> led<="0000111000000000"; WHEN s5=> led<="0000011100000000"; WHEN s6=> led<="0000001110000000"; WHEN s7=> led<="0000000111000000"; WHEN s8=> led<="0000000011100000"; WHEN s9=> led<="0000000001110000"; WHEN s10=> led<="0000000000111000"; WHEN s11=> led<="0000000000011100"; WHEN s12=> led<="0000000000001110"; WHEN s13=> led<="0000000000000111"; WHEN s14=> led<="1000000000000011"; WHEN s15=> led<="1100000000000001"; WHEN s16=> led<="1110000000000000"; END CASE; elsif set1='0' and set2 = '1' then CASE style IS WHEN s0=> led<="0000000110000000"; WHEN s1=> led<="0000001111000000"; WHEN s2=> led<="0000011111100000"; WHEN s3=> led<="0000111111110000"; WHEN s4=> led<="0001111111111000"; WHEN s5=> led<="0011111111111100"; WHEN s6=> led<="0111111111111110"; WHEN s7=> led<="1111111111111111"; WHEN s8=> led<="1111111001111111"; WHEN s9=> led<="1111110000111111"; WHEN s10=> led<="1111100000011111"; WHEN s11=> led<="1111000000001111"; WHEN s12=> led<="1110000000000111"; WHEN s13=> led<="1100000000000011"; WHEN s14=> led<="1000000000000001"; WHEN s15=> led<="0000000000000000"; WHEN s16=> led<="0000000000000000"; END CASE; elsif set1='0' and set2 = '0' then CASE style IS WHEN s0=> led<="1000000000000000"; WHEN s1=> led<="0100000000000000"; WHEN s2=> led<="0010000000000000"; WHEN s3=> led<="0001000000000000"; WHEN s4=> led<="0000100000000000"; WHEN s5=> led<="0000010000000000"; WHEN s6=> led<="0000001000000000"; WHEN s7=> led<="0000000100000000"; WHEN s8=> led<="0000000010000000"; WHEN s9=> led<="0000000001000000"; WHEN s10=> led<="0000000000100000"; WHEN s11=> led<="0000000000010000"; WHEN s12=> led<="0000000000001000"; WHEN s13=> led<="0000000000000100"; WHEN s14=> led<="0000000000000010"; WHEN s15=> led<="0000000000000001"; WHEN s16=> led<="0000000000000000"; END CASE; end if; END PROCESS; p3: process(clk1) begin if clk1'event and clk1='1' then if num3<=15 then num3<=num3+1; else num3<=0; end if; end if; end process ; p4: process(clk1) begin if clk1'event and clk1='1' then if num4<=7 then num4<=num4+1; else num4<=0; end if; end if; end process ; P5: process(num3,num4) begin if (input='0') then case num3 is when 0=> bit<="000";q<="00000000"; when 1=> bit<="000";q<="01100000"; when 2=> bit<="000";q<="11011010"; when 3=> bit<="000";q<="11110010"; when 4=> bit<="000";q<="01100110"; when 5=> bit<="000";q<="10110110"; when 6=> bit<="000";q<="10111110"; when 7=> bit<="000";q<="11100000"; when 8=> bit<="000";q<="11111110"; when 9=> bit<="000";q<="11110110"; when 10=> bit<="000";q<="11101110"; when 11=> bit<="000";q<="00111110"; when 12=> bit<="000";q<="10011100"; when 13=> bit<="000";q<="01111010"; when 14=> bit<="000";q<="10011110"; when 15=> bit<="000";q<="10001110"; when others=> NULL; end case; elsif (input='1') then case num4 is when 0=> bit<="000";q<="11111111"; when 1=> bit<="001";q<="11111111"; when 2=> bit<="010";q<="11111111"; when 3=> bit<="011";q<="11111111"; when 4=> bit<="100";q<="11111111"; when 5=> bit<="101";q<="11111111"; when 6=> bit<="110";q<="11111111"; when 7=> bit<="111";q<="11111111"; when others=> NULL; end case; else q<="00000000"; end if; end process; END a1;