diff --git a/designs/vivado/scalp_router_firmware/2020.2/src/constrs/debug.xdc b/designs/vivado/scalp_router_firmware/2020.2/src/constrs/debug.xdc
new file mode 100644
index 0000000000000000000000000000000000000000..c75ddeb46bfac220578813317c2ee8303d74f683
--- /dev/null
+++ b/designs/vivado/scalp_router_firmware/2020.2/src/constrs/debug.xdc
@@ -0,0 +1,158 @@
+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.ScalpAuroraPhyxI/ScalpAuroraPhyxB.ScalpAuroraPhyWrapperxI/ClkRstxB.AuroraClockModulexI/CLK]]
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe0]
+set_property port_width 32 [get_debug_ports u_ila_0/probe0]
+connect_debug_port u_ila_0/probe0 [get_nets [list {TXAxism2sVectorxD[1][DataxD][31]} {TXAxism2sVectorxD[1][DataxD][30]} {TXAxism2sVectorxD[1][DataxD][29]} {TXAxism2sVectorxD[1][DataxD][28]} {TXAxism2sVectorxD[1][DataxD][27]} {TXAxism2sVectorxD[1][DataxD][26]} {TXAxism2sVectorxD[1][DataxD][25]} {TXAxism2sVectorxD[1][DataxD][24]} {TXAxism2sVectorxD[1][DataxD][23]} {TXAxism2sVectorxD[1][DataxD][22]} {TXAxism2sVectorxD[1][DataxD][21]} {TXAxism2sVectorxD[1][DataxD][20]} {TXAxism2sVectorxD[1][DataxD][19]} {TXAxism2sVectorxD[1][DataxD][18]} {TXAxism2sVectorxD[1][DataxD][17]} {TXAxism2sVectorxD[1][DataxD][16]} {TXAxism2sVectorxD[1][DataxD][15]} {TXAxism2sVectorxD[1][DataxD][14]} {TXAxism2sVectorxD[1][DataxD][13]} {TXAxism2sVectorxD[1][DataxD][12]} {TXAxism2sVectorxD[1][DataxD][11]} {TXAxism2sVectorxD[1][DataxD][10]} {TXAxism2sVectorxD[1][DataxD][9]} {TXAxism2sVectorxD[1][DataxD][8]} {TXAxism2sVectorxD[1][DataxD][7]} {TXAxism2sVectorxD[1][DataxD][6]} {TXAxism2sVectorxD[1][DataxD][5]} {TXAxism2sVectorxD[1][DataxD][4]} {TXAxism2sVectorxD[1][DataxD][3]} {TXAxism2sVectorxD[1][DataxD][2]} {TXAxism2sVectorxD[1][DataxD][1]} {TXAxism2sVectorxD[1][DataxD][0]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe1]
+set_property port_width 32 [get_debug_ports u_ila_0/probe1]
+connect_debug_port u_ila_0/probe1 [get_nets [list {TXAxism2sVectorxD[2][DataxD][31]} {TXAxism2sVectorxD[2][DataxD][30]} {TXAxism2sVectorxD[2][DataxD][29]} {TXAxism2sVectorxD[2][DataxD][28]} {TXAxism2sVectorxD[2][DataxD][27]} {TXAxism2sVectorxD[2][DataxD][26]} {TXAxism2sVectorxD[2][DataxD][25]} {TXAxism2sVectorxD[2][DataxD][24]} {TXAxism2sVectorxD[2][DataxD][23]} {TXAxism2sVectorxD[2][DataxD][22]} {TXAxism2sVectorxD[2][DataxD][21]} {TXAxism2sVectorxD[2][DataxD][20]} {TXAxism2sVectorxD[2][DataxD][19]} {TXAxism2sVectorxD[2][DataxD][18]} {TXAxism2sVectorxD[2][DataxD][17]} {TXAxism2sVectorxD[2][DataxD][16]} {TXAxism2sVectorxD[2][DataxD][15]} {TXAxism2sVectorxD[2][DataxD][14]} {TXAxism2sVectorxD[2][DataxD][13]} {TXAxism2sVectorxD[2][DataxD][12]} {TXAxism2sVectorxD[2][DataxD][11]} {TXAxism2sVectorxD[2][DataxD][10]} {TXAxism2sVectorxD[2][DataxD][9]} {TXAxism2sVectorxD[2][DataxD][8]} {TXAxism2sVectorxD[2][DataxD][7]} {TXAxism2sVectorxD[2][DataxD][6]} {TXAxism2sVectorxD[2][DataxD][5]} {TXAxism2sVectorxD[2][DataxD][4]} {TXAxism2sVectorxD[2][DataxD][3]} {TXAxism2sVectorxD[2][DataxD][2]} {TXAxism2sVectorxD[2][DataxD][1]} {TXAxism2sVectorxD[2][DataxD][0]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe2]
+set_property port_width 32 [get_debug_ports u_ila_0/probe2]
+connect_debug_port u_ila_0/probe2 [get_nets [list {TXAxism2sVectorxD[0][DataxD][31]} {TXAxism2sVectorxD[0][DataxD][30]} {TXAxism2sVectorxD[0][DataxD][29]} {TXAxism2sVectorxD[0][DataxD][28]} {TXAxism2sVectorxD[0][DataxD][27]} {TXAxism2sVectorxD[0][DataxD][26]} {TXAxism2sVectorxD[0][DataxD][25]} {TXAxism2sVectorxD[0][DataxD][24]} {TXAxism2sVectorxD[0][DataxD][23]} {TXAxism2sVectorxD[0][DataxD][22]} {TXAxism2sVectorxD[0][DataxD][21]} {TXAxism2sVectorxD[0][DataxD][20]} {TXAxism2sVectorxD[0][DataxD][19]} {TXAxism2sVectorxD[0][DataxD][18]} {TXAxism2sVectorxD[0][DataxD][17]} {TXAxism2sVectorxD[0][DataxD][16]} {TXAxism2sVectorxD[0][DataxD][15]} {TXAxism2sVectorxD[0][DataxD][14]} {TXAxism2sVectorxD[0][DataxD][13]} {TXAxism2sVectorxD[0][DataxD][12]} {TXAxism2sVectorxD[0][DataxD][11]} {TXAxism2sVectorxD[0][DataxD][10]} {TXAxism2sVectorxD[0][DataxD][9]} {TXAxism2sVectorxD[0][DataxD][8]} {TXAxism2sVectorxD[0][DataxD][7]} {TXAxism2sVectorxD[0][DataxD][6]} {TXAxism2sVectorxD[0][DataxD][5]} {TXAxism2sVectorxD[0][DataxD][4]} {TXAxism2sVectorxD[0][DataxD][3]} {TXAxism2sVectorxD[0][DataxD][2]} {TXAxism2sVectorxD[0][DataxD][1]} {TXAxism2sVectorxD[0][DataxD][0]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe3]
+set_property port_width 32 [get_debug_ports u_ila_0/probe3]
+connect_debug_port u_ila_0/probe3 [get_nets [list {TXAxism2sVectorxD[3][DataxD][31]} {TXAxism2sVectorxD[3][DataxD][30]} {TXAxism2sVectorxD[3][DataxD][29]} {TXAxism2sVectorxD[3][DataxD][28]} {TXAxism2sVectorxD[3][DataxD][27]} {TXAxism2sVectorxD[3][DataxD][26]} {TXAxism2sVectorxD[3][DataxD][25]} {TXAxism2sVectorxD[3][DataxD][24]} {TXAxism2sVectorxD[3][DataxD][23]} {TXAxism2sVectorxD[3][DataxD][22]} {TXAxism2sVectorxD[3][DataxD][21]} {TXAxism2sVectorxD[3][DataxD][20]} {TXAxism2sVectorxD[3][DataxD][19]} {TXAxism2sVectorxD[3][DataxD][18]} {TXAxism2sVectorxD[3][DataxD][17]} {TXAxism2sVectorxD[3][DataxD][16]} {TXAxism2sVectorxD[3][DataxD][15]} {TXAxism2sVectorxD[3][DataxD][14]} {TXAxism2sVectorxD[3][DataxD][13]} {TXAxism2sVectorxD[3][DataxD][12]} {TXAxism2sVectorxD[3][DataxD][11]} {TXAxism2sVectorxD[3][DataxD][10]} {TXAxism2sVectorxD[3][DataxD][9]} {TXAxism2sVectorxD[3][DataxD][8]} {TXAxism2sVectorxD[3][DataxD][7]} {TXAxism2sVectorxD[3][DataxD][6]} {TXAxism2sVectorxD[3][DataxD][5]} {TXAxism2sVectorxD[3][DataxD][4]} {TXAxism2sVectorxD[3][DataxD][3]} {TXAxism2sVectorxD[3][DataxD][2]} {TXAxism2sVectorxD[3][DataxD][1]} {TXAxism2sVectorxD[3][DataxD][0]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe4]
+set_property port_width 32 [get_debug_ports u_ila_0/probe4]
+connect_debug_port u_ila_0/probe4 [get_nets [list {TXAxism2sVectorxD[4][DataxD][31]} {TXAxism2sVectorxD[4][DataxD][30]} {TXAxism2sVectorxD[4][DataxD][29]} {TXAxism2sVectorxD[4][DataxD][28]} {TXAxism2sVectorxD[4][DataxD][27]} {TXAxism2sVectorxD[4][DataxD][26]} {TXAxism2sVectorxD[4][DataxD][25]} {TXAxism2sVectorxD[4][DataxD][24]} {TXAxism2sVectorxD[4][DataxD][23]} {TXAxism2sVectorxD[4][DataxD][22]} {TXAxism2sVectorxD[4][DataxD][21]} {TXAxism2sVectorxD[4][DataxD][20]} {TXAxism2sVectorxD[4][DataxD][19]} {TXAxism2sVectorxD[4][DataxD][18]} {TXAxism2sVectorxD[4][DataxD][17]} {TXAxism2sVectorxD[4][DataxD][16]} {TXAxism2sVectorxD[4][DataxD][15]} {TXAxism2sVectorxD[4][DataxD][14]} {TXAxism2sVectorxD[4][DataxD][13]} {TXAxism2sVectorxD[4][DataxD][12]} {TXAxism2sVectorxD[4][DataxD][11]} {TXAxism2sVectorxD[4][DataxD][10]} {TXAxism2sVectorxD[4][DataxD][9]} {TXAxism2sVectorxD[4][DataxD][8]} {TXAxism2sVectorxD[4][DataxD][7]} {TXAxism2sVectorxD[4][DataxD][6]} {TXAxism2sVectorxD[4][DataxD][5]} {TXAxism2sVectorxD[4][DataxD][4]} {TXAxism2sVectorxD[4][DataxD][3]} {TXAxism2sVectorxD[4][DataxD][2]} {TXAxism2sVectorxD[4][DataxD][1]} {TXAxism2sVectorxD[4][DataxD][0]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe5]
+set_property port_width 32 [get_debug_ports u_ila_0/probe5]
+connect_debug_port u_ila_0/probe5 [get_nets [list {TXAxism2sVectorxD[5][DataxD][31]} {TXAxism2sVectorxD[5][DataxD][30]} {TXAxism2sVectorxD[5][DataxD][29]} {TXAxism2sVectorxD[5][DataxD][28]} {TXAxism2sVectorxD[5][DataxD][27]} {TXAxism2sVectorxD[5][DataxD][26]} {TXAxism2sVectorxD[5][DataxD][25]} {TXAxism2sVectorxD[5][DataxD][24]} {TXAxism2sVectorxD[5][DataxD][23]} {TXAxism2sVectorxD[5][DataxD][22]} {TXAxism2sVectorxD[5][DataxD][21]} {TXAxism2sVectorxD[5][DataxD][20]} {TXAxism2sVectorxD[5][DataxD][19]} {TXAxism2sVectorxD[5][DataxD][18]} {TXAxism2sVectorxD[5][DataxD][17]} {TXAxism2sVectorxD[5][DataxD][16]} {TXAxism2sVectorxD[5][DataxD][15]} {TXAxism2sVectorxD[5][DataxD][14]} {TXAxism2sVectorxD[5][DataxD][13]} {TXAxism2sVectorxD[5][DataxD][12]} {TXAxism2sVectorxD[5][DataxD][11]} {TXAxism2sVectorxD[5][DataxD][10]} {TXAxism2sVectorxD[5][DataxD][9]} {TXAxism2sVectorxD[5][DataxD][8]} {TXAxism2sVectorxD[5][DataxD][7]} {TXAxism2sVectorxD[5][DataxD][6]} {TXAxism2sVectorxD[5][DataxD][5]} {TXAxism2sVectorxD[5][DataxD][4]} {TXAxism2sVectorxD[5][DataxD][3]} {TXAxism2sVectorxD[5][DataxD][2]} {TXAxism2sVectorxD[5][DataxD][1]} {TXAxism2sVectorxD[5][DataxD][0]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe6]
+set_property port_width 32 [get_debug_ports u_ila_0/probe6]
+connect_debug_port u_ila_0/probe6 [get_nets [list {TXAxism2sVectorxD[6][DataxD][31]} {TXAxism2sVectorxD[6][DataxD][30]} {TXAxism2sVectorxD[6][DataxD][29]} {TXAxism2sVectorxD[6][DataxD][28]} {TXAxism2sVectorxD[6][DataxD][27]} {TXAxism2sVectorxD[6][DataxD][26]} {TXAxism2sVectorxD[6][DataxD][25]} {TXAxism2sVectorxD[6][DataxD][24]} {TXAxism2sVectorxD[6][DataxD][23]} {TXAxism2sVectorxD[6][DataxD][22]} {TXAxism2sVectorxD[6][DataxD][21]} {TXAxism2sVectorxD[6][DataxD][20]} {TXAxism2sVectorxD[6][DataxD][19]} {TXAxism2sVectorxD[6][DataxD][18]} {TXAxism2sVectorxD[6][DataxD][17]} {TXAxism2sVectorxD[6][DataxD][16]} {TXAxism2sVectorxD[6][DataxD][15]} {TXAxism2sVectorxD[6][DataxD][14]} {TXAxism2sVectorxD[6][DataxD][13]} {TXAxism2sVectorxD[6][DataxD][12]} {TXAxism2sVectorxD[6][DataxD][11]} {TXAxism2sVectorxD[6][DataxD][10]} {TXAxism2sVectorxD[6][DataxD][9]} {TXAxism2sVectorxD[6][DataxD][8]} {TXAxism2sVectorxD[6][DataxD][7]} {TXAxism2sVectorxD[6][DataxD][6]} {TXAxism2sVectorxD[6][DataxD][5]} {TXAxism2sVectorxD[6][DataxD][4]} {TXAxism2sVectorxD[6][DataxD][3]} {TXAxism2sVectorxD[6][DataxD][2]} {TXAxism2sVectorxD[6][DataxD][1]} {TXAxism2sVectorxD[6][DataxD][0]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe7]
+set_property port_width 32 [get_debug_ports u_ila_0/probe7]
+connect_debug_port u_ila_0/probe7 [get_nets [list {WestRXM2SxD[DataxD][31]} {WestRXM2SxD[DataxD][30]} {WestRXM2SxD[DataxD][29]} {WestRXM2SxD[DataxD][28]} {WestRXM2SxD[DataxD][27]} {WestRXM2SxD[DataxD][26]} {WestRXM2SxD[DataxD][25]} {WestRXM2SxD[DataxD][24]} {WestRXM2SxD[DataxD][23]} {WestRXM2SxD[DataxD][22]} {WestRXM2SxD[DataxD][21]} {WestRXM2SxD[DataxD][20]} {WestRXM2SxD[DataxD][19]} {WestRXM2SxD[DataxD][18]} {WestRXM2SxD[DataxD][17]} {WestRXM2SxD[DataxD][16]} {WestRXM2SxD[DataxD][15]} {WestRXM2SxD[DataxD][14]} {WestRXM2SxD[DataxD][13]} {WestRXM2SxD[DataxD][12]} {WestRXM2SxD[DataxD][11]} {WestRXM2SxD[DataxD][10]} {WestRXM2SxD[DataxD][9]} {WestRXM2SxD[DataxD][8]} {WestRXM2SxD[DataxD][7]} {WestRXM2SxD[DataxD][6]} {WestRXM2SxD[DataxD][5]} {WestRXM2SxD[DataxD][4]} {WestRXM2SxD[DataxD][3]} {WestRXM2SxD[DataxD][2]} {WestRXM2SxD[DataxD][1]} {WestRXM2SxD[DataxD][0]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe8]
+set_property port_width 32 [get_debug_ports u_ila_0/probe8]
+connect_debug_port u_ila_0/probe8 [get_nets [list {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][31]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][30]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][29]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][28]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][27]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][26]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][25]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][24]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][23]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][22]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][21]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][20]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][19]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][18]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][17]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][16]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][15]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][14]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][13]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][12]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][11]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][10]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][9]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][8]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][7]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][6]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][5]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][4]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][3]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][2]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][1]} {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[DataxD][0]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe9]
+set_property port_width 1 [get_debug_ports u_ila_0/probe9]
+connect_debug_port u_ila_0/probe9 [get_nets [list ScalpPacketValid12xS]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe10]
+set_property port_width 1 [get_debug_ports u_ila_0/probe10]
+connect_debug_port u_ila_0/probe10 [get_nets [list {TXAxism2sVectorxD[0][LastxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe11]
+set_property port_width 1 [get_debug_ports u_ila_0/probe11]
+connect_debug_port u_ila_0/probe11 [get_nets [list {TXAxism2sVectorxD[0][ValidxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe12]
+set_property port_width 1 [get_debug_ports u_ila_0/probe12]
+connect_debug_port u_ila_0/probe12 [get_nets [list {TXAxism2sVectorxD[1][LastxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe13]
+set_property port_width 1 [get_debug_ports u_ila_0/probe13]
+connect_debug_port u_ila_0/probe13 [get_nets [list {TXAxism2sVectorxD[1][ValidxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe14]
+set_property port_width 1 [get_debug_ports u_ila_0/probe14]
+connect_debug_port u_ila_0/probe14 [get_nets [list {TXAxism2sVectorxD[2][LastxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe15]
+set_property port_width 1 [get_debug_ports u_ila_0/probe15]
+connect_debug_port u_ila_0/probe15 [get_nets [list {TXAxism2sVectorxD[2][ValidxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe16]
+set_property port_width 1 [get_debug_ports u_ila_0/probe16]
+connect_debug_port u_ila_0/probe16 [get_nets [list {TXAxism2sVectorxD[3][LastxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe17]
+set_property port_width 1 [get_debug_ports u_ila_0/probe17]
+connect_debug_port u_ila_0/probe17 [get_nets [list {TXAxism2sVectorxD[3][ValidxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe18]
+set_property port_width 1 [get_debug_ports u_ila_0/probe18]
+connect_debug_port u_ila_0/probe18 [get_nets [list {TXAxism2sVectorxD[4][LastxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe19]
+set_property port_width 1 [get_debug_ports u_ila_0/probe19]
+connect_debug_port u_ila_0/probe19 [get_nets [list {TXAxism2sVectorxD[4][ValidxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe20]
+set_property port_width 1 [get_debug_ports u_ila_0/probe20]
+connect_debug_port u_ila_0/probe20 [get_nets [list {TXAxism2sVectorxD[5][LastxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe21]
+set_property port_width 1 [get_debug_ports u_ila_0/probe21]
+connect_debug_port u_ila_0/probe21 [get_nets [list {TXAxism2sVectorxD[5][ValidxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe22]
+set_property port_width 1 [get_debug_ports u_ila_0/probe22]
+connect_debug_port u_ila_0/probe22 [get_nets [list {TXAxism2sVectorxD[6][LastxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe23]
+set_property port_width 1 [get_debug_ports u_ila_0/probe23]
+connect_debug_port u_ila_0/probe23 [get_nets [list {TXAxism2sVectorxD[6][ValidxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe24]
+set_property port_width 1 [get_debug_ports u_ila_0/probe24]
+connect_debug_port u_ila_0/probe24 [get_nets [list {TXAxiss2mVectorxD[0][ReadyxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe25]
+set_property port_width 1 [get_debug_ports u_ila_0/probe25]
+connect_debug_port u_ila_0/probe25 [get_nets [list {TXAxiss2mVectorxD[1][ReadyxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe26]
+set_property port_width 1 [get_debug_ports u_ila_0/probe26]
+connect_debug_port u_ila_0/probe26 [get_nets [list {TXAxiss2mVectorxD[2][ReadyxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe27]
+set_property port_width 1 [get_debug_ports u_ila_0/probe27]
+connect_debug_port u_ila_0/probe27 [get_nets [list {TXAxiss2mVectorxD[3][ReadyxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe28]
+set_property port_width 1 [get_debug_ports u_ila_0/probe28]
+connect_debug_port u_ila_0/probe28 [get_nets [list {TXAxiss2mVectorxD[4][ReadyxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe29]
+set_property port_width 1 [get_debug_ports u_ila_0/probe29]
+connect_debug_port u_ila_0/probe29 [get_nets [list {TXAxiss2mVectorxD[5][ReadyxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe30]
+set_property port_width 1 [get_debug_ports u_ila_0/probe30]
+connect_debug_port u_ila_0/probe30 [get_nets [list {TXAxiss2mVectorxD[6][ReadyxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe31]
+set_property port_width 1 [get_debug_ports u_ila_0/probe31]
+connect_debug_port u_ila_0/probe31 [get_nets [list {WestRXM2SxD[LastxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe32]
+set_property port_width 1 [get_debug_ports u_ila_0/probe32]
+connect_debug_port u_ila_0/probe32 [get_nets [list {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[LastxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe33]
+set_property port_width 1 [get_debug_ports u_ila_0/probe33]
+connect_debug_port u_ila_0/probe33 [get_nets [list {ProgrammableLogicxB.GTPhyxB.ScalpAuroraPhyxI/WestRXM2SxD[ValidxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe34]
+set_property port_width 1 [get_debug_ports u_ila_0/probe34]
+connect_debug_port u_ila_0/probe34 [get_nets [list {WestRXM2SxD[ValidxS]}]]
+create_debug_port u_ila_0 probe
+set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe35]
+set_property port_width 1 [get_debug_ports u_ila_0/probe35]
+connect_debug_port u_ila_0/probe35 [get_nets [list {WestRXS2MxD[ReadyxS]}]]
+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_router_firmware/2020.2/src/constrs/ibert_constraints.xdc b/designs/vivado/scalp_router_firmware/2020.2/src/constrs/ibert_constraints.xdc
new file mode 100644
index 0000000000000000000000000000000000000000..602b523f941544701ea24e62603c5fb40558d97e
--- /dev/null
+++ b/designs/vivado/scalp_router_firmware/2020.2/src/constrs/ibert_constraints.xdc
@@ -0,0 +1,382 @@
+# Taken from IBERT example design
+
+##
+## Icon Constraints
+##
+create_clock -name J_CLK -period 30 [get_pins -of_objects [get_cells gen_ibert.ibert_inst/inst/bscan_inst/SERIES7_BSCAN.bscan_inst] -filter {name =~ *DRCK}]
+set_clock_groups -group [get_clocks J_CLK] -asynchronous
+##
+## System clock Divider paramter values
+##
+set_property CLKFBOUT_MULT_F 8.000 [get_cells gen_ibert.ibert_inst/inst/SYSCLK_DIVIDER.U_GT_MMCM]
+set_property DIVCLK_DIVIDE 1 [get_cells gen_ibert.ibert_inst/inst/SYSCLK_DIVIDER.U_GT_MMCM]
+set_property CLKIN1_PERIOD 8.0 [get_cells gen_ibert.ibert_inst/inst/SYSCLK_DIVIDER.U_GT_MMCM]
+set_property CLKOUT0_DIVIDE_F 10.000 [get_cells gen_ibert.ibert_inst/inst/SYSCLK_DIVIDER.U_GT_MMCM]
+##
+## Refclk constraints
+##
+set_clock_groups -group [get_clocks GTP_REF_CLK_* -include_generated_clocks] -asynchronous
+#
+#
+#
+##
+## TX/RX out clock constraints
+##
+# GT X0Y0
+create_clock -name Q0_RXCLK0 -period 2.56 [get_pins {gen_ibert.ibert_inst/inst/QUAD[0].u_q/CH[0].u_ch/u_gtpe2_channel/RXOUTCLK}]
+set_clock_groups -group [get_clocks Q0_RXCLK0] -asynchronous
+create_clock -name  Q0_TX0 -period 2.56 [get_pins {gen_ibert.ibert_inst/inst/QUAD[0].u_q/CH[0].u_ch/u_gtpe2_channel/TXOUTCLK}]
+set_clock_groups -group [get_clocks Q0_TX0] -asynchronous
+# GT X0Y1
+create_clock -name Q0_RXCLK1 -period 2.56 [get_pins {gen_ibert.ibert_inst/inst/QUAD[0].u_q/CH[1].u_ch/u_gtpe2_channel/RXOUTCLK}]
+set_clock_groups -group [get_clocks Q0_RXCLK1] -asynchronous
+# GT X0Y2
+create_clock -name Q0_RXCLK2 -period 2.56 [get_pins {gen_ibert.ibert_inst/inst/QUAD[0].u_q/CH[2].u_ch/u_gtpe2_channel/RXOUTCLK}]
+set_clock_groups -group [get_clocks Q0_RXCLK2] -asynchronous
+# GT X0Y3
+create_clock -name Q0_RXCLK3 -period 2.56 [get_pins {gen_ibert.ibert_inst/inst/QUAD[0].u_q/CH[3].u_ch/u_gtpe2_channel/RXOUTCLK}]
+set_clock_groups -group [get_clocks Q0_RXCLK3] -asynchronous
+##
+## Timing constraint
+##
+set_property CLOCK_DEDICATED_ROUTE FALSE [get_pins gen_ibert.ibert_inst/inst/SYSCLK_DIVIDER.U_GT_MMCM/CLKIN1]
+##
+## GTPE2 Channel and Common Loc constraints
+##
+set_property LOC GTPE2_CHANNEL_X0Y0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[0].u_ch/u_gtpe2_channel]
+set_property LOC GTPE2_CHANNEL_X0Y1 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[1].u_ch/u_gtpe2_channel]
+set_property LOC GTPE2_CHANNEL_X0Y2 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[2].u_ch/u_gtpe2_channel]
+set_property LOC GTPE2_CHANNEL_X0Y3 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[3].u_ch/u_gtpe2_channel]
+set_property LOC GTPE2_COMMON_X0Y0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
+##
+## BUFH Loc constraints for TX/RX userclks
+##
+set_property LOC BUFHCE_X1Y0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_clocking/local_txusr.u_txusr]
+set_property LOC BUFHCE_X1Y1 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_clocking/rx_ind.u_rxusr0]
+set_property LOC BUFHCE_X1Y2 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_clocking/rx_ind.u_rxusr1]
+set_property LOC BUFHCE_X1Y3 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_clocking/rx_ind.u_rxusr2]
+set_property LOC BUFHCE_X1Y4 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_clocking/rx_ind.u_rxusr3]
+##
+## MGT reference clock BUFFERS location constraints
+##
+
+
+set_property LOC IBUFDS_GTE2_X0Y0 [get_cells i_clocks.ibufds_GTP_REF_CLK_0]
+set_property LOC IBUFDS_GTE2_X0Y1 [get_cells i_clocks.ibufds_GTP_REF_CLK_1]
+
+##
+## Attribute values for GTPE2 Channel and Common instances
+##
+##
+##remove ASYNC_REG property
+##
+set_property ASYNC_REG false [get_cells {gen_ibert.ibert_inst/inst/QUAD[*].u_q/CH[*].u_ch/U_CHANNEL_REGS/reg_310/I_EN_STAT_EQ1.U_STAT/xsdb_reg_reg[*]}]
+set_property ASYNC_REG false [get_cells {gen_ibert.ibert_inst/inst/QUAD[*].u_q/CH[*].u_ch/U_CHANNEL_REGS/reg_30E/I_EN_STAT_EQ1.U_STAT/xsdb_reg_reg[*]}]
+set_property ASYNC_REG false [get_cells {gen_ibert.ibert_inst/inst/QUAD[*].u_q/CH[*].u_ch/U_CHANNEL_REGS/reg_312/I_EN_STAT_EQ1.U_STAT/xsdb_reg_reg[*]}]
+set_property ASYNC_REG false [get_cells {gen_ibert.ibert_inst/inst/QUAD[*].u_q/CH[*].u_ch/U_CHANNEL_REGS/reg_314/I_EN_STAT_EQ1.U_STAT/xsdb_reg_reg[*]}]
+
+set_property ASYNC_REG false [get_cells {gen_ibert.ibert_inst/inst/QUAD[*].u_q/CH[*].u_ch/U_CHANNEL_REGS/reg_306/I_EN_STAT_EQ1.U_STAT/xsdb_reg_reg[*]}]
+
+set_property ASYNC_REG false [get_cells gen_ibert.ibert_inst/inst/UUT_MASTER/U_ICON_INTERFACE/U_CMD6_RD/U_RD_FIFO/SUBCORE_FIFO.xsdb_rdfifo_inst/inst_fifo_gen/gconvfifo.rf/grf.rf/rstblk/ngwrdrst.grst.g7serrst.rd_rst_asreg_reg]
+set_property ASYNC_REG false [get_cells gen_ibert.ibert_inst/inst/UUT_MASTER/U_ICON_INTERFACE/U_CMD6_RD/U_RD_FIFO/SUBCORE_FIFO.xsdb_rdfifo_inst/inst_fifo_gen/gconvfifo.rf/grf.rf/rstblk/ngwrdrst.grst.g7serrst.rd_rst_asreg_d1_reg]
+set_property ASYNC_REG false [get_cells gen_ibert.ibert_inst/inst/UUT_MASTER/U_ICON_INTERFACE/U_CMD6_RD/U_RD_FIFO/SUBCORE_FIFO.xsdb_rdfifo_inst/inst_fifo_gen/gconvfifo.rf/grf.rf/rstblk/ngwrdrst.grst.g7serrst.rd_rst_asreg_d2_reg]
+set_property ASYNC_REG false [get_cells gen_ibert.ibert_inst/inst/UUT_MASTER/U_ICON_INTERFACE/U_CMD6_RD/U_RD_FIFO/SUBCORE_FIFO.xsdb_rdfifo_inst/inst_fifo_gen/gconvfifo.rf/grf.rf/rstblk/ngwrdrst.grst.g7serrst.wr_rst_asreg_reg]
+set_property ASYNC_REG false [get_cells gen_ibert.ibert_inst/inst/UUT_MASTER/U_ICON_INTERFACE/U_CMD6_RD/U_RD_FIFO/SUBCORE_FIFO.xsdb_rdfifo_inst/inst_fifo_gen/gconvfifo.rf/grf.rf/rstblk/ngwrdrst.grst.g7serrst.wr_rst_asreg_d1_reg]
+set_property ASYNC_REG false [get_cells gen_ibert.ibert_inst/inst/UUT_MASTER/U_ICON_INTERFACE/U_CMD6_RD/U_RD_FIFO/SUBCORE_FIFO.xsdb_rdfifo_inst/inst_fifo_gen/gconvfifo.rf/grf.rf/rstblk/ngwrdrst.grst.g7serrst.wr_rst_asreg_d2_reg]
+
+set_property ASYNC_REG false [get_cells gen_ibert.ibert_inst/inst/UUT_MASTER/U_ICON_INTERFACE/U_CMD6_WR/U_WR_FIFO/SUBCORE_FIFO.xsdb_wrfifo_inst/inst_fifo_gen/gconvfifo.rf/grf.rf/rstblk/ngwrdrst.grst.g7serrst.rd_rst_asreg_reg]
+set_property ASYNC_REG false [get_cells gen_ibert.ibert_inst/inst/UUT_MASTER/U_ICON_INTERFACE/U_CMD6_WR/U_WR_FIFO/SUBCORE_FIFO.xsdb_wrfifo_inst/inst_fifo_gen/gconvfifo.rf/grf.rf/rstblk/ngwrdrst.grst.g7serrst.rd_rst_asreg_d1_reg]
+set_property ASYNC_REG false [get_cells gen_ibert.ibert_inst/inst/UUT_MASTER/U_ICON_INTERFACE/U_CMD6_WR/U_WR_FIFO/SUBCORE_FIFO.xsdb_wrfifo_inst/inst_fifo_gen/gconvfifo.rf/grf.rf/rstblk/ngwrdrst.grst.g7serrst.rd_rst_asreg_d2_reg]
+set_property ASYNC_REG false [get_cells gen_ibert.ibert_inst/inst/UUT_MASTER/U_ICON_INTERFACE/U_CMD6_WR/U_WR_FIFO/SUBCORE_FIFO.xsdb_wrfifo_inst/inst_fifo_gen/gconvfifo.rf/grf.rf/rstblk/ngwrdrst.grst.g7serrst.wr_rst_asreg_reg]
+set_property ASYNC_REG false [get_cells gen_ibert.ibert_inst/inst/UUT_MASTER/U_ICON_INTERFACE/U_CMD6_WR/U_WR_FIFO/SUBCORE_FIFO.xsdb_wrfifo_inst/inst_fifo_gen/gconvfifo.rf/grf.rf/rstblk/ngwrdrst.grst.g7serrst.wr_rst_asreg_d1_reg]
+set_property ASYNC_REG false [get_cells gen_ibert.ibert_inst/inst/UUT_MASTER/U_ICON_INTERFACE/U_CMD6_WR/U_WR_FIFO/SUBCORE_FIFO.xsdb_wrfifo_inst/inst_fifo_gen/gconvfifo.rf/grf.rf/rstblk/ngwrdrst.grst.g7serrst.wr_rst_asreg_d2_reg]
+
+##
+## Attribute Values for QUAD[0] - Channel
+##
+ ##------Comma Detection and Alignment---------
+set_property ALIGN_COMMA_DOUBLE "FALSE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property ALIGN_COMMA_ENABLE 10'b0001111111 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property ALIGN_COMMA_WORD 1 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property ALIGN_MCOMMA_DET "TRUE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property ALIGN_MCOMMA_VALUE 10'b1010000011 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property ALIGN_PCOMMA_DET "TRUE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property ALIGN_PCOMMA_VALUE 10'b0101111100 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property DEC_MCOMMA_DETECT "FALSE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property DEC_PCOMMA_DETECT "FALSE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property DEC_VALID_COMMA_ONLY "FALSE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property DMONITOR_CFG 24'h000A00 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+ ##--------------Channel Bonding--------------
+set_property CBCC_DATA_SOURCE_SEL "DECODED" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CHAN_BOND_KEEP_ALIGN "FALSE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CHAN_BOND_MAX_SKEW 7 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CHAN_BOND_SEQ_LEN 1 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CHAN_BOND_SEQ_1_1 10'b0101111100 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CHAN_BOND_SEQ_1_2 10'b0100000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CHAN_BOND_SEQ_1_3 10'b0100000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CHAN_BOND_SEQ_1_4 10'b0100000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CHAN_BOND_SEQ_1_ENABLE 4'b1111 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CHAN_BOND_SEQ_2_1 10'b0100000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CHAN_BOND_SEQ_2_2 10'b0100000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CHAN_BOND_SEQ_2_3 10'b0100000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CHAN_BOND_SEQ_2_4 10'b0100000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CHAN_BOND_SEQ_2_ENABLE 4'b1111 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CHAN_BOND_SEQ_2_USE "FALSE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+ ##-----------Clock Correction------------
+set_property CLK_COR_KEEP_IDLE "FALSE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CLK_COR_MAX_LAT 9.0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CLK_COR_MIN_LAT 7.0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CLK_COR_PRECEDENCE "TRUE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CLK_CORRECT_USE "FALSE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CLK_COR_REPEAT_WAIT 0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CLK_COR_SEQ_LEN 1 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CLK_COR_SEQ_1_1 10'b0100011100 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CLK_COR_SEQ_1_2 10'b0100000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CLK_COR_SEQ_1_3 10'b0100000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CLK_COR_SEQ_1_4 10'b0100000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CLK_COR_SEQ_1_ENABLE 4'b1111 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CLK_COR_SEQ_2_1 10'b0100000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CLK_COR_SEQ_2_2 10'b0100000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CLK_COR_SEQ_2_3 10'b0100000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CLK_COR_SEQ_2_4 10'b0100000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CLK_COR_SEQ_2_ENABLE 4'b1111 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CLK_COR_SEQ_2_USE "FALSE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+ ##-----------Channel PLL----------------------
+set_property RXOUT_DIV 1 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXOUT_DIV 1 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+ ##-----------------Eyescan--------------
+set_property ES_CONTROL 6'b000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property ES_ERRDET_EN "TRUE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property ES_EYE_SCAN_EN "TRUE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property ES_HORZ_OFFSET 12'h002 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property ES_PMA_CFG 10'b0000000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property ES_PRESCALE 5'b00000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property ES_QUALIFIER 80'h00000000000000000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property ES_QUAL_MASK 80'h00000000000000000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property ES_SDATA_MASK 80'h00000000000000000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property ES_VERT_OFFSET 9'b010000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property FTS_DESKEW_SEQ_ENABLE 4'b1111 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property FTS_LANE_DESKEW_CFG 4'b1111 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property FTS_LANE_DESKEW_EN "FALSE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property GEARBOX_MODE 3'b000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property OUTREFCLK_SEL_INV 2'b11 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property PCS_PCIE_EN "FALSE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property PCS_RSVD_ATTR 48'h000000000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property PMA_RSV 32'h00000333 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property PMA_RSV2 32'h00002040 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property PMA_RSV3 2'b00 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property PMA_RSV4 4'b0000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property PMA_RSV5 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property PMA_RSV6 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property PMA_RSV7 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RX_BIAS_CFG 16'b0000111100110011 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_PREDRIVER_MODE 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+ ##-----------Rx Elastic Buffer and Phase alignment-------------
+set_property RXBUF_ADDR_MODE "FAST" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXBUF_EIDLE_HI_CNT 4'b1000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXBUF_EIDLE_LO_CNT 4'b0000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXBUF_EN "TRUE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RX_BUFFER_CFG 6'b000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXBUF_RESET_ON_CB_CHANGE "TRUE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXBUF_RESET_ON_COMMAALIGN "FALSE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXBUF_RESET_ON_EIDLE "FALSE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXBUF_RESET_ON_RATE_CHANGE "TRUE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXBUFRESET_TIME 5'b00001 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXBUF_THRESH_OVFLW 61 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXBUF_THRESH_OVRD "FALSE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXBUF_THRESH_UNDFLW 4 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXDLY_CFG 16'h0010 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXDLY_LCFG 9'h020 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXDLY_TAP_CFG 16'h0000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+ ##-----------RX driver, OOB signalling, Coupling and Eq., CDR------------
+set_property RXCDR_CFG 83'h0001107FE206021041010 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXCDRFREQRESET_TIME 5'b00001 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXCDR_FR_RESET_ON_EIDLE 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXCDR_HOLD_DURING_EIDLE 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXCDR_LOCK_CFG 6'b001001 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXCDR_PH_RESET_ON_EIDLE 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXCDRPHRESET_TIME 5'b00001 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXOOB_CFG 7'b0000110 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+ ##-----------------------RX Interface-------------------------
+set_property RX_DATA_WIDTH 16 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RX_CLK25_DIV 5 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RX_CM_SEL 2'b11 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RX_CM_TRIM 4'b1010 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RX_DDI_SEL 6'b000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RX_DEBUG_CFG 12'b000000000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+ ##------------RX Decision Feedback Equalizer(DFE)-------------
+set_property RX_DEFER_RESET_BUF_EN "TRUE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RX_OS_CFG 13'b0000010000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RX_DISPERR_SEQ_MATCH "TRUE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+ ##-----------------------RX Gearbox---------------------------
+set_property RXGEARBOX_EN "FALSE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXISCANRESET_TIME 5'b00001 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXLPM_HF_CFG  14'b00001111110000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXLPM_HF_CFG2 5'b01010 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXLPM_HF_CFG3 4'b0000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXLPM_HOLD_DURING_EIDLE 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXLPM_INCM_CFG 1'b1 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXLPM_IPCM_CFG 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXLPM_LF_CFG  18'b000000001111110000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXLPM_LF_CFG2 5'b01010 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXLPM_OSINT_CFG 3'b000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXPCSRESET_TIME 5'b00001 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXPH_CFG 24'hC00002 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXPHDLY_CFG 24'h084000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXPH_MONITOR_SEL 5'b00000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXPMARESET_TIME 5'b00011 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+ ##-----------------------PRBS Detection-----------------------
+set_property RXPRBS_ERR_LOOPBACK 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RX_SIG_VALID_DLY 10 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXSLIDE_AUTO_WAIT 7 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXSLIDE_MODE "off" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RX_XCLK_SEL "RXREC" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+ ##-----------RX Attributes for PCI Express/SATA/SAS----------
+set_property PD_TRANS_TIME_FROM_P2 12'h03c [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property PD_TRANS_TIME_NONE_P2 8'h3c [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property PD_TRANS_TIME_TO_P2 8'h64 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property SAS_MAX_COM 64 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property SAS_MIN_COM 36 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property SATA_BURST_SEQ_LEN 4'b1111 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property SATA_BURST_VAL 3'b100 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property SATA_PLL_CFG VCO_3000MHZ [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property SATA_EIDLE_VAL 3'b100 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property SATA_MAX_BURST 8 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property SATA_MAX_INIT 21 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property SATA_MAX_WAKE 7 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property SATA_MIN_BURST 4 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property SATA_MIN_INIT 12 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property SATA_MIN_WAKE 4 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property SHOW_REALIGN_COMMA "TRUE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TERM_RCAL_CFG 15'b100001000010000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TERM_RCAL_OVRD 3'b000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TRANS_TIME_RATE 8'h0E [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TST_RSV 32'h00000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+ ##------------TX Buffering and Phase Alignment----------------
+set_property TXBUF_EN "TRUE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXBUF_RESET_ON_RATE_CHANGE "TRUE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+ ##-----------------------TX Interface-------------------------
+set_property TX_DATA_WIDTH 16 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_DEEMPH0 6'b000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_DEEMPH1 6'b000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXDLY_CFG 16'h0010 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXDLY_LCFG 9'h020 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXDLY_TAP_CFG 16'h0000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_CLK25_DIV 5 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+ ##--------------TX Driver and OOB Signalling------------------
+set_property TX_EIDLE_ASSERT_DELAY 3'b110 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_EIDLE_DEASSERT_DELAY 3'b100 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_LOOPBACK_DRIVE_HIZ "FALSE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_MAINCURSOR_SEL 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_DRIVE_MODE "DIRECT" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+ ##-----------------------TX Gearbox---------------------------
+set_property TXGEARBOX_EN "FALSE" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+ ##----------------TX Attributes for PCI Express---------------
+set_property TX_MARGIN_FULL_0 7'b1001110 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_MARGIN_FULL_1 7'b1001001 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_MARGIN_FULL_2 7'b1000101 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_MARGIN_FULL_3 7'b1000010 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_MARGIN_FULL_4 7'b1000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_MARGIN_LOW_0 7'b1000110 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_MARGIN_LOW_1 7'b1000100 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_MARGIN_LOW_2 7'b1000010 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_MARGIN_LOW_3 7'b1000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_MARGIN_LOW_4 7'b1000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXPCSRESET_TIME 5'b00001 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXPH_CFG 16'h0400 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXPHDLY_CFG 24'h084000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXPH_MONITOR_SEL 5'b00000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXPMARESET_TIME 5'b00001 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_RXDETECT_CFG 14'h1832 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_RXDETECT_REF 3'b100 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_XCLK_SEL "TXOUT" [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property UCODEER_CLR 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+ ##---------------- JTAG Attributes ---------------
+set_property ACJTAG_DEBUG_MODE 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property ACJTAG_MODE 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property ACJTAG_RESET 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property ADAPT_CFG0 20'h00000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXLPMRESET_TIME 7'b0001111 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXLPM_BIAS_STARTUP_DISABLE 1'b1 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXLPM_CFG 4'b0110 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXLPM_CFG1 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXLPM_CM_CFG 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXLPM_GC_CFG 9'b101110010 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXLPM_GC_CFG2 3'b001 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CFOK_CFG 43'h49000040E80 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CFOK_CFG2 7'b0100000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CFOK_CFG3 7'b0100000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CFOK_CFG4 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CFOK_CFG5 2'h0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property CFOK_CFG6 4'b0000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+
+ ##---------------- EYESCAN ---------------
+set_property ES_CLK_PHASE_SEL 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property PMA_RSV5 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+
+ ##---------------- RX Phase Interpolator ---------------
+set_property RXPI_CFG0 3'b000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXPI_CFG1 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXPI_CFG2 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+
+ ##---------------- TX Phase Interpolator ---------------
+set_property TXPI_CFG0 2'b00 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXPI_CFG1 2'b00 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXPI_CFG2 2'b00 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXPI_CFG3 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXPI_CFG4 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXPI_CFG5 3'b000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXPI_GREY_SEL 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXPI_INVSTROBE_SEL 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXPI_PPMCLK_SEL TXUSRCLK2 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXPI_PPM_CFG 8'h00 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXPI_SYNFREQ_PPM 3'b000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property USE_PCS_CLK_PHASE_SEL 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+
+ ##---------------- LOOPBACK ---------------
+set_property LOOPBACK_CFG 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+
+ ##---------------- OOB Signalling ---------------
+set_property RXOOB_CLK_CFG PMA [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXOSCALRESET_TIME 5'b00011 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXOSCALRESET_TIMEOUT 5'b00000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXOOB_CFG 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+
+##---------------- PMA Attributes ---------------
+set_property CLK_COMMON_SWING 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RX_CLKMUX_EN 1'b1 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TX_CLKMUX_EN 1'b1 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property PMA_LOOPBACK_CFG 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+
+##---------------- RX SYNC ---------------
+set_property RXSYNC_MULTILANE 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXSYNC_OVRD 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property RXSYNC_SKIP_DA 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+
+ ##---------------- TX SYNC ---------------
+set_property TXSYNC_MULTILANE 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXSYNC_OVRD 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+set_property TXSYNC_SKIP_DA 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/CH[*].u_ch/u_gtpe2_channel]
+
+##
+## Attribute Values for QUAD[0] - Common
+##
+set_property BIAS_CFG 64'h0000000000050001 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
+set_property COMMON_CFG 32'h00000000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
+set_property PLL1_CFG 27'h01F0319 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
+set_property PLL0_CFG 27'h01F0319 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
+set_property PLL0_DMON_CFG 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
+set_property PLL1_DMON_CFG 1'b0 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
+set_property PLL_CLKOUT_CFG 8'h00 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
+set_property PLL0_INIT_CFG 24'h00001E [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
+set_property PLL1_INIT_CFG 24'h00001E [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
+set_property PLL0_LOCK_CFG 9'h1E8 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
+set_property PLL1_LOCK_CFG 9'h1E8 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
+set_property PLL1_FBDIV 5 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
+set_property PLL0_FBDIV 5 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
+set_property PLL1_FBDIV_45 5 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
+set_property PLL0_FBDIV_45 5 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
+set_property PLL0_REFCLK_DIV 1 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
+set_property PLL1_REFCLK_DIV 1 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
+set_property RSVD_ATTR0 16'h0000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
+set_property RSVD_ATTR1 16'h0000 [get_cells gen_ibert.ibert_inst/inst/QUAD[0].u_q*/u_common/u_gtpe2_common]
diff --git a/designs/vivado/scalp_router_firmware/2020.2/src/constrs/scalp_firmware.xdc b/designs/vivado/scalp_router_firmware/2020.2/src/constrs/scalp_firmware.xdc
new file mode 100644
index 0000000000000000000000000000000000000000..876688bb5f03ebd31babcef8db2513601d750c40
--- /dev/null
+++ b/designs/vivado/scalp_router_firmware/2020.2/src/constrs/scalp_firmware.xdc
@@ -0,0 +1,256 @@
+############################################################################
+# Programmable Logic placement constraints                                 #
+############################################################################
+
+##### USB interface (bank 13) #####
+# USB_VBUS_PWRFAULT_i
+set_property PACKAGE_PIN AA19 [get_ports UsbVbusPwrFaultxSI]
+set_property IOSTANDARD LVCMOS25 [get_ports UsbVbusPwrFaultxSI]
+
+##### PLL interface (banks 35 and 34) #####
+# PLL_2V5_CLKuWire_o
+set_property PACKAGE_PIN G8 [get_ports Pll2V5ClkuWirexCO]
+set_property IOSTANDARD LVCMOS25 [get_ports Pll2V5ClkuWirexCO]
+# PLL_2V5_DATAuWire_o
+set_property PACKAGE_PIN G7 [get_ports Pll2V5DatauWirexSO]
+set_property IOSTANDARD LVCMOS25 [get_ports Pll2V5DatauWirexSO]
+# PLL_2V5_LEuWire_o
+set_property PACKAGE_PIN G6 [get_ports Pll2V5LEuWirexSO]
+set_property IOSTANDARD LVCMOS25 [get_ports Pll2V5LEuWirexSO]
+# PLL_2V5_GOE_o
+set_property PACKAGE_PIN F6 [get_ports Pll2V5GOExSO]
+set_property IOSTANDARD LVCMOS25 [get_ports Pll2V5GOExSO]
+# PLL_2V5_LD_i
+set_property PACKAGE_PIN H6 [get_ports Pll2V5LDxSI]
+set_property IOSTANDARD LVCMOS25 [get_ports Pll2V5LDxSI]
+# PLL_2V5_SYNC_n_o
+set_property PACKAGE_PIN H5 [get_ports Pll2V5SyncxSO]
+set_property IOSTANDARD LVCMOS25 [get_ports Pll2V5SyncxSO]
+# PLL_2V5_CLKIN0_LOS_i (bank 34)
+set_property PACKAGE_PIN J3 [get_ports Pll2V5ClkIn0LOSxSI]
+set_property IOSTANDARD LVCMOS25 [get_ports Pll2V5ClkIn0LOSxSI]
+# PLL_2V5_CLKIN1_LOS_i (bank 34)
+set_property PACKAGE_PIN K2 [get_ports Pll2V5ClkIn1LOSxSI]
+set_property IOSTANDARD LVCMOS25 [get_ports Pll2V5ClkIn1LOSxSI]
+
+##### GTP interfaces (bank 112) #####
+set_property PACKAGE_PIN U9 [get_ports GTPRefClk0PxCI]
+set_property PACKAGE_PIN V9 [get_ports GTPRefClk0NxCI]
+#set_property PACKAGE_PIN "U5" [get_ports "GTPRefClk1PxCI"]
+#set_property PACKAGE_PIN "V5" [get_ports "GTPRefClk1NxCI"]
+set_property PACKAGE_PIN Y8 [get_ports GTPFromNorthNxSI]
+set_property PACKAGE_PIN W8 [get_ports GTPFromNorthPxSI]
+set_property PACKAGE_PIN Y4 [get_ports GTPToNorthNxSO]
+set_property PACKAGE_PIN W4 [get_ports GTPToNorthPxSO]
+set_property PACKAGE_PIN AB7 [get_ports GTPFromSouthNxSI]
+set_property PACKAGE_PIN AA7 [get_ports GTPFromSouthPxSI]
+set_property PACKAGE_PIN AB3 [get_ports GTPToSouthNxSO]
+set_property PACKAGE_PIN AA3 [get_ports GTPToSouthPxSO]
+set_property PACKAGE_PIN AB9 [get_ports GTPFromEastNxSI]
+set_property PACKAGE_PIN AA9 [get_ports GTPFromEastPxSI]
+set_property PACKAGE_PIN AB5 [get_ports GTPToEastNxSO]
+set_property PACKAGE_PIN AA5 [get_ports GTPToEastPxSO]
+set_property PACKAGE_PIN Y6 [get_ports GTPFromWestNxSI]
+set_property PACKAGE_PIN W6 [get_ports GTPFromWestPxSI]
+set_property PACKAGE_PIN Y2 [get_ports GTPToWestNxSO]
+set_property PACKAGE_PIN W2 [get_ports GTPToWestPxSO]
+
+##### LVDS links towards edge connectors #####
+# North (bank 35)
+#set_property PACKAGE_PIN "E8"   [get_ports "LVDS2V5North7PxSIO"]
+#set_property PACKAGE_PIN "D8"   [get_ports "LVDS2V5North7NxSIO"]
+#set_property PACKAGE_PIN "D7"   [get_ports "LVDS2V5North6PxSIO"]
+#set_property PACKAGE_PIN "D6"   [get_ports "LVDS2V5North6NxSIO"]
+#set_property PACKAGE_PIN "C8"   [get_ports "LVDS2V5North5PxSIO"]
+#set_property PACKAGE_PIN "B8"   [get_ports "LVDS2V5North5NxSIO"]
+#set_property PACKAGE_PIN "B7"   [get_ports "LVDS2V5North4PxSIO"]
+#set_property PACKAGE_PIN "B6"   [get_ports "LVDS2V5North4NxSIO"]
+#set_property PACKAGE_PIN "A7"   [get_ports "LVDS2V5North3PxSIO"]
+#set_property PACKAGE_PIN "A6"   [get_ports "LVDS2V5North3NxSIO"]
+#set_property PACKAGE_PIN "A5"   [get_ports "LVDS2V5North2PxSIO"]
+#set_property PACKAGE_PIN "A4"   [get_ports "LVDS2V5North2NxSIO"]
+#set_property PACKAGE_PIN "B2"   [get_ports "LVDS2V5North1PxSIO"]
+#set_property PACKAGE_PIN "B1"   [get_ports "LVDS2V5North1NxSIO"]
+#set_property PACKAGE_PIN "A2"   [get_ports "LVDS2V5North0PxSIO"]
+#set_property PACKAGE_PIN "A1"   [get_ports "LVDS2V5North0NxSIO"]
+# South (bank 13)
+#set_property PACKAGE_PIN "V15"  [get_ports "LVDS2V5South7PxSIO"]
+#set_property PACKAGE_PIN "W15"  [get_ports "LVDS2V5South7NxSIO"]
+#set_property PACKAGE_PIN "AB13" [get_ports "LVDS2V5South6PxSIO"]
+#set_property PACKAGE_PIN "AB14" [get_ports "LVDS2V5South6NxSIO"]
+#set_property PACKAGE_PIN "V13"  [get_ports "LVDS2V5South5PxSIO"]
+#set_property PACKAGE_PIN "V14"  [get_ports "LVDS2V5South5NxSIO"]
+#set_property PACKAGE_PIN "Y12"  [get_ports "LVDS2V5South4PxSIO"]
+#set_property PACKAGE_PIN "Y13"  [get_ports "LVDS2V5South4NxSIO"]
+#set_property PACKAGE_PIN "AA12" [get_ports "LVDS2V5South3PxSIO"]
+#set_property PACKAGE_PIN "AB12" [get_ports "LVDS2V5South3NxSIO"]
+#set_property PACKAGE_PIN "W12"  [get_ports "LVDS2V5South2PxSIO"]
+#set_property PACKAGE_PIN "W13"  [get_ports "LVDS2V5South2NxSIO"]
+#set_property PACKAGE_PIN "AA11" [get_ports "LVDS2V5South1PxSIO"]
+#set_property PACKAGE_PIN "AB11" [get_ports "LVDS2V5South1NxSIO"]
+#set_property PACKAGE_PIN "V11"  [get_ports "LVDS2V5South0PxSIO"]
+#set_property PACKAGE_PIN "W11"  [get_ports "LVDS2V5South0NxSIO"]
+# East (bank 13)
+#set_property PACKAGE_PIN "V16"  [get_ports "LVDS2V5East7PxSIO"]
+#set_property PACKAGE_PIN "W16"  [get_ports "LVDS2V5East7NxSIO"]
+#set_property PACKAGE_PIN "W17"  [get_ports "LVDS2V5East6PxSIO"]
+#set_property PACKAGE_PIN "Y17"  [get_ports "LVDS2V5East6NxSIO"]
+#set_property PACKAGE_PIN "U13"  [get_ports "LVDS2V5East5PxSIO"]
+#set_property PACKAGE_PIN "U14"  [get_ports "LVDS2V5East5NxSIO"]
+#set_property PACKAGE_PIN "V18"  [get_ports "LVDS2V5East4PxSIO"]
+#set_property PACKAGE_PIN "W18"  [get_ports "LVDS2V5East4NxSIO"]
+#set_property PACKAGE_PIN "U11"  [get_ports "LVDS2V5East3PxSIO"]
+#set_property PACKAGE_PIN "U12"  [get_ports "LVDS2V5East3NxSIO"]
+#set_property PACKAGE_PIN "U19"  [get_ports "LVDS2V5East2PxSIO"]
+#set_property PACKAGE_PIN "V19"  [get_ports "LVDS2V5East2NxSIO"]
+#set_property PACKAGE_PIN "R17"  [get_ports "LVDS2V5East1PxSIO"]
+#set_property PACKAGE_PIN "T17"  [get_ports "LVDS2V5East1NxSIO"]
+#set_property PACKAGE_PIN "U17"  [get_ports "LVDS2V5East0PxSIO"]
+#set_property PACKAGE_PIN "U18"  [get_ports "LVDS2V5East0NxSIO"]
+# West (bank 35)
+#set_property PACKAGE_PIN "H4"   [get_ports "LVDS2V5West7PxSIO"]
+#set_property PACKAGE_PIN "H3"   [get_ports "LVDS2V5West7NxSIO"]
+#set_property PACKAGE_PIN "H1"   [get_ports "LVDS2V5West6PxSIO"]
+#set_property PACKAGE_PIN "G1"   [get_ports "LVDS2V5West6NxSIO"]
+#set_property PACKAGE_PIN "G3"   [get_ports "LVDS2V5West5PxSIO"]
+#set_property PACKAGE_PIN "G2"   [get_ports "LVDS2V5West5NxSIO"]
+#set_property PACKAGE_PIN "F2"   [get_ports "LVDS2V5West4PxSIO"]
+#set_property PACKAGE_PIN "F1"   [get_ports "LVDS2V5West4NxSIO"]
+#set_property PACKAGE_PIN "G4"   [get_ports "LVDS2V5West3PxSIO"]
+#set_property PACKAGE_PIN "F4"   [get_ports "LVDS2V5West3NxSIO"]
+#set_property PACKAGE_PIN "E2"   [get_ports "LVDS2V5West2PxSIO"]
+#set_property PACKAGE_PIN "D2"   [get_ports "LVDS2V5West2NxSIO"]
+#set_property PACKAGE_PIN "E4"   [get_ports "LVDS2V5West1PxSIO"]
+#set_property PACKAGE_PIN "E3"   [get_ports "LVDS2V5West1NxSIO"]
+#set_property PACKAGE_PIN "D1"   [get_ports "LVDS2V5West0PxSIO"]
+#set_property PACKAGE_PIN "C1"   [get_ports "LVDS2V5West0NxSIO"]
+
+##### LVDS links towards top-bottom connectors #####
+# Top (bank 34)
+#set_property PACKAGE_PIN "J8"   [get_ports "LVDS2V5Top7PxSIO"]
+#set_property PACKAGE_PIN "K8"   [get_ports "LVDS2V5Top7NxSIO"]
+#set_property PACKAGE_PIN "K7"   [get_ports "LVDS2V5Top6PxSIO"]
+#set_property PACKAGE_PIN "L7"   [get_ports "LVDS2V5Top6NxSIO"]
+#set_property PACKAGE_PIN "N8"   [get_ports "LVDS2V5Top5PxSIO"]
+#set_property PACKAGE_PIN "P8"   [get_ports "LVDS2V5Top5NxSIO"]
+#set_property PACKAGE_PIN "M8"   [get_ports "LVDS2V5Top4PxSIO"]
+#set_property PACKAGE_PIN "M7"   [get_ports "LVDS2V5Top4NxSIO"]
+#set_property PACKAGE_PIN "L6"   [get_ports "LVDS2V5Top3PxSIO"]
+#set_property PACKAGE_PIN "M6"   [get_ports "LVDS2V5Top3NxSIO"]
+#set_property PACKAGE_PIN "J7"   [get_ports "LVDS2V5Top2PxSIO"]
+#set_property PACKAGE_PIN "J6"   [get_ports "LVDS2V5Top2NxSIO"]
+#set_property PACKAGE_PIN "J5"   [get_ports "LVDS2V5Top1PxSIO"]
+#set_property PACKAGE_PIN "K5"   [get_ports "LVDS2V5Top1NxSIO"]
+#set_property PACKAGE_PIN "J2"   [get_ports "LVDS2V5Top0PxSIO"]
+#set_property PACKAGE_PIN "J1"   [get_ports "LVDS2V5Top0NxSIO"]
+# Bottom (bank 34)
+#set_property PACKAGE_PIN "N6"   [get_ports "LVDS2V5Bottom7PxSIO"]
+#set_property PACKAGE_PIN "N5"   [get_ports "LVDS2V5Bottom7NxSIO"]
+#set_property PACKAGE_PIN "P6"   [get_ports "LVDS2V5Bottom6PxSIO"]
+#set_property PACKAGE_PIN "P5"   [get_ports "LVDS2V5Bottom6NxSIO"]
+#set_property PACKAGE_PIN "R5"   [get_ports "LVDS2V5Bottom5PxSIO"]
+#set_property PACKAGE_PIN "R4"   [get_ports "LVDS2V5Bottom5NxSIO"]
+#set_property PACKAGE_PIN "R3"   [get_ports "LVDS2V5Bottom4PxSIO"]
+#set_property PACKAGE_PIN "R2"   [get_ports "LVDS2V5Bottom4NxSIO"]
+#set_property PACKAGE_PIN "P3"   [get_ports "LVDS2V5Bottom3PxSIO"]
+#set_property PACKAGE_PIN "P2"   [get_ports "LVDS2V5Bottom3NxSIO"]
+#set_property PACKAGE_PIN "N1"   [get_ports "LVDS2V5Bottom2PxSIO"]
+#set_property PACKAGE_PIN "P1"   [get_ports "LVDS2V5Bottom2NxSIO"]
+#set_property PACKAGE_PIN "N4"   [get_ports "LVDS2V5Bottom1PxSIO"]
+#set_property PACKAGE_PIN "N3"   [get_ports "LVDS2V5Bottom1NxSIO"]
+#set_property PACKAGE_PIN "M2"   [get_ports "LVDS2V5Bottom0PxSIO"]
+#set_property PACKAGE_PIN "M1"   [get_ports "LVDS2V5Bottom0NxSIO"]
+
+##### RGB LEDs (banks 34 and 13) #####
+# LED1_2V5_R_o (bank 34)
+set_property PACKAGE_PIN L2 [get_ports Led12V5RxSO]
+set_property IOSTANDARD LVCMOS25 [get_ports Led12V5RxSO]
+# LED1_2V5_G_o (bank 34)
+set_property PACKAGE_PIN L1 [get_ports Led12V5GxSO]
+set_property IOSTANDARD LVCMOS25 [get_ports Led12V5GxSO]
+# LED1_2V5_B_o (bank 34)
+set_property PACKAGE_PIN R8 [get_ports Led12V5BxSO]
+set_property IOSTANDARD LVCMOS25 [get_ports Led12V5BxSO]
+# LED2_2V5_R_o (bank 13)
+set_property PACKAGE_PIN T16 [get_ports Led22V5RxSO]
+set_property IOSTANDARD LVCMOS25 [get_ports Led22V5RxSO]
+# LED2_2V5_G_o (bank 13)
+set_property PACKAGE_PIN U16 [get_ports Led22V5GxSO]
+set_property IOSTANDARD LVCMOS25 [get_ports Led22V5GxSO]
+# LED2_2V5_B_o (bank 13)
+set_property PACKAGE_PIN AA20 [get_ports Led22V5BxSO]
+set_property IOSTANDARD LVCMOS25 [get_ports Led22V5BxSO]
+
+##### Self reset (bank 34) #####
+set_property PACKAGE_PIN H8 [get_ports SelfRstxRNO]
+set_property IOSTANDARD LVCMOS25 [get_ports SelfRstxRNO]
+
+##### Clock dedicated pins (Multi-region) #####
+# Bank 35
+#set_property PACKAGE_PIN "D5"   [get_ports "PLLClk2V5LocalPxCI"]
+#set_property PACKAGE_PIN "C4"   [get_ports "PLLClk2V5LocalNxCI"]
+#set_property PACKAGE_PIN "B4"   [get_ports "PLLClk2V5NorthPxCI"]
+#set_property PACKAGE_PIN "B3"   [get_ports "PLLClk2V5NorthNxCI"]
+# Bank 34
+#set_property PACKAGE_PIN "T2"   [get_ports "PLLClk2V5TopxCI"]
+#set_property PACKAGE_PIN "L5"   [get_ports "PLLClk2V5BottomxCI"]
+# Bank 13
+#set_property PACKAGE_PIN "Y14"  [get_ports "PLLClk2V5SouthPxCI"]
+#set_property PACKAGE_PIN "Y15"  [get_ports "PLLClk2V5SouthNxCI"]
+#set_property PACKAGE_PIN "Y18"  [get_ports "Clk2V5RecoveryPxCO"]
+#set_property PACKAGE_PIN "Y19"  [get_ports "Clk2V5RecoveryNxCO"]
+
+##### Clock dedicated pins (Single-region) #####
+# Bank 35
+#set_property PACKAGE_PIN "C6"   [get_ports "Clk2V5NorthPxCI"]
+#set_property PACKAGE_PIN "C5"   [get_ports "Clk2V5NorthNxCI"]
+#set_property PACKAGE_PIN "D3"   [get_ports "Clk2V5WestPxCI"]
+#set_property PACKAGE_PIN "C3"   [get_ports "Clk2V5WestNxCI"]
+# Bank 34
+#set_property PACKAGE_PIN "K4"   [get_ports "Clk2V5TopPxCI"]
+#set_property PACKAGE_PIN "K3"   [get_ports "Clk2V5TopNxCI"]
+#set_property PACKAGE_PIN "U2"   [get_ports "Clk2V5BottomPxCI"]
+#set_property PACKAGE_PIN "U1"   [get_ports "Clk2V5BottomNxCI"]
+# Bank 13
+#set_property PACKAGE_PIN "AA14" [get_ports "Clk2V5SouthPxCI"]
+#set_property PACKAGE_PIN "AA15" [get_ports "Clk2V5SouthNxCI"]
+#set_property PACKAGE_PIN "AA16" [get_ports "Clk2V5EastPxCI"]
+#set_property PACKAGE_PIN "AA17" [get_ports "Clk2V5EastNxCI"]
+
+##### Clock outputs #####
+## Bank 35
+#set_property PACKAGE_PIN "F7"   [get_ports "Clk2V5NorthPxCO"]
+#set_property PACKAGE_PIN "E7"   [get_ports "Clk2V5NorthNxCO"]
+#set_property PACKAGE_PIN "F5"   [get_ports "Clk2V5WestPxCO"]
+#set_property PACKAGE_PIN "E5"   [get_ports "Clk2V5WestNxCO"]
+# Bank 34
+#set_property PACKAGE_PIN "P7"   [get_ports "Clk2V5TopPxCO"]
+#set_property PACKAGE_PIN "R7"   [get_ports "Clk2V5TopNxCO"]
+#set_property PACKAGE_PIN "M4"   [get_ports "Clk2V5BottomPxCO"]
+#set_property PACKAGE_PIN "M3"   [get_ports "Clk2V5BottomNxCO"]
+# Bank 13
+#set_property PACKAGE_PIN "AB16" [get_ports "Clk2V5SouthPxCO"]
+#set_property PACKAGE_PIN "AB17" [get_ports "Clk2V5SouthNxCO"]
+#set_property PACKAGE_PIN "AB21" [get_ports "Clk2V5EastPxCO"]
+#set_property PACKAGE_PIN "AB22" [get_ports "Clk2V5EastNxCO"]
+
+############################################################################
+# Other constraints                                                        #
+############################################################################
+
+##### Operating conditions (for XPE report) #####
+# Extended grade (as for -2 speed grade) and maximum consumption estimation
+set_operating_conditions -grade extended -process maximum
+# 4'' by 4'' PCB, no heatsink, no air flow
+set_operating_conditions -airflow 0 -heatsink none -board small
+
+
+
+
+
+
+
+
+
+
+
diff --git a/designs/vivado/scalp_router_firmware/2020.2/src/constrs/timing_constraints.xdc b/designs/vivado/scalp_router_firmware/2020.2/src/constrs/timing_constraints.xdc
new file mode 100644
index 0000000000000000000000000000000000000000..c646d10e2ccd5e104700a879f84a8d780765d6bb
--- /dev/null
+++ b/designs/vivado/scalp_router_firmware/2020.2/src/constrs/timing_constraints.xdc
@@ -0,0 +1,36 @@
+############################################################################
+# Timing constraints                                                       #
+############################################################################
+
+##### PS_CLK (125 MHz) #####
+create_clock -period 8.000 -waveform {0.000 4.000} [get_ports PSClkxCIO]
+
+##### GTP reference clocks (125 MHz) #####
+create_clock -period 8.000 -waveform {0.000 4.000} [get_nets GTPRefClk0PxCI]
+#create_clock -period 8.000 -waveform {0.000 4.000} [get_nets GTPRefClk1xC]
+
+##### Clocks from PLLs (125 MHz) #####
+#create_clock -period 8.000 -waveform {0.000 4.000} [get_nets {PLL_Clk_in_Local}]
+#create_clock -period 8.000 -waveform {0.000 4.000} [get_nets {PLL_Clk_in_North}]
+#create_clock -period 8.000 -waveform {0.000 4.000} [get_nets {PLL_Clk_in_South}]
+#create_clock -period 8.000 -waveform {0.000 4.000} [get_nets {PLL_Clk_in_Top}]
+#create_clock -period 8.000 -waveform {0.000 4.000} [get_nets {PLL_Clk_in_Bottom}]
+
+##### Clocks from neighbours (125 MHz) #####
+#create_clock -period 8.000 -waveform {0.000 4.000} [get_nets {Clk_in_North}]
+#create_clock -period 8.000 -waveform {0.000 4.000} [get_nets {Clk_in_South}]
+#create_clock -period 8.000 -waveform {0.000 4.000} [get_nets {Clk_in_East}]
+#create_clock -period 8.000 -waveform {0.000 4.000} [get_nets {Clk_in_West}]
+#create_clock -period 8.000 -waveform {0.000 4.000} [get_nets {Clk_in_Top}]
+#create_clock -period 8.000 -waveform {0.000 4.000} [get_nets {Clk_in_Bottom}]
+
+
+
+
+
+
+
+
+
+
+
diff --git a/designs/vivado/scalp_router_firmware/2020.2/src/hdl/reset_delay_gen.vhd b/designs/vivado/scalp_router_firmware/2020.2/src/hdl/reset_delay_gen.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..573ada50011993dde0c31c9609c9aee94f684c5b
--- /dev/null
+++ b/designs/vivado/scalp_router_firmware/2020.2/src/hdl/reset_delay_gen.vhd
@@ -0,0 +1,68 @@
+----------------------------------------------------------------------------------
+--                                 _             _
+--                                | |_  ___ _ __(_)__ _
+--                                | ' \/ -_) '_ \ / _` |
+--                                |_||_\___| .__/_\__,_|
+--                                         |_|
+--
+----------------------------------------------------------------------------------
+--
+-- Company: hepia
+-- Author: Joachim Schmidt <joachim.schmidt@hesge.ch>
+--
+-- Module Name: reset_delay_gen - behavioral
+-- Target Device: SCALP xc7z015clg485-2
+-- Tool version: 2020.2
+-- Description: Reset Delay Generator
+--
+-- Last update: 2020-10-12
+--
+---------------------------------------------------------------------------------
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use ieee.std_logic_unsigned.all;
+use ieee.std_logic_misc.all;
+
+library UNISIM;
+use UNISIM.VCOMPONENTS.all;
+
+entity reset_delay_gen is
+
+    generic (
+        C_TICKS : integer := 10);
+
+    port (
+        ClkxCI          : in  std_ulogic;
+        PllLockedxSI    : in  std_ulogic;
+        ResetxRI        : in  std_ulogic;
+        ResetDelayedxRO : out std_ulogic);
+
+end entity reset_delay_gen;
+
+architecture behavioral of reset_delay_gen is
+
+    -- Signals
+    signal ResetDelayxRD : std_ulogic_vector((C_TICKS - 1) downto 0) := (others => '1');
+
+begin  -- architecture behavioral
+
+    -- Asynchronous statements
+
+    ResetDelayedxAS : ResetDelayedxRO <= ResetDelayxRD(C_TICKS - 1);
+
+    -- Synchronous statements
+
+    ResetDelayGenxP : process (ClkxCI) is
+    begin  -- process ResetDelayGenxP
+        if rising_edge(ClkxCI) then
+            if PllLockedxSI = '0' then
+                ResetDelayxRD <= (others => '1');
+            elsif PllLockedxSI = '1' then
+                ResetDelayxRD <= ResetDelayxRD((C_TICKS - 2) downto 0) & ResetxRI;
+            end if;
+        end if;
+    end process ResetDelayGenxP;
+
+end architecture behavioral;
diff --git a/designs/vivado/scalp_router_firmware/2020.2/src/hdl/scalp_router_firmware.vhd b/designs/vivado/scalp_router_firmware/2020.2/src/hdl/scalp_router_firmware.vhd
index f7ca1d5869010ded3ce574f35ceb2736f6ad071b..2dd4c4ec09cdabfe17096e9826986510507df286 100644
--- a/designs/vivado/scalp_router_firmware/2020.2/src/hdl/scalp_router_firmware.vhd
+++ b/designs/vivado/scalp_router_firmware/2020.2/src/hdl/scalp_router_firmware.vhd
@@ -15,7 +15,7 @@
 -- Tool version: 2020.2
 -- Description: scalp_router_firmware
 --
--- Last update: 2021-06-08 14:56:43
+-- Last update: 2021-06-08
 --
 ---------------------------------------------------------------------------------
 
@@ -23,12 +23,1365 @@ library ieee;
 use ieee.std_logic_1164.all;
 use ieee.numeric_std.all;
 
+library work;
+-- Aurora packages
+use work.aurora_status_pkg.all;
+use work.aurora_drp_pkg.all;
+-- Axi4 packages
+use work.axi4_pkg.all;
+-- Scalp
+use work.scalp_misc.all;
+use work.scalp_utility.all;
+--use work.scalp_sim_packets.all;
+
+library unisim;
+use unisim.vcomponents.all;
+
 entity scalp_router_firmware is
+
+    generic (
+        C_USE_IBERT                 : boolean                := false;
+        C_DEBUG_MODE                : boolean                := false;
+        C_RX_FIFO_MODE              : boolean                := true;
+        C_SCALP_NUMBER_OF_INTERFACE : integer range 0 to 255 := 7;
+        C_SCALP_SCHEDULER_STRATEGY  : string                 := "RR");
+
+    port (
+        -----------------------------------------------------------------------
+        -- Names defined and not described in the constraint file.
+        -----------------------------------------------------------------------
+        -- Zynq FIXED_IO
+        PSClkxCIO          : inout std_logic;
+        PSSRstxRNIO        : inout std_logic;
+        PSPorxSNIO         : inout std_logic;
+        -- DDR interface
+        DDRClkNxCIO        : inout std_logic;
+        DDRClkPxCIO        : inout std_logic;
+        DDRDRstxRNIO       : inout std_logic;
+        DDRCasNxSIO        : inout std_logic;
+        DDRCkexSIO         : inout std_logic;
+        DDRCsNxSIO         : inout std_logic;
+        DDROdtxSIO         : inout std_logic;
+        DDRRasNxSIO        : inout std_logic;
+        DDRWexSNIO         : inout std_logic;
+        DDRBankAddrxDIO    : inout std_logic_vector(2 downto 0);
+        DDRAddrxDIO        : inout std_logic_vector(14 downto 0);
+        DDRVrNxSIO         : inout std_logic;
+        DDRVrPxSIO         : inout std_logic;
+        DDRDmxDIO          : inout std_logic_vector(3 downto 0);
+        DDRDqxDIO          : inout std_logic_vector(31 downto 0);
+        DDRDqsNxDIO        : inout std_logic_vector(3 downto 0);
+        DDRDqsPxDIO        : inout std_logic_vector(3 downto 0);
+        -- MIO Interface
+        MIOxDIO            : inout std_logic_vector(53 downto 0);
+        -----------------------------------------------------------------------
+        -- USB signals
+        UsbVbusPwrFaultxSI : in    std_logic;
+        -- PLL interface
+        Pll2V5ClkuWirexCO  : out   std_logic;  -- Clock (from SPI1_SCLK)
+        Pll2V5DatauWirexSO : out   std_logic;  -- Data (from SPI1_MOSI)
+        Pll2V5LEuWirexSO   : out   std_logic;  -- Latch enable (from SPI1_SS)
+        Pll2V5GOExSO       : out   std_logic;  -- Global Output Enable
+        Pll2V5LDxSI        : in    std_logic;  -- Lock Detect
+        Pll2V5SyncxSO      : out   std_logic;  -- Sync
+        Pll2V5ClkIn0LOSxSI : in    std_logic;  -- FPGA clock Loss of Sync
+        Pll2V5ClkIn1LOSxSI : in    std_logic;  -- External oscillator Loss of Sync
+        -- GTP interfaces
+        -- Clocks
+        GTPRefClk0PxCI     : in    std_logic;
+        GTPRefClk0NxCI     : in    std_logic;
+        GTPRefClk1PxCI     : in    std_logic;
+        GTPRefClk1NxCI     : in    std_logic;
+        -- North
+        GTPFromNorthPxSI   : in    std_logic;
+        GTPFromNorthNxSI   : in    std_logic;
+        GTPToNorthPxSO     : out   std_logic;
+        GTPToNorthNxSO     : out   std_logic;
+        -- East
+        GTPFromEastPxSI    : in    std_logic;
+        GTPFromEastNxSI    : in    std_logic;
+        GTPToEastPxSO      : out   std_logic;
+        GTPToEastNxSO      : out   std_logic;
+        -- South
+        GTPFromSouthPxSI   : in    std_logic;
+        GTPFromSouthNxSI   : in    std_logic;
+        GTPToSouthPxSO     : out   std_logic;
+        GTPToSouthNxSO     : out   std_logic;
+        -- West
+        GTPFromWestPxSI    : in    std_logic;
+        GTPFromWestNxSI    : in    std_logic;
+        GTPToWestPxSO      : out   std_logic;
+        GTPToWestNxSO      : out   std_logic;
+        -- LVDS links towards edge connectors
+        -- North
+        -- LVDS2V5North0PxSIO  : inout std_logic;
+        -- LVDS2V5North0NxSIO  : inout std_logic;
+        -- LVDS2V5North1PxSIO  : inout std_logic;
+        -- LVDS2V5North1NxSIO  : inout std_logic;
+        -- LVDS2V5North2PxSIO  : inout std_logic;
+        -- LVDS2V5North2NxSIO  : inout std_logic;
+        -- LVDS2V5North3PxSIO  : inout std_logic;
+        -- LVDS2V5North3NxSIO  : inout std_logic;
+        -- LVDS2V5North4PxSIO  : inout std_logic;
+        -- LVDS2V5North4NxSIO  : inout std_logic;
+        -- LVDS2V5North5PxSIO  : inout std_logic;
+        -- LVDS2V5North5NxSIO  : inout std_logic;
+        -- LVDS2V5North6PxSIO  : inout std_logic;
+        -- LVDS2V5North6NxSIO  : inout std_logic;
+        -- LVDS2V5North7PxSIO  : inout std_logic;
+        -- LVDS2V5North7NxSIO  : inout std_logic;
+        -- South
+        -- LVDS2V5South0PxSIO  : inout std_logic;
+        -- LVDS2V5South0NxSIO  : inout std_logic;
+        -- LVDS2V5South1PxSIO  : inout std_logic;
+        -- LVDS2V5South1NxSIO  : inout std_logic;
+        -- LVDS2V5South2PxSIO  : inout std_logic;
+        -- LVDS2V5South2NxSIO  : inout std_logic;
+        -- LVDS2V5South3PxSIO  : inout std_logic;
+        -- LVDS2V5South3NxSIO  : inout std_logic;
+        -- LVDS2V5South4PxSIO  : inout std_logic;
+        -- LVDS2V5South4NxSIO  : inout std_logic;
+        -- LVDS2V5South5PxSIO  : inout std_logic;
+        -- LVDS2V5South5NxSIO  : inout std_logic;
+        -- LVDS2V5South6PxSIO  : inout std_logic;
+        -- LVDS2V5South6NxSIO  : inout std_logic;
+        -- LVDS2V5South7PxSIO  : inout std_logic;
+        -- LVDS2V5South7NxSIO  : inout std_logic;
+        -- East
+        -- LVDS2V5East0PxSIO   : inout std_logic;
+        -- LVDS2V5East0NxSIO   : inout std_logic;
+        -- LVDS2V5East1PxSIO   : inout std_logic;
+        -- LVDS2V5East1NxSIO   : inout std_logic;
+        -- LVDS2V5East2PxSIO   : inout std_logic;
+        -- LVDS2V5East2NxSIO   : inout std_logic;
+        -- LVDS2V5East3PxSIO   : inout std_logic;
+        -- LVDS2V5East3NxSIO   : inout std_logic;
+        -- LVDS2V5East4PxSIO   : inout std_logic;
+        -- LVDS2V5East4NxSIO   : inout std_logic;
+        -- LVDS2V5East5PxSIO   : inout std_logic;
+        -- LVDS2V5East5NxSIO   : inout std_logic;
+        -- LVDS2V5East6PxSIO   : inout std_logic;
+        -- LVDS2V5East6NxSIO   : inout std_logic;
+        -- LVDS2V5East7PxSIO   : inout std_logic;
+        -- LVDS2V5East7NxSIO   : inout std_logic;
+        -- West
+        -- LVDS2V5West0PxSIO   : inout std_logic;
+        -- LVDS2V5West0NxSIO   : inout std_logic;
+        -- LVDS2V5West1PxSIO   : inout std_logic;
+        -- LVDS2V5West1NxSIO   : inout std_logic;
+        -- LVDS2V5West2PxSIO   : inout std_logic;
+        -- LVDS2V5West2NxSIO   : inout std_logic;
+        -- LVDS2V5West3PxSIO   : inout std_logic;
+        -- LVDS2V5West3NxSIO   : inout std_logic;
+        -- LVDS2V5West4PxSIO   : inout std_logic;
+        -- LVDS2V5West4NxSIO   : inout std_logic;
+        -- LVDS2V5West5PxSIO   : inout std_logic;
+        -- LVDS2V5West5NxSIO   : inout std_logic;
+        -- LVDS2V5West6PxSIO   : inout std_logic;
+        -- LVDS2V5West6NxSIO   : inout std_logic;
+        -- LVDS2V5West7PxSIO   : inout std_logic;
+        -- LVDS2V5West7NxSIO   : inout std_logic;
+        -- LVDS links towards top-bottom connectors
+        -- Top
+        -- LVDS2V5Top0PxSIO    : inout std_logic;
+        -- LVDS2V5Top0NxSIO    : inout std_logic;
+        -- LVDS2V5Top1PxSIO    : inout std_logic;
+        -- LVDS2V5Top1NxSIO    : inout std_logic;
+        -- LVDS2V5Top2PxSIO    : inout std_logic;
+        -- LVDS2V5Top2NxSIO    : inout std_logic;
+        -- LVDS2V5Top3PxSIO    : inout std_logic;
+        -- LVDS2V5Top3NxSIO    : inout std_logic;
+        -- LVDS2V5Top4PxSIO    : inout std_logic;
+        -- LVDS2V5Top4NxSIO    : inout std_logic;
+        -- LVDS2V5Top5PxSIO    : inout std_logic;
+        -- LVDS2V5Top5NxSIO    : inout std_logic;
+        -- LVDS2V5Top6PxSIO    : inout std_logic;
+        -- LVDS2V5Top6NxSIO    : inout std_logic;
+        -- LVDS2V5Top7PxSIO    : inout std_logic;
+        -- LVDS2V5Top7NxSIO    : inout std_logic;
+        -- Bottom
+        -- LVDS2V5Bottom0PxSIO : inout std_logic;
+        -- LVDS2V5Bottom0NxSIO : inout std_logic;
+        -- LVDS2V5Bottom1PxSIO : inout std_logic;
+        -- LVDS2V5Bottom1NxSIO : inout std_logic;
+        -- LVDS2V5Bottom2PxSIO : inout std_logic;
+        -- LVDS2V5Bottom2NxSIO : inout std_logic;
+        -- LVDS2V5Bottom3PxSIO : inout std_logic;
+        -- LVDS2V5Bottom3NxSIO : inout std_logic;
+        -- LVDS2V5Bottom4PxSIO : inout std_logic;
+        -- LVDS2V5Bottom4NxSIO : inout std_logic;
+        -- LVDS2V5Bottom5PxSIO : inout std_logic;
+        -- LVDS2V5Bottom5NxSIO : inout std_logic;
+        -- LVDS2V5Bottom6PxSIO : inout std_logic;
+        -- LVDS2V5Bottom6NxSIO : inout std_logic;
+        -- LVDS2V5Bottom7PxSIO : inout std_logic;
+        -- LVDS2V5Bottom7NxSIO : inout std_logic;
+        -- RGB LEDs
+        Led12V5RxSO        : out   std_logic;
+        Led12V5GxSO        : out   std_logic;
+        Led12V5BxSO        : out   std_logic;
+        Led22V5RxSO        : out   std_logic;
+        Led22V5GxSO        : out   std_logic;
+        Led22V5BxSO        : out   std_logic;
+        -- Self reset (connected to PS_SRSTB)
+        SelfRstxRNO        : out   std_logic);
+    -- Clocks from PLLs (connected to MRCC pins)
+    -- Local
+    -- PLLClk2V5LocalPxCI  : in    std_logic;
+    -- PLLClk2V5LocalNxCI  : in    std_logic;
+    -- -- North
+    -- PLLClk2V5NorthPxCI  : in    std_logic;
+    -- PLLClk2V5NorthNxCI  : in    std_logic;
+    -- -- South
+    -- PLLClk2V5SouthPxCI  : in    std_logic;
+    -- PLLClk2V5SouthNxCI  : in    std_logic;
+    -- -- Top
+    -- PLLClk2V5TopxCI     : in    std_logic;  -- Single-ended
+    -- -- Bottom
+    -- PLLClk2V5BottomxCI  : in    std_logic;  -- Single-ended
+    -- -- Clocks to/from neighbours
+    -- -- North
+    -- Clk2V5NorthPxCI     : in    std_logic;
+    -- Clk2V5NorthNxCI     : in    std_logic;
+    -- Clk2V5NorthPxCO     : out   std_logic;
+    -- Clk2V5NorthNxCO     : out   std_logic;
+    -- -- South
+    -- Clk2V5SouthPxCI     : in    std_logic;
+    -- Clk2V5SouthNxCI     : in    std_logic;
+    -- Clk2V5SouthPxCO     : out   std_logic;
+    -- Clk2V5SouthNxCO     : out   std_logic;
+    -- -- East
+    -- Clk2V5EastPxCI      : in    std_logic;
+    -- Clk2V5EastNxCI      : in    std_logic;
+    -- Clk2V5EastPxCO      : out   std_logic;
+    -- Clk2V5EastNxCO      : out   std_logic;
+    -- -- West
+    -- Clk2V5WestPxCI      : in    std_logic;
+    -- Clk2V5WestNxCI      : in    std_logic;
+    -- Clk2V5WestPxCO      : out   std_logic;
+    -- Clk2V5WestNxCO      : out   std_logic;
+    -- -- Top
+    -- Clk2V5TopPxCI       : in    std_logic;
+    -- Clk2V5TopNxCI       : in    std_logic;
+    -- Clk2V5TopPxCO       : out   std_logic;
+    -- Clk2V5TopNxCO       : out   std_logic;
+    -- -- Bottom
+    -- Clk2V5BottomPxCI    : in    std_logic;
+    -- Clk2V5BottomNxCI    : in    std_logic;
+    -- Clk2V5BottomPxCO    : out   std_logic;
+    -- Clk2V5BottomNxCO    : out   std_logic;
+    -- -- Recovery
+    -- Clk2V5RecoveryPxCO  : out   std_logic;
+    -- Clk2V5RecoveryNxCO  : out   std_logic);
+
 end scalp_router_firmware;
 
 
 architecture arch of scalp_router_firmware is
 
+    -- Constantes
+    -- constant C_PS_SYS_RESET_SIZE : integer range 0 to 7 := 1;
+    constant C_AXI_ADDR_SIZE : integer range 0 to 32 := 12;
+
+    component scalp_aurora_phy is
+        generic (
+            C_DEBUG_MODE   : boolean;
+            C_RX_FIFO_MODE : boolean);
+        port (
+            GTRefClkxCI          : in  t_gt_ref_slave_clk;
+            AuroraClkxCI         : in  t_aurora_slave_clk;
+            AuroraClkxCO         : out t_aurora_master_clk;
+            AuroraResetxRI       : in  t_aurora_slave_reset;
+            AuroraResetxRO       : out t_aurora_master_link_reset;
+            RXResetxRI           : in  t_rx_reset;
+            RXFifoResetDonexDO   : out t_rx_fifo_reset_done;
+            GTPFromNorthxDI      : in  t_aurora_gtp_diff_io_rx;
+            GTPToNorthxDO        : out t_aurora_gtp_diff_io_tx;
+            GTPFromEastxDI       : in  t_aurora_gtp_diff_io_rx;
+            GTPToEastxDO         : out t_aurora_gtp_diff_io_tx;
+            GTPFromSouthxDI      : in  t_aurora_gtp_diff_io_rx;
+            GTPToSouthxDO        : out t_aurora_gtp_diff_io_tx;
+            GTPFromWestxDI       : in  t_aurora_gtp_diff_io_rx;
+            GTPToWestxDO         : out t_aurora_gtp_diff_io_tx;
+            NorthRXM2SxDO        : out t_axi4m2s;
+            NorthRXS2MxDI        : in  t_axi4s2m;
+            NorthTXM2SxDI        : in  t_axi4m2s;
+            NorthTXS2MxDO        : out t_axi4s2m;
+            EastRXM2SxDO         : out t_axi4m2s;
+            EastRXS2MxDI         : in  t_axi4s2m;
+            EastTXM2SxDI         : in  t_axi4m2s;
+            EastTXS2MxDO         : out t_axi4s2m;
+            SouthRXM2SxDO        : out t_axi4m2s;
+            SouthRXS2MxDI        : in  t_axi4s2m;
+            SouthTXM2SxDI        : in  t_axi4m2s;
+            SouthTXS2MxDO        : out t_axi4s2m;
+            WestRXM2SxDO         : out t_axi4m2s;
+            WestRXS2MxDI         : in  t_axi4s2m;
+            WestTXM2SxDI         : in  t_axi4m2s;
+            WestTXS2MxDO         : out t_axi4s2m;
+            NorthRXUFCM2SxDO     : out t_axi4ufcm2s_rx;
+            NorthTXUFCM2SxDI     : in  t_axi4ufcm2s_tx;
+            NorthTXUFCS2MxDO     : out t_axi4ufcs2m_tx;
+            EastRXUFCM2SxDO      : out t_axi4ufcm2s_rx;
+            EastTXUFCM2SxDI      : in  t_axi4ufcm2s_tx;
+            EastTXUFCS2MxDO      : out t_axi4ufcs2m_tx;
+            SouthRXUFCM2SxDO     : out t_axi4ufcm2s_rx;
+            SouthTXUFCM2SxDI     : in  t_axi4ufcm2s_tx;
+            SouthTXUFCS2MxDO     : out t_axi4ufcs2m_tx;
+            WestRXUFCM2SxDO      : out t_axi4ufcm2s_rx;
+            WestTXUFCM2SxDI      : in  t_axi4ufcm2s_tx;
+            WestTXUFCS2MxDO      : out t_axi4ufcs2m_tx;
+            NorthRXNFCM2SxDO     : out t_axi4nfcm2s;
+            NorthTXNFCM2SxDI     : in  t_axi4nfcm2s;
+            NorthTXNFCS2MxDO     : out t_axi4nfcs2m;
+            EastRXNFCM2SxDO      : out t_axi4nfcm2s;
+            EastTXNFCM2SxDI      : in  t_axi4nfcm2s;
+            EastTXNFCS2MxDO      : out t_axi4nfcs2m;
+            SouthRXNFCM2SxDO     : out t_axi4nfcm2s;
+            SouthTXNFCM2SxDI     : in  t_axi4nfcm2s;
+            SouthTXNFCS2mxDO     : out t_axi4nfcs2m;
+            WestRXNFCM2SxDO      : out t_axi4nfcm2s;
+            WestTXNFCM2SxDI      : in  t_axi4nfcm2s;
+            WestTXNFCS2MxDO      : out t_axi4nfcs2m;
+            AuroraCtrlxDI        : in  t_aurora_control;
+            AuroraStatusxDO      : out t_aurora_status;
+            AuroraDRPM2SxDI      : in  t_drpm2s_vector((C_NB_GTP_CORE - 1) downto 0);
+            AuroraDRPS2MxDO      : out t_drps2m_vector((C_NB_GTP_CORE - 1) downto 0);
+            NorthRXFifoStatusxDO : out t_axi4fifo_status;
+            EastRXFifoStatusxDO  : out t_axi4fifo_status;
+            SouthRXFifoStatusxDO : out t_axi4fifo_status;
+            WestRXFifoStatusxDO  : out t_axi4fifo_status;
+            AxisFifoErrorxDO     : out t_axi4fifo_error);
+    end component scalp_aurora_phy;
+
+    -- Signals
+    -- Clocks
+    -- Processing system clock
+    signal PSSysClkxC               : std_logic                                                      := '0';
+    -- GTP Clocks
+    -- signal GTPRefClk0xC : std_logic := '0';
+    -- signal GTPRefClk1xC : std_logic := '0';
+    signal GTRefClk0DiffxC          : t_gtp_diff_ref_clk                                             := C_NO_GTP_DIFF_REF_CLK;
+    signal GTRefClk1DiffxC          : t_gtp_diff_ref_clk                                             := C_NO_GTP_DIFF_REF_CLK;
+    -- Resets
+    -- Processing system reset
+    signal PSSysResetxR             : std_logic                                                      := '0';
+    -- Scalp Aurora Phy
+    signal GTRefClk0xC              : t_gt_ref_slave_clk                                             := C_GT_REF_NO_SLAVE_CLK;
+    signal GTRefClk1xC              : t_gt_ref_slave_clk                                             := C_GT_REF_NO_SLAVE_CLK;
+    signal AuroraClkSlavexC         : t_aurora_slave_clk                                             := C_AURORA_NO_SLAVE_CLK;
+    signal AuroraClkMasterxC        : t_aurora_master_clk                                            := C_AURORA_NO_MASTER_CLK;
+    signal AuroraResetSlavexR       : t_aurora_slave_reset                                           := C_AURORA_NO_SLAVE_RESET;
+    signal AuroraResetMasterLinkxR  : t_aurora_master_link_reset                                     := C_AURORA_NO_MASTER_LINK_RESET;
+    signal RXResetxR                : t_rx_reset                                                     := C_NO_RX_RESET;
+    signal RXFifoResetDonexD        : t_rx_fifo_reset_done                                           := C_NO_RX_FIFO_RESET_DONE;
+    signal RXFifoResetDoneDelayedxD : t_rx_fifo_reset_done                                           := C_NO_RX_FIFO_RESET_DONE;
+    signal GTPFromNorthxD           : t_aurora_gtp_diff_io_rx                                        := C_AURORA_NO_GTP_DIFF_IO_RX;
+    signal GTPToNorthxD             : t_aurora_gtp_diff_io_tx                                        := C_AURORA_NO_GTP_DIFF_IO_TX;
+    signal GTPFromEastxD            : t_aurora_gtp_diff_io_rx                                        := C_AURORA_NO_GTP_DIFF_IO_RX;
+    signal GTPToEastxD              : t_aurora_gtp_diff_io_tx                                        := C_AURORA_NO_GTP_DIFF_IO_TX;
+    signal GTPFromSouthxD           : t_aurora_gtp_diff_io_rx                                        := C_AURORA_NO_GTP_DIFF_IO_RX;
+    signal GTPToSouthxD             : t_aurora_gtp_diff_io_tx                                        := C_AURORA_NO_GTP_DIFF_IO_TX;
+    signal GTPFromWestxD            : t_aurora_gtp_diff_io_rx                                        := C_AURORA_NO_GTP_DIFF_IO_RX;
+    signal GTPToWestxD              : t_aurora_gtp_diff_io_tx                                        := C_AURORA_NO_GTP_DIFF_IO_TX;
+    signal NorthRXM2SxD             : t_axi4m2s                                                      := C_NO_AXI4_M2S;
+    signal NorthRXS2MxD             : t_axi4s2m                                                      := C_NO_AXI4_S2M;
+    signal NorthTXM2SxD             : t_axi4m2s                                                      := C_NO_AXI4_M2S;
+    signal NorthTXS2MxD             : t_axi4s2m                                                      := C_NO_AXI4_S2M;
+    signal EastRXM2SxD              : t_axi4m2s                                                      := C_NO_AXI4_M2S;
+    signal EastRXS2MxD              : t_axi4s2m                                                      := C_NO_AXI4_S2M;
+    signal EastTXM2SxD              : t_axi4m2s                                                      := C_NO_AXI4_M2S;
+    signal EastTXS2MxD              : t_axi4s2m                                                      := C_NO_AXI4_S2M;
+    signal SouthRXM2SxD             : t_axi4m2s                                                      := C_NO_AXI4_M2S;
+    signal SouthRXS2MxD             : t_axi4s2m                                                      := C_NO_AXI4_S2M;
+    signal SouthTXM2SxD             : t_axi4m2s                                                      := C_NO_AXI4_M2S;
+    signal SouthTXS2MxD             : t_axi4s2m                                                      := C_NO_AXI4_S2M;
+    signal WestRXM2SxD              : t_axi4m2s                                                      := C_NO_AXI4_M2S;
+    signal WestRXS2MxD              : t_axi4s2m                                                      := C_NO_AXI4_S2M;
+    signal WestTXM2SxD              : t_axi4m2s                                                      := C_NO_AXI4_M2S;
+    signal WestTXS2MxD              : t_axi4s2m                                                      := C_NO_AXI4_S2M;
+    signal NorthRXUFCM2SxD          : t_axi4ufcm2s_rx                                                := C_NO_AXI4_UFC_M2S_RX;
+    signal NorthTXUFCM2SxD          : t_axi4ufcm2s_tx                                                := C_NO_AXI4_UFC_M2S_TX;
+    signal NorthTXUFCS2MxD          : t_axi4ufcs2m_tx                                                := C_NO_AXI4_UFC_S2M_TX;
+    signal EastRXUFCM2SxD           : t_axi4ufcm2s_rx                                                := C_NO_AXI4_UFC_M2S_RX;
+    signal EastTXUFCM2SxD           : t_axi4ufcm2s_tx                                                := C_NO_AXI4_UFC_M2S_TX;
+    signal EastTXUFCS2MxD           : t_axi4ufcs2m_tx                                                := C_NO_AXI4_UFC_S2M_TX;
+    signal SouthRXUFCM2SxD          : t_axi4ufcm2s_rx                                                := C_NO_AXI4_UFC_M2S_RX;
+    signal SouthTXUFCM2SxD          : t_axi4ufcm2s_tx                                                := C_NO_AXI4_UFC_M2S_TX;
+    signal SouthTXUFCS2MxD          : t_axi4ufcs2m_tx                                                := C_NO_AXI4_UFC_S2M_TX;
+    signal WestRXUFCM2SxD           : t_axi4ufcm2s_rx                                                := C_NO_AXI4_UFC_M2S_RX;
+    signal WestTXUFCM2SxD           : t_axi4ufcm2s_tx                                                := C_NO_AXI4_UFC_M2S_TX;
+    signal WestTXUFCS2MxD           : t_axi4ufcs2m_tx                                                := C_NO_AXI4_UFC_S2M_TX;
+    signal NorthRXNFCM2SxD          : t_axi4nfcm2s                                                   := C_NO_AXI4_NFC_M2S;
+    signal NorthTXNFCM2SxD          : t_axi4nfcm2s                                                   := C_NO_AXI4_NFC_M2S;
+    signal NorthTXNFCS2MxD          : t_axi4nfcs2m                                                   := C_NO_AXI4_NFC_S2M;
+    signal EastRXNFCM2SxD           : t_axi4nfcm2s                                                   := C_NO_AXI4_NFC_M2S;
+    signal EastTXNFCM2SxD           : t_axi4nfcm2s                                                   := C_NO_AXI4_NFC_M2S;
+    signal EastTXNFCS2MxD           : t_axi4nfcs2m                                                   := C_NO_AXI4_NFC_S2M;
+    signal SouthRXNFCM2SxD          : t_axi4nfcm2s                                                   := C_NO_AXI4_NFC_M2S;
+    signal SouthTXNFCM2SxD          : t_axi4nfcm2s                                                   := C_NO_AXI4_NFC_M2S;
+    signal SouthTXNFCS2MxD          : t_axi4nfcs2m                                                   := C_NO_AXI4_NFC_S2M;
+    signal WestRXNFCM2SxD           : t_axi4nfcm2s                                                   := C_NO_AXI4_NFC_M2S;
+    signal WestTXNFCM2SxD           : t_axi4nfcm2s                                                   := C_NO_AXI4_NFC_M2S;
+    signal WestTXNFCS2MxD           : t_axi4nfcs2m                                                   := C_NO_AXI4_NFC_S2M;
+    signal AuroraCtrlxD             : t_aurora_control                                               := C_AURORA_NO_CONTROL;
+    signal AuroraStatusxD           : t_aurora_status                                                := C_AURORA_NO_STATUS;
+    signal AuroraDRPM2SxD           : t_drpm2s_vector((C_NB_GTP_CORE - 1) downto 0)                  := (others => C_NO_DRP_M2S);
+    signal AuroraDRPS2MxD           : t_drps2m_vector((C_NB_GTP_CORE - 1) downto 0)                  := (others => C_NO_DRP_S2M);
+    signal NorthRXFifoStatusxD      : t_axi4fifo_status                                              := C_NO_AXI4_FIFO_STATUS;
+    signal EastRXFifoStatusxD       : t_axi4fifo_status                                              := C_NO_AXI4_FIFO_STATUS;
+    signal SouthRXFifoStatusxD      : t_axi4fifo_status                                              := C_NO_AXI4_FIFO_STATUS;
+    signal WestRXFifoStatusxD       : t_axi4fifo_status                                              := C_NO_AXI4_FIFO_STATUS;
+    signal AxisFifoErrorxD          : t_axi4fifo_error                                               := C_NO_AXI4_FIFO_ERROR;
+    -- Scalp Router
+    signal LocNetAddrxD             : t_scalp_netaddr                                                := C_3D_MIN_SCALP_NETADDR;
+    signal RXAxism2sVectorxD        : t_axi4m2s_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)   := (others => C_NO_AXI4_M2S);
+    signal RXAxiss2mVectorxD        : t_axi4s2m_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)   := (others => C_NO_AXI4_S2M);
+    signal TXAxism2sVectorxD        : t_axi4m2s_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)   := (others => C_NO_AXI4_M2S);
+    signal TXAxiss2mVectorxD        : t_axi4s2m_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)   := (others => C_NO_AXI4_S2M);
+    signal QoSVectorxD              : t_scalp_qos_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0) := (others => C_SCALP_NO_QOS);
+    -- signal ScalpRouterReadyxD       : t_scalp_router_ready                                           := C_NO_SCALP_ROUTER_READY;
+    -- Scalp Axi Lite interface and IRQ
+    signal ScalpPacketWriteDataxD   : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0)             := (others => '0');
+    signal ScalpPacketReadDataxD    : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0)             := (others => '0');
+    signal ScalpPacketCtrlxD        : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0)             := (others => '0');
+    signal ScalpPacketStatusxD      : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0)             := (others => '0');
+    signal RXRdDataCntxD            : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0)             := (others => '0');
+    signal RXWrDataCntxD            : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0)             := (others => '0');
+    signal TXRdDataCntxD            : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0)             := (others => '0');
+    signal TXWrDataCntxD            : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0)             := (others => '0');
+    signal LocNetAddrVectxD         : std_ulogic_vector((C_AXI4_DATA_SIZE - 1) downto 0)             := (others => '0');
+    signal RXFifoStatusxD           : t_axi4fifo_status                                              := C_NO_AXI4_FIFO_STATUS;
+    signal TXFifoStatusxD           : t_axi4fifo_status                                              := C_NO_AXI4_FIFO_STATUS;
+    signal TXFifoRXM2SxD            : t_axi4m2s                                                      := C_NO_AXI4_M2S;
+    signal TXFifoRXS2MxS            : t_axi4s2m                                                      := C_NO_AXI4_S2M;
+    signal RXFifoTXM2SxD            : t_axi4m2s                                                      := C_NO_AXI4_M2S;
+    signal RXFifoTXS2MxS            : t_axi4s2m                                                      := C_NO_AXI4_S2M;
+    -- Zynq Reg Bank
+    -- type t_status_send_word is (E_IDLE, E_SEND);
+
+    type t_tx_fifo_wr_data_states is (E_WR_IDLE, E_WR_H0, E_WR_H1, E_WR_H2, E_WR_PLD, E_WR_NEXT);
+    type t_rx_fifo_rd_data_states is (E_RD_IDLE, E_RD_WORD, E_RD_NEXT);
+
+    constant C_WR_VALID       : integer range 0 to 255 := 0;
+    constant C_WR_LAST        : integer range 0 to 255 := 1;
+    constant C_WR_READY       : integer range 0 to 255 := 2;
+    constant C_WR_NEXT        : integer range 0 to 255 := 3;
+    constant C_RESET_ALL_FIFO : integer range 0 to 255 := 4;
+    constant C_WR_H0          : integer range 0 to 255 := 5;
+    constant C_WR_H1          : integer range 0 to 255 := 6;
+    constant C_WR_H2          : integer range 0 to 255 := 7;
+    constant C_WR_PLD         : integer range 0 to 255 := 8;
+    constant C_WR_NEW_PACKET  : integer range 0 to 255 := 9;
+    constant C_RD_NEXT        : integer range 0 to 255 := 10;
+    constant C_RD_NEW_PACKET  : integer range 0 to 255 := 11;
+    --
+    constant C_RD_VALID       : integer range 0 to 255 := 0;
+    constant C_RD_LAST        : integer range 0 to 255 := 1;
+    constant C_TX_PROG_FULL   : integer range 0 to 255 := 2;
+    constant C_RX_PROG_FULL   : integer range 0 to 255 := 3;
+    constant C_RD_WAIT_NEXT   : integer range 0 to 255 := 4;
+
+    signal TXFifoWrDataStatexD     : t_tx_fifo_wr_data_states := E_WR_IDLE;
+    signal TXFifoWrDataStateNextxD : t_tx_fifo_wr_data_states := E_WR_IDLE;
+    signal RXFifoRdDataStatexD     : t_rx_fifo_rd_data_states := E_RD_IDLE;
+    signal RXFifoRdDataStateNextxD : t_rx_fifo_rd_data_states := E_RD_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 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');
+    -- 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');
+    -- 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');
+    -- 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');
+    -- Debug
+    -- signal CntRstxR               : std_ulogic                                         := '0';
+    signal ClkEnxS                  : std_ulogic                                         := '0';
+    signal NorthDataCounterxDN      : unsigned(31 downto 0)                              := (others => '0');
+    signal NorthDataCounterxDP      : unsigned(31 downto 0)                              := (others => '0');
+    signal EastDataCounterxDN       : unsigned(31 downto 0)                              := (others => '0');
+    signal EastDataCounterxDP       : unsigned(31 downto 0)                              := (others => '0');
+    signal SouthDataCounterxDN      : unsigned(31 downto 0)                              := (others => '0');
+    signal SouthDataCounterxDP      : unsigned(31 downto 0)                              := (others => '0');
+    signal WestDataCounterxDN       : unsigned(31 downto 0)                              := (others => '0');
+    signal WestDataCounterxDP       : unsigned(31 downto 0)                              := (others => '0');
+    --
+    signal DebugCounterResetxR      : t_if_common_reset                                  := C_NO_IF_COMMON_RESET;
+    signal DebugRXFifoResetxR       : t_rx_fifo_reset                                    := C_NO_RX_FIFO_RESET;
+    signal DebugBackPressureResetxR : t_rx_back_pressure_reset                           := C_NO_RX_BACK_PRESSURE_RESET;
+
+    -- Attributes
+    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";
+    -- Scalp Router
+    -- attribute mark_debug of WestRXM2SxD       : signal is "true";
+    -- attribute keep of WestRXM2SxD             : signal is "true";
+    -- attribute mark_debug of WestRXS2MxD       : signal is "true";
+    -- attribute keep of WestRXS2MxD             : signal is "true";
+    -- attribute mark_debug of TXAxism2sVectorxD : signal is "true";
+    -- attribute keep of TXAxism2sVectorxD       : signal is "true";
+    -- attribute mark_debug of TXAxiss2mVectorxD : signal is "true";
+    -- attribute keep of TXAxiss2mVectorxD       : signal is "true";
+    -- attribute mark_debug of RXAxism2sVectorxD : signal is "true";
+    -- attribute keep of RXAxism2sVectorxD       : signal is "true";
+    -- attribute mark_debug of RXAxiss2mVectorxD : signal is "true";
+    -- attribute keep of RXAxiss2mVectorxD       : signal is "true";
+    -- attribute mark_debug of TXAxism2sVectorxD : signal is "true";
+    -- attribute keep of TXAxism2sVectorxD       : signal is "true";
+    -- attribute mark_debug of TXAxiss2mVectorxD : signal is "true";
+    -- attribute keep of TXAxiss2mVectorxD       : signal is "true";
+    -- attribute mark_debug of  : signal is "true";
+    -- attribute keep of        : signal is "true";
+    -- attribute mark_debug of  : signal is "true";
+    -- attribute keep of        : signal is "true";
+    -- attribute mark_debug of  : signal is "true";
+    -- attribute keep of        : signal is "true";
+    -- attribute mark_debug of  : signal is "true";
+    -- attribute keep of        : signal is "true";
+
 begin
 
+    ProcessingSystemxB : block is
+    begin  -- block ProcessingSystemxB
+
+        ZynqxI : entity work.scalp_zynqps_wrapper
+            port map (
+                -- Processor interface
+                FIXED_IO_ps_clk         => PSClkxCIO,
+                FIXED_IO_ps_porb        => PSPorxSNIO,
+                FIXED_IO_ps_srstb       => PSSRstxRNIO,
+                FclkClk0xCO             => PSSysClkxC,
+                FclkReset0xRO           => PSSysResetxR,
+                -- DDR interface
+                DDR_addr                => DDRAddrxDIO,
+                DDR_ba                  => DDRBankAddrxDIO,
+                DDR_cas_n               => DDRCasNxSIO,
+                DDR_ck_n                => DDRClkNxCIO,
+                DDR_ck_p                => DDRClkPxCIO,
+                DDR_cke                 => DDRCkexSIO,
+                DDR_cs_n                => DDRCsNxSIO,
+                DDR_dm                  => DDRDmxDIO,
+                DDR_dq                  => DDRDqxDIO,
+                DDR_dqs_n               => DDRDqsNxDIO,
+                DDR_dqs_p               => DDRDqsPxDIO,
+                DDR_odt                 => DDROdtxSIO,
+                DDR_ras_n               => DDRRasNxSIO,
+                DDR_reset_n             => DDRDRstxRNIO,
+                DDR_we_n                => DDRWexSNIO,
+                FIXED_IO_ddr_vrn        => DDRVrNxSIO,
+                FIXED_IO_ddr_vrp        => DDRVrPxSIO,
+                -- USB interface
+                Usb0VBusPwrFaultxSI     => UsbVbusPwrFaultxSI,
+                -- SPI1 used as uWire master. Clk, Data and LE signals are outputs
+                -- SPI1 inputs are unused. Clk is connected to SCLK, Data to MOSI and LE to SS
+                Spi1MOSIxSO             => Pll2V5DatauWirexSO,
+                Spi1SSxSO               => Pll2V5LEuWirexSO,
+                Spi1SclkxCO             => Pll2V5ClkuWirexCO,
+                -- MIO
+                FIXED_IO_mio            => MIOxDIO,
+                -- Scalp Axi Lite interface and IRQ
+                Irq0xDI                 => (others => '0'),
+                ScalpPacketWriteDataxDO => ScalpPacketWriteDataxD,
+                ScalpPacketReadDataxDI  => ScalpPacketReadDataxD,
+                ScalpPacketCtrlxDO      => ScalpPacketCtrlxD,
+                ScalpPacketStatusxDI    => ScalpPacketStatusxD,
+                RXRdDataCntxDI          => RXRdDataCntxD,
+                RXWrDataCntxDI          => RXWrDataCntxD,
+                TXRdDataCntxDI          => TXRdDataCntxD,
+                TXWrDataCntxDI          => TXWrDataCntxD,
+                LocNetAddrxDO           => LocNetAddrVectxD,
+                RgbLedsCtrlPortxDO      => open);
+
+    end block ProcessingSystemxB;
+
+    ProgrammableLogicxB : block is
+    begin  -- block ProgrammableLogicxB        
+
+        InputClocksxB : block is
+        begin  -- block InputClocksxB
+
+            GTPRefClk0PxAS : GTRefClk0DiffxC.ClkPxC <= GTPRefClk0PxCI;
+            GTPRefClk0NxAS : GTRefClk0DiffxC.ClkNxC <= GTPRefClk0NxCI;
+            -- GTPRefClk1PxAS : GTRefClk0DiffxC.ClkPxC <= GTPRefClk1PxCI;
+            -- GTPRefClk1NxAS : GTRefClk0DiffxC.ClkNxC <= GTPRefClk1NxCI;
+
+            -- GTP Clocks buffers
+            IBufDSGTPRefClk0xI : IBUFDS_GTE2
+                port map (
+                    I     => GTRefClk0DiffxC.ClkPxC,
+                    IB    => GTRefClk0DiffxC.ClkNxC,
+                    CEB   => '0',
+                    O     => GTRefClk0xC.GTRefClkxC,
+                    ODIV2 => open);
+
+            -- IBufDSGTPRefClk1xI : IBUFDS_GTE2
+            --     port map (
+            --         I     => GTRefClk0DiffxC.ClkPxC,
+            --         IB    => GTRefClk0DiffxC.ClkNxC,
+            --         CEB   => '0',
+            --         O     => GTRefClk1xCGTRefClkxC,
+            --         ODIV2 => open);
+
+        end block InputClocksxB;
+
+        PllClocksxB : block is
+
+            constant C_AURORA_RST_DLY_TICKS : integer := 25;
+            constant C_GT_RST_DLY_TICKS     : integer := 625;
+
+            signal PllLockedxS : std_ulogic := '0';
+
+        begin  -- block PllClocksxB
+
+            ScalpAuroraPllxI : entity work.scalp_aurora_clk
+                port map (
+                    -- Clock out ports  
+                    InitClkxCO   => AuroraClkSlavexC.InitClkxC,
+                    DrpClkxCO    => AuroraClkSlavexC.DrpClkxC,
+                    -- Status and control signals                
+                    reset        => PSSysResetxR,
+                    PllLockedxSO => PllLockedxS,
+                    -- Clock in ports
+                    PSSysClkxCI  => PSSysClkxC);
+
+            AuroraRstDlyxI : entity work.reset_delay_gen
+                generic map (
+                    C_TICKS => C_AURORA_RST_DLY_TICKS)
+                port map (
+                    ClkxCI          => AuroraClkSlavexC.InitClkxC,
+                    PllLockedxSI    => PllLockedxS,
+                    ResetxRI        => PSSysResetxR,
+                    ResetDelayedxRO => AuroraResetSlavexR.ResetxR);
+
+            GTRstDlyxI : entity work.reset_delay_gen
+                generic map (
+                    C_TICKS => C_GT_RST_DLY_TICKS)
+                port map (
+                    ClkxCI          => AuroraClkSlavexC.InitClkxC,
+                    PllLockedxSI    => PllLockedxS,
+                    ResetxRI        => PSSysResetxR,
+                    ResetDelayedxRO => AuroraResetSlavexR.GTResetxR);
+
+        end block PllClocksxB;
+
+        GTPhyxB : block is
+
+            constant C_RX_FIFO_RST_DONE_DLY_TICKS : integer := 100;
+
+        begin  -- block GTPhyxB
+
+            -- GTP
+            GTPFromNorthPxAS : GTPFromNorthxD.RXPxD(0) <= GTPFromNorthPxSI;
+            GTPFromNorthNxAS : GTPFromNorthxD.RXNxD(0) <= GTPFromNorthNxSI;
+            GTPToNorthPxAS   : GTPToNorthPxSO          <= GTPToNorthxD.TXPxD(0);
+            GTPToNorthNxAS   : GTPToNorthNxSO          <= GTPToNorthxD.TXNxD(0);
+            GTPFromEastPxAS  : GTPFromEastxD.RXPxD(0)  <= GTPFromEastPxSI;
+            GTPFromEastNxAS  : GTPFromEastxD.RXNxD(0)  <= GTPFromEastNxSI;
+            GTPToEastPxAS    : GTPToEastPxSO           <= GTPToEastxD.TXPxD(0);
+            GTPToEastNxAS    : GTPToEastNxSO           <= GTPToEastxD.TXNxD(0);
+            GTPFromSouthPxAS : GTPFromSouthxD.RXPxD(0) <= GTPFromSouthPxSI;
+            GTPFromSouthNxAS : GTPFromSouthxD.RXNxD(0) <= GTPFromSouthNxSI;
+            GTPToSouthPxAS   : GTPToSouthPxSO          <= GTPToSouthxD.TXPxD(0);
+            GTPToSouthNxAS   : GTPToSouthNxSO          <= GTPToSouthxD.TXNxD(0);
+            GTPFromWestPxAS  : GTPFromWestxD.RXPxD(0)  <= GTPFromWestPxSI;
+            GTPFromWestNxAS  : GTPFromWestxD.RXNxD(0)  <= GTPFromWestNxSI;
+            GTPToWestPxAS    : GTPToWestPxSO           <= GTPToWestxD.TXPxD(0);
+            GTPToWestNxAS    : GTPToWestNxSO           <= GTPToWestxD.TXNxD(0);
+
+            CtrlxB : block is
+            begin  -- block CtrlxB
+
+                PowerDownxAS : AuroraCtrlxD.PowerDownxS <= '0';
+                LoopbackxAS  : AuroraCtrlxD.LoopbackxD  <= (others => '0');
+
+            end block CtrlxB;
+
+            ScalpAuroraPhyxI : entity work.scalp_aurora_phy
+                generic map (
+                    C_DEBUG_MODE                 => C_DEBUG_MODE,
+                    C_RX_FIFO_MODE               => C_RX_FIFO_MODE,
+                    C_RX_FIFO_RST_DONE_DLY_TICKS => C_RX_FIFO_RST_DONE_DLY_TICKS)
+                port map (
+                    -- Clocks
+                    -- GTP Ref Clocks
+                    GTRefClkxCI               => GTRefClk0xC,
+                    -- Aurora System and GTP Clocks
+                    AuroraClkxCI              => AuroraClkSlavexC,
+                    AuroraClkxCO              => AuroraClkMasterxC,
+                    -- Reset
+                    -- Aurora Reset
+                    AuroraResetxRI            => AuroraResetSlavexR,
+                    AuroraResetxRO            => AuroraResetMasterLinkxR,
+                    -- RX Fifo and Back Pressure Reset
+                    RXResetxRI                => RXResetxR,
+                    RXFifoResetDonexDO        => RXFifoResetDonexD,
+                    RXFifoResetDoneDelayedxDO => RXFifoResetDoneDelayedxD,
+                    -- Back Pressure Reset
+                    -- GTP Serial IO
+                    -- North
+                    GTPFromNorthxDI           => GTPFromNorthxD,
+                    GTPToNorthxDO             => GTPToNorthxD,
+                    -- East
+                    GTPFromEastxDI            => GTPFromEastxD,
+                    GTPToEastxDO              => GTPToEastxD,
+                    -- South
+                    GTPFromSouthxDI           => GTPFromSouthxD,
+                    GTPToSouthxDO             => GTPToSouthxD,
+                    -- West
+                    GTPFromWestxDI            => GTPFromWestxD,
+                    GTPToWestxDO              => GTPToWestxD,
+                    -- Axi4 Framing Interface
+                    -- North
+                    NorthRXM2SxDO             => NorthRXM2SxD,
+                    NorthRXS2MxDI             => NorthRXS2MxD,
+                    NorthTXM2SxDI             => NorthTXM2SxD,
+                    NorthTXS2MxDO             => NorthTXS2MxD,
+                    -- East
+                    EastRXM2SxDO              => EastRXM2SxD,
+                    EastRXS2MxDI              => EastRXS2MxD,
+                    EastTXM2SxDI              => EastTXM2SxD,
+                    EastTXS2MxDO              => EastTXS2MxD,
+                    -- South
+                    SouthRXM2SxDO             => SouthRXM2SxD,
+                    SouthRXS2MxDI             => SouthRXS2MxD,
+                    SouthTXM2SxDI             => SouthTXM2SxD,
+                    SouthTXS2MxDO             => SouthTXS2MxD,
+                    -- West
+                    WestRXM2SxDO              => WestRXM2SxD,
+                    WestRXS2MxDI              => WestRXS2MxD,
+                    WestTXM2SxDI              => WestTXM2SxD,
+                    WestTXS2MxDO              => WestTXS2MxD,
+                    -- Axi4 Framing UFC Interface
+                    -- North
+                    NorthRXUFCM2SxDO          => NorthRXUFCM2SxD,
+                    NorthTXUFCM2SxDI          => NorthTXUFCM2SxD,
+                    NorthTXUFCS2MxDO          => NorthTXUFCS2MxD,
+                    -- East
+                    EastRXUFCM2SxDO           => EastRXUFCM2SxD,
+                    EastTXUFCM2SxDI           => EastTXUFCM2SxD,
+                    EastTXUFCS2MxDO           => EastTXUFCS2MxD,
+                    -- South
+                    SouthRXUFCM2SxDO          => SouthRXUFCM2SxD,
+                    SouthTXUFCM2SxDI          => SouthTXUFCM2SxD,
+                    SouthTXUFCS2MxDO          => SouthTXUFCS2MxD,
+                    -- West
+                    WestRXUFCM2SxDO           => WestRXUFCM2SxD,
+                    WestTXUFCM2SxDI           => WestTXUFCM2SxD,
+                    WestTXUFCS2MxDO           => WestTXUFCS2MxD,
+                    -- Axi4 Framing NFC Interface
+                    -- The NFC interface is not available when the
+                    -- constant C_RX_FIFO_MODE is set to TRUE.
+                    -- North
+                    NorthRXNFCM2SxDO          => NorthRXNFCM2SxD,
+                    NorthTXNFCM2SxDI          => NorthTXNFCM2SxD,
+                    NorthTXNFCS2MxDO          => NorthTXNFCS2MxD,
+                    -- East
+                    EastRXNFCM2SxDO           => EastRXNFCM2SxD,
+                    EastTXNFCM2SxDI           => EastTXNFCM2SxD,
+                    EastTXNFCS2MxDO           => EastTXNFCS2MxD,
+                    -- South
+                    SouthRXNFCM2SxDO          => SouthRXNFCM2SxD,
+                    SouthTXNFCM2SxDI          => SouthTXNFCM2SxD,
+                    SouthTXNFCS2mxDO          => SouthTXNFCS2mxD,
+                    -- West
+                    WestRXNFCM2SxDO           => WestRXNFCM2SxD,
+                    WestTXNFCM2SxDI           => WestTXNFCM2SxD,
+                    WestTXNFCS2MxDO           => WestTXNFCS2MxD,
+                    -- Aurora Ctrl + Status
+                    AuroraCtrlxDI             => AuroraCtrlxD,
+                    AuroraStatusxDO           => AuroraStatusxD,
+                    -- DRP Port
+                    AuroraDRPM2SxDI           => AuroraDRPM2SxD,
+                    AuroraDRPS2MxDO           => AuroraDRPS2MxD,
+                    -- RX Fifo Status
+                    -- North
+                    NorthRXFifoStatusxDO      => NorthRXFifoStatusxD,
+                    -- East
+                    EastRXFifoStatusxDO       => EastRXFifoStatusxD,
+                    -- South
+                    SouthRXFifoStatusxDO      => SouthRXFifoStatusxD,
+                    -- West
+                    WestRXFifoStatusxDO       => WestRXFifoStatusxD,
+                    -- Axis Fifo Error
+                    AxisFifoErrorxDO          => AxisFifoErrorxD);
+
+        end block GTPhyxB;
+
+        NetworkLayerxB : block is
+
+            constant C_SCALP_PACKET_PAYLOAD_SIZE : integer range 1 to C_SCALP_PACKET_LENGTH_RANGE_VALUE := 8;
+            constant C_SCALP_RANDOM_READY        : boolean                                              := false;
+            ---------------------------------------------------------------------------
+            -- Scalp Packets
+            ---------------------------------------------------------------------------
+
+            constant C_SCALP_PACKET_NET_ADDR_110 : t_scalp_netaddr
+                := (XxD => 1, YxD => 1, ZxD => 0);
+            constant C_SCALP_PACKET_NET_ADDR_210 : t_scalp_netaddr
+                := (XxD => 2, YxD => 1, ZxD => 0);
+            ---------------------------------------------------------------------------
+            -- Scalp Packet Headers
+            ---------------------------------------------------------------------------
+            constant C_SP_HEADER_NULL       : t_scalp_packet_header := C_NO_SCALP_PACKET_HEADER;
+            constant C_SP_HEADER_110_TO_210 : t_scalp_packet_header
+                := (DstAddrxD => C_SCALP_PACKET_NET_ADDR_210,
+                    SrcAddrxD => C_SCALP_PACKET_NET_ADDR_110,
+                    TypexD    => 1,
+                    LengthxD  => C_SCALP_PACKET_PAYLOAD_SIZE);
+            ---------------------------------------------------------------------------
+            -- Scalp Packet Payloads
+            ---------------------------------------------------------------------------
+            constant C_SP_PAYLOAD_NULL : t_scalp_packet_payload(0 to (C_SCALP_PACKET_PAYLOAD_SIZE - 1))
+                := (0 => C_NO_SCALP_PACKET_WORD,
+                    1 => C_NO_SCALP_PACKET_WORD,
+                    2 => C_NO_SCALP_PACKET_WORD,
+                    3 => C_NO_SCALP_PACKET_WORD,
+                    4 => C_NO_SCALP_PACKET_WORD,
+                    5 => C_NO_SCALP_PACKET_WORD,
+                    6 => C_NO_SCALP_PACKET_WORD,
+                    7 => C_NO_SCALP_PACKET_WORD);
+            constant C_SP_PAYLOAD_0 : t_scalp_packet_payload(0 to (C_SCALP_PACKET_PAYLOAD_SIZE - 1))
+                := (0 =>
+                    (WordxD => std_ulogic_vector(to_unsigned(16#0abbccdd#, (C_BYTE_SIZE * 4))),
+                     IdxD   => 0),
+                    1 =>
+                    (WordxD => std_ulogic_vector(to_unsigned(16#0bccddee#, (C_BYTE_SIZE * 4))),
+                     IdxD   => 1),
+                    2 =>
+                    (WordxD => std_ulogic_vector(to_unsigned(16#0cddeeff#, (C_BYTE_SIZE * 4))),
+                     IdxD   => 2),
+                    3 =>
+                    (WordxD => std_ulogic_vector(to_unsigned(16#0deeff11#, (C_BYTE_SIZE * 4))),
+                     IdxD   => 3),
+                    4 =>
+                    (WordxD => std_ulogic_vector(to_unsigned(16#0eff1122#, (C_BYTE_SIZE * 4))),
+                     IdxD   => 4),
+                    5 =>
+                    (WordxD => std_ulogic_vector(to_unsigned(16#0f112233#, (C_BYTE_SIZE * 4))),
+                     IdxD   => 5),
+                    6 =>
+                    (WordxD => std_ulogic_vector(to_unsigned(16#01223344#, (C_BYTE_SIZE * 4))),
+                     IdxD   => 6),
+                    7 =>
+                    (WordxD => std_ulogic_vector(to_unsigned(16#02334455#, (C_BYTE_SIZE * 4))),
+                     IdxD   => 7));
+
+            -- type t_write_sp_states is (E_WR_SP_IDLE, E_WR_SP_VALID, E_WR_SP_WAIT);
+
+            type t_write_sp_states is (E_WR_SP_IDLE, E_WR_SP_VALID_0, E_WR_SP_LAST_0, E_WR_SP_LAST_1, E_WR_SP_VALID_1, E_WR_SP_WAIT);
+
+            signal ScalpRouterResetxRNA : std_ulogic := '0';
+            -- Scalp Packets
+            -- From South 101
+            ---------------------------------------------------------------------------
+            ---------------------------------------------------------------------------
+            signal ScalpPacketLocalxD   : t_scalp_packet(SpPayloadxD(0 to (C_SCALP_PACKET_PAYLOAD_SIZE - 1))) :=
+                (SpHeaderxD  => C_SP_HEADER_NULL,
+                 SpPayloadxD => C_SP_PAYLOAD_NULL);
+            signal ScalpPacketValidLocalxS  : std_ulogic := '0';
+            signal ScalpPacketSelectLocalxD : integer    := 0;
+            ---------------------------------------------------------------------------
+            -- Packet 0
+            signal ScalpPacket0xD           : t_scalp_packet(SpPayloadxD(0 to (C_SCALP_PACKET_PAYLOAD_SIZE - 1))) :=
+                (SpHeaderxD  => C_SP_HEADER_110_TO_210,
+                 SpPayloadxD => C_SP_PAYLOAD_0);
+            signal ScalpPacketValid12xS                  : std_ulogic                   := '0';
+            --
+            signal WrSPStatexDP                          : t_write_sp_states            := E_WR_SP_IDLE;
+            signal WrSPStatexDN                          : t_write_sp_states            := E_WR_SP_IDLE;
+            signal VioWrSpValidxS                        : std_ulogic                   := '0';
+            --
+            signal RXSideLLxDP                           : t_scalp_rx_link_layer_states := E_SCALP_RX_LINK_LAYER_IDLE;
+            signal RXSideLLxDN                           : t_scalp_rx_link_layer_states := E_SCALP_RX_LINK_LAYER_IDLE;
+            -- Scalp Packet
+            -- attribute mark_debug of ScalpPacket0xD       : signal is "true";
+            -- attribute keep of ScalpPacket0xD             : signal is "true";
+            -- attribute mark_debug of ScalpPacketValid12xS : signal is "true";
+            -- attribute keep of ScalpPacketValid12xS       : signal is "true";
+            -- attribute mark_debug of ScalpPacketLocalxD   : signal is "true";
+            -- attribute keep of ScalpPacketLocalxD         : signal is "true";
+            -- VIO
+            -- attribute mark_debug of VioWrSpValidxS       : signal is "true";
+            -- attribute keep of VioWrSpValidxS             : signal is "true";
+            -- attribute mark_debug of ScalpRouterResetxRNA : signal is "true";
+            -- attribute keep of ScalpRouterResetxRNA       : signal is "true";
+            -- attribute mark_debug of ScalpPacket0xD       : signal is "true";
+            -- attribute keep of ScalpPacket0xD             : signal is "true";
+            -- attribute mark_debug of WrSPStatexDP         : signal is "true";
+            -- attribute keep of WrSPStatexDP               : signal is "true";
+            -- attribute mark_debug of WrSPStatexDN         : signal is "true";
+            -- attribute keep of WrSPStatexDN               : signal is "true";
+            -- attribute mark_debug of VioWrSpValidxS       : signal is "true";
+            -- attribute keep of VioWrSpValidxS             : signal is "true";
+            -- attribute mark_debug of ScalpPacketLocalxD      : signal is "true";
+            -- attribute keep of ScalpPacketLocalxD            : signal is "true";
+            -- attribute mark_debug of ScalpPacketValidLocalxS : signal is "true";
+            -- attribute keep of ScalpPacketValidLocalxS       : signal is "true";
+
+        begin  -- block NetworkLayerxB
+
+            ResetxB : block is
+
+                constant C_CDC_TYPE     : integer range 0 to 2  := 1;
+                constant C_RESET_STATE  : integer range 0 to 1  := 0;
+                constant C_SINGLE_BIT   : integer range 0 to 1  := 1;
+                constant C_FLOP_INPUT   : integer range 0 to 1  := 1;
+                constant C_VECTOR_WIDTH : integer range 0 to 32 := 2;
+                constant C_MTBF_STAGES  : integer range 0 to 6  := 5;
+
+                signal PrimaryResetxRN   : std_ulogic := '0';
+                signal SecondaryResetxRN : std_ulogic := '0';
+                signal PSSysResetSyncxR  : std_ulogic := '0';
+
+            begin  -- block ResetxB
+
+                PrimaryResetxAS   : PrimaryResetxRN   <= not PSSysResetxR;
+                SecondaryResetxAS : SecondaryResetxRN <= not AuroraClkMasterxC.PllNotLockedxS;
+
+                CDCSyncResetxB : entity work.cdc_sync
+                    generic map (
+                        C_CDC_TYPE     => C_CDC_TYPE,
+                        C_RESET_STATE  => C_RESET_STATE,
+                        C_SINGLE_BIT   => C_SINGLE_BIT,
+                        C_FLOP_INPUT   => C_FLOP_INPUT,
+                        C_VECTOR_WIDTH => C_VECTOR_WIDTH,
+                        C_MTBF_STAGES  => C_MTBF_STAGES)
+                    port map (
+                        PrimaryClkxCAI     => PSSysClkxC,
+                        PrimaryResetxRNI   => PrimaryResetxRN,
+                        PrimaryxSI         => PSSysResetxR,
+                        PrimaryxDI         => (others => '0'),
+                        PrimaryAckxSO      => open,
+                        SecondaryClkxCAI   => AuroraClkMasterxC.UserClkxC,
+                        SecondaryResetxRNI => SecondaryResetxRN,
+                        SecondaryxSO       => PSSysResetSyncxR,
+                        SecondaryxDO       => open);
+
+                ScalpRouterResetxAS : ScalpRouterResetxRNA <= (not PSSysResetSyncxR) and
+                                                              (not AuroraClkMasterxC.PllNotLockedxS);
+                -- RX Fifo reset 196 cycles
+                -- Clock and Resets
+                -- RX Fifo
+                NorthFifoResetxAS : RXResetxR.FifoResetxR.NorthxR <=
+                    '1' when
+                    (AuroraStatusxD.LaneUpxD(0)(0) = '0') or
+                    (AuroraStatusxD.ChannelUpxD(0) = '0') else
+                    '0';
+                EastFifoResetxAS : RXResetxR.FifoResetxR.EastxR <=
+                    '1' when
+                    (AuroraStatusxD.LaneUpxD(1)(0) = '0') or
+                    (AuroraStatusxD.ChannelUpxD(1) = '0') else
+                    '0';
+                SouthFifoResetxAS : RXResetxR.FifoResetxR.SouthxR <=
+                    '1' when
+                    (AuroraStatusxD.LaneUpxD(2)(0) = '0') or
+                    (AuroraStatusxD.ChannelUpxD(2) = '0') else
+                    '0';
+                WestFifoResetxAS : RXResetxR.FifoResetxR.WestxR <=
+                    '1' when
+                    (AuroraStatusxD.LaneUpxD(3)(0) = '0') or
+                    (AuroraStatusxD.ChannelUpxD(3) = '0') else
+                    '0';
+                -- Back pressure
+                NorthBackPressureResetxAS : RXResetxR.BackPressureResetxR.NorthxR <=
+                    '1' when
+                    (AuroraStatusxD.LaneUpxD(0)(0) = '0') or
+                    (RXFifoResetDonexD.NorthxS = '0') or
+                    (RXFifoResetDoneDelayedxD.NorthxS = '0') or
+                    (AuroraStatusxD.ChannelUpxD(0) = '0') else
+                    '0';
+                EastBackPressureResetxAS : RXResetxR.BackPressureResetxR.EastxR <=
+                    '1' when
+                    (AuroraStatusxD.LaneUpxD(1)(0) = '0') or
+                    (RXFifoResetDonexD.EastxS = '0') or
+                    (RXFifoResetDoneDelayedxD.EastxS = '0') or
+                    (AuroraStatusxD.ChannelUpxD(1) = '0') else
+                    '0';
+                SouthBackPressureResetxAS : RXResetxR.BackPressureResetxR.SouthxR <=
+                    '1' when
+                    (RXFifoResetDonexD.SouthxS = '0') or
+                    (RXFifoResetDoneDelayedxD.SouthxS = '0') or
+                    (AuroraStatusxD.LaneUpxD(2)(0) = '0') or
+                    (AuroraStatusxD.ChannelUpxD(2) = '0') else
+                    '0';
+                WestBackPressureResetxAS : RXResetxR.BackPressureResetxR.WestxR <=
+                    '1' when
+                    (AuroraStatusxD.LaneUpxD(3)(0) = '0') or
+                    (RXFifoResetDonexD.WestxS = '0') or
+                    (RXFifoResetDoneDelayedxD.WestxS = '0') or
+                    (AuroraStatusxD.ChannelUpxD(3) = '0') else
+                    '0';
+
+            end block ResetxB;
+
+            -- ScalpRouterReadyxB : block is
+            -- begin  -- block ScalpRouterReadyxB
+
+            --     ScalpRouterReadyNorthxAS : ScalpRouterReadyxD.NorthxS <=
+            --         '0' when
+            --         (RXFifoResetDonexD.NorthxS = '0') or
+            --         (RXFifoResetDoneDelayedxD.NorthxS = '0') or
+            --         (AuroraStatusxD.LaneUpxD(0)(0) = '0') or
+            --         (AuroraStatusxD.ChannelUpxD(0) = '0') else
+            --         '1';
+            --     ScalpRouterReadyEastxAS : ScalpRouterReadyxD.EastxS <=
+            --         '0' when
+            --         (RXFifoResetDonexD.EastxS = '0') or
+            --         (RXFifoResetDoneDelayedxD.EastxS = '0') or
+            --         (AuroraStatusxD.LaneUpxD(1)(0) = '0') or
+            --         (AuroraStatusxD.ChannelUpxD(1) = '0') else
+            --         '1';
+            --     ScalpRouterReadySouthxAS : ScalpRouterReadyxD.SouthxS <=
+            --         '0' when
+            --         (RXFifoResetDonexD.SouthxS = '0') or
+            --         (RXFifoResetDoneDelayedxD.SouthxS = '0') or
+            --         (AuroraStatusxD.LaneUpxD(2)(0) = '0') or
+            --         (AuroraStatusxD.ChannelUpxD(2) = '0') else
+            --         '1';
+            --     ScalpRouterReadyWestxAS : ScalpRouterReadyxD.WestxS <=
+            --         '0' when
+            --         (RXFifoResetDonexD.WestxS = '0') or
+            --         (RXFifoResetDoneDelayedxD.WestxS = '0') or
+            --         (AuroraStatusxD.LaneUpxD(3)(0) = '0') or
+            --         (AuroraStatusxD.ChannelUpxD(3) = '0') else
+            --         '1';
+            --     ScalpRouterReadyTopxAS    : ScalpRouterReadyxD.TopxS    <= '0';
+            --     ScalpRouterReadyBottomxAS : ScalpRouterReadyxD.BottomxS <= '0';
+            --     ScalpRouterReadyLocalxAS  : ScalpRouterReadyxD.LocalxS  <= (not PSSysResetxR) and
+            --                                                              (not AuroraClkMasterxC.PllNotLockedxS);
+
+            -- end block ScalpRouterReadyxB;
+
+            -- Local Router Net Addr
+            -- LocNetAddrxAS : LocNetAddrxD                     <= C_SCALP_PACKET_NET_ADDR_210;
+            LocNetAddrXxAS : LocNetAddrxD.XxD                 <= to_integer(unsigned(LocNetAddrVectxD(7 downto 0)));
+            LocNetAddrYxAS : LocNetAddrxD.YxD                 <= to_integer(unsigned(LocNetAddrVectxD(15 downto 8)));
+            LocNetAddrZxAS : LocNetAddrxD.ZxD                 <= to_integer(unsigned(LocNetAddrVectxD(23 downto 16)));
+            -- TX Side
+            NorthTXM2SxAS  : NorthTXM2SxD                     <= TXAxism2sVectorxD(C_NORTH_IF_ID);
+            EastTXM2SxAS   : EastTXM2SxD                      <= TXAxism2sVectorxD(C_EAST_IF_ID);
+            SouthTXM2SxAS  : SouthTXM2SxD                     <= TXAxism2sVectorxD(C_SOUTH_IF_ID);
+            WestTXM2SxAS   : WestTXM2SxD                      <= TXAxism2sVectorxD(C_WEST_IF_ID);
+            NorthTXS2MxAS  : TXAxiss2mVectorxD(C_NORTH_IF_ID) <= NorthTXS2MxD;
+            EastTXS2MxAS   : TXAxiss2mVectorxD(C_EAST_IF_ID)  <= EastTXS2MxD;
+            SouthTXS2MxAS  : TXAxiss2mVectorxD(C_SOUTH_IF_ID) <= SouthTXS2MxD;
+            WestTXS2MxAS   : TXAxiss2mVectorxD(C_WEST_IF_ID)  <= WestTXS2MxD;
+            -- RX Side
+            NorthRXM2SxAS  : RXAxism2sVectorxD(C_NORTH_IF_ID) <= NorthRXM2SxD;
+            EastRXM2SxAS   : RXAxism2sVectorxD(C_EAST_IF_ID)  <= EastRXM2SxD;
+            SouthRXM2SxAS  : RXAxism2sVectorxD(C_SOUTH_IF_ID) <= SouthRXM2SxD;
+            WestRXM2SxAS   : RXAxism2sVectorxD(C_WEST_IF_ID)  <= WestRXM2SxD;
+            NorthRXS2MxAS  : NorthRXS2MxD                     <= RXAxiss2mVectorxD(C_NORTH_IF_ID);
+            EastRXS2MxAS   : EastRXS2MxD                      <= RXAxiss2mVectorxD(C_EAST_IF_ID);
+            SouthRXS2MxAS  : SouthRXS2MxD                     <= RXAxiss2mVectorxD(C_SOUTH_IF_ID);
+            WestRXS2MxAS   : WestRXS2MxD                      <= RXAxiss2mVectorxD(C_WEST_IF_ID);
+
+            WrSpValidxI : entity work.vio_axi_cnt_ctrl
+                port map (
+                    clk           => AuroraClkMasterxC.UserClkxC,
+                    probe_out0(0) => VioWrSpValidxS);
+
+            TXFifoStatusWrDataCntxAS : TXWrDataCntxD                       <= TXFifoStatusxD.WrDataCntxD;
+            TXFifoStatusRdDataCntxAS : TXRdDataCntxD                       <= TXFifoStatusxD.RdDataCntxD;
+            TXFifoStatusProgFullxAS  : ScalpPacketStatusxD(C_TX_PROG_FULL) <= TXFifoStatusxD.ProgFullxS;
+
+            TXFifoWrDataxP : process (AuroraClkMasterxC.UserClkxC,
+                                      ScalpRouterResetxRNA) is
+            begin  -- process TXFifoWrDataxP
+                if ScalpRouterResetxRNA = '0' then
+                    TXFifoRXM2SxD           <= C_NO_AXI4_M2S;
+                    TXFifoWrDataStatexD     <= E_WR_IDLE;
+                    TXFifoWrDataStateNextxD <= E_WR_IDLE;
+                elsif rising_edge(AuroraClkMasterxC.UserClkxC) then
+                    -- Default Values
+                    TXFifoRXM2SxD           <= C_NO_AXI4_M2S;
+                    TXFifoWrDataStatexD     <= TXFifoWrDataStatexD;
+                    TXFifoWrDataStateNextxD <= TXFifoWrDataStateNextxD;
+
+                    case TXFifoWrDataStatexD is
+                        when E_WR_IDLE =>
+                                if ScalpPacketCtrlxD(C_WR_NEW_PACKET) = '1' then
+                                    TXFifoWrDataStatexD <= E_WR_H0;
+                                end if;
+
+                        when E_WR_H0 =>
+                                if ScalpPacketCtrlxD(C_WR_VALID) = '1' and ScalpPacketCtrlxD(C_WR_NEXT) = '0' then
+                                    TXFifoRXM2SxD.DataxD <= scalp_sp_h0_to_axis_ul(ScalpPacketWriteDataxD(31 downto 24),
+                                                                                   ScalpPacketWriteDataxD(23 downto 16),
+                                                                                   ScalpPacketWriteDataxD(15 downto 8),
+                                                                                   ScalpPacketWriteDataxD(7 downto 0));
+                                    TXFifoRXM2SxD.ValidxS   <= '1';
+                                    TXFifoWrDataStatexD     <= E_WR_NEXT;
+                                    TXFifoWrDataStateNextxD <= E_WR_H1;
+                                end if;
+
+                        when E_WR_H1 =>
+                                if ScalpPacketCtrlxD(C_WR_VALID) = '1' and ScalpPacketCtrlxD(C_WR_NEXT) = '0' then
+                                    TXFifoRXM2SxD.DataxD <= scalp_sp_h1_to_axis_ul(ScalpPacketWriteDataxD(31 downto 24),
+                                                                                   ScalpPacketWriteDataxD(23 downto 16),
+                                                                                   ScalpPacketWriteDataxD(15 downto 8));
+                                    TXFifoRXM2SxD.ValidxS   <= '1';
+                                    TXFifoWrDataStatexD     <= E_WR_NEXT;
+                                    TXFifoWrDataStateNextxD <= E_WR_H2;
+                                end if;
+
+                        when E_WR_H2 =>
+                                if ScalpPacketCtrlxD(C_WR_VALID) = '1' and ScalpPacketCtrlxD(C_WR_NEXT) = '0' then
+                                    TXFifoRXM2SxD.DataxD    <= scalp_sp_h2_to_axis_ul(ScalpPacketWriteDataxD(31 downto 16));
+                                    TXFifoRXM2SxD.ValidxS   <= '1';
+                                    TXFifoWrDataStatexD     <= E_WR_NEXT;
+                                    TXFifoWrDataStateNextxD <= E_WR_PLD;
+                                end if;
+
+                        when E_WR_PLD =>
+                                if ScalpPacketCtrlxD(C_WR_VALID) = '1' and ScalpPacketCtrlxD(C_WR_NEXT) = '0' then
+                                    TXFifoRXM2SxD.DataxD  <= scalp_sp_p_to_axis_ul(ScalpPacketWriteDataxD);
+                                    TXFifoRXM2SxD.ValidxS <= '1';
+                                    TXFifoWrDataStatexD   <= E_WR_NEXT;
+
+                                    if ScalpPacketCtrlxD(C_WR_LAST) = '1' then
+                                        TXFifoRXM2SxD.LastxS    <= '1';
+                                        TXFifoWrDataStateNextxD <= E_WR_IDLE;
+                                    else
+                                        TXFifoWrDataStateNextxD <= E_WR_PLD;
+                                    end if;
+                                end if;
+
+                        when E_WR_NEXT =>
+                                if ScalpPacketCtrlxD(C_WR_NEXT) = '1' and ScalpPacketCtrlxD(C_WR_VALID) = '0' then
+                                    TXFifoWrDataStatexD <= TXFifoWrDataStateNextxD;
+                                end if;
+
+                        when others => null;
+                    end case;
+                end if;
+            end process TXFifoWrDataxP;
+
+            -- TX Fifo
+            ScalpAxisFifoWrapperTXxI : entity work.scalp_axis_fifo_wrapper
+                port map (
+                    ClkxCI.RXClkxC   => AuroraClkMasterxC.UserClkxC,
+                    ClkxCI.TXClkxC   => AuroraClkMasterxC.UserClkxC,
+                    ResetxRI.RstxRAN => ScalpRouterResetxRNA,
+                    RXM2SxDI         => TXFifoRXM2SxD,
+                    RXS2MxSO         => TXFifoRXS2MxS,
+                    TXM2SxDO         => RXAxism2sVectorxD(C_LOCAL_IF_ID),
+                    TXS2MxSI         => RXAxiss2mVectorxD(C_LOCAL_IF_ID),
+                    FifoStatusxDO    => TXFifoStatusxD);
+
+            RXFifoStatusWrDataCntxAS : RXWrDataCntxD                       <= RXFifoStatusxD.WrDataCntxD;
+            RXFifoStatusRdDataCntxAS : RXRdDataCntxD                       <= RXFifoStatusxD.RdDataCntxD;
+            RXFifoStatusProgFullxAS  : ScalpPacketStatusxD(C_RX_PROG_FULL) <= RXFifoStatusxD.ProgFullxS;
+
+            RXFifoRdDataxP : process (AuroraClkMasterxC.UserClkxC,
+                                      ScalpRouterResetxRNA) is
+            begin  -- process RXFifoRdDataxP
+                if ScalpRouterResetxRNA = '0' then
+                    RXFifoRdDataStatexD             <= E_RD_IDLE;
+                    RXFifoRdDataStateNextxD         <= E_RD_IDLE;
+                    ScalpPacketReadDataxD           <= (others => '0');
+                    ScalpPacketStatusxD(C_RD_VALID) <= '0';
+                    ScalpPacketStatusxD(C_RD_LAST)  <= '0';
+                elsif rising_edge(AuroraClkMasterxC.UserClkxC) then
+                    -- Default Values
+                    RXFifoTXS2MxS.ReadyxS               <= '0';
+                    ScalpPacketReadDataxD               <= (others => '0');
+                    ScalpPacketStatusxD(C_RD_VALID)     <= '0';
+                    ScalpPacketStatusxD(C_RD_LAST)      <= ScalpPacketStatusxD(C_RD_LAST);
+                    ScalpPacketStatusxD(C_RD_WAIT_NEXT) <= '0';
+                    RXFifoRdDataStatexD                 <= RXFifoRdDataStatexD;
+                    RXFifoRdDataStateNextxD             <= RXFifoRdDataStateNextxD;
+
+                    case RXFifoRdDataStatexD is
+                        when E_RD_IDLE =>
+                                if ScalpPacketCtrlxD(C_RD_NEW_PACKET) = '1' then
+                                    ScalpPacketStatusxD(C_RD_LAST) <= '0';
+                                end if;
+
+                        when E_RD_WORD =>
+                                if RXFifoTXM2SxD.ValidxS = '1' and ScalpPacketCtrlxD(C_RD_NEXT) = '0' then
+                                    RXFifoTXS2MxS.ReadyxS           <= '1';
+                                    ScalpPacketReadDataxD           <= TXFifoRXM2SxD.DataxD;
+                                    ScalpPacketStatusxD(C_RD_VALID) <= '1';
+                                    RXFifoRdDataStatexD             <= E_RD_NEXT;
+                                    RXFifoRdDataStateNextxD         <= E_RD_WORD;
+
+                                    if RXFifoTXM2SxD.LastxS = '1' then
+                                        ScalpPacketStatusxD(C_RD_LAST) <= '1';
+                                        RXFifoRdDataStateNextxD        <= E_RD_IDLE;
+                                    end if;
+                                end if;
+
+                        when E_RD_NEXT =>
+                                ScalpPacketReadDataxD               <= TXFifoRXM2SxD.DataxD;
+                                ScalpPacketStatusxD(C_RD_VALID)     <= '1';
+                                ScalpPacketStatusxD(C_RD_WAIT_NEXT) <= '1';
+
+                                if ScalpPacketCtrlxD(C_RD_NEXT) = '1' then
+                                    RXFifoRdDataStatexD <= RXFifoRdDataStateNextxD;
+                                end if;
+
+                        when others => null;
+                    end case;
+                end if;
+            end process RXFifoRdDataxP;
+
+            -- RX Fifo
+            ScalpAxisFifoWrapperRXxI : entity work.scalp_axis_fifo_wrapper
+                port map (
+                    ClkxCI.RXClkxC   => AuroraClkMasterxC.UserClkxC,
+                    ClkxCI.TXClkxC   => AuroraClkMasterxC.UserClkxC,
+                    ResetxRI.RstxRAN => ScalpRouterResetxRNA,
+                    RXM2SxDI         => TXAxism2sVectorxD(C_LOCAL_IF_ID),
+                    RXS2MxSO         => TXAxiss2mVectorxD(C_LOCAL_IF_ID),
+                    TXM2SxDO         => RXFifoTXM2SxD,
+                    TXS2MxSI         => RXFifoTXS2MxS,
+                    FifoStatusxDO    => RXFifoStatusxD);
+
+            ScalpRouterxI : entity work.scalp_router
+                generic map (
+                    C_SCALP_NUMBER_OF_INTERFACE => C_SCALP_NUMBER_OF_INTERFACE,
+                    C_SCALP_SCHEDULER_STRATEGY  => C_SCALP_SCHEDULER_STRATEGY)
+                port map (
+                    SysClkxCI          => AuroraClkMasterxC.UserClkxC,
+                    SysRstxRNAI        => ScalpRouterResetxRNA,
+                    LocNetAddrxDI      => LocNetAddrxD,
+                    RXAxism2sVectorxDI => RXAxism2sVectorxD,
+                    RXAxiss2mVectorxDO => RXAxiss2mVectorxD,
+                    TXAxism2sVectorxDO => TXAxism2sVectorxD,
+                    TXAxiss2mVectorxDI => TXAxiss2mVectorxD,
+                    QoSVectorxDI       => QoSVectorxD);
+
+            -- ScalpSP2AxisLocalxI : entity work.scalp_sp_to_axis
+            --     generic map (
+            --         C_SCALP_PACKET_PAYLOAD_SIZE => C_SCALP_PACKET_PAYLOAD_SIZE)
+            --     port map (
+            --         SysClkxCI           => AuroraClkMasterxC.UserClkxC,
+            --         SysRstxRNAI         => ScalpRouterResetxRNA,
+            --         ScalpPacketxDI      => ScalpPacket0xD,
+            --         ScalpPacketValidxSI => ScalpPacketValid12xS,
+            --         ScalpAxism2sxDO     => RXAxism2sVectorxD(C_LOCAL_IF_ID),
+            --         ScalpAxiss2mxDI     => RXAxiss2mVectorxD(C_LOCAL_IF_ID),
+            --         ScalpRdyxSO         => open);
+
+            -- ScalpAxis2SPxI : entity work.scalp_axis_to_sp
+            --     generic map (
+            --         C_SCALP_PACKET_PAYLOAD_SIZE => C_SCALP_PACKET_PAYLOAD_SIZE,
+            --         C_SCALP_RANDOM_READY        => C_SCALP_RANDOM_READY)
+            --     port map (
+            --         SysClkxCI           => AuroraClkMasterxC.UserClkxC,
+            --         SysRstxRNAI         => ScalpRouterResetxRNA,
+            --         ScalpAxism2sxDI     => TXAxism2sVectorxD(C_LOCAL_IF_ID),
+            --         ScalpAxiss2mxDO     => TXAxiss2mVectorxD(C_LOCAL_IF_ID),
+            --         ScalpPacketxDO      => ScalpPacketLocalxD,
+            --         ScalpPacketValidxSO => ScalpPacketValidLocalxS);
+
+            -- WritePacketxB : block is
+            -- begin  -- block WritePacketxB
+
+            --     UpdateRegxP : process (AuroraClkMasterxC.UserClkxC,
+            --                            ScalpRouterResetxRNA) is
+            --     begin  -- process UpdateRegxP
+            --         if ScalpRouterResetxRNA = '0' then
+            --             WrSPStatexDP <= E_WR_SP_IDLE;
+            --         elsif rising_edge(AuroraClkMasterxC.UserClkxC) then
+            --             WrSPStatexDP <= WrSPStatexDN;
+            --         end if;
+            --     end process UpdateRegxP;
+
+            --     SpValidxP : process (RXAxism2sVectorxD(C_LOCAL_IF_ID).LastxS,
+            --                          VioWrSpValidxS, WrSPStatexDP) is
+            --     begin  -- process SpValidxP
+            --         -- Default values
+            --         WrSPStatexDN         <= WrSPStatexDP;
+            --         ScalpPacketValid12xS <= '0';
+
+            --         case WrSPStatexDP is
+            --             when E_WR_SP_IDLE =>
+            --                     if VioWrSpValidxS = '1' then
+            --                         ScalpPacketValid12xS <= '1';
+            --                         WrSPStatexDN         <= E_WR_SP_VALID_0;
+            --                     end if;
+
+            --             when E_WR_SP_VALID_0 =>
+            --                     ScalpPacketValid12xS <= '0';
+            --                     WrSPStatexDN         <= E_WR_SP_LAST_0;
+
+            --             when E_WR_SP_LAST_0 =>
+            --                     if RXAxism2sVectorxD(C_LOCAL_IF_ID).LastxS = '1' then
+            --                         WrSPStatexDN <= E_WR_SP_LAST_1;
+            --                     end if;
+
+            --             when E_WR_SP_LAST_1 =>
+            --                     if RXAxism2sVectorxD(C_LOCAL_IF_ID).LastxS = '0' then
+            --                         ScalpPacketValid12xS <= '1';
+            --                         WrSPStatexDN         <= E_WR_SP_VALID_1;
+            --                     end if;
+
+            --             when E_WR_SP_VALID_1 =>
+            --                     ScalpPacketValid12xS <= '0';
+            --                     WrSPStatexDN         <= E_WR_SP_WAIT;
+
+            --             when E_WR_SP_WAIT =>
+            --                     if VioWrSpValidxS = '0' then
+            --                         WrSPStatexDN <= E_WR_SP_IDLE;
+            --                     end if;
+
+            --             when others => null;
+            --         end case;
+            --     end process SpValidxP;
+
+            -- end block WritePacketxB;
+
+        end block NetworkLayerxB;
+
+    end block ProgrammableLogicxB;
+
 end arch;