diff --git a/designs/vivado/scalp_firmware/2019.2/src/constrs/debug.xdc b/designs/vivado/scalp_firmware/2019.2/src/constrs/debug.xdc
index c9dc22b422aa3a597aa2a81c629da3ee5a86d8a1..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/designs/vivado/scalp_firmware/2019.2/src/constrs/debug.xdc
+++ b/designs/vivado/scalp_firmware/2019.2/src/constrs/debug.xdc
@@ -1,65 +0,0 @@
-
-create_debug_core u_ila_0 ila
-set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_0]
-set_property ALL_PROBE_SAME_MU_CNT 1 [get_debug_cores u_ila_0]
-set_property C_ADV_TRIGGER false [get_debug_cores u_ila_0]
-set_property C_DATA_DEPTH 1024 [get_debug_cores u_ila_0]
-set_property C_EN_STRG_QUAL false [get_debug_cores u_ila_0]
-set_property C_INPUT_PIPE_STAGES 0 [get_debug_cores u_ila_0]
-set_property C_TRIGIN_EN false [get_debug_cores u_ila_0]
-set_property C_TRIGOUT_EN false [get_debug_cores u_ila_0]
-set_property port_width 1 [get_debug_ports u_ila_0/clk]
-connect_debug_port u_ila_0/clk [get_nets [list {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPyhxI/ClkRstxB.AuroraClockModulexI/AuroraClkxCO[InitClkxC]}]]
-set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe0]
-set_property port_width 4 [get_debug_ports u_ila_0/probe0]
-connect_debug_port u_ila_0/probe0 [get_nets [list {AuroraResetMasterLinkxR[LinkResetxR][0]} {AuroraResetMasterLinkxR[LinkResetxR][1]} {AuroraResetMasterLinkxR[LinkResetxR][2]} {AuroraResetMasterLinkxR[LinkResetxR][3]}]]
-create_debug_core u_ila_1 ila
-set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_1]
-set_property ALL_PROBE_SAME_MU_CNT 1 [get_debug_cores u_ila_1]
-set_property C_ADV_TRIGGER false [get_debug_cores u_ila_1]
-set_property C_DATA_DEPTH 1024 [get_debug_cores u_ila_1]
-set_property C_EN_STRG_QUAL false [get_debug_cores u_ila_1]
-set_property C_INPUT_PIPE_STAGES 0 [get_debug_cores u_ila_1]
-set_property C_TRIGIN_EN false [get_debug_cores u_ila_1]
-set_property C_TRIGOUT_EN false [get_debug_cores u_ila_1]
-set_property port_width 1 [get_debug_ports u_ila_1/clk]
-connect_debug_port u_ila_1/clk [get_nets [list ProgrammableLogicxB.GTPhyxB.ScalpAuroraPyhxI/ClkRstxB.AuroraClockModulexI/CLK]]
-set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_1/probe0]
-set_property port_width 4 [get_debug_ports u_ila_1/probe0]
-connect_debug_port u_ila_1/probe0 [get_nets [list {AuroraResetMasterLinkxR[SystemResetxR][0]} {AuroraResetMasterLinkxR[SystemResetxR][1]} {AuroraResetMasterLinkxR[SystemResetxR][2]} {AuroraResetMasterLinkxR[SystemResetxR][3]}]]
-create_debug_core u_ila_2 ila
-set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_2]
-set_property ALL_PROBE_SAME_MU_CNT 1 [get_debug_cores u_ila_2]
-set_property C_ADV_TRIGGER false [get_debug_cores u_ila_2]
-set_property C_DATA_DEPTH 1024 [get_debug_cores u_ila_2]
-set_property C_EN_STRG_QUAL false [get_debug_cores u_ila_2]
-set_property C_INPUT_PIPE_STAGES 0 [get_debug_cores u_ila_2]
-set_property C_TRIGIN_EN false [get_debug_cores u_ila_2]
-set_property C_TRIGOUT_EN false [get_debug_cores u_ila_2]
-set_property port_width 1 [get_debug_ports u_ila_2/clk]
-connect_debug_port u_ila_2/clk [get_nets [list ProgrammableLogicxB.PllClocksxB.ScalpAuroraPllxI/inst/InitClkxCO]]
-set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_2/probe0]
-set_property port_width 1 [get_debug_ports u_ila_2/probe0]
-connect_debug_port u_ila_2/probe0 [get_nets [list {AuroraResetSlavexR[GTResetxR]}]]
-create_debug_port u_ila_2 probe
-set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_2/probe1]
-set_property port_width 1 [get_debug_ports u_ila_2/probe1]
-connect_debug_port u_ila_2/probe1 [get_nets [list {AuroraResetSlavexR[ResetxR]}]]
-create_debug_core u_ila_3 ila
-set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_3]
-set_property ALL_PROBE_SAME_MU_CNT 1 [get_debug_cores u_ila_3]
-set_property C_ADV_TRIGGER false [get_debug_cores u_ila_3]
-set_property C_DATA_DEPTH 1024 [get_debug_cores u_ila_3]
-set_property C_EN_STRG_QUAL false [get_debug_cores u_ila_3]
-set_property C_INPUT_PIPE_STAGES 0 [get_debug_cores u_ila_3]
-set_property C_TRIGIN_EN false [get_debug_cores u_ila_3]
-set_property C_TRIGOUT_EN false [get_debug_cores u_ila_3]
-set_property port_width 1 [get_debug_ports u_ila_3/clk]
-connect_debug_port u_ila_3/clk [get_nets [list ProcessingSystemxB.ZynqxI/ScalpZynqPSxI/processing_system7_0/inst/FCLK_CLK0]]
-set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_3/probe0]
-set_property port_width 1 [get_debug_ports u_ila_3/probe0]
-connect_debug_port u_ila_3/probe0 [get_nets [list PSSysResetxR]]
-set_property C_CLK_INPUT_FREQ_HZ 300000000 [get_debug_cores dbg_hub]
-set_property C_ENABLE_CLK_DIVIDER false [get_debug_cores dbg_hub]
-set_property C_USER_SCAN_CHAIN 1 [get_debug_cores dbg_hub]
-connect_debug_port dbg_hub/clk [get_nets PSSysClkxC]
diff --git a/designs/vivado/scalp_firmware/2019.2/src/constrs/scalp_firmware.xdc b/designs/vivado/scalp_firmware/2019.2/src/constrs/scalp_firmware.xdc
index cb0705da09c971d18cb46e653b1e0c1a557ba25b..9466d9aa08d4562d30bfd5d7a6b221000071e19a 100644
--- a/designs/vivado/scalp_firmware/2019.2/src/constrs/scalp_firmware.xdc
+++ b/designs/vivado/scalp_firmware/2019.2/src/constrs/scalp_firmware.xdc
@@ -246,3 +246,4 @@ set_operating_conditions -airflow 0 -heatsink none -board small
 
 
 
+
diff --git a/designs/vivado/scalp_firmware/2019.2/src/constrs/timing_constraints.xdc b/designs/vivado/scalp_firmware/2019.2/src/constrs/timing_constraints.xdc
index 3ed9c079b9fae2f8d360c69c0c787e9fe5110903..4960acac7ff88f27f9e599140c4a946845d1cfc0 100644
--- a/designs/vivado/scalp_firmware/2019.2/src/constrs/timing_constraints.xdc
+++ b/designs/vivado/scalp_firmware/2019.2/src/constrs/timing_constraints.xdc
@@ -26,3 +26,4 @@ create_clock -period 8.000 -waveform {0.000 4.000} [get_nets GTPRefClk0PxCI]
 
 
 
+
diff --git a/designs/vivado/scalp_firmware/2019.2/src/hdl/scalp_firmware.vhd b/designs/vivado/scalp_firmware/2019.2/src/hdl/scalp_firmware.vhd
index e49a1019180576010563b2b90c6ea286e4c5ed49..e9010e62cb1c62babee9310df8877b965680a849 100644
--- a/designs/vivado/scalp_firmware/2019.2/src/hdl/scalp_firmware.vhd
+++ b/designs/vivado/scalp_firmware/2019.2/src/hdl/scalp_firmware.vhd
@@ -15,7 +15,7 @@
 -- Tool version: 2019.2
 -- Description: scalp_firmware
 --
--- Last update: 2020-11-08
+-- Last update: 2020-11-10
 --
 ---------------------------------------------------------------------------------
 
@@ -429,71 +429,187 @@ architecture arch of scalp_firmware is
     -- Zynq Reg Bank
     type t_status_send_word is (E_IDLE, E_SEND);
 
-    signal NorthStatusSendWordxDN : t_status_send_word                                 := E_IDLE;
-    signal NorthStatusSendWordxDP : t_status_send_word                                 := E_IDLE;
-    signal EastStatusSendWordxDN  : t_status_send_word                                 := E_IDLE;
-    signal EastStatusSendWordxDP  : t_status_send_word                                 := E_IDLE;
-    signal SouthStatusSendWordxDN : t_status_send_word                                 := E_IDLE;
-    signal SouthStatusSendWordxDP : t_status_send_word                                 := E_IDLE;
-    signal WestStatusSendWordxDN  : t_status_send_word                                 := E_IDLE;
-    signal WestStatusSendWordxDP  : t_status_send_word                                 := E_IDLE;
+    signal NorthStatusSendWordxDN   : t_status_send_word                                 := E_IDLE;
+    signal NorthStatusSendWordxDP   : t_status_send_word                                 := E_IDLE;
+    signal EastStatusSendWordxDN    : t_status_send_word                                 := E_IDLE;
+    signal EastStatusSendWordxDP    : t_status_send_word                                 := E_IDLE;
+    signal SouthStatusSendWordxDN   : t_status_send_word                                 := E_IDLE;
+    signal SouthStatusSendWordxDP   : t_status_send_word                                 := E_IDLE;
+    signal WestStatusSendWordxDN    : t_status_send_word                                 := E_IDLE;
+    signal WestStatusSendWordxDP    : t_status_send_word                                 := E_IDLE;
     --
-    signal NorthNativeSlavexD     : t_native_fifo_slave;
-    signal NorthNativeMasterxD    : t_native_fifo_master;
-    signal EastNativeSlavexD      : t_native_fifo_slave;
-    signal EastNativeMasterxD     : t_native_fifo_master;
-    signal SouthNativeSlavexD     : t_native_fifo_slave;
-    signal SouthNativeMasterxD    : t_native_fifo_master;
-    signal WestNativeSlavexD      : t_native_fifo_slave;
-    signal WestNativeMasterxD     : t_native_fifo_master;
+    signal NorthNativeSlavexD       : t_native_fifo_slave;
+    signal NorthNativeMasterxD      : t_native_fifo_master;
+    signal EastNativeSlavexD        : t_native_fifo_slave;
+    signal EastNativeMasterxD       : t_native_fifo_master;
+    signal SouthNativeSlavexD       : t_native_fifo_slave;
+    signal SouthNativeMasterxD      : t_native_fifo_master;
+    signal WestNativeSlavexD        : t_native_fifo_slave;
+    signal WestNativeMasterxD       : t_native_fifo_master;
     --
     -- signal InterruptRegPortxDN    : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
     -- signal InterruptRegPortxDP    : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
     -- North
