summaryrefslogtreecommitdiffstats
path: root/fpga/hp_lcd_driver/synchronizer.vhdl
blob: 302cef946980513b1563ccc908cec79d95c1b6ea (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
library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity synchronizer is
    generic (stages : natural := 2);
    port (clk : in  std_logic;
          i   : in  std_logic;
          o   : out std_logic);
end synchronizer;

architecture Behavioral of synchronizer is
    signal flipflops                 : std_logic_vector(stages-1 downto 0) := (others => '0');
    attribute ASYNC_REG              : string;
    attribute ASYNC_REG of flipflops : signal is "true";
begin

    o <= flipflops(flipflops'high);

    clk_proc : process(clk, flipflops, i)
    begin
        if rising_edge(clk) then
            flipflops <= flipflops(flipflops'high-1 downto 0) & i;
        end if;
    end process;

end Behavioral;