diff --git a/hdl/pkg_combpm.vhd b/hdl/pkg_combpm.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..67c7acb6d2e488d69ef1bff59f1aa4917aeb7e08
--- /dev/null
+++ b/hdl/pkg_combpm.vhd
@@ -0,0 +1,71 @@
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+package pkg_combpm is
+
+
+    -------------------------
+    -- GT WIZARD COMPONENT --
+    -------------------------
+    COMPONENT combpm_gtwizard
+      PORT (
+        gtwiz_userclk_tx_reset_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_userclk_tx_srcclk_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_userclk_tx_usrclk_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_userclk_tx_usrclk2_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_userclk_tx_active_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_userclk_rx_reset_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_userclk_rx_srcclk_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_userclk_rx_usrclk_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_userclk_rx_usrclk2_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_userclk_rx_active_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_reset_clk_freerun_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_reset_all_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_reset_tx_pll_and_datapath_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_reset_tx_datapath_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_reset_rx_pll_and_datapath_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_reset_rx_datapath_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_reset_qpll1lock_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_reset_rx_cdr_stable_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_reset_tx_done_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_reset_rx_done_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_reset_qpll1reset_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtwiz_userdata_tx_in : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
+        gtwiz_userdata_rx_out : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
+        gthrxn_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gthrxp_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        qpll0clk_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        qpll0refclk_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        qpll1clk_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        qpll1refclk_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        rx8b10ben_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        rxbufreset_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        rxcommadeten_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        rxmcommaalignen_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        rxpcommaalignen_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        tx8b10ben_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+        txctrl0_in : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
+        txctrl1_in : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
+        txctrl2_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
+        gthtxn_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gthtxp_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        gtpowergood_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        rxbufstatus_out : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
+        rxbyteisaligned_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        rxbyterealign_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        rxcdrlock_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        rxclkcorcnt_out : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);
+        rxcommadet_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        rxctrl0_out : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
+        rxctrl1_out : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
+        rxctrl2_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
+        rxctrl3_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
+        rxpmaresetdone_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
+        txpmaresetdone_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0)
+      );
+    END COMPONENT;
+
+end package;
\ No newline at end of file
diff --git a/hdl/top_combpm_electron.vhd b/hdl/top_combpm_electron.vhd
index 505ff0f6ea2afe439679617a624005514381b8d9..b4e6831e04220005bcbb273786fa5991efd6f7fd 100644
--- a/hdl/top_combpm_electron.vhd
+++ b/hdl/top_combpm_electron.vhd
@@ -15,6 +15,7 @@ use desyrdl.pkg_combpm.all;
 
 use work.pkg_bpmpacket_stream.all;
 use work.pkg_combpm_version.all;
+use work.pkg_combpm.all;
 
 entity top_combpm_electron is
     port(
@@ -22,7 +23,6 @@ entity top_combpm_electron is
         rst_n                : in std_logic;    -- Asynchronous reset
         free_100_clk         : in std_logic;    -- Freerunning clock for GT
         pps                  : in std_logic;    -- A pulse per second signal, sync to clk domain
-        clk                  : out std_logic;   -- main clock (AXIS and AXI-MM)
         mc_time              : in std_logic_vector(39 downto 0);
 
         -- Transceiver QPLL interface
@@ -47,75 +47,19 @@ entity top_combpm_electron is
         sfp_tx_fault         : in std_logic;
 
         -- AXIS interface
+        m_axis_aclk          : out std_logic;
         m_axis_m2s           : out t_bpmpacket_axis_m2s;
         m_axis_s2m           : in t_bpmpacket_axis_s2m;            -- warning: TREADY is ignored !
 
         -- AXI bus interface
-        pi_s_top  : in  t_COMBPM_m2s;
-        po_s_top  : out t_COMBPM_s2m
+        s_axi_aclk  : in std_logic;
+        pi_s_top  : in  t_combpm_m2s;
+        po_s_top  : out t_combpm_s2m
     );
 end top_combpm_electron;
 
 architecture struct of top_combpm_electron is
 