-    signal NorthStatusRegPortxDN  : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal NorthStatusRegPortxDP  : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal NorthCtrlRegPortxDN    : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal NorthCtrlRegPortxDP    : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal NorthWrDataRegPortxDN  : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal NorthWrDataRegPortxDP  : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal NorthStatusRegPortxDN    : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal NorthStatusRegPortxDP    : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal NorthCtrlRegPortxDN      : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal NorthCtrlRegPortxDP      : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal NorthWrDataRegPortxDN    : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal NorthWrDataRegPortxDP    : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
     -- East
-    signal EastStatusRegPortxDN   : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal EastStatusRegPortxDP   : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal EastCtrlRegPortxDN     : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal EastCtrlRegPortxDP     : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal EastWrDataRegPortxDN   : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal EastWrDataRegPortxDP   : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal EastStatusRegPortxDN     : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal EastStatusRegPortxDP     : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal EastCtrlRegPortxDN       : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal EastCtrlRegPortxDP       : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal EastWrDataRegPortxDN     : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal EastWrDataRegPortxDP     : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
     -- South
-    signal SouthStatusRegPortxDN  : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal SouthStatusRegPortxDP  : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal SouthCtrlRegPortxDN    : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal SouthCtrlRegPortxDP    : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal SouthWrDataRegPortxDN  : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal SouthWrDataRegPortxDP  : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal SouthStatusRegPortxDN    : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal SouthStatusRegPortxDP    : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal SouthCtrlRegPortxDN      : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal SouthCtrlRegPortxDP      : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal SouthWrDataRegPortxDN    : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal SouthWrDataRegPortxDP    : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
     -- West
-    signal WestStatusRegPortxDN   : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal WestStatusRegPortxDP   : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal WestCtrlRegPortxDN     : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal WestCtrlRegPortxDP     : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal WestWrDataRegPortxDN   : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
-    signal WestWrDataRegPortxDP   : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal WestStatusRegPortxDN     : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal WestStatusRegPortxDP     : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal WestCtrlRegPortxDN       : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal WestCtrlRegPortxDP       : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal WestWrDataRegPortxDN     : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    signal WestWrDataRegPortxDP     : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0) := (others => '0');
+    -- Debug
+    -- signal CntRstxR               : std_ulogic                                         := '0';
+    signal ClkEnxS                  : std_ulogic                                         := '0';
+    signal DataCounterxD            : std_ulogic_vector(31 downto 0)                     := (others => '0');
+    --
+    signal DebugCounterResetxR      : std_ulogic                                         := '0';
+    signal DebugRXFifoResetxR       : std_ulogic                                         := '0';
+    signal DebugBackPressureResetxR : std_ulogic                                         := '0';
 
     -- Attributes
-    attribute mark_debug                            : string;
-    attribute keep                                  : string;
+    attribute mark_debug                      : string;
+    attribute keep                            : string;
     -- Clocks
-    attribute keep of PSSysClkxC                    : signal is "true";
-    attribute keep of GTRefClk0xC                   : signal is "true";
-    attribute keep of GTRefClk1xC                   : signal is "true";
-    attribute keep of AuroraClkSlavexC              : signal is "true";
-    attribute keep of AuroraClkMasterxC             : signal is "true";
+    attribute keep of PSSysClkxC              : signal is "true";
+    attribute keep of GTRefClk0xC             : signal is "true";
+    attribute keep of GTRefClk1xC             : signal is "true";
+    attribute keep of AuroraClkSlavexC        : signal is "true";
+    attribute keep of AuroraClkMasterxC       : signal is "true";
     -- Resets
-    attribute mark_debug of PSSysResetxR            : signal is "true";
-    attribute keep of PSSysResetxR                  : signal is "true";
-    attribute mark_debug of AuroraResetSlavexR      : signal is "true";
-    attribute keep of AuroraResetSlavexR            : signal is "true";
-    attribute mark_debug of AuroraResetMasterLinkxR : signal is "true";
-    attribute keep of AuroraResetMasterLinkxR       : signal is "true";
+    -- attribute mark_debug of PSSysResetxR                  : signal is "true";
+    -- attribute keep of PSSysResetxR                        : signal is "true";
+    -- attribute mark_debug of AuroraResetSlavexR            : signal is "true";
+    -- attribute keep of AuroraResetSlavexR                  : signal is "true";
+    -- attribute mark_debug of AuroraResetMasterLinkxR       : signal is "true";
+    -- attribute keep of AuroraResetMasterLinkxR             : signal is "true";
+    -- Aurora
+    attribute mark_debug of NorthFifoStatusxD : signal is "true";
+    attribute keep of NorthFifoStatusxD       : signal is "true";
+    attribute mark_debug of EastFifoStatusxD  : signal is "true";
+    attribute keep of EastFifoStatusxD        : signal is "true";
+    attribute mark_debug of SouthFifoStatusxD : signal is "true";
+    attribute keep of SouthFifoStatusxD       : signal is "true";
+    attribute mark_debug of WestFifoStatusxD  : signal is "true";
+    attribute keep of WestFifoStatusxD        : signal is "true";
+    -- attribute mark_debug of NorthRXM2SxD                  : signal is "true";
+    -- attribute keep of NorthRXM2SxD                        : signal is "true";
+    -- attribute mark_debug of NorthRXFromFifoS2MxD          : signal is "true";
+    -- attribute keep of NorthRXFromFifoS2MxD                : signal is "true";
+    -- attribute mark_debug of NorthRXfromPhyTXfromFifoM2SxD : signal is "true";
+    -- attribute keep of NorthRXfromPhyTXfromFifoM2SxD       : signal is "true";
+    -- attribute mark_debug of NorthRXfromPhyTXfromFifoS2MxD : signal is "true";
+    -- attribute keep of NorthRXfromPhyTXfromFifoS2MxD       : signal is "true";
+    -- attribute mark_debug of EastFifoStatusxD              : signal is "true";
+    -- attribute keep of EastFifoStatusxD                    : signal is "true";
+    -- attribute mark_debug of EastRXM2SxD                   : signal is "true";
+    -- attribute keep of EastRXM2SxD                         : signal is "true";
+    -- attribute mark_debug of EastRXFromFifoS2MxD           : signal is "true";
+    -- attribute keep of EastRXFromFifoS2MxD                 : signal is "true";
+    -- attribute mark_debug of EastRXfromPhyTXfromFifoM2SxD  : signal is "true";
+    -- attribute keep of EastRXfromPhyTXfromFifoM2SxD        : signal is "true";
+    -- attribute mark_debug of EastRXfromPhyTXfromFifoS2MxD  : signal is "true";
+    -- attribute keep of EastRXfromPhyTXfromFifoS2MxD        : signal is "true";
+    -- attribute mark_debug of SouthFifoStatusxD             : signal is "true";
+    -- attribute keep of SouthFifoStatusxD                   : signal is "true";
+    -- attribute mark_debug of SouthRXM2SxD                  : signal is "true";
+    -- attribute keep of SouthRXM2SxD                        : signal is "true";
+    -- attribute mark_debug of SouthRXFromFifoS2MxD          : signal is "true";
+    -- attribute keep of SouthRXFromFifoS2MxD                : signal is "true";
+    -- attribute mark_debug of SouthRXfromPhyTXfromFifoM2SxD : signal is "true";
+    -- attribute keep of SouthRXfromPhyTXfromFifoM2SxD       : signal is "true";
+    -- attribute mark_debug of SouthRXfromPhyTXfromFifoS2MxD : signal is "true";
+    -- attribute keep of SouthRXfromPhyTXfromFifoS2MxD       : signal is "true";
+    -- attribute mark_debug of WestFifoStatusxD              : signal is "true";
+    -- attribute keep of WestFifoStatusxD                    : signal is "true";
+    -- attribute mark_debug of WestRXM2SxD                   : signal is "true";
+    -- attribute keep of WestRXM2SxD                         : signal is "true";
+    -- attribute mark_debug of WestRXFromFifoS2MxD           : signal is "true";
+    -- attribute keep of WestRXFromFifoS2MxD                 : signal is "true";
+    -- attribute mark_debug of WestRXfromPhyTXfromFifoM2SxD  : signal is "true";
+    -- attribute keep of WestRXfromPhyTXfromFifoM2SxD        : signal is "true";
+    -- attribute mark_debug of WestRXfromPhyTXfromFifoS2MxD  : signal is "true";
+    -- attribute keep of WestRXfromPhyTXfromFifoS2MxD        : signal is "true";
+    --
+    attribute mark_debug of NorthRXM2SxD      : signal is "true";
+    attribute keep of NorthRXM2SxD            : signal is "true";
+    attribute mark_debug of NorthTXM2SxD      : signal is "true";
+    attribute keep of NorthTXM2SxD            : signal is "true";
+    attribute mark_debug of NorthTXS2MxD      : signal is "true";
+    attribute keep of NorthTXS2MxD            : signal is "true";
+    attribute mark_debug of EastRXM2SxD       : signal is "true";
+    attribute keep of EastRXM2SxD             : signal is "true";
+    attribute mark_debug of EastTXM2SxD       : signal is "true";
+    attribute keep of EastTXM2SxD             : signal is "true";
+    attribute mark_debug of EastTXS2MxD       : signal is "true";
+    attribute keep of EastTXS2MxD             : signal is "true";
+    attribute mark_debug of SouthRXM2SxD      : signal is "true";
+    attribute keep of SouthRXM2SxD            : signal is "true";
+    attribute mark_debug of SouthTXM2SxD      : signal is "true";
+    attribute keep of SouthTXM2SxD            : signal is "true";
+    attribute mark_debug of SouthTXS2MxD      : signal is "true";
+    attribute keep of SouthTXS2MxD            : signal is "true";
+    attribute mark_debug of WestRXM2SxD       : signal is "true";
+    attribute keep of WestRXM2SxD             : signal is "true";
+    attribute mark_debug of WestTXM2SxD       : signal is "true";
+    attribute keep of WestTXM2SxD             : signal is "true";
+    attribute mark_debug of WestTXS2MxD       : signal is "true";
+    attribute keep of WestTXS2MxD             : signal is "true";
+    attribute mark_debug of NorthRXNFCM2SxD   : signal is "true";
+    attribute keep of NorthRXNFCM2SxD         : signal is "true";
+    attribute mark_debug of NorthTXNFCM2SxD   : signal is "true";
+    attribute keep of NorthTXNFCM2SxD         : signal is "true";
+    attribute mark_debug of NorthTXNFCS2MxD   : signal is "true";
+    attribute keep of NorthTXNFCS2MxD         : signal is "true";
+    attribute mark_debug of EastRXNFCM2SxD    : signal is "true";
+    attribute keep of EastRXNFCM2SxD          : signal is "true";
+    attribute mark_debug of EastTXNFCM2SxD    : signal is "true";
+    attribute keep of EastTXNFCM2SxD          : signal is "true";
+    attribute mark_debug of EastTXNFCS2MxD    : signal is "true";
+    attribute keep of EastTXNFCS2MxD          : signal is "true";
+    attribute mark_debug of SouthRXNFCM2SxD   : signal is "true";
+    attribute keep of SouthRXNFCM2SxD         : signal is "true";
+    attribute mark_debug of SouthTXNFCM2SxD   : signal is "true";
+    attribute keep of SouthTXNFCM2SxD         : signal is "true";
+    attribute mark_debug of SouthTXNFCS2mxD   : signal is "true";
+    attribute keep of SouthTXNFCS2mxD         : signal is "true";
+    attribute mark_debug of WestRXNFCM2SxD    : signal is "true";
+    attribute keep of WestRXNFCM2SxD          : signal is "true";
+    attribute mark_debug of WestTXNFCM2SxD    : signal is "true";
+    attribute keep of WestTXNFCM2SxD          : signal is "true";
+    attribute mark_debug of WestTXNFCS2MxD    : signal is "true";
+    attribute keep of WestTXNFCS2MxD          : signal is "true";
+    attribute mark_debug of AuroraCtrlxD      : signal is "true";
+    attribute keep of AuroraCtrlxD            : signal is "true";
+    attribute mark_debug of AuroraStatusxD    : signal is "true";
+    attribute keep of AuroraStatusxD          : signal is "true";
+    -- attribute mark_debug of NorthTXM2SxD                  : signal is "true";
+    -- attribute keep of NorthTXM2SxD                        : signal is "true";
+    -- attribute mark_debug of EastTXM2SxD                   : signal is "true";
+    -- attribute keep of EastTXM2SxD                         : signal is "true";
+    -- attribute mark_debug of SouthTXM2SxD                  : signal is "true";
+    -- attribute keep of SouthTXM2SxD                        : signal is "true";
+    -- attribute mark_debug of WestTXM2SxD                   : signal is "true";
+    -- attribute keep of WestTXM2SxD                         : signal is "true";
 
 begin
 
