PoC.misc.sync.Vector
This module synchronizes a vector of bits from clock-domain Clock1
to
clock-domain Clock2
. The clock-domain boundary crossing is done by a
change comparator, a T-FF, two synchronizer D-FFs and a reconstructive
XOR indicating a value change on the input. This changed signal is used
to capture the input for the new output. A busy flag is additionally
calculated for the input clock domain.
- 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 MASTER_BITS : natural := 8; -- number of bits for internal change detection
3 SLAVE_BITS : natural := 0;
4 INIT : std_logic_vector := x"00000000"; --
5 SYNC_DEPTH : T_MISC_SYNC_DEPTH := T_MISC_SYNC_DEPTH'low -- generate SYNC_DEPTH many stages, at least 2
6 );
7 port (
8 Clock1 : in std_logic; -- <Clock> input clock
9 Clock2 : in std_logic; -- <Clock> output clock
10
11 Input : in std_logic_vector((SLAVE_BITS + MASTER_BITS) - 1 downto 0); -- @Clock1: input vector
12 Busy : out std_logic; -- @Clock1: busy bit
13 Strobe : in std_logic := '0'; -- @Clock1: Transfer Strobe, only if MASTER_BITS=0
14
15 Output : out std_logic_vector((SLAVE_BITS + MASTER_BITS) - 1 downto 0); -- @Clock2: output vector
16 Changed : out std_logic -- @Clock2: changed bit