-    COMPONENT combpm_gtwizard
-      PORT (
-        gtwiz_userclk_tx_reset_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_userclk_tx_srcclk_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_userclk_tx_usrclk_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_userclk_tx_usrclk2_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_userclk_tx_active_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_userclk_rx_reset_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_userclk_rx_srcclk_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_userclk_rx_usrclk_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_userclk_rx_usrclk2_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_userclk_rx_active_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_reset_clk_freerun_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_reset_all_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_reset_tx_pll_and_datapath_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_reset_tx_datapath_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_reset_rx_pll_and_datapath_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_reset_rx_datapath_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_reset_qpll1lock_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_reset_rx_cdr_stable_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_reset_tx_done_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_reset_rx_done_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_reset_qpll1reset_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtwiz_userdata_tx_in : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
-        gtwiz_userdata_rx_out : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
-        gthrxn_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gthrxp_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        qpll0clk_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        qpll0refclk_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        qpll1clk_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        qpll1refclk_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        rx8b10ben_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        rxbufreset_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        rxcommadeten_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        rxmcommaalignen_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        rxpcommaalignen_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        tx8b10ben_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
-        txctrl0_in : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
-        txctrl1_in : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
-        txctrl2_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
-        gthtxn_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gthtxp_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        gtpowergood_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        rxbufstatus_out : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
-        rxbyteisaligned_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        rxbyterealign_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        rxcdrlock_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        rxclkcorcnt_out : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);
-        rxcommadet_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        rxctrl0_out : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
-        rxctrl1_out : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
-        rxctrl2_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
-        rxctrl3_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
-        rxpmaresetdone_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
-        txpmaresetdone_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0)
-      );
-    END COMPONENT;
-
     ------------------------
     -- SIGNAL DECLARATION --
     ------------------------
@@ -144,6 +88,12 @@ architecture struct of top_combpm_electron is
     signal addrmap_w          : t_addrmap_combpm_in;
     signal addrmap_r          : t_addrmap_combpm_out;
 
+    signal cdc_status_array_axi      : std_logic_vector(155 downto 0);  -- CDC, clock axi side
+    signal cdc_status_array_bpm      : std_logic_vector(155 downto 0);  -- CDC, clock bpm side
+    signal cdc_control_array_axi     : std_logic_vector(2 downto 0);  -- CDC, clock axi side
+    signal cdc_control_array_bpm     : std_logic_vector(2 downto 0);  -- CDC, clock bpm side
+
+
 begin
 
 
@@ -177,7 +127,7 @@ begin
     error_detect        <= frame_error or cnt_seq_mismatch or seq_discontinuity;
 
     -- Output clock
-    clk <= usrclk;
+    m_axis_aclk <= usrclk;
 
     -- SFP direct connexion
     sfp_tx_disable  <= '1';
@@ -189,7 +139,7 @@ begin
     begin
         inst_aximm: entity desyrdl.combpm
         port map(
-            pi_clock    => usrclk,
+            pi_clock    => s_axi_aclk,
             pi_reset    => sync_reset,
             pi_s_top    => pi_s_top,
             po_s_top    => po_s_top,
@@ -197,30 +147,80 @@ begin
             po_addrmap  => addrmap_r
         );
 
-
         addrmap_w.ID.data.data                      <= x"507E1710";
         addrmap_w.VERSION.data.data                 <= C_VERSION;
 