@@ -734,7 +850,7 @@ begin
 
             begin  -- block RXFifoxB
 
-                RXFifoRstxAS : RXFifoRstxRAN <= not AuroraClkMasterxC.PllNotLockedxS;
+                RXFifoRstxAS : RXFifoRstxRAN <= (not AuroraClkMasterxC.PllNotLockedxS) and (not DebugRXFifoResetxR);
 
                 ScalpAuroraPhyRXFifoxI : entity work.scalp_aurora_phy_rx_fifo
                     port map (
@@ -779,53 +895,91 @@ begin
 
             BackPressurexB : block is
 
+                signal BackPressureResetxR : std_ulogic                                             := '0';
                 -- North
-                signal NorthProgFullxSN  : std_ulogic                                             := '0';
-                signal NorthProgFullxSP  : std_ulogic                                             := '0';
-                signal NorthProgEmptyxSN : std_ulogic                                             := '0';
-                signal NorthProgEmptyxSP : std_ulogic                                             := '0';
-                signal NorthNFCStatexDN  : t_nfc_states                                           := C_NFC_IDLE;
-                signal NorthNFCStatexDP  : t_nfc_states                                           := C_NFC_IDLE;
-                signal NorthNFCDataxDN   : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
-                signal NorthNFCDataxDP   : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
-                signal NorthNFCValidxSN  : std_ulogic                                             := '0';
-                signal NorthNFCValidxSP  : std_ulogic                                             := '0';
+                signal NorthProgFullxSN    : std_ulogic                                             := '0';
+                signal NorthProgFullxSP    : std_ulogic                                             := '0';
+                signal NorthProgEmptyxSN   : std_ulogic                                             := '0';
+                signal NorthProgEmptyxSP   : std_ulogic                                             := '0';
+                signal NorthNFCStatexDN    : t_nfc_states                                           := C_NFC_IDLE;
+                signal NorthNFCStatexDP    : t_nfc_states                                           := C_NFC_IDLE;
+                signal NorthNFCDataxDN     : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
+                signal NorthNFCDataxDP     : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
+                signal NorthNFCValidxSN    : std_ulogic                                             := '0';
+                signal NorthNFCValidxSP    : std_ulogic                                             := '0';
                 -- East
-                signal EastProgFullxSN   : std_ulogic                                             := '0';
-                signal EastProgFullxSP   : std_ulogic                                             := '0';
-                signal EastProgEmptyxSN  : std_ulogic                                             := '0';
-                signal EastProgEmptyxSP  : std_ulogic                                             := '0';
-                signal EastNFCStatexDN   : t_nfc_states                                           := C_NFC_IDLE;
-                signal EastNFCStatexDP   : t_nfc_states                                           := C_NFC_IDLE;
-                signal EastNFCDataxDN    : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
-                signal EastNFCDataxDP    : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
-                signal EastNFCValidxSN   : std_ulogic                                             := '0';
-                signal EastNFCValidxSP   : std_ulogic                                             := '0';
+                signal EastProgFullxSN     : std_ulogic                                             := '0';
+                signal EastProgFullxSP     : std_ulogic                                             := '0';
+                signal EastProgEmptyxSN    : std_ulogic                                             := '0';
+                signal EastProgEmptyxSP    : std_ulogic                                             := '0';
+                signal EastNFCStatexDN     : t_nfc_states                                           := C_NFC_IDLE;
+                signal EastNFCStatexDP     : t_nfc_states                                           := C_NFC_IDLE;
+                signal EastNFCDataxDN      : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
+                signal EastNFCDataxDP      : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
+                signal EastNFCValidxSN     : std_ulogic                                             := '0';
+                signal EastNFCValidxSP     : std_ulogic                                             := '0';
                 -- South
-                signal SouthProgFullxSN  : std_ulogic                                             := '0';
-                signal SouthProgFullxSP  : std_ulogic                                             := '0';
-                signal SouthProgEmptyxSN : std_ulogic                                             := '0';
-                signal SouthProgEmptyxSP : std_ulogic                                             := '0';
-                signal SouthNFCStatexDN  : t_nfc_states                                           := C_NFC_IDLE;
-                signal SouthNFCStatexDP  : t_nfc_states                                           := C_NFC_IDLE;
-                signal SouthNFCDataxDN   : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
-                signal SouthNFCDataxDP   : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
-                signal SouthNFCValidxSN  : std_ulogic                                             := '0';
-                signal SouthNFCValidxSP  : std_ulogic                                             := '0';
+                signal SouthProgFullxSN    : std_ulogic                                             := '0';
+                signal SouthProgFullxSP    : std_ulogic                                             := '0';
+                signal SouthProgEmptyxSN   : std_ulogic                                             := '0';
+                signal SouthProgEmptyxSP   : std_ulogic                                             := '0';
+                signal SouthNFCStatexDN    : t_nfc_states                                           := C_NFC_IDLE;
+                signal SouthNFCStatexDP    : t_nfc_states                                           := C_NFC_IDLE;
+                signal SouthNFCDataxDN     : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
+                signal SouthNFCDataxDP     : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
+                signal SouthNFCValidxSN    : std_ulogic                                             := '0';
+                signal SouthNFCValidxSP    : std_ulogic                                             := '0';
                 -- West
-                signal WestProgFullxSN   : std_ulogic                                             := '0';
-                signal WestProgFullxSP   : std_ulogic                                             := '0';
-                signal WestProgEmptyxSN  : std_ulogic                                             := '0';
-                signal WestProgEmptyxSP  : std_ulogic                                             := '0';
-                signal WestNFCStatexDN   : t_nfc_states                                           := C_NFC_IDLE;
-                signal WestNFCStatexDP   : t_nfc_states                                           := C_NFC_IDLE;
-                signal WestNFCDataxDN    : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
-                signal WestNFCDataxDP    : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
-                signal WestNFCValidxSN   : std_ulogic                                             := '0';
-                signal WestNFCValidxSP   : std_ulogic                                             := '0';
+                signal WestProgFullxSN     : std_ulogic                                             := '0';
+                signal WestProgFullxSP     : std_ulogic                                             := '0';
+                signal WestProgEmptyxSN    : std_ulogic                                             := '0';
+                signal WestProgEmptyxSP    : std_ulogic                                             := '0';
+                signal WestNFCStatexDN     : t_nfc_states                                           := C_NFC_IDLE;
+                signal WestNFCStatexDP     : t_nfc_states                                           := C_NFC_IDLE;
+                signal WestNFCDataxDN      : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
+                signal WestNFCDataxDP      : std_ulogic_vector((C_AXI4_NFC_DATA_SIZE - 1) downto 0) := (others => '0');
+                signal WestNFCValidxSN     : std_ulogic                                             := '0';
+                signal WestNFCValidxSP     : std_ulogic                                             := '0';
+
+                -- Attributes
+                attribute mark_debug                        : string;
+                attribute keep                              : string;
+                --
+                attribute mark_debug of BackPressureResetxR : signal is "true";
+                attribute keep of BackPressureResetxR       : signal is "true";
+                --
+                attribute mark_debug of NorthNFCStatexDP    : signal is "true";
+                attribute keep of NorthNFCStatexDP          : signal is "true";
+                attribute mark_debug of NorthNFCDataxDP     : signal is "true";
+                attribute keep of NorthNFCDataxDP           : signal is "true";
+                attribute mark_debug of NorthNFCValidxSP    : signal is "true";
+                attribute keep of NorthNFCValidxSP          : signal is "true";
+                --
+                attribute mark_debug of EastNFCStatexDP     : signal is "true";
+                attribute keep of EastNFCStatexDP           : signal is "true";
+                attribute mark_debug of EastNFCDataxDP      : signal is "true";
+                attribute keep of EastNFCDataxDP            : signal is "true";
+                attribute mark_debug of EastNFCValidxSP     : signal is "true";
+                attribute keep of EastNFCValidxSP           : signal is "true";
+                --
+                attribute mark_debug of SouthNFCStatexDP    : signal is "true";
+                attribute keep of SouthNFCStatexDP          : signal is "true";
+                attribute mark_debug of SouthNFCDataxDP     : signal is "true";
+                attribute keep of SouthNFCDataxDP           : signal is "true";
+                attribute mark_debug of SouthNFCValidxSP    : signal is "true";
+                attribute keep of SouthNFCValidxSP          : signal is "true";
+                --
+                attribute mark_debug of WestNFCStatexDP     : signal is "true";
+                attribute keep of WestNFCStatexDP           : signal is "true";
+                attribute mark_debug of WestNFCDataxDP      : signal is "true";
+                attribute keep of WestNFCDataxDP            : signal is "true";
+                attribute mark_debug of WestNFCValidxSP     : signal is "true";
+                attribute keep of WestNFCValidxSP           : signal is "true";
 
             begin  -- block BackPressurexB
 
+                BackPressureResetxAS : BackPressureResetxR <= AuroraClkMasterxC.PllNotLockedxS or
+                                                              DebugBackPressureResetxR;
                 -- NFC Data and valid signals
                 NorthNFCDataxAS   : NorthTXNFCM2SxD.DataxD  <= NorthNFCDataxDP;
                 NorthNFCValidxAS  : NorthTXNFCM2SxD.ValidxS <= NorthNFCValidxSP;
@@ -838,10 +992,10 @@ begin
                 WestNFCDataxAS    : WestTXNFCM2SxD.DataxD   <= WestNFCDataxDP;
                 WestNFCValidxAS   : WestTXNFCM2SxD.ValidxS  <= WestNFCValidxSP;
 
-                UpdateRegxP : process (AuroraClkMasterxC.PllNotLockedxS,
-                                       AuroraClkMasterxC.UserClkxC) is
+                UpdateRegxP : process (AuroraClkMasterxC.UserClkxC,
+                                       BackPressureResetxR) is
                 begin  -- process UpdateRegxP
-                    if not AuroraClkMasterxC.PllNotLockedxS then
+                    if BackPressureResetxR = '1' then
                         NorthProgFullxSP  <= '0';
                         NorthProgEmptyxSP <= '0';
                         NorthNFCStatexDP  <= C_NFC_IDLE;
@@ -890,8 +1044,7 @@ begin
                                            NorthNFCValidxSP, NorthProgEmptyxSN,
                                            NorthProgEmptyxSP, NorthProgFullxSN,
                                            NorthProgFullxSP,
-                                           NorthRXFromFifoS2MxD.ReadyxS,
-                                           NorthTXUFCS2MxD.ReadyxS) is
+                                           NorthTXNFCS2MxD.ReadyxS) is
                 begin  -- process NorthNFCStatexP
                     -- Default values
                     NorthNFCStatexDN <= NorthNFCStatexDP;
