Files
lt16lab/soc/peripheral/scrolling_timer.vhd
2023-01-18 14:36:45 +01:00

50 lines
1.2 KiB
VHDL

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity 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 entity scrolling_timer;
architecture Behavioral of scrolling_timer is
signal counter : std_logic_vector(31 downto 0);
signal done : std_logic;
signal counting : std_logic;
begin
process(clk)
begin
if clk'event and clk='1' then
if rst = '1' then
counter <= x"00000000";
done <= '0';
counting <= '0';
else
counter <= x"00000000";
done <= '0';
if counter >= cnt_value and counting = '1' then
counter <= x"00000000";
done <= '1';
counting <= '0';
elsif counting = '1' then
counter <= std_logic_vector(unsigned(counter) + 1);
elsif counting = '0' and cnt_start = '1' then
counting <= '1';
end if;
end if;
end if;
end process;
cnt_done <= done;
end Behavioral;