summaryrefslogtreecommitdiffstats
path: root/counter.vhd
blob: 4ae6a2a400363cefd9aefc63ffd9ece473ec417e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.std_logic_unsigned.all;
use IEEE.numeric_std.all;

entity counter is
    port
        (
            divisor : in  std_logic_vector(15 downto 0) := (others => '0');
            clk     : in  std_logic;
            n_reset : in  std_logic;
            clk_out : out std_logic
            );
end counter;


architecture rtl of counter is

    signal d :
        std_logic_vector (15 downto 0);
    signal q :
        std_logic;
begin

    clk_out <= q;
    process (clk, d, q, divisor, n_reset)
    begin
        if n_reset = '0' then
            d <= (others => '0');
            q <= '0';
        elsif RISING_EDGE(clk) then

            if d < divisor then
                d <= d + 1;
            else
                d <= (others => '0');
                q <= not q;
            end if;
        end if;
    end process;

end rtl;