From 65d1cf7137271afdb40d8d6b71936ec8a931cefa Mon Sep 17 00:00:00 2001 From: "joachim.schmidt" <joachim.schmidt@hesge.ch> Date: Wed, 19 May 2021 14:50:11 +0200 Subject: [PATCH] Update of the Scalp router and its internal architecture. --- .../2020.2/src/hdl/scalp_firmware.vhd | 11 ++- .../scalp_router/src/hdl/scalp_axis_to_sp.vhd | 6 +- .../src/hdl/scalp_booking_vector.vhd | 6 +- .../src/hdl/scalp_fifo_double_register.vhd | 18 +---- .../src/hdl/scalp_matrix_index.vhd | 6 +- ips/hw/scalp_router/src/hdl/scalp_router.vhd | 60 ++++++---------- .../src/hdl/scalp_router_core.vhd | 6 +- .../src/hdl/scalp_router_interface.vhd | 26 ++----- ips/hw/scalp_router/src/hdl/scalp_rx_side.vhd | 58 ++-------------- .../scalp_router/src/hdl/scalp_scheduler.vhd | 7 +- .../src/hdl/scalp_scheduler_ack.vhd | 6 +- .../scalp_router/src/hdl/scalp_sp_to_axis.vhd | 30 ++------ .../scalp_router/src/hdl/scalp_tx_fanout.vhd | 6 +- ips/hw/scalp_router/src/hdl/scalp_tx_side.vhd | 68 +++++-------------- 14 files changed, 83 insertions(+), 231 deletions(-) diff --git a/designs/vivado/scalp_firmware/2020.2/src/hdl/scalp_firmware.vhd b/designs/vivado/scalp_firmware/2020.2/src/hdl/scalp_firmware.vhd index dd1dfe3..bc51fd4 100644 --- a/designs/vivado/scalp_firmware/2020.2/src/hdl/scalp_firmware.vhd +++ b/designs/vivado/scalp_firmware/2020.2/src/hdl/scalp_firmware.vhd @@ -872,7 +872,7 @@ begin -- 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, E_WR_SP_VALID_1, 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 @@ -1149,10 +1149,15 @@ begin when E_WR_SP_VALID_0 => ScalpPacketValid12xS <= '0'; - WrSPStatexDN <= E_WR_SP_LAST; + WrSPStatexDN <= E_WR_SP_LAST_0; - when E_WR_SP_LAST => + 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; diff --git a/ips/hw/scalp_router/src/hdl/scalp_axis_to_sp.vhd b/ips/hw/scalp_router/src/hdl/scalp_axis_to_sp.vhd index 976e7b6..65930a5 100644 --- a/ips/hw/scalp_router/src/hdl/scalp_axis_to_sp.vhd +++ b/ips/hw/scalp_router/src/hdl/scalp_axis_to_sp.vhd @@ -15,7 +15,7 @@ -- Tool version: 2019.1 -- Description: AXI Stream to Scalp Packet converter. -- --- Last update: 2021-05-10 +-- Last update: 2021-05-19 -- --------------------------------------------------------------------------------- library ieee; @@ -27,8 +27,8 @@ use ieee.math_real.all; --use ieee.std_logic_arith.all; --use ieee.std_logic_misc.all; ---library UNISIM; ---use UNISIM.VCOMPONENTS.all; +library UNISIM; +use UNISIM.VCOMPONENTS.all; library work; use work.axi4_pkg.all; diff --git a/ips/hw/scalp_router/src/hdl/scalp_booking_vector.vhd b/ips/hw/scalp_router/src/hdl/scalp_booking_vector.vhd index c93f76b..a72f294 100644 --- a/ips/hw/scalp_router/src/hdl/scalp_booking_vector.vhd +++ b/ips/hw/scalp_router/src/hdl/scalp_booking_vector.vhd @@ -15,7 +15,7 @@ -- Tool version: 2019.1 -- Description: Manage the booking vector. -- --- Last update: 2020-02-13 +-- Last update: 2021-05-19 -- --------------------------------------------------------------------------------- library ieee; @@ -26,8 +26,8 @@ use ieee.numeric_std.all; --use ieee.std_logic_arith.all; --use ieee.std_logic_misc.all; ---library UNISIM; ---use UNISIM.VCOMPONENTS.all; +library UNISIM; +use UNISIM.VCOMPONENTS.all; use work.scalp_misc.all; diff --git a/ips/hw/scalp_router/src/hdl/scalp_fifo_double_register.vhd b/ips/hw/scalp_router/src/hdl/scalp_fifo_double_register.vhd index 86b97ed..a384a4a 100644 --- a/ips/hw/scalp_router/src/hdl/scalp_fifo_double_register.vhd +++ b/ips/hw/scalp_router/src/hdl/scalp_fifo_double_register.vhd @@ -15,7 +15,7 @@ -- Tool version: 2019.1 -- Description: Small fifo built with two registers. -- --- Last update: 2021-05-18 +-- Last update: 2021-05-19 -- --------------------------------------------------------------------------------- library ieee; @@ -64,22 +64,6 @@ architecture behavioral of scalp_fifo_double_register is attribute mark_debug : string; attribute keep : string; -- - -- attribute mark_debug of Axism2s0xD : signal is "true"; - -- attribute keep of Axism2s0xD : signal is "true"; - -- attribute mark_debug of Axism2s1xDP : signal is "true"; - -- attribute keep of Axism2s1xDP : signal is "true"; - -- attribute mark_debug of Axism2s1xDN : signal is "true"; - -- attribute keep of Axism2s1xDN : signal is "true"; - -- attribute mark_debug of Axism2s2xDP : signal is "true"; - -- attribute keep of Axism2s2xDP : signal is "true"; - -- attribute mark_debug of Axism2s2xDN : signal is "true"; - -- attribute keep of Axism2s2xDN : signal is "true"; - -- attribute mark_debug of Axism2s3xD : signal is "true"; - -- attribute keep of Axism2s3xD : signal is "true"; - -- attribute mark_debug of Axiss2m1xDN : signal is "true"; - -- attribute keep of Axiss2m1xDN : signal is "true"; - -- attribute mark_debug of Axiss2m1xDP : signal is "true"; - -- attribute keep of Axiss2m1xDP : signal is "true"; begin -- architecture behavioral diff --git a/ips/hw/scalp_router/src/hdl/scalp_matrix_index.vhd b/ips/hw/scalp_router/src/hdl/scalp_matrix_index.vhd index 262889e..ced3c01 100644 --- a/ips/hw/scalp_router/src/hdl/scalp_matrix_index.vhd +++ b/ips/hw/scalp_router/src/hdl/scalp_matrix_index.vhd @@ -15,7 +15,7 @@ -- Tool version: 2019.1 -- Description: Determines the index of the output vector. -- --- Last update: 2020-01-19 +-- Last update: 2021-05-19 -- --------------------------------------------------------------------------------- library ieee; @@ -26,8 +26,8 @@ use ieee.numeric_std.all; --use ieee.std_logic_arith.all; --use ieee.std_logic_misc.all; ---library UNISIM; ---use UNISIM.VCOMPONENTS.all; +library UNISIM; +use UNISIM.VCOMPONENTS.all; entity scalp_matrix_index is diff --git a/ips/hw/scalp_router/src/hdl/scalp_router.vhd b/ips/hw/scalp_router/src/hdl/scalp_router.vhd index 76ff8f2..c34d192 100644 --- a/ips/hw/scalp_router/src/hdl/scalp_router.vhd +++ b/ips/hw/scalp_router/src/hdl/scalp_router.vhd @@ -15,7 +15,7 @@ -- Tool version: 2019.1 -- Description: Scalp Router (NoC). -- --- Last update: 2021-05-04 +-- Last update: 2021-05-19 -- --------------------------------------------------------------------------------- library ieee; @@ -27,8 +27,8 @@ use ieee.math_real.all; --use ieee.std_logic_arith.all; --use ieee.std_logic_misc.all; ---library UNISIM; ---use UNISIM.VCOMPONENTS.all; +library UNISIM; +use UNISIM.VCOMPONENTS.all; library work; use work.axi4_pkg.all; @@ -117,19 +117,19 @@ architecture rtl of scalp_router is -- Signals -- Scalp Router -- Local Router Network Address - signal LocNetAddrxD : t_scalp_netaddr := C_3D_MIN_SCALP_NETADDR; + signal LocNetAddrxD : t_scalp_netaddr := C_3D_MIN_SCALP_NETADDR; -- Axi4 Stream Interfaces - 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 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); -- Scalp QoS Vectors - signal QoSVectorxD : t_scalp_qos_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0) := (others => C_SCALP_NO_QOS); + signal QoSVectorxD : t_scalp_qos_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0) := (others => C_SCALP_NO_QOS); -- Axi4 Stream Cross-Links with Neighborhood - signal RXAxi4m2sLinksxD : t_axi4m2s_vector_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => (others => C_NO_AXI4_M2S)); - signal RXAxi4s2mLinksxD : t_axi4s2m_vector_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => (others => C_NO_AXI4_S2M)); - signal TXAxi4m2sLinksxD : t_axi4m2s_vector_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => (others => C_NO_AXI4_M2S)); - signal TXAxi4s2mLinksxD : t_axi4s2m_vector_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => (others => C_NO_AXI4_S2M)); + signal RXAxi4m2sLinksxD : t_axi4m2s_vector_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => (others => C_NO_AXI4_M2S)); + signal RXAxi4s2mLinksxD : t_axi4s2m_vector_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => (others => C_NO_AXI4_S2M)); + signal TXAxi4m2sLinksxD : t_axi4m2s_vector_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => (others => C_NO_AXI4_M2S)); + signal TXAxi4s2mLinksxD : t_axi4s2m_vector_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => (others => C_NO_AXI4_S2M)); --------------------------------------------------------------------------- -- For Simulation With Vivado Only -- Axi4 Stream Cross-Links with Neighborhood @@ -139,37 +139,15 @@ architecture rtl of scalp_router is -- signal TXAxi4s2mLinksxD : t_axi4s2m_vector_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0) := (others => C_NO_SIM_AXISS2M_VECTOR); --------------------------------------------------------------------------- -- Scalp Booking Vectors - signal BookingVectorsInxD : t_scalp_booking_vector_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => (others => '0')); - signal BookingVectorsOutxD : t_scalp_booking_vector_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => (others => '0')); + signal BookingVectorsInxD : t_scalp_booking_vector_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => (others => '0')); + signal BookingVectorsOutxD : t_scalp_booking_vector_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => (others => '0')); -- Scalp Scheduler Ack Vectors - signal SchedulerAckVectorsInxD : t_scalp_scheduler_ack_vector_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => (others => '0')); - signal SchedulerAckVectorsOutxD : t_scalp_scheduler_ack_vector_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => (others => '0')); + signal SchedulerAckVectorsInxD : t_scalp_scheduler_ack_vector_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => (others => '0')); + signal SchedulerAckVectorsOutxD : t_scalp_scheduler_ack_vector_vector((C_SCALP_NUMBER_OF_INTERFACE - 1) downto 0)((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => (others => '0')); -- Attributes - attribute mark_debug : string; - attribute keep : string; + attribute mark_debug : string; + attribute keep : string; -- - -- attribute mark_debug of TXAxiss2mVectorxD : signal is "true"; - -- attribute keep of TXAxiss2mVectorxD : signal is "true"; - -- attribute mark_debug of LocNetAddrxD : signal is "true"; - -- attribute keep of LocNetAddrxD : 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 QoSVectorxD : signal is "true"; - -- attribute keep of QoSVectorxD : signal is "true"; - -- attribute mark_debug of BookingVectorsInxD : signal is "true"; - -- attribute keep of BookingVectorsInxD : signal is "true"; - -- attribute mark_debug of BookingVectorsOutxD : signal is "true"; - -- attribute keep of BookingVectorsOutxD : signal is "true"; - -- attribute mark_debug of SchedulerAckVectorsInxD : signal is "true"; - -- attribute keep of SchedulerAckVectorsInxD : signal is "true"; - -- attribute mark_debug of SchedulerAckVectorsOutxD : signal is "true"; - -- attribute keep of SchedulerAckVectorsOutxD : signal is "true"; begin -- architecture rtl diff --git a/ips/hw/scalp_router/src/hdl/scalp_router_core.vhd b/ips/hw/scalp_router/src/hdl/scalp_router_core.vhd index 64c9576..ddec2da 100644 --- a/ips/hw/scalp_router/src/hdl/scalp_router_core.vhd +++ b/ips/hw/scalp_router/src/hdl/scalp_router_core.vhd @@ -15,7 +15,7 @@ -- Tool version: 2019.1 -- Description: Scalp Router Core Algorithm -- --- Last update: 2020-01-21 +-- Last update: 2021-05-19 -- --------------------------------------------------------------------------------- library ieee; @@ -26,8 +26,8 @@ use ieee.numeric_std.all; --use ieee.std_logic_arith.all; --use ieee.std_logic_misc.all; ---library UNISIM; ---use UNISIM.VCOMPONENTS.all; +library UNISIM; +use UNISIM.VCOMPONENTS.all; use work.scalp_misc.all; diff --git a/ips/hw/scalp_router/src/hdl/scalp_router_interface.vhd b/ips/hw/scalp_router/src/hdl/scalp_router_interface.vhd index 40da0be..08a4f60 100644 --- a/ips/hw/scalp_router/src/hdl/scalp_router_interface.vhd +++ b/ips/hw/scalp_router/src/hdl/scalp_router_interface.vhd @@ -15,7 +15,7 @@ -- Tool version: 2019.1 -- Description: Scalp Router Interface. -- --- Last update: 2021-05-18 +-- Last update: 2021-05-19 -- --------------------------------------------------------------------------------- library ieee; @@ -27,8 +27,8 @@ use ieee.math_real.all; --use ieee.std_logic_arith.all; --use ieee.std_logic_misc.all; ---library UNISIM; ---use UNISIM.VCOMPONENTS.all; +library UNISIM; +use UNISIM.VCOMPONENTS.all; use work.axi4_pkg.all; use work.scalp_misc.all; @@ -93,8 +93,6 @@ architecture rtl of scalp_router_interface is SysRstxRNAI : in std_ulogic; DstRouterNetAddrxDO : out t_scalp_netaddr; RouterNetAddrValidxSO : out std_ulogic; - -- BookingVectorValidxSI : in std_ulogic; - -- SchedulerAckxDI : in std_ulogic_vector((C_SCALP_SCHEDULER_ACK_VECTOR_SIZE - 1) downto 0); RXAxi4M2SLinkxDI : in t_axi4m2s; RXAxi4S2MLinkxDO : out t_axi4s2m; TXAxi4M2SLinkxDO : out t_axi4m2s; @@ -217,21 +215,9 @@ architecture rtl of scalp_router_interface is signal DTXAxi4S2MLinkxD : t_axi4s2m := C_NO_AXI4_S2M; -- Attributes - attribute mark_debug : string; - attribute keep : string; + attribute mark_debug : string; + attribute keep : string; -- - -- attribute mark_debug of RXAxi4m2sIfxD : signal is "true"; - -- attribute keep of RXAxi4m2sIfxD : signal is "true"; - -- attribute mark_debug of RXAxi4s2mIfxD : signal is "true"; - -- attribute keep of RXAxi4s2mIfxD : signal is "true"; - -- attribute mark_debug of TXAxi4M2SLinkxD : signal is "true"; - -- attribute keep of TXAxi4M2SLinkxD : signal is "true"; - -- attribute mark_debug of TXAxi4S2MLinkxD : signal is "true"; - -- attribute keep of TXAxi4S2MLinkxD : signal is "true"; - -- attribute mark_debug of TXAxi4m2sLinksxD : signal is "true"; - -- attribute keep of TXAxi4m2sLinksxD : signal is "true"; - -- attribute mark_debug of TXAxi4s2mLinksxD : signal is "true"; - -- attribute keep of TXAxi4s2mLinksxD : signal is "true"; begin -- architecture rtl @@ -261,8 +247,6 @@ begin -- architecture rtl SysRstxRNAI => SysRstxRNAI, DstRouterNetAddrxDO => DstRouterNetAddrxD, RouterNetAddrValidxSO => RouterNetAddrValidxS, - -- BookingVectorValidxSI => BookingVectorValidxS, - -- SchedulerAckxDI => SchedulerAckxD, RXAxi4M2SLinkxDI => RXAxi4m2sIfxD, RXAxi4S2MLinkxDO => RXAxi4s2mIfxD, TXAxi4M2SLinkxDO => TXAxi4M2SLinkxD, diff --git a/ips/hw/scalp_router/src/hdl/scalp_rx_side.vhd b/ips/hw/scalp_router/src/hdl/scalp_rx_side.vhd index 706c952..4fe94ef 100644 --- a/ips/hw/scalp_router/src/hdl/scalp_rx_side.vhd +++ b/ips/hw/scalp_router/src/hdl/scalp_rx_side.vhd @@ -15,7 +15,7 @@ -- Tool version: 2019.1 -- Description: Scalp RX side state machine. -- --- Last update: 2021-05-11 +-- Last update: 2021-05-19 -- --------------------------------------------------------------------------------- library ieee; @@ -27,8 +27,8 @@ use ieee.math_real.all; --use ieee.std_logic_arith.all; --use ieee.std_logic_misc.all; ---library UNISIM; ---use UNISIM.VCOMPONENTS.all; +library UNISIM; +use UNISIM.VCOMPONENTS.all; use work.axi4_pkg.all; use work.scalp_misc.all; @@ -93,8 +93,6 @@ architecture behavioral of scalp_rx_side is -- Enity IO Signals signal SchedulerAckxD : std_ulogic_vector((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => '0'); - -- signal BookingVectorxDP : std_ulogic_vector((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => '0'); - -- signal BookingVectorxDN : std_ulogic_vector((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => '0'); signal TXAxi4M2SLinkxD : t_axi4m2s := C_NO_AXI4_M2S; signal TXAxi4S2MLinkxD : t_axi4s2m := C_NO_AXI4_S2M; signal RXAxi4M2SLinkxD : t_axi4m2s_vector((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => C_NO_AXI4_M2S); @@ -104,7 +102,6 @@ architecture behavioral of scalp_rx_side is signal RequestVectorxDP : std_ulogic_vector((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => '0'); signal RequestVectorxDN : std_ulogic_vector((C_SCALP_NEIGHBORS_VECTOR_SIZE - 1) downto 0) := (others => '0'); signal ArbitratedxS : std_ulogic := '0'; - -- signal GrantVectorxD : std_ulogic_vector((C_SCALP_PORTS - 1) downto 0) := (others => '0'); signal GrantIndexxD : std_ulogic_vector((scalp_log2ceilnz(C_SCALP_NEIGHBORS_VECTOR_SIZE) - 1) downto 0) := (others => '0'); -- Rx Side States signal RXSideStatexDP : t_scalp_rx_side_states := E_SCALP_RX_IDLE; @@ -116,45 +113,9 @@ architecture behavioral of scalp_rx_side is signal EnPopNPushxS : std_ulogic := '0'; -- Attributes - attribute mark_debug : string; - attribute keep : string; + attribute mark_debug : string; + attribute keep : string; -- - -- attribute mark_debug of TXAxi4M2SLinkxD : signal is "true"; - -- attribute keep of TXAxi4M2SLinkxD : signal is "true"; - -- attribute mark_debug of TXAxi4S2MLinkxD : signal is "true"; - -- attribute keep of TXAxi4S2MLinkxD : signal is "true"; - -- attribute mark_debug of RXAxi4M2SLinkxD : signal is "true"; - -- attribute keep of RXAxi4M2SLinkxD : signal is "true"; - -- attribute mark_debug of RXAxi4S2MLinkxD : signal is "true"; - -- attribute keep of RXAxi4S2MLinkxD : signal is "true"; - -- attribute mark_debug of BookingVectorxDP : signal is "true"; - -- attribute keep of BookingVectorxDP : signal is "true"; - -- attribute mark_debug of BookingVectorxDN : signal is "true"; - -- attribute keep of BookingVectorxDN : signal is "true"; - -- attribute mark_debug of SchedulerAckxD : signal is "true"; - -- attribute keep of SchedulerAckxD : signal is "true"; - -- attribute mark_debug of RequestVectorxDP : signal is "true"; - -- attribute keep of RequestVectorxDP : signal is "true"; - -- attribute mark_debug of RequestVectorxDN : signal is "true"; - -- attribute keep of RequestVectorxDN : signal is "true"; - -- attribute mark_debug of ArbitratexS : signal is "true"; - -- attribute keep of ArbitratexS : signal is "true"; - -- attribute mark_debug of ArbitratedxS : signal is "true"; - -- attribute keep of ArbitratedxS : signal is "true"; - -- attribute mark_debug of GrantIndexxD : signal is "true"; - -- attribute keep of GrantIndexxD : signal is "true"; - -- attribute mark_debug of RXSideStatexDP : signal is "true"; - -- attribute keep of RXSideStatexDP : signal is "true"; - -- attribute mark_debug of RXSideStatexDN : signal is "true"; - -- attribute keep of RXSideStatexDN : signal is "true"; - -- attribute mark_debug of ReadyInxD : signal is "true"; - -- attribute keep of ReadyInxD : signal is "true"; - -- attribute mark_debug of ReadyOutxD : signal is "true"; - -- attribute keep of ReadyOutxD : signal is "true"; - -- attribute mark_debug of EnPopNPushxS : signal is "true"; - -- attribute keep of EnPopNPushxS : signal is "true"; - -- attribute mark_debug of Axism2sInxD : signal is "true"; - -- attribute keep of Axism2sInxD : signal is "true"; begin -- architecture behavioral @@ -214,7 +175,7 @@ begin -- architecture behavioral RXSideStatexDP <= RXSideStatexDN; RequestVectorxDP <= RequestVectorxDN; end if; - end process UpdateRegxP; + end process UpdateRegxP; RxSideStateMachinexP : process (ArbitratedxS, BookingVectorxDI, GrantIndexxD, RXAxi4M2SLinkxD, @@ -253,17 +214,12 @@ begin -- architecture behavioral EnPopNPushxS <= '1'; if TXAxi4M2SLinkxD.LastxS = '1' then - -- RXAxi4S2MLinkxD <= (others => C_NO_AXI4_S2M); -- - RXSideStatexDN <= E_SCALP_RX_ACK; + RXSideStatexDN <= E_SCALP_RX_ACK; end if; when E_SCALP_RX_ACK => SchedulerAckxD(to_integer(unsigned(GrantIndexxD))) <= '1'; - -- if to_integer(unsigned(BookingVectorxDI)) /= 0 then - -- RXSideStatexDN <= E_SCALP_RX_ARBITRATE; - -- else RXSideStatexDN <= E_SCALP_RX_IDLE; - -- end if; when others => null; end case; diff --git a/ips/hw/scalp_router/src/hdl/scalp_scheduler.vhd b/ips/hw/scalp_router/src/hdl/scalp_scheduler.vhd index 1d9d5ff..d7b2381 100644 --- a/ips/hw/scalp_router/src/hdl/scalp_scheduler.vhd +++ b/ips/hw/scalp_router/src/hdl/scalp_scheduler.vhd @@ -15,7 +15,7 @@ -- Tool version: 2019.1 -- Description: Generic Round Robin or Random Scheduler. -- --- Last update: 2020-01-17 +-- Last update: 2021-05-19 -- --------------------------------------------------------------------------------- library ieee; @@ -26,12 +26,11 @@ use ieee.numeric_std.all; --use ieee.std_logic_arith.all; --use ieee.std_logic_misc.all; ---library UNISIM; ---use UNISIM.VCOMPONENTS.all; +library UNISIM; +use UNISIM.VCOMPONENTS.all; library work; use work.scalp_misc.all; --- use work.scalp_utility.all; entity scalp_scheduler is diff --git a/ips/hw/scalp_router/src/hdl/scalp_scheduler_ack.vhd b/ips/hw/scalp_router/src/hdl/scalp_scheduler_ack.vhd index c74b872..2199368 100644 --- a/ips/hw/scalp_router/src/hdl/scalp_scheduler_ack.vhd +++ b/ips/hw/scalp_router/src/hdl/scalp_scheduler_ack.vhd @@ -15,7 +15,7 @@ -- Tool version: 2019.1 -- Description: Scalp Scheduler Acknowledge. -- --- Last update: 2019-11-22 +-- Last update: 2021-05-19 -- --------------------------------------------------------------------------------- library ieee; @@ -26,8 +26,8 @@ use ieee.numeric_std.all; --use ieee.std_logic_arith.all; use ieee.std_logic_misc.all; ---library UNISIM; ---use UNISIM.VCOMPONENTS.all; +library UNISIM; +use UNISIM.VCOMPONENTS.all; -- use work.utility.all; diff --git a/ips/hw/scalp_router/src/hdl/scalp_sp_to_axis.vhd b/ips/hw/scalp_router/src/hdl/scalp_sp_to_axis.vhd index 4f0d7b3..1c1083b 100644 --- a/ips/hw/scalp_router/src/hdl/scalp_sp_to_axis.vhd +++ b/ips/hw/scalp_router/src/hdl/scalp_sp_to_axis.vhd @@ -15,7 +15,7 @@ -- Tool version: 2019.1 -- Description: Scalp Packet to AXI Stream converter. -- --- Last update: 2021-01-11 +-- Last update: 2021-05-19 -- --------------------------------------------------------------------------------- library ieee; @@ -26,8 +26,8 @@ use ieee.numeric_std.all; --use ieee.std_logic_arith.all; --use ieee.std_logic_misc.all; ---library UNISIM; ---use UNISIM.VCOMPONENTS.all; +library UNISIM; +use UNISIM.VCOMPONENTS.all; library work; use work.axi4_pkg.all; @@ -113,29 +113,9 @@ architecture behavioral of scalp_sp_to_axis is signal ScalpRdyxS : std_ulogic := '0'; -- Attributes - attribute mark_debug : string; - attribute keep : string; + attribute mark_debug : string; + attribute keep : string; -- - -- attribute mark_debug of ScalpAxism2sxD : signal is "true"; - -- attribute keep of ScalpAxism2sxD : signal is "true"; - -- attribute mark_debug of ScalpAxiss2mxD : signal is "true"; - -- attribute keep of ScalpAxiss2mxD : signal is "true"; - -- attribute mark_debug of ScalpPacketStatexDP : signal is "true"; - -- attribute keep of ScalpPacketStatexDP : signal is "true"; - -- attribute mark_debug of ScalpPacketStatexDN : signal is "true"; - -- attribute keep of ScalpPacketStatexDN : signal is "true"; - -- attribute mark_debug of ScalpPacketCntxDP : signal is "true"; - -- attribute keep of ScalpPacketCntxDP : signal is "true"; - -- attribute mark_debug of ScalpPacketValidxS : signal is "true"; - -- attribute keep of ScalpPacketValidxS : signal is "true"; - -- attribute mark_debug of ScalpPacketxD : signal is "true"; - -- attribute keep of ScalpPacketxD : signal is "true"; - -- attribute mark_debug of DataxDP : signal is "true"; - -- attribute keep of DataxDP : signal is "true"; - -- attribute mark_debug of DataxDN : signal is "true"; - -- attribute keep of DataxDN : signal is "true"; - -- attribute mark_debug of ScalpRdyxS : signal is "true"; - -- attribute keep of ScalpRdyxS : signal is "true"; begin -- architecture behavioral diff --git a/ips/hw/scalp_router/src/hdl/scalp_tx_fanout.vhd b/ips/hw/scalp_router/src/hdl/scalp_tx_fanout.vhd index 3287500..4c4c1c8 100644 --- a/ips/hw/scalp_router/src/hdl/scalp_tx_fanout.vhd +++ b/ips/hw/scalp_router/src/hdl/scalp_tx_fanout.vhd @@ -15,7 +15,7 @@ -- Tool version: 2019.1 -- Description: Spread of the AXI4 Stream bus. -- --- Last update: 2020-11-30 +-- Last update: 2021-05-19 -- --------------------------------------------------------------------------------- library ieee; @@ -26,8 +26,8 @@ use ieee.numeric_std.all; --use ieee.std_logic_arith.all; --use ieee.std_logic_misc.all; ---library UNISIM; ---use UNISIM.VCOMPONENTS.all; +library UNISIM; +use UNISIM.VCOMPONENTS.all; -- use work.utility.all; use work.axi4_pkg.all; diff --git a/ips/hw/scalp_router/src/hdl/scalp_tx_side.vhd b/ips/hw/scalp_router/src/hdl/scalp_tx_side.vhd index ed739ec..1a0d99a 100644 --- a/ips/hw/scalp_router/src/hdl/scalp_tx_side.vhd +++ b/ips/hw/scalp_router/src/hdl/scalp_tx_side.vhd @@ -15,7 +15,7 @@ -- Tool version: 2019.1 -- Description: Scalp TX side state machine. -- --- Last update: 2021-05-18 +-- Last update: 2021-05-19 -- --------------------------------------------------------------------------------- library ieee; @@ -26,8 +26,8 @@ use ieee.numeric_std.all; --use ieee.std_logic_arith.all; --use ieee.std_logic_misc.all; ---library UNISIM; ---use UNISIM.VCOMPONENTS.all; +library UNISIM; +use UNISIM.VCOMPONENTS.all; use work.axi4_pkg.all; use work.scalp_misc.all; @@ -44,10 +44,6 @@ entity scalp_tx_side is -- Routeur Network Address DstRouterNetAddrxDO : out t_scalp_netaddr; RouterNetAddrValidxSO : out std_ulogic; - -- Indicates when the booking vector is valid. - -- BookingVectorValidxSI : in std_ulogic; - -- Scheduler Acknowledgement Vector - -- SchedulerAckxDI : in std_ulogic_vector((C_SCALP_SCHEDULER_ACK_VECTOR_SIZE - 1) downto 0); -- Axi4 Stream -- Input side RXAxi4M2SLinkxDI : in t_axi4m2s; @@ -73,51 +69,24 @@ architecture behavioral of scalp_tx_side is Axiss2mLinkxDI : in t_axi4s2m); end component scalp_fifo_double_register; - signal DstRouterNetAddrxDP : t_scalp_netaddr := C_3D_MIN_SCALP_NETADDR; - signal DstRouterNetAddrxDN : t_scalp_netaddr := C_3D_MIN_SCALP_NETADDR; - signal RouterNetAddrValidxSP : std_ulogic := '0'; - signal RouterNetAddrValidxSN : std_ulogic := '0'; - -- signal SchedulerAckxD : std_ulogic_vector((C_SCALP_SCHEDULER_ACK_VECTOR_SIZE - 1) downto 0) := (others => '0'); - signal RXAxi4M2SLinkxD : t_axi4m2s := C_NO_AXI4_M2S; - signal RXAxi4S2MLinkxD : t_axi4s2m := C_NO_AXI4_S2M; - signal TXAxi4M2SLinkxD : t_axi4m2s := C_NO_AXI4_M2S; - signal TXAxi4S2MLinkxD : t_axi4s2m := C_NO_AXI4_S2M; + signal DstRouterNetAddrxDP : t_scalp_netaddr := C_3D_MIN_SCALP_NETADDR; + signal DstRouterNetAddrxDN : t_scalp_netaddr := C_3D_MIN_SCALP_NETADDR; + signal RouterNetAddrValidxSP : std_ulogic := '0'; + signal RouterNetAddrValidxSN : std_ulogic := '0'; + signal RXAxi4M2SLinkxD : t_axi4m2s := C_NO_AXI4_M2S; + signal RXAxi4S2MLinkxD : t_axi4s2m := C_NO_AXI4_S2M; + signal TXAxi4M2SLinkxD : t_axi4m2s := C_NO_AXI4_M2S; + signal TXAxi4S2MLinkxD : t_axi4s2m := C_NO_AXI4_S2M; -- TX Side States - signal TXSideStatexDP : t_scalp_tx_side_states := E_SCALP_TX_IDLE; - signal TXSideStatexDN : t_scalp_tx_side_states := E_SCALP_TX_IDLE; + signal TXSideStatexDP : t_scalp_tx_side_states := E_SCALP_TX_IDLE; + signal TXSideStatexDN : t_scalp_tx_side_states := E_SCALP_TX_IDLE; -- Others - signal ReadyInxD : t_axi4s2m := C_NO_AXI4_S2M; - signal EnPopxS : std_ulogic := '0'; + signal ReadyInxD : t_axi4s2m := C_NO_AXI4_S2M; + signal EnPopxS : std_ulogic := '0'; - attribute mark_debug : string; - attribute keep : string; + attribute mark_debug : string; + attribute keep : string; -- - attribute mark_debug of TXAxi4M2SLinkxD : signal is "true"; - attribute keep of TXAxi4M2SLinkxD : signal is "true"; - attribute mark_debug of TXAxi4S2MLinkxD : signal is "true"; - attribute keep of TXAxi4S2MLinkxD : signal is "true"; - attribute mark_debug of ReadyInxD : signal is "true"; - attribute keep of ReadyInxD : signal is "true"; - attribute mark_debug of TXSideStatexDN : signal is "true"; - attribute keep of TXSideStatexDN : signal is "true"; - attribute mark_debug of TXSideStatexDP : signal is "true"; - attribute keep of TXSideStatexDP : signal is "true"; - attribute mark_debug of RXAxi4M2SLinkxD : signal is "true"; - attribute keep of RXAxi4M2SLinkxD : signal is "true"; - attribute mark_debug of RXAxi4S2MLinkxD : signal is "true"; - attribute keep of RXAxi4S2MLinkxD : signal is "true"; - attribute mark_debug of DstRouterNetAddrxDN : signal is "true"; - attribute keep of DstRouterNetAddrxDN : signal is "true"; - attribute mark_debug of DstRouterNetAddrxDP : signal is "true"; - attribute keep of DstRouterNetAddrxDP : signal is "true"; - attribute mark_debug of RouterNetAddrValidxSN : signal is "true"; - attribute keep of RouterNetAddrValidxSN : signal is "true"; - attribute mark_debug of RouterNetAddrValidxSP : signal is "true"; - attribute keep of RouterNetAddrValidxSP : signal is "true"; - attribute mark_debug of EnPopxS : signal is "true"; - attribute keep of EnPopxS : signal is "true"; - -- attribute mark_debug of SchedulerAckxD : signal is "true"; - -- attribute keep of SchedulerAckxD : signal is "true"; begin -- architecture behavioral @@ -127,14 +96,11 @@ begin -- architecture behavioral begin -- block EntityIOxB DstRouterNetAddrxAS : DstRouterNetAddrxDO <= DstRouterNetAddrxDP; RouterNetAddrValidxAS : RouterNetAddrValidxSO <= RouterNetAddrValidxSP; - -- SchedulerAckxAS : SchedulerAckxD <= SchedulerAckxDI; -- Ext. Side RXAxi4M2SLinkxAS : RXAxi4M2SLinkxD <= RXAxi4M2SLinkxDI; RXAxi4S2MLinkxAS : RXAxi4S2MLinkxDO <= RXAxi4S2MLinkxD; TXAxi4M2SLinkxAS : TXAxi4M2SLinkxDO <= TXAxi4M2SLinkxD; TXAxi4S2MLinkxAS : TXAxi4S2MLinkxD <= TXAxi4S2MLinkxDI; - - -- BookingVectorValidxAS : BookingVectorValidxS <= BookingVectorValidxSI; end block EntityIOxB; AsyncStatementsxB : block is -- GitLab