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
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
entity sync_Strobe is
  generic (
    BITS                : positive    := 1;                           -- number of bit to be synchronized
    GATED_INPUT_BY_BUSY : boolean     := TRUE                         -- use gated input (by busy signal)
  );
  port (
    Clock1              : in  std_logic;                              -- <Clock>  input clock domain
    Clock2              : in  std_logic;                              -- <Clock>  output clock domain
    Input               : in  std_logic_vector(BITS - 1 downto 0);    -- @Clock1: input bits
    Output              : out std_logic_vector(BITS - 1 downto 0);    -- @Clock2: output bits
    Busy                : out std_logic_vector(BITS - 1 downto 0)     -- @Clock1: busy bits
  );
end entity;