@@ -902,29 +1055,29 @@ begin
                         when C_NFC_IDLE =>
                                 NorthNFCStatexDN <= C_NFC_IS_XON;
                         when C_NFC_IS_XON =>
-                                if (NorthProgFullxSP = '0' and NorthProgFullxSN = '1') or
-                                    (NorthRXFromFifoS2MxD.ReadyxS = '0') then
+                                if NorthProgFullxSP = '0' and NorthProgFullxSN = '1' then  --or
+                                    --(NorthRXFromFifoS2MxD.ReadyxS = '0') then
                                     NorthNFCDataxDN  <= C_NFC_XOFF;
                                     NorthNFCValidxSN <= '1';
                                     NorthNFCStatexDN <= C_NFC_SEND_XOFF;
                                 end if;
 
                         when C_NFC_IS_XOFF =>
-                                if (NorthProgEmptyxSP = '0' and NorthProgEmptyxSN = '1') and
-                                    (NorthRXFromFifoS2MxD.ReadyxS = '1') then
+                                if NorthProgEmptyxSP = '0' and NorthProgEmptyxSN = '1' then  -- and
+                                    --(NorthRXFromFifoS2MxD.ReadyxS = '1') then
                                     NorthNFCDataxDN  <= C_NFC_XON;
                                     NorthNFCValidxSN <= '1';
                                     NorthNFCStatexDN <= C_NFC_SEND_XON;
                                 end if;
 
                         when C_NFC_SEND_XON =>
-                                if NorthTXUFCS2MxD.ReadyxS = '1' then
+                                if NorthTXNFCS2MxD.ReadyxS = '1' then
                                     NorthNFCValidxSN <= '0';
                                     NorthNFCStatexDN <= C_NFC_IS_XON;
                                 end if;
 
                         when C_NFC_SEND_XOFF =>
-                                if NorthTXUFCS2MxD.ReadyxS = '1' then
+                                if NorthTXNFCS2MxD.ReadyxS = '1' then
                                     NorthNFCValidxSN <= '0';
                                     NorthNFCStatexDN <= C_NFC_IS_XOFF;
                                 end if;
@@ -938,8 +1091,7 @@ begin
                                           EastNFCValidxSP, EastProgEmptyxSN,
                                           EastProgEmptyxSP, EastProgFullxSN,
                                           EastProgFullxSP,
-                                          EastRXFromFifoS2MxD.ReadyxS,
-                                          EastTXUFCS2MxD.ReadyxS) is
+                                          EastTXNFCS2MxD.ReadyxS) is
                 begin  -- process EastNFCStatexP
                     -- Default values
                     EastNFCStatexDN <= EastNFCStatexDP;
@@ -950,29 +1102,29 @@ begin
                         when C_NFC_IDLE =>
                                 EastNFCStatexDN <= C_NFC_IS_XON;
                         when C_NFC_IS_XON =>
-                                if (EastProgFullxSP = '0' and EastProgFullxSN = '1') or
-                                    (EastRXFromFifoS2MxD.ReadyxS = '0') then
+                                if EastProgFullxSP = '0' and EastProgFullxSN = '1' then  --or
+                                    --(EastRXFromFifoS2MxD.ReadyxS = '0') then
                                     EastNFCDataxDN  <= C_NFC_XOFF;
                                     EastNFCValidxSN <= '1';
                                     EastNFCStatexDN <= C_NFC_SEND_XOFF;
                                 end if;
 
                         when C_NFC_IS_XOFF =>
-                                if (EastProgEmptyxSP = '0' and EastProgEmptyxSN = '1') and
-                                    (EastRXFromFifoS2MxD.ReadyxS = '1') then
+                                if EastProgEmptyxSP = '0' and EastProgEmptyxSN = '1' then  -- and
+                                    --(EastRXFromFifoS2MxD.ReadyxS = '1') then
                                     EastNFCDataxDN  <= C_NFC_XON;
                                     EastNFCValidxSN <= '1';
                                     EastNFCStatexDN <= C_NFC_SEND_XON;
                                 end if;
 
                         when C_NFC_SEND_XON =>
-                                if EastTXUFCS2MxD.ReadyxS = '1' then
+                                if EastTXNFCS2MxD.ReadyxS = '1' then
                                     EastNFCValidxSN <= '0';
                                     EastNFCStatexDN <= C_NFC_IS_XON;
                                 end if;
 
                         when C_NFC_SEND_XOFF =>
-                                if EastTXUFCS2MxD.ReadyxS = '1' then
+                                if EastTXNFCS2MxD.ReadyxS = '1' then
                                     EastNFCValidxSN <= '0';
                                     EastNFCStatexDN <= C_NFC_IS_XOFF;
                                 end if;
@@ -986,8 +1138,7 @@ begin
                                            SouthNFCValidxSP, SouthProgEmptyxSN,
                                            SouthProgEmptyxSP, SouthProgFullxSN,
                                            SouthProgFullxSP,
-                                           SouthRXFromFifoS2MxD.ReadyxS,
-                                           SouthTXUFCS2MxD.ReadyxS) is
+                                           SouthTXNFCS2MxD.ReadyxS) is
                 begin  -- process SouthNFCStatexP
                     -- Default values
                     SouthNFCStatexDN <= SouthNFCStatexDP;
@@ -998,29 +1149,29 @@ begin
                         when C_NFC_IDLE =>
                                 SouthNFCStatexDN <= C_NFC_IS_XON;
                         when C_NFC_IS_XON =>
-                                if (SouthProgFullxSP = '0' and SouthProgFullxSN = '1') or
-                                    (SouthRXFromFifoS2MxD.ReadyxS = '0') then
+                                if SouthProgFullxSP = '0' and SouthProgFullxSN = '1' then  -- or
+                                    --(SouthRXFromFifoS2MxD.ReadyxS = '0') then
                                     SouthNFCDataxDN  <= C_NFC_XOFF;
                                     SouthNFCValidxSN <= '1';
                                     SouthNFCStatexDN <= C_NFC_SEND_XOFF;
                                 end if;
 
                         when C_NFC_IS_XOFF =>
-                                if (SouthProgEmptyxSP = '0' and SouthProgEmptyxSN = '1') and
-                                    (SouthRXFromFifoS2MxD.ReadyxS = '1') then
+                                if SouthProgEmptyxSP = '0' and SouthProgEmptyxSN = '1' then  -- and
+                                    --(SouthRXFromFifoS2MxD.ReadyxS = '1') then
                                     SouthNFCDataxDN  <= C_NFC_XON;
                                     SouthNFCValidxSN <= '1';
                                     SouthNFCStatexDN <= C_NFC_SEND_XON;
                                 end if;
 
                         when C_NFC_SEND_XON =>
-                                if SouthTXUFCS2MxD.ReadyxS = '1' then
+                                if SouthTXNFCS2MxD.ReadyxS = '1' then
                                     SouthNFCValidxSN <= '0';
                                     SouthNFCStatexDN <= C_NFC_IS_XON;
                                 end if;
 
                         when C_NFC_SEND_XOFF =>
-                                if SouthTXUFCS2MxD.ReadyxS = '1' then
+                                if SouthTXNFCS2MxD.ReadyxS = '1' then
                                     SouthNFCValidxSN <= '0';
                                     SouthNFCStatexDN <= C_NFC_IS_XOFF;
                                 end if;
@@ -1034,8 +1185,7 @@ begin
                                           WestNFCValidxSP, WestProgEmptyxSN,
                                           WestProgEmptyxSP, WestProgFullxSN,
                                           WestProgFullxSP,
-                                          WestRXFromFifoS2MxD.ReadyxS,
-                                          WestTXUFCS2MxD.ReadyxS) is
+                                          WestTXNFCS2MxD.ReadyxS) is
                 begin  -- process WestNFCStatexP
                     -- Default values
                     WestNFCStatexDN <= WestNFCStatexDP;
@@ -1046,29 +1196,29 @@ begin
                         when C_NFC_IDLE =>
                                 WestNFCStatexDN <= C_NFC_IS_XON;
                         when C_NFC_IS_XON =>
-                                if (WestProgFullxSP = '0' and WestProgFullxSN = '1') or
-                                    (WestRXFromFifoS2MxD.ReadyxS = '0') then
+                                if WestProgFullxSP = '0' and WestProgFullxSN = '1' then  --or
+                                    --(WestRXFromFifoS2MxD.ReadyxS = '0') then
                                     WestNFCDataxDN  <= C_NFC_XOFF;
                                     WestNFCValidxSN <= '1';
                                     WestNFCStatexDN <= C_NFC_SEND_XOFF;
                                 end if;
 
                         when C_NFC_IS_XOFF =>
-                                if (WestProgEmptyxSP = '0' and WestProgEmptyxSN = '1') and
-                                    (WestRXFromFifoS2MxD.ReadyxS = '1') then
+                                if WestProgEmptyxSP = '0' and WestProgEmptyxSN = '1' then  -- and
+                                    --(WestRXFromFifoS2MxD.ReadyxS = '1') then
                                     WestNFCDataxDN  <= C_NFC_XON;
                                     WestNFCValidxSN <= '1';
                                     WestNFCStatexDN <= C_NFC_SEND_XON;
                                 end if;
 
                         when C_NFC_SEND_XON =>
-                                if WestTXUFCS2MxD.ReadyxS = '1' then
+                                if WestTXNFCS2MxD.ReadyxS = '1' then
                                     WestNFCValidxSN <= '0';
                                     WestNFCStatexDN <= C_NFC_IS_XON;
                                 end if;
 
                         when C_NFC_SEND_XOFF =>
-                                if WestTXUFCS2MxD.ReadyxS = '1' then
+                                if WestTXNFCS2MxD.ReadyxS = '1' then
                                     WestNFCValidxSN <= '0';
                                     WestNFCStatexDN <= C_NFC_IS_XOFF;
                                 end if;
@@ -1082,410 +1232,414 @@ begin
 
         end block GTPhyxB;
 
