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).
- 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;