library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity dyntop is Port ( clk : in std_logic; pushsw : in std_logic_vector(3 downto 0); led : out std_logic_vector(3 downto 0); leddrive : out std_logic_vector(5 downto 0); xsegment : out std_logic_vector(7 downto 0); buzz : inout std_logic ); end dyntop; architecture behavioral of dyntop is signal data :integer range 0 to 15; signal data_a :integer range 0 to 15; signal data_b :integer range 0 to 15; signal data_c :integer range 0 to 15; signal data_d :integer range 0 to 15; signal data_e :integer range 0 to 15; signal data_f :integer range 0 to 15; signal data_g :integer range 0 to 15; signal data_h :integer range 0 to 15; signal current_led :integer range 0 to 7; signal dyn_count :integer range 0 to 1048575; signal max_count :integer range 0 to 1048575; begin process(clk) begin if(clk = '1' and clk'event) then if(dyn_count = 0) then dyn_count <= max_count/8 - 1; current_led <= current_led + 1; if(pushsw = "1111") then buzz <= '0'; else buzz <= not buzz; end if; else dyn_count <= dyn_count - 1; current_led <= current_led; end if; end if; end process; leddrive(0) <= '0' when (current_led = 0) else 'Z'; leddrive(1) <= '0' when (current_led = 1) else 'Z'; leddrive(2) <= '0' when (current_led = 2) else 'Z'; leddrive(3) <= '0' when (current_led = 3) else 'Z'; leddrive(4) <= '0' when (current_led = 4) else 'Z'; leddrive(5) <= '0' when (current_led = 5) else 'Z'; led(0) <= '0' when (current_led = 6) else 'Z'; led(1) <= '0' when (current_led = 7) else 'Z'; led(2) <= '1'; led(3) <= '1'; process(clk) begin if(clk = '1' and clk'event) then if(pushsw(3) = '0') then data_a <= 0; data_b <= 5; data_c <= 1; data_d <= 0; data_e <= 0; data_f <= 0; data_g <= 15; data_h <= 15; max_count <= 361412; elsif(pushsw(2) = '0') then data_a <= 0; data_b <= 7; data_c <= 5; data_d <= 0; data_e <= 0; data_f <= 0; data_g <= 15; data_h <= 15; max_count <= 245760; elsif(pushsw(1) = '0') then data_a <= 1; data_b <= 0; data_c <= 2; data_d <= 0; data_e <= 0; data_f <= 0; data_g <= 15; data_h <= 15; max_count <= 180706; elsif(pushsw(0) = '0') then data_a <= 1; data_b <= 2; data_c <= 8; data_d <= 0; data_e <= 0; data_f <= 0; data_g <= 15; data_h <= 15; max_count <= 144000; end if; end if; end process; process(current_led,data_a,data_b,data_c,data_d,data_e,data_f,data_g,data_h) begin case current_led is when 0 => data <= data_a; when 1 => data <= data_b; when 2 => data <= data_c; when 3 => data <= data_d; when 4 => data <= data_e; when 5 => data <= data_f; when 6 => data <= data_g; when 7 => data <= data_h; when others => data <= 15; end case; end process; process(clk) begin if(clk = '1' and clk'event) then case data is when 0 => xsegment(6 downto 0) <= "1000000"; when 1 => xsegment(6 downto 0) <= "1111001"; when 2 => xsegment(6 downto 0) <= "0100100"; when 3 => xsegment(6 downto 0) <= "0110000"; when 4 => xsegment(6 downto 0) <= "0011001"; when 5 => xsegment(6 downto 0) <= "0010010"; when 6 => xsegment(6 downto 0) <= "0000010"; when 7 => xsegment(6 downto 0) <= "1111000"; when 8 => xsegment(6 downto 0) <= "0000000"; when 9 => xsegment(6 downto 0) <= "0010000"; when 10 => xsegment(6 downto 0) <= "0001000"; when 11 => xsegment(6 downto 0) <= "0000011"; when 12 => xsegment(6 downto 0) <= "1000110"; when 13 => xsegment(6 downto 0) <= "0100001"; when 14 => xsegment(6 downto 0) <= "0000110"; when 15 => xsegment(6 downto 0) <= "0001110"; when others => xsegment(6 downto 0) <= "0001110"; end case; if(current_led = 2) then xsegment(7) <= '0'; else xsegment(7) <= '1'; end if; end if; end process; end behavioral;