-        ZynqRegBankxB : block is
-        begin  -- block ZynqRegBankxB
-
-
-            RegBankxB : block is
-            begin  -- block RegBankxB
-
-                WriteRegPortxP : process (EastCtrlRegPortxDP,
-                                          EastWrDataRegPortxDP,
-                                          NorthCtrlRegPortxDP,
-                                          NorthWrDataRegPortxDP,
-                                          SouthCtrlRegPortxDP,
-                                          SouthWrDataRegPortxDP,
-                                          WestCtrlRegPortxDP,
-                                          WestWrDataRegPortxDP, WrAddrxD,
-                                          WrDataxD, WrValidxS) is
-                begin  -- process WriteRegPortxP
-                    -- North                    
-                    NorthCtrlRegPortxDN   <= NorthCtrlRegPortxDP;
-                    NorthWrDataRegPortxDN <= NorthWrDataRegPortxDP;
-                    -- East
-                    EastCtrlRegPortxDN    <= EastCtrlRegPortxDP;
-                    EastWrDataRegPortxDN  <= EastWrDataRegPortxDP;
-                    -- South
-                    SouthCtrlRegPortxDN   <= SouthCtrlRegPortxDP;
-                    SouthWrDataRegPortxDN <= SouthWrDataRegPortxDP;
-                    -- West
-                    WestCtrlRegPortxDN    <= WestCtrlRegPortxDP;
-                    WestWrDataRegPortxDN  <= WestWrDataRegPortxDP;
-
-                    if WrValidxS = '1' then
-                        case WrAddrxD is
-                            -- Ctrl
-                            -- North
-                            when x"000" => NorthCtrlRegPortxDN   <= WrDataxD;
-                            when x"004" => NorthCtrlRegPortxDN   <= NorthCtrlRegPortxDP or WrDataxD;
-                            when x"008" => NorthCtrlRegPortxDN   <= NorthCtrlRegPortxDP and not WrDataxD;
-                            -- East
-                            when x"00c" => EastCtrlRegPortxDN    <= WrDataxD;
-                            when x"010" => EastCtrlRegPortxDN    <= EastCtrlRegPortxDP or WrDataxD;
-                            when x"014" => EastCtrlRegPortxDN    <= EastCtrlRegPortxDP and not WrDataxD;
-                            -- South
-                            when x"018" => SouthCtrlRegPortxDN   <= WrDataxD;
-                            when x"01c" => SouthCtrlRegPortxDN   <= SouthCtrlRegPortxDP or WrDataxD;
-                            when x"020" => SouthCtrlRegPortxDN   <= SouthCtrlRegPortxDP and not WrDataxD;
-                            -- East
-                            when x"024" => WestCtrlRegPortxDN    <= WrDataxD;
-                            when x"028" => WestCtrlRegPortxDN    <= WestCtrlRegPortxDP or WrDataxD;
-                            when x"02c" => WestCtrlRegPortxDN    <= WestCtrlRegPortxDP and not WrDataxD;
-                            -- Data
-                            -- North
-                            when x"030" => NorthWrDataRegPortxDN <= WrDataxD;
-                            -- East
-                            when x"034" => EastWrDataRegPortxDN  <= WrDataxD;
-                            -- South
-                            when x"038" => SouthWrDataRegPortxDN <= WrDataxD;
-                            -- West
-                            when x"03c" => WestWrDataRegPortxDN  <= WrDataxD;
-                            when others => null;
-                        end case;
-                    end if;
-                end process WriteRegPortxP;
-
-                ReadRegPortxP : process (PSSysClkxC, PSSysResetxR) is
-                begin  -- process ReadRegPortxP
-                    if PSSysResetxR = '1' then
-                        RdDataxD <= (others => '0');
-                    elsif rising_edge(PSSysClkxC) then
-                        RdDataxD <= (others => '0');
-
-                        if RdValidxS = '1' then
-                            case RdAddrxD is
-                                when x"000" => RdDataxD <= NorthCtrlRegPortxDP;
-                                when x"00C" => RdDataxD <= EastCtrlRegPortxDP;
-                                when x"018" => RdDataxD <= SouthCtrlRegPortxDP;
-                                when x"024" => RdDataxD <= WestCtrlRegPortxDP;
-                                when x"030" => RdDataxD <= NorthWrDataRegPortxDP;
-                                when x"034" => RdDataxD <= EastWrDataRegPortxDP;
-                                when x"038" => RdDataxD <= SouthWrDataRegPortxDP;
-                                when x"03c" => RdDataxD <= WestWrDataRegPortxDP;
-                                when x"040" => RdDataxD <= NorthStatusRegPortxDP;
-                                when x"044" => RdDataxD <= EastStatusRegPortxDP;
-                                when x"048" => RdDataxD <= SouthStatusRegPortxDP;
-                                when x"04c" => RdDataxD <= WestStatusRegPortxDP;
-                                when others => RdDataxD <= (others => '0');
-                            end case;
-                        end if;
-                    end if;
-                end process ReadRegPortxP;
-
-                RegBankxP : process (PSSysClkxC, PSSysResetxR) is
-                begin  -- process RegBankxP
-                    if PSSysResetxR = '1' then
-                        -- North
-                        NorthStatusRegPortxDP <= (others => '0');
-                        NorthCtrlRegPortxDP   <= (others => '0');
-                        NorthWrDataRegPortxDP <= (others => '0');
-                        -- East
-                        EastStatusRegPortxDP  <= (others => '0');
-                        EastCtrlRegPortxDP    <= (others => '0');
-                        EastWrDataRegPortxDP  <= (others => '0');
-                        -- South
-                        SouthStatusRegPortxDP <= (others => '0');
-                        SouthCtrlRegPortxDP   <= (others => '0');
-                        SouthWrDataRegPortxDP <= (others => '0');
-                        -- West
-                        WestStatusRegPortxDP  <= (others => '0');
-                        WestCtrlRegPortxDP    <= (others => '0');
-                        WestWrDataRegPortxDP  <= (others => '0');
-                    elsif rising_edge(PSSysClkxC) then
-                        -- North
-                        NorthStatusRegPortxDP <= NorthStatusRegPortxDN;
-                        NorthCtrlRegPortxDP   <= NorthCtrlRegPortxDN;
-                        NorthWrDataRegPortxDP <= NorthWrDataRegPortxDN;
-                        -- East
-                        EastStatusRegPortxDP  <= EastStatusRegPortxDN;
-                        EastCtrlRegPortxDP    <= EastCtrlRegPortxDN;
-                        EastWrDataRegPortxDP  <= EastWrDataRegPortxDN;
-                        -- South
-                        SouthStatusRegPortxDP <= SouthStatusRegPortxDN;
-                        SouthCtrlRegPortxDP   <= SouthCtrlRegPortxDN;
-                        SouthWrDataRegPortxDP <= SouthWrDataRegPortxDN;
-                        -- West
-                        WestStatusRegPortxDP  <= WestStatusRegPortxDN;
-                        WestCtrlRegPortxDP    <= WestCtrlRegPortxDN;
-                        WestWrDataRegPortxDP  <= WestWrDataRegPortxDN;
-                    end if;
-                end process RegBankxP;
-
-            end block RegBankxB;
-
-            TxFifoxB : block is
-            begin  -- block TxFifoxB
-
-                NorthWrDataxAS   : NorthNativeSlavexD.DataxD <= NorthWrDataRegPortxDP;
-                EastWrDataxAS    : EastNativeSlavexD.DataxD  <= EastWrDataRegPortxDP;
-                SouthWrDataxAS   : SouthNativeSlavexD.DataxD <= SouthWrDataRegPortxDN;
-                WestWrDataRegxAS : WestNativeSlavexD.DataxD  <= WestWrDataRegPortxDN;
-                NorthWrEnxAS     : NorthNativeSlavexD.WrEnxS <= NorthCtrlRegPortxDP(0);
-                EastWrEnxAS      : EastNativeSlavexD.WrEnxS  <= EastCtrlRegPortxDP(0);
-                SouthWrEnxAS     : SouthNativeSlavexD.WrEnxS <= SouthCtrlRegPortxDP(0);
-                WestWrEnxAS      : EastNativeSlavexD.WrEnxS  <= EastCtrlRegPortxDP(0);
-                NorthStatusRegPortxAS : NorthStatusRegPortxDN <= (0      => NorthNativeMasterxD.FullxS,
-                                                                  1      => NorthNativeMasterxD.EmptyxS,
-                                                                  2      => NorthNativeMasterxD.AlmostFullxS,
-                                                                  3      => NorthNativeMasterxD.AlmostEmptyxS,
-                                                                  4      => NorthNativeMasterxD.WrRstBusyxS,
-                                                                  5      => NorthNativeMasterxD.RdRstBusyxS,
-                                                                  others => '0');
-                EastStatusRegPortxAS : EastStatusRegPortxDN <= (0      => EastNativeMasterxD.FullxS,
-                                                                1      => EastNativeMasterxD.EmptyxS,
-                                                                2      => EastNativeMasterxD.AlmostFullxS,
-                                                                3      => EastNativeMasterxD.AlmostEmptyxS,
-                                                                4      => EastNativeMasterxD.WrRstBusyxS,
-                                                                5      => EastNativeMasterxD.RdRstBusyxS,
-                                                                others => '0');
-                SouthStatusRegPortxAS : SouthStatusRegPortxDN <= (0      => SouthNativeMasterxD.FullxS,
-                                                                  1      => SouthNativeMasterxD.EmptyxS,
-                                                                  2      => SouthNativeMasterxD.AlmostFullxS,
-                                                                  3      => SouthNativeMasterxD.AlmostEmptyxS,
-                                                                  4      => SouthNativeMasterxD.WrRstBusyxS,
-                                                                  5      => SouthNativeMasterxD.RdRstBusyxS,
-                                                                  others => '0');
-                WestStatusRegPortxAS : WestStatusRegPortxDN <= (0      => WestNativeMasterxD.FullxS,
-                                                                1      => WestNativeMasterxD.EmptyxS,
-                                                                2      => WestNativeMasterxD.AlmostFullxS,
-                                                                3      => WestNativeMasterxD.AlmostEmptyxS,
-                                                                4      => WestNativeMasterxD.WrRstBusyxS,
-                                                                5      => WestNativeMasterxD.RdRstBusyxS,
-                                                                others => '0');
-
-                UpdateRegxP : process (AuroraClkMasterxC.PllNotLockedxS,
-                                       AuroraClkMasterxC.UserClkxC) is
-                begin  -- process UpdateRegxP
-                    if not AuroraClkMasterxC.PllNotLockedxS then
-                        NorthStatusSendWordxDP <= E_IDLE;
-                        EastStatusSendWordxDP  <= E_IDLE;
-                        SouthStatusSendWordxDP <= E_IDLE;
-                        WestStatusSendWordxDP  <= E_IDLE;
-                    elsif rising_edge(AuroraClkMasterxC.UserClkxC) then
-                        NorthStatusSendWordxDP <= NorthStatusSendWordxDN;
-                        EastStatusSendWordxDP  <= EastStatusSendWordxDN;
-                        SouthStatusSendWordxDP <= SouthStatusSendWordxDN;
-                        WestStatusSendWordxDP  <= WestStatusSendWordxDN;
-                    end if;
-                end process UpdateRegxP;
-
-                NorthSendWordxP : process (NorthNativeMasterxD.DataxD,
-                                           NorthNativeMasterxD.EmptyxS,
-                                           NorthStatusSendWordxDP,
-                                           NorthTXS2MxD.ReadyxS) is
-                begin  -- process NorthSendWordxP
-                    NorthTXM2SxD.DataxD       <= (others => '0');
-                    NorthTXM2SxD.KeepxD       <= (others => '1');
-                    NorthTXM2SxD.LastxS       <= '0';
-                    NorthTXM2SxD.ValidxS      <= '0';
-                    NorthNativeSlavexD.RdEnxS <= '0';
-                    NorthStatusSendWordxDN    <= NorthStatusSendWordxDP;
-
-                    case NorthStatusSendWordxDP is
-                        when E_IDLE =>
-
-                                if (NorthNativeMasterxD.EmptyxS = '0') and
-                                    (NorthTXS2MxD.ReadyxS = '1') then
-                                    NorthTXM2SxD.DataxD       <= NorthNativeMasterxD.DataxD;
-                                    NorthTXM2SxD.LastxS       <= '1';
-                                    NorthTXM2SxD.ValidxS      <= '1';
-                                    NorthNativeSlavexD.RdEnxS <= '1';
-                                    NorthStatusSendWordxDN    <= E_SEND;
-                                end if;
-
-                        when E_SEND =>
-                                NorthStatusSendWordxDN <= E_IDLE;
-
-                        when others => null;
-                    end case;
-                end process NorthSendWordxP;
-
-                EastSendWordxP : process (EastNativeMasterxD.DataxD,
-                                          EastNativeMasterxD.EmptyxS,
-                                          EastStatusSendWordxDP,
-                                          EastTXS2MxD.ReadyxS) is
-                begin  -- process EastSendWordxP
-                    EastTXM2SxD.DataxD       <= (others => '0');
-                    EastTXM2SxD.KeepxD       <= (others => '1');
-                    EastTXM2SxD.LastxS       <= '0';
-                    EastTXM2SxD.ValidxS      <= '0';
-                    EastNativeSlavexD.RdEnxS <= '0';
-                    EastStatusSendWordxDN    <= EastStatusSendWordxDP;
-
-                    case EastStatusSendWordxDP is
-                        when E_IDLE =>
-
-                                if (EastNativeMasterxD.EmptyxS = '0') and
-                                    (EastTXS2MxD.ReadyxS = '1') then
-                                    EastTXM2SxD.DataxD       <= EastNativeMasterxD.DataxD;
-                                    EastTXM2SxD.LastxS       <= '1';
-                                    EastTXM2SxD.ValidxS      <= '1';
-                                    EastNativeSlavexD.RdEnxS <= '1';
-                                    EastStatusSendWordxDN    <= E_SEND;
-                                end if;
-
-                        when E_SEND =>
-                                EastStatusSendWordxDN <= E_IDLE;
-
-                        when others => null;
-                    end case;
-                end process EastSendWordxP;
-
-                SouthSendWordxP : process (SouthNativeMasterxD.DataxD,
-                                           SouthNativeMasterxD.EmptyxS,
-                                           SouthStatusSendWordxDP,
-                                           SouthTXS2MxD.ReadyxS) is
-                begin  -- process SouthSendWordxP
-                    SouthTXM2SxD.DataxD       <= (others => '0');
-                    SouthTXM2SxD.KeepxD       <= (others => '1');
-                    SouthTXM2SxD.LastxS       <= '0';
-                    SouthTXM2SxD.ValidxS      <= '0';
-                    SouthNativeSlavexD.RdEnxS <= '0';
-                    SouthStatusSendWordxDN    <= SouthStatusSendWordxDP;
-
-                    case SouthStatusSendWordxDP is
-                        when E_IDLE =>
-
-                                if (SouthNativeMasterxD.EmptyxS = '0') and
-                                    (SouthTXS2MxD.ReadyxS = '1') then
-                                    SouthTXM2SxD.DataxD       <= SouthNativeMasterxD.DataxD;
-                                    SouthTXM2SxD.LastxS       <= '1';
-                                    SouthTXM2SxD.ValidxS      <= '1';
-                                    SouthNativeSlavexD.RdEnxS <= '1';
-                                    SouthStatusSendWordxDN    <= E_SEND;
-                                end if;
-
-                        when E_SEND =>
-                                SouthStatusSendWordxDN <= E_IDLE;
-
-                        when others => null;
-                    end case;
-                end process SouthSendWordxP;
-
-                WestSendWordxP : process (WestNativeMasterxD.DataxD,
-                                          WestNativeMasterxD.EmptyxS,
-                                          WestStatusSendWordxDP,
-                                          WestTXS2MxD.ReadyxS) is
-                begin  -- process WestSendWordxP
-                    WestTXM2SxD.DataxD       <= (others => '0');
-                    WestTXM2SxD.KeepxD       <= (others => '1');
-                    WestTXM2SxD.LastxS       <= '0';
-                    WestTXM2SxD.ValidxS      <= '0';
-                    WestNativeSlavexD.RdEnxS <= '0';
-                    WestStatusSendWordxDN    <= WestStatusSendWordxDP;
-
-                    case WestStatusSendWordxDP is
-                        when E_IDLE =>
-
-                                if (WestNativeMasterxD.EmptyxS = '0') and
-                                    (WestTXS2MxD.ReadyxS = '1') then
-                                    WestTXM2SxD.DataxD       <= WestNativeMasterxD.DataxD;
-                                    WestTXM2SxD.LastxS       <= '1';
-                                    WestTXM2SxD.ValidxS      <= '1';
-                                    WestNativeSlavexD.RdEnxS <= '1';
-                                    WestStatusSendWordxDN    <= E_SEND;
-                                end if;
-
-                        when E_SEND =>
-                                WestStatusSendWordxDN <= E_IDLE;
-
-                        when others => null;
-                    end case;
-                end process WestSendWordxP;
-
-                NorthFifoxI : entity work.scalp_packet_fifo_wrapper
-                    port map (
-                        RdClkxCI        => AuroraClkMasterxC.UserClkxC,
-                        WrClkxCI        => PSSysClkxC,
-                        ResetxRI        => PSSysResetxR,
-                        NativeSlavexDI  => NorthNativeSlavexD,
-                        NativeMasterxDO => NorthNativeMasterxD);
-
-                EastFifoxI : entity work.scalp_packet_fifo_wrapper
-                    port map (
-                        RdClkxCI        => AuroraClkMasterxC.UserClkxC,
-                        WrClkxCI        => PSSysClkxC,
-                        ResetxRI        => PSSysResetxR,
-                        NativeSlavexDI  => EastNativeSlavexD,
-                        NativeMasterxDO => EastNativeMasterxD);
-
-                SouthFifoxI : entity work.scalp_packet_fifo_wrapper
-                    port map (
-                        RdClkxCI        => AuroraClkMasterxC.UserClkxC,
-                        WrClkxCI        => PSSysClkxC,
-                        ResetxRI        => PSSysResetxR,
-                        NativeSlavexDI  => SouthNativeSlavexD,
-                        NativeMasterxDO => SouthNativeMasterxD);
-
-                WestFifoxI : entity work.scalp_packet_fifo_wrapper
-                    port map (
-                        RdClkxCI        => AuroraClkMasterxC.UserClkxC,
-                        WrClkxCI        => PSSysClkxC,
-                        ResetxRI        => PSSysResetxR,
-                        NativeSlavexDI  => WestNativeSlavexD,
-                        NativeMasterxDO => WestNativeMasterxD);
-
-            end block TxFifoxB;
-
-        end block ZynqRegBankxB;
+        -- ZynqRegBankxB : block is
+        -- begin  -- block ZynqRegBankxB
+
+
+        --     RegBankxB : block is
+        --     begin  -- block RegBankxB
+
+        --         WriteRegPortxP : process (EastCtrlRegPortxDP,
+        --                                   EastWrDataRegPortxDP,
+        --                                   NorthCtrlRegPortxDP,
+        --                                   NorthWrDataRegPortxDP,
+        --                                   SouthCtrlRegPortxDP,
+        --                                   SouthWrDataRegPortxDP,
+        --                                   WestCtrlRegPortxDP,
+        --                                   WestWrDataRegPortxDP, WrAddrxD,
+        --                                   WrDataxD, WrValidxS) is
+        --         begin  -- process WriteRegPortxP
+        --             -- North                    
+        --             NorthCtrlRegPortxDN   <= NorthCtrlRegPortxDP;
+        --             NorthWrDataRegPortxDN <= NorthWrDataRegPortxDP;
+        --             -- East
+        --             EastCtrlRegPortxDN    <= EastCtrlRegPortxDP;
+        --             EastWrDataRegPortxDN  <= EastWrDataRegPortxDP;
+        --             -- South
+        --             SouthCtrlRegPortxDN   <= SouthCtrlRegPortxDP;
+        --             SouthWrDataRegPortxDN <= SouthWrDataRegPortxDP;
+        --             -- West
+        --             WestCtrlRegPortxDN    <= WestCtrlRegPortxDP;
+        --             WestWrDataRegPortxDN  <= WestWrDataRegPortxDP;
+
+        --             if WrValidxS = '1' then
+        --                 case WrAddrxD is
+        --                     -- Ctrl
+        --                     -- North
+        --                     when x"000" => NorthCtrlRegPortxDN   <= WrDataxD;
+        --                     when x"004" => NorthCtrlRegPortxDN   <= NorthCtrlRegPortxDP or WrDataxD;
+        --                     when x"008" => NorthCtrlRegPortxDN   <= NorthCtrlRegPortxDP and not WrDataxD;
+        --                     -- East
+        --                     when x"00c" => EastCtrlRegPortxDN    <= WrDataxD;
+        --                     when x"010" => EastCtrlRegPortxDN    <= EastCtrlRegPortxDP or WrDataxD;
+        --                     when x"014" => EastCtrlRegPortxDN    <= EastCtrlRegPortxDP and not WrDataxD;
+        --                     -- South
+        --                     when x"018" => SouthCtrlRegPortxDN   <= WrDataxD;
+        --                     when x"01c" => SouthCtrlRegPortxDN   <= SouthCtrlRegPortxDP or WrDataxD;
+        --                     when x"020" => SouthCtrlRegPortxDN   <= SouthCtrlRegPortxDP and not WrDataxD;
+        --                     -- East
+        --                     when x"024" => WestCtrlRegPortxDN    <= WrDataxD;
+        --                     when x"028" => WestCtrlRegPortxDN    <= WestCtrlRegPortxDP or WrDataxD;
+        --                     when x"02c" => WestCtrlRegPortxDN    <= WestCtrlRegPortxDP and not WrDataxD;
+        --                     -- Data
+        --                     -- North
+        --                     when x"030" => NorthWrDataRegPortxDN <= WrDataxD;
+        --                     -- East
+        --                     when x"034" => EastWrDataRegPortxDN  <= WrDataxD;
+        --                     -- South
+        --                     when x"038" => SouthWrDataRegPortxDN <= WrDataxD;
+        --                     -- West
+        --                     when x"03c" => WestWrDataRegPortxDN  <= WrDataxD;
+        --                     when others => null;
+        --                 end case;
+        --             end if;
+        --         end process WriteRegPortxP;
+
+        --         ReadRegPortxP : process (PSSysClkxC, PSSysResetxR) is
+        --         begin  -- process ReadRegPortxP
+        --             if PSSysResetxR = '1' then
+        --                 RdDataxD <= (others => '0');
+        --             elsif rising_edge(PSSysClkxC) then
+        --                 RdDataxD <= (others => '0');
+
+        --                 if RdValidxS = '1' then
+        --                     case RdAddrxD is
+        --                         when x"000" => RdDataxD <= NorthCtrlRegPortxDP;
+        --                         when x"00C" => RdDataxD <= EastCtrlRegPortxDP;
+        --                         when x"018" => RdDataxD <= SouthCtrlRegPortxDP;
+        --                         when x"024" => RdDataxD <= WestCtrlRegPortxDP;
+        --                         when x"030" => RdDataxD <= NorthWrDataRegPortxDP;
+        --                         when x"034" => RdDataxD <= EastWrDataRegPortxDP;
+        --                         when x"038" => RdDataxD <= SouthWrDataRegPortxDP;
+        --                         when x"03c" => RdDataxD <= WestWrDataRegPortxDP;
+        --                         when x"040" => RdDataxD <= NorthStatusRegPortxDP;
+        --                         when x"044" => RdDataxD <= EastStatusRegPortxDP;
+        --                         when x"048" => RdDataxD <= SouthStatusRegPortxDP;
+        --                         when x"04c" => RdDataxD <= WestStatusRegPortxDP;
+        --                         when others => RdDataxD <= (others => '0');
+        --                     end case;
+        --                 end if;
+        --             end if;
+        --         end process ReadRegPortxP;
+
+        --         RegBankxP : process (PSSysClkxC, PSSysResetxR) is
+        --         begin  -- process RegBankxP
+        --             if PSSysResetxR = '1' then
+        --                 -- North
+        --                 NorthStatusRegPortxDP <= (others => '0');
+        --                 NorthCtrlRegPortxDP   <= (others => '0');
+        --                 NorthWrDataRegPortxDP <= (others => '0');
+        --                 -- East
+        --                 EastStatusRegPortxDP  <= (others => '0');
+        --                 EastCtrlRegPortxDP    <= (others => '0');
+        --                 EastWrDataRegPortxDP  <= (others => '0');
+        --                 -- South
+        --                 SouthStatusRegPortxDP <= (others => '0');
+        --                 SouthCtrlRegPortxDP   <= (others => '0');
+        --                 SouthWrDataRegPortxDP <= (others => '0');
+        --                 -- West
+        --                 WestStatusRegPortxDP  <= (others => '0');
+        --                 WestCtrlRegPortxDP    <= (others => '0');
+        --                 WestWrDataRegPortxDP  <= (others => '0');
+        --             elsif rising_edge(PSSysClkxC) then
+        --                 -- North
+        --                 NorthStatusRegPortxDP <= NorthStatusRegPortxDN;
+        --                 NorthCtrlRegPortxDP   <= NorthCtrlRegPortxDN;
+        --                 NorthWrDataRegPortxDP <= NorthWrDataRegPortxDN;
+        --                 -- East
+        --                 EastStatusRegPortxDP  <= EastStatusRegPortxDN;
+        --                 EastCtrlRegPortxDP    <= EastCtrlRegPortxDN;
+        --                 EastWrDataRegPortxDP  <= EastWrDataRegPortxDN;
+        --                 -- South
+        --                 SouthStatusRegPortxDP <= SouthStatusRegPortxDN;
+        --                 SouthCtrlRegPortxDP   <= SouthCtrlRegPortxDN;
+        --                 SouthWrDataRegPortxDP <= SouthWrDataRegPortxDN;
+        --                 -- West
+        --                 WestStatusRegPortxDP  <= WestStatusRegPortxDN;
+        --                 WestCtrlRegPortxDP    <= WestCtrlRegPortxDN;
+        --                 WestWrDataRegPortxDP  <= WestWrDataRegPortxDN;
+        --             end if;
+        --         end process RegBankxP;
+
+        --     end block RegBankxB;
+
+        --     TxFifoxB : block is
+        --     begin  -- block TxFifoxB
+
+        --         NorthWrDataxAS   : NorthNativeSlavexD.DataxD <= NorthWrDataRegPortxDP;
+        --         EastWrDataxAS    : EastNativeSlavexD.DataxD  <= EastWrDataRegPortxDP;
+        --         SouthWrDataxAS   : SouthNativeSlavexD.DataxD <= SouthWrDataRegPortxDN;
+        --         WestWrDataRegxAS : WestNativeSlavexD.DataxD  <= WestWrDataRegPortxDN;
+        --         NorthWrEnxAS     : NorthNativeSlavexD.WrEnxS <= NorthCtrlRegPortxDP(0);
+        --         EastWrEnxAS      : EastNativeSlavexD.WrEnxS  <= EastCtrlRegPortxDP(0);
+        --         SouthWrEnxAS     : SouthNativeSlavexD.WrEnxS <= SouthCtrlRegPortxDP(0);
+        --         WestWrEnxAS      : EastNativeSlavexD.WrEnxS  <= EastCtrlRegPortxDP(0);
+        --         NorthStatusRegPortxAS : NorthStatusRegPortxDN <= (0      => NorthNativeMasterxD.FullxS,
+        --                                                           1      => NorthNativeMasterxD.EmptyxS,
+        --                                                           2      => NorthNativeMasterxD.AlmostFullxS,
+        --                                                           3      => NorthNativeMasterxD.AlmostEmptyxS,
+        --                                                           4      => NorthNativeMasterxD.WrRstBusyxS,
+        --                                                           5      => NorthNativeMasterxD.RdRstBusyxS,
+        --                                                           others => '0');
+        --         EastStatusRegPortxAS : EastStatusRegPortxDN <= (0      => EastNativeMasterxD.FullxS,
+        --                                                         1      => EastNativeMasterxD.EmptyxS,
+        --                                                         2      => EastNativeMasterxD.AlmostFullxS,
+        --                                                         3      => EastNativeMasterxD.AlmostEmptyxS,
+        --                                                         4      => EastNativeMasterxD.WrRstBusyxS,
+        --                                                         5      => EastNativeMasterxD.RdRstBusyxS,
+        --                                                         others => '0');
+        --         SouthStatusRegPortxAS : SouthStatusRegPortxDN <= (0      => SouthNativeMasterxD.FullxS,
+        --                                                           1      => SouthNativeMasterxD.EmptyxS,
+        --                                                           2      => SouthNativeMasterxD.AlmostFullxS,
+        --                                                           3      => SouthNativeMasterxD.AlmostEmptyxS,
+        --                                                           4      => SouthNativeMasterxD.WrRstBusyxS,
+        --                                                           5      => SouthNativeMasterxD.RdRstBusyxS,
+        --                                                           others => '0');
+        --         WestStatusRegPortxAS : WestStatusRegPortxDN <= (0      => WestNativeMasterxD.FullxS,
+        --                                                         1      => WestNativeMasterxD.EmptyxS,
+        --                                                         2      => WestNativeMasterxD.AlmostFullxS,
+        --                                                         3      => WestNativeMasterxD.AlmostEmptyxS,
+        --                                                         4      => WestNativeMasterxD.WrRstBusyxS,
+        --                                                         5      => WestNativeMasterxD.RdRstBusyxS,
+        --                                                         others => '0');
+
+        --         UpdateRegxP : process (AuroraClkMasterxC.PllNotLockedxS,
+        --                                AuroraClkMasterxC.UserClkxC) is
+        --         begin  -- process UpdateRegxP
+        --             if not AuroraClkMasterxC.PllNotLockedxS then
+        --                 NorthStatusSendWordxDP <= E_IDLE;
+        --                 EastStatusSendWordxDP  <= E_IDLE;
+        --                 SouthStatusSendWordxDP <= E_IDLE;
+        --                 WestStatusSendWordxDP  <= E_IDLE;
+        --             elsif rising_edge(AuroraClkMasterxC.UserClkxC) then
+        --                 NorthStatusSendWordxDP <= NorthStatusSendWordxDN;
+        --                 EastStatusSendWordxDP  <= EastStatusSendWordxDN;
+        --                 SouthStatusSendWordxDP <= SouthStatusSendWordxDN;
+        --                 WestStatusSendWordxDP  <= WestStatusSendWordxDN;
+        --             end if;
+        --         end process UpdateRegxP;
+
+        --         NorthSendWordxP : process (NorthNativeMasterxD.DataxD,
+        --                                    NorthNativeMasterxD.EmptyxS,
+        --                                    NorthStatusSendWordxDP,
+        --                                    NorthTXS2MxD.ReadyxS) is
+        --         begin  -- process NorthSendWordxP
+        --             NorthTXM2SxD.DataxD       <= (others => '0');
+        --             NorthTXM2SxD.KeepxD       <= (others => '1');
+        --             NorthTXM2SxD.LastxS       <= '0';
+        --             NorthTXM2SxD.ValidxS      <= '0';
+        --             NorthNativeSlavexD.RdEnxS <= '0';
+        --             NorthStatusSendWordxDN    <= NorthStatusSendWordxDP;
+
+        --             case NorthStatusSendWordxDP is
+        --                 when E_IDLE =>
+
+        --                         if (NorthNativeMasterxD.EmptyxS = '0') and
+        --                             (NorthTXS2MxD.ReadyxS = '1') then
+        --                             NorthTXM2SxD.DataxD       <= NorthNativeMasterxD.DataxD;
+        --                             NorthTXM2SxD.LastxS       <= '1';
+        --                             NorthTXM2SxD.ValidxS      <= '1';
+        --                             NorthNativeSlavexD.RdEnxS <= '1';
+        --                             NorthStatusSendWordxDN    <= E_SEND;
+        --                         end if;
+
+        --                 when E_SEND =>
+        --                         NorthStatusSendWordxDN <= E_IDLE;
+
+        --                 when others => null;
+        --             end case;
+        --         end process NorthSendWordxP;
+
+        --         EastSendWordxP : process (EastNativeMasterxD.DataxD,
+        --                                   EastNativeMasterxD.EmptyxS,
+        --                                   EastStatusSendWordxDP,
+        --                                   EastTXS2MxD.ReadyxS) is
+        --         begin  -- process EastSendWordxP
+        --             EastTXM2SxD.DataxD       <= (others => '0');
+        --             EastTXM2SxD.KeepxD       <= (others => '1');
+        --             EastTXM2SxD.LastxS       <= '0';
+        --             EastTXM2SxD.ValidxS      <= '0';
+        --             EastNativeSlavexD.RdEnxS <= '0';
+        --             EastStatusSendWordxDN    <= EastStatusSendWordxDP;
+
+        --             case EastStatusSendWordxDP is
+        --                 when E_IDLE =>
+
+        --                         if (EastNativeMasterxD.EmptyxS = '0') and
+        --                             (EastTXS2MxD.ReadyxS = '1') then
+        --                             EastTXM2SxD.DataxD       <= EastNativeMasterxD.DataxD;
+        --                             EastTXM2SxD.LastxS       <= '1';
+        --                             EastTXM2SxD.ValidxS      <= '1';
+        --                             EastNativeSlavexD.RdEnxS <= '1';
+        --                             EastStatusSendWordxDN    <= E_SEND;
+        --                         end if;
+
+        --                 when E_SEND =>
+        --                         EastStatusSendWordxDN <= E_IDLE;
+
+        --                 when others => null;
+        --             end case;
+        --         end process EastSendWordxP;
+
+        --         SouthSendWordxP : process (SouthNativeMasterxD.DataxD,
+        --                                    SouthNativeMasterxD.EmptyxS,
+        --                                    SouthStatusSendWordxDP,
+        --                                    SouthTXS2MxD.ReadyxS) is
+        --         begin  -- process SouthSendWordxP
+        --             SouthTXM2SxD.DataxD       <= (others => '0');
+        --             SouthTXM2SxD.KeepxD       <= (others => '1');
+        --             SouthTXM2SxD.LastxS       <= '0';
+        --             SouthTXM2SxD.ValidxS      <= '0';
+        --             SouthNativeSlavexD.RdEnxS <= '0';
+        --             SouthStatusSendWordxDN    <= SouthStatusSendWordxDP;
+
+        --             case SouthStatusSendWordxDP is
+        --                 when E_IDLE =>
+
+        --                         if (SouthNativeMasterxD.EmptyxS = '0') and
+        --                             (SouthTXS2MxD.ReadyxS = '1') then
+        --                             SouthTXM2SxD.DataxD       <= SouthNativeMasterxD.DataxD;
+        --                             SouthTXM2SxD.LastxS       <= '1';
+        --                             SouthTXM2SxD.ValidxS      <= '1';
+        --                             SouthNativeSlavexD.RdEnxS <= '1';
+        --                             SouthStatusSendWordxDN    <= E_SEND;
+        --                         end if;
+
+        --                 when E_SEND =>
+        --                         SouthStatusSendWordxDN <= E_IDLE;
+
+        --                 when others => null;
+        --             end case;
+        --         end process SouthSendWordxP;
+
+        --         WestSendWordxP : process (WestNativeMasterxD.DataxD,
+        --                                   WestNativeMasterxD.EmptyxS,
+        --                                   WestStatusSendWordxDP,
+        --                                   WestTXS2MxD.ReadyxS) is
+        --         begin  -- process WestSendWordxP
+        --             WestTXM2SxD.DataxD       <= (others => '0');
+        --             WestTXM2SxD.KeepxD       <= (others => '1');
+        --             WestTXM2SxD.LastxS       <= '0';
+        --             WestTXM2SxD.ValidxS      <= '0';
+        --             WestNativeSlavexD.RdEnxS <= '0';
+        --             WestStatusSendWordxDN    <= WestStatusSendWordxDP;
+
+        --             case WestStatusSendWordxDP is
+        --                 when E_IDLE =>
+
+        --                         if (WestNativeMasterxD.EmptyxS = '0') and
+        --                             (WestTXS2MxD.ReadyxS = '1') then
+        --                             WestTXM2SxD.DataxD       <= WestNativeMasterxD.DataxD;
+        --                             WestTXM2SxD.LastxS       <= '1';
+        --                             WestTXM2SxD.ValidxS      <= '1';
+        --                             WestNativeSlavexD.RdEnxS <= '1';
+        --                             WestStatusSendWordxDN    <= E_SEND;
+        --                         end if;
+
+        --                 when E_SEND =>
+        --                         WestStatusSendWordxDN <= E_IDLE;
+
+        --                 when others => null;
+        --             end case;
+        --         end process WestSendWordxP;
+
+        --         NorthFifoxI : entity work.scalp_packet_fifo_wrapper
+        --             port map (
+        --                 RdClkxCI        => AuroraClkMasterxC.UserClkxC,
+        --                 WrClkxCI        => PSSysClkxC,
+        --                 ResetxRI        => PSSysResetxR,
+        --                 NativeSlavexDI  => NorthNativeSlavexD,
+        --                 NativeMasterxDO => NorthNativeMasterxD);
+
+        --         EastFifoxI : entity work.scalp_packet_fifo_wrapper
+        --             port map (
+        --                 RdClkxCI        => AuroraClkMasterxC.UserClkxC,
+        --                 WrClkxCI        => PSSysClkxC,
+        --                 ResetxRI        => PSSysResetxR,
+        --                 NativeSlavexDI  => EastNativeSlavexD,
+        --                 NativeMasterxDO => EastNativeMasterxD);
+
+        --         SouthFifoxI : entity work.scalp_packet_fifo_wrapper
+        --             port map (
+        --                 RdClkxCI        => AuroraClkMasterxC.UserClkxC,
+        --                 WrClkxCI        => PSSysClkxC,
+        --                 ResetxRI        => PSSysResetxR,
+        --                 NativeSlavexDI  => SouthNativeSlavexD,
+        --                 NativeMasterxDO => SouthNativeMasterxD);
+
+        --         WestFifoxI : entity work.scalp_packet_fifo_wrapper
+        --             port map (
+        --                 RdClkxCI        => AuroraClkMasterxC.UserClkxC,
+        --                 WrClkxCI        => PSSysClkxC,
+        --                 ResetxRI        => PSSysResetxR,
+        --                 NativeSlavexDI  => WestNativeSlavexD,
+        --                 NativeMasterxDO => WestNativeMasterxD);
+
+        --     end block TxFifoxB;
+
+        -- end block ZynqRegBankxB;
 
         DebugxB : block is