-        addrmap_w.SFP.RXLOS.data(0)                 <= sfp_rx_los;
-        addrmap_w.SFP.MODABS.data(0)                <= sfp_mod_abs;
-
-        addrmap_w.GT.POWERGOOD.data(0)              <= gt_powergood;
-        addrmap_w.GT.QPLLLOCK.data(0)               <= qpll_lock;
-        addrmap_w.GT.RXCDRLOCK.data(0)              <= gt_rxcdrlock;
-        addrmap_w.GT.RXRESETDONE.data(0)            <= gt_rxresetdone;
-        addrmap_w.GT.RXBYTEISALIGNED.data(0)        <= gt_rxbyteisaligned;
-        addrmap_w.GT.RXBYTEREALIGN.data(0)          <= gt_rxbyterealign;
-        addrmap_w.GT.RXCOMMADET.data(0)             <= gt_rxcommadet;
+        cdc_status_array_bpm(0)              <= sfp_rx_los;
+        cdc_status_array_bpm(1)              <= sfp_mod_abs;
+        cdc_status_array_bpm(2)              <= gt_powergood;
+        cdc_status_array_bpm(3)              <= qpll_lock;
+        cdc_status_array_bpm(4)              <= gt_rxcdrlock;
+        cdc_status_array_bpm(5)              <= gt_rxresetdone;
+        cdc_status_array_bpm(6)              <= gt_rxbyteisaligned;
+        cdc_status_array_bpm(7)              <= gt_rxbyterealign;
+        cdc_status_array_bpm(8)              <= gt_rxcommadet;
+        cdc_status_array_bpm(9)              <= frame_error;
+        cdc_status_array_bpm(10)             <= cnt_seq_mismatch;
+        cdc_status_array_bpm(11)             <= seq_discontinuity;
+
+        cdc_status_array_bpm(43 downto 12)   <= frame_valid_cnt;
+        cdc_status_array_bpm(75 downto 44)   <= frame_invalid_cnt;
+        cdc_status_array_bpm(107 downto 76)  <= frame_valid_rate;
+        cdc_status_array_bpm(139 downto 108) <= frame_invalid_rate;
+        cdc_status_array_bpm(155 downto 140) <= frame_seq_cnt;
+
+        inst_xpm_cdc_status_array_single: xpm_cdc_array_single
+        generic map (
+            DEST_SYNC_FF => 4,
+            INIT_SYNC_FF => 0,
+            SIM_ASSERT_CHK => 0,
+            SRC_INPUT_REG => 1,
+            WIDTH => cdc_status_array_axi'length
+        )
+        port map (
+            dest_out => cdc_status_array_axi,
+            dest_clk => s_axi_aclk,
+            src_clk => usrclk,
+            src_in => cdc_status_array_bpm
+        );
 
-        addrmap_w.PROTOCOL.FRAMEERROR.data(0)       <= frame_error;
-        addrmap_w.PROTOCOL.SEQFRAMECNTERROR.data(0) <= cnt_seq_mismatch;
-        addrmap_w.PROTOCOL.SEQFRAMEDISCONT.data(0)  <= seq_discontinuity;
+        inst_xpm_cdc_control_array_single: xpm_cdc_array_single
+        generic map (
+            DEST_SYNC_FF => 4,
+            INIT_SYNC_FF => 0,
+            SIM_ASSERT_CHK => 0,
+            SRC_INPUT_REG => 1,
+            WIDTH => cdc_control_array_axi'length
+        )
+        port map (
+            dest_out => cdc_control_array_bpm,
+            dest_clk => usrclk,
+            src_clk => s_axi_aclk,
+            src_in => cdc_control_array_axi
+        );
 
