-- See the file "LICENSE" for the full license governing this code. --
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;

LIBRARY work;
USE work.lt16soc_peripherals.ALL;

ENTITY scrolling_timer_tb IS
END ENTITY;

ARCHITECTURE sim OF scrolling_timer_tb IS

    constant CLK_PERIOD : time := 10 ns;

    signal rst : std_logic;
    signal clk : std_logic := '0';

	signal cnt_start : std_logic := '0';
    signal cnt_done : std_logic := '0';
    signal cnt_value : std_logic_vector(31 downto 0) := x"00000000";

    component scrolling_timer is
        port(
            clk : in std_logic;
            rst : in std_logic;
            cnt_start : in std_logic;
            cnt_done : out std_logic;
            cnt_value : in std_logic_vector(31 downto 0)
        );
    end component;

BEGIN

	timer: scrolling_timer
        port map(
			clk => clk,
            rst => rst,
            cnt_start => cnt_start,
            cnt_done => cnt_done,
            cnt_value => cnt_value
    );

    clk_gen: process
	begin
		clk	<= not clk;
		wait for CLK_PERIOD/2;
	end process clk_gen;

	stimuli: process
	begin
        rst <= '1';
        wait for CLK_PERIOD;
        rst <= '0';

        wait for CLK_PERIOD*3;

        cnt_value <= x"00000100";
        cnt_start <= '1';
        
        wait for CLK_PERIOD;
        cnt_start <= '0';

		wait for CLK_PERIOD * 300;

        cnt_value <= x"0000000A";
        cnt_start <= '1';
        
        wait for CLK_PERIOD;
        cnt_start <= '0';
        
        wait for CLK_PERIOD * 15;

		assert false report "Simulation terminated!" severity failure;
	end process stimuli;

END ARCHITECTURE;