-
-            signal CntRstxR      : std_ulogic                     := '0';
-            signal ClkEnxS       : std_ulogic                     := '0';
-            signal DataCounterxD : std_ulogic_vector(31 downto 0) := (others => '0');
-
         begin  -- block DebugxB
 
-            -- ClkEnxAS        : ClkEnxS              <= not AuroraClkMasterxC.PllNotLockedxS;
-            -- -- North
-            -- NorthTXDataxAS  : NorthTXM2SxD.DataxD  <= DataCounterxD;
-            -- NorthTXKeepxAS  : NorthTXM2SxD.KeepxD  <= (others => '1');
-            -- NorthTXLastxAS  : NorthTXM2SxD.LastxS  <= '0';
-            -- NorthTXValidxAS : NorthTXM2SxD.ValidxS <= not CntRstxR;
-            -- -- East            
-            -- EastTXDataxAS   : EastTXM2SxD.DataxD   <= DataCounterxD;
-            -- EastTXKeepxAS   : EastTXM2SxD.KeepxD   <= (others => '1');
-            -- EastTXLastxAS   : EastTXM2SxD.LastxS   <= '0';
-            -- EastTXValidxAS  : EastTXM2SxD.ValidxS  <= not CntRstxR;
-            -- -- South
-            -- SouthTXDataxAS  : SouthTXM2SxD.DataxD  <= DataCounterxD;
-            -- SouthTXKeepxAS  : SouthTXM2SxD.KeepxD  <= (others => '1');
-            -- SouthTXLastxAS  : SouthTXM2SxD.LastxS  <= '0';
-            -- SouthTXValidxAS : SouthTXM2SxD.ValidxS <= not CntRstxR;
-            -- -- West
-            -- WestTXDataxAS   : WestTXM2SxD.DataxD   <= DataCounterxD;
-            -- WestTXKeepxAS   : WestTXM2SxD.KeepxD   <= (others => '1');
-            -- WestTXLastxAS   : WestTXM2SxD.LastxS   <= '0';
-            -- WestTXValidxAS  : WestTXM2SxD.ValidxS  <= not CntRstxR;
-
-            -- DataCounterxI : entity work.data_counter
-            --     port map (
-            --         clk  => AuroraClkMasterxC.UserClkxC,
-            --         ce   => ClkEnxS,
-            --         sclr => CntRstxR,
-            --         q    => DataCounterxD);
+            ClkEnxAS        : ClkEnxS              <= not AuroraClkMasterxC.PllNotLockedxS;
+            -- North
+            NorthTXDataxAS  : NorthTXM2SxD.DataxD  <= DataCounterxD;
+            NorthTXKeepxAS  : NorthTXM2SxD.KeepxD  <= (others => '1');
+            NorthTXLastxAS  : NorthTXM2SxD.LastxS  <= '0';
+            NorthTXValidxAS : NorthTXM2SxD.ValidxS <= not DebugCounterResetxR;
+            -- East            
+            EastTXDataxAS   : EastTXM2SxD.DataxD   <= DataCounterxD;
+            EastTXKeepxAS   : EastTXM2SxD.KeepxD   <= (others => '1');
+            EastTXLastxAS   : EastTXM2SxD.LastxS   <= '0';
+            EastTXValidxAS  : EastTXM2SxD.ValidxS  <= not DebugCounterResetxR;
+            -- South
+            SouthTXDataxAS  : SouthTXM2SxD.DataxD  <= DataCounterxD;
+            SouthTXKeepxAS  : SouthTXM2SxD.KeepxD  <= (others => '1');
+            SouthTXLastxAS  : SouthTXM2SxD.LastxS  <= '0';
+            SouthTXValidxAS : SouthTXM2SxD.ValidxS <= not DebugCounterResetxR;
+            -- West
+            WestTXDataxAS   : WestTXM2SxD.DataxD   <= DataCounterxD;
+            WestTXKeepxAS   : WestTXM2SxD.KeepxD   <= (others => '1');
+            WestTXLastxAS   : WestTXM2SxD.LastxS   <= '0';
+            WestTXValidxAS  : WestTXM2SxD.ValidxS  <= not DebugCounterResetxR;
+
+            DataCounterxI : entity work.data_counter
+                port map (
+                    clk  => AuroraClkMasterxC.UserClkxC,
+                    ce   => ClkEnxS,
+                    sclr => DebugCounterResetxR,
+                    q    => DataCounterxD);
 