-        addrmap_w.VALIDFRAMECNT.data.data           <= frame_valid_cnt;
-        addrmap_w.INVALIDFRAMECNT.data.data         <= frame_invalid_cnt;
-        addrmap_w.VALIDFRAMERATE.data.data          <= frame_valid_rate;
-        addrmap_w.INVALIDFRAMERATE.data.data        <= frame_invalid_rate;
-        addrmap_w.FRAMESEQ.data.data                <= frame_seq_cnt;
+        addrmap_w.SFP.RXLOS.data(0)                 <= cdc_status_array_axi(0);
+        addrmap_w.SFP.MODABS.data(0)                <= cdc_status_array_axi(1);
+        addrmap_w.GT.POWERGOOD.data(0)              <= cdc_status_array_axi(2);
+        addrmap_w.GT.QPLLLOCK.data(0)               <= cdc_status_array_axi(3);
+        addrmap_w.GT.RXCDRLOCK.data(0)              <= cdc_status_array_axi(4);
+        addrmap_w.GT.RXRESETDONE.data(0)            <= cdc_status_array_axi(5);
+        addrmap_w.GT.RXBYTEISALIGNED.data(0)        <= cdc_status_array_axi(6);
+        addrmap_w.GT.RXBYTEREALIGN.data(0)          <= cdc_status_array_axi(7);
+        addrmap_w.GT.RXCOMMADET.data(0)             <= cdc_status_array_axi(8);
+        addrmap_w.PROTOCOL.FRAMEERROR.data(0)       <= cdc_status_array_axi(9);
+        addrmap_w.PROTOCOL.SEQFRAMECNTERROR.data(0) <= cdc_status_array_axi(10);
+        addrmap_w.PROTOCOL.SEQFRAMEDISCONT.data(0)  <= cdc_status_array_axi(11);
+
+        addrmap_w.VALIDFRAMECNT.data.data           <= cdc_status_array_axi(43 downto 12);
+        addrmap_w.INVALIDFRAMECNT.data.data         <= cdc_status_array_axi(75 downto 44);
+        addrmap_w.VALIDFRAMERATE.data.data          <= cdc_status_array_axi(107 downto 76);
+        addrmap_w.INVALIDFRAMERATE.data.data        <= cdc_status_array_axi(139 downto 108);
+        addrmap_w.FRAMESEQ.data.data                <= cdc_status_array_axi(155 downto 140);
+
+        cdc_control_array_axi(0)                    <= addrmap_r.GT.RXRSTDATAPATH.data(0);
+        cdc_control_array_axi(1)                    <= addrmap_r.GT.RXRSTPLLDATAPATH.data(0);
+        cdc_control_array_axi(2)                    <= addrmap_r.GT.RXCOMMADETEN.data(0);
 
     end block blk_desyrdl;
 
@@ -274,10 +274,10 @@ begin
         qpll1refclk_in(0)                     => qpll_ref_clk,
 
         -- Control
-        gtwiz_reset_rx_datapath_in            => addrmap_r.GT.RXRSTDATAPATH.data,
-        gtwiz_reset_rx_pll_and_datapath_in    => addrmap_r.GT.RXRSTPLLDATAPATH.data,
+        gtwiz_reset_rx_datapath_in(0)          => cdc_control_array_bpm(0),
+        gtwiz_reset_rx_pll_and_datapath_in(0) => cdc_control_array_bpm(1),
         rxbufreset_in                         => "0",
-        rxcommadeten_in                       => addrmap_r.GT.RXCOMMADETEN.data,
+        rxcommadeten_in(0)                    => cdc_control_array_bpm(2),
         rx8b10ben_in                          => "1",
         rxmcommaalignen_in                    => "1",
         rxpcommaalignen_in                    => "1",
diff --git a/tcl/main.tcl b/tcl/main.tcl
index 8cf237e7fe02f4314a9d47831dafa0df551895db..92b13bb2359c108f15702db2f46a6becb4ffc3a1 100644
--- a/tcl/main.tcl
+++ b/tcl/main.tcl
@@ -19,6 +19,7 @@ proc setSources {} {
   genModVerFile VHDL ../hdl/pkg_combpm_version.vhd
 
   lappend Vhdl ../hdl/pkg_combpm_version.vhd
+  lappend Vhdl ../hdl/pkg_combpm.vhd
   lappend Vhdl ../hdl/combpm_protocol_electron.vhd
   lappend Vhdl ../hdl/top_combpm_electron.vhd
   lappend Vhdl ../hdl/pkg_bpmpacket_stream.vhd