PoC.misc.sync.Strobe

This module synchronizes multiple high-active bits from clock-domain Clock1 to clock-domain Clock2. The clock-domain boundary crossing is done by a T-FF, two synchronizer D-FFs and a reconstructive XOR. A busy flag is additionally calculated and can be used to block new inputs. All bits are independent from each other. Multiple consecutive strobes are suppressed by a rising edge detection.

Attention

Use this synchronizer only for one-cycle high-active signals (strobes).

../../../_images/sync_Strobe.svg
Constraints:

This module uses sub modules which need to be constrained. Please attend to the notes of the instantiated sub modules.

Entity Declaration:

 1  generic (
 2    BITS                : positive            := 1;                       -- number of bit to be synchronized
 3    GATED_INPUT_BY_BUSY : boolean             := TRUE;                    -- accept only new strobe after old strobe was transfered
 4    SYNC_DEPTH          : T_MISC_SYNC_DEPTH   := T_MISC_SYNC_DEPTH'low    -- generate SYNC_DEPTH many stages, at least 2
 5  );
 6  port (
 7    Clock1              : in  std_logic;                            -- <Clock>  input clock domain
 8    Clock2              : in  std_logic;                            -- <Clock>  output clock domain
 9    Input               : in  std_logic_vector(BITS - 1 downto 0);  -- @Clock1:  input bits
10    Output              : out std_logic_vector(BITS - 1 downto 0);  -- @Clock2:  output bits
11    Busy                : out  std_logic_vector(BITS - 1 downto 0)  -- @Clock1:  busy bits
12  );
13end entity;