-            VioAxiCntCtrlxI : entity work.vio_axi_cnt_ctrl
+            VioUserResetsxI : entity work.vio_user_resets
                 port map (
                     clk           => AuroraClkMasterxC.UserClkxC,
-                    -- North
-                    probe_in0     => NorthRXfromPhyTXfromFifoM2SxD.DataxD,  -- 32 bits
-                    probe_in1(0)  => NorthRXfromPhyTXfromFifoM2SxD.ValidxS,
-                    probe_in2(0)  => NorthTXS2MxD.ReadyxS,
-                    -- East
-                    probe_in3     => EastRXfromPhyTXfromFifoM2SxD.DataxD,  -- 32 bits
-                    probe_in4(0)  => EastRXfromPhyTXfromFifoM2SxD.ValidxS,
-                    probe_in5(0)  => EastTXS2MxD.ReadyxS,
-                    -- South
-                    probe_in6     => SouthRXfromPhyTXfromFifoM2SxD.DataxD,  -- 32 bits
-                    probe_in7(0)  => SouthRXfromPhyTXfromFifoM2SxD.ValidxS,
-                    probe_in8(0)  => SouthTXS2MxD.ReadyxS,
-                    -- West
-                    probe_in9     => WestRXfromPhyTXfromFifoM2SxD.DataxD,  -- 32 bits
-                    probe_in10(0) => WestRXfromPhyTXfromFifoM2SxD.ValidxS,
-                    probe_in11(0) => WestTXS2MxD.ReadyxS,
-                    probe_out0(0) => CntRstxR);
+                    probe_out0(0) => DebugCounterResetxR,
+                    probe_out1(0) => DebugRXFifoResetxR,
+                    probe_out2(0) => DebugBackPressureResetxR,
+                    probe_out3    => open,
+                    probe_out4    => open);
+
+            -- VioAxiCntCtrlxI : entity work.vio_axi_cnt_ctrl
+            --     port map (
+            --         clk           => AuroraClkMasterxC.UserClkxC,
+            --         -- North
+            --         probe_in0     => NorthRXfromPhyTXfromFifoM2SxD.DataxD,  -- 32 bits
+            --         probe_in1(0)  => NorthRXfromPhyTXfromFifoM2SxD.ValidxS,
+            --         probe_in2(0)  => '0',  --NorthTXS2MxD.ReadyxS,
+            --         -- East
+            --         probe_in3     => EastRXfromPhyTXfromFifoM2SxD.DataxD,  -- 32 bits
+            --         probe_in4(0)  => EastRXfromPhyTXfromFifoM2SxD.ValidxS,
+            --         probe_in5(0)  => '0',  --EastTXS2MxD.ReadyxS,
+            --         -- South
+            --         probe_in6     => SouthRXfromPhyTXfromFifoM2SxD.DataxD,  -- 32 bits
+            --         probe_in7(0)  => SouthRXfromPhyTXfromFifoM2SxD.ValidxS,
+            --         probe_in8(0)  => '0',  --SouthTXS2MxD.ReadyxS,
+            --         -- West
+            --         probe_in9     => WestRXfromPhyTXfromFifoM2SxD.DataxD,  -- 32 bits
+            --         probe_in10(0) => WestRXfromPhyTXfromFifoM2SxD.ValidxS,
+            --         probe_in11(0) => '0',  --WestTXS2MxD.ReadyxS,
+            --         probe_out0(0) => open); --CntRstxR);
 
             VioStatusxI : entity work.vio_status
                 port map (