From 5854f55e02c4a7e6315600397e19f5b628ce2764 Mon Sep 17 00:00:00 2001 From: "joachim.schmidt" <joachim.schmidt@hesge.ch> Date: Tue, 18 May 2021 11:20:22 +0200 Subject: [PATCH] Updated scalp_fifo_double_register.vhd --- .../src/hdl/scalp_fifo_double_register.vhd | 141 +++++------------- .../src/sim/tb_scalp_fifo_double_register.vhd | 97 ++++++------ packages/hw/axi4_pkg/src/hdl/axi4_pkg.vhd | 2 +- 3 files changed, 93 insertions(+), 147 deletions(-) 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 9b03cfd..a396979 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 @@ -26,11 +26,10 @@ 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; entity scalp_fifo_double_register is @@ -51,39 +50,36 @@ architecture behavioral of scalp_fifo_double_register is -- Signals -- Axis Data, Valid, Last, Keep - signal Axism2s0xD : t_axi4m2s := C_NO_AXI4_M2S; - signal Axism2s1xDP : t_axi4m2s := C_NO_AXI4_M2S; - signal Axism2s1xDN : t_axi4m2s := C_NO_AXI4_M2S; - signal Axism2s2xDP : t_axi4m2s := C_NO_AXI4_M2S; - signal Axism2s2xDN : t_axi4m2s := C_NO_AXI4_M2S; - signal Axism2s3xD : t_axi4m2s := C_NO_AXI4_M2S; + signal Axism2s0xD : t_axi4m2s := C_NO_AXI4_M2S; + signal Axism2s1xDP : t_axi4m2s := C_NO_AXI4_M2S; + signal Axism2s1xDN : t_axi4m2s := C_NO_AXI4_M2S; + signal Axism2s2xDP : t_axi4m2s := C_NO_AXI4_M2S; + signal Axism2s2xDN : t_axi4m2s := C_NO_AXI4_M2S; + signal Axism2s3xD : t_axi4m2s := C_NO_AXI4_M2S; -- Axis Ready - signal Axiss2m1xDN : t_axi4s2m := C_NO_AXI4_S2M; - signal Axiss2m1xDP : t_axi4s2m := C_NO_AXI4_S2M; - signal MUX3SelectxD : std_ulogic := '0'; + signal Axiss2m1xDN : t_axi4s2m := C_NO_AXI4_S2M; + signal Axiss2m1xDP : 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 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"; - attribute mark_debug of MUX3SelectxD : signal is "true"; - attribute keep of MUX3SelectxD : signal is "true"; + 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 @@ -96,10 +92,18 @@ begin -- architecture behavioral -- S2M Axiss2mLinkInxAS : Axiss2m1xDN <= Axiss2mLinkxDI; Axiss2mLinkOutxAS : Axiss2mLinkxDO <= Axiss2m1xDP; - MUX3SelectxAS : MUX3SelectxD <= not Axiss2mLinkxDI.ReadyxS; end block EntityIOxB; + MUXxB : block is + begin -- block MUXxB + + MUX1xAS : Axism2s1xDN <= Axism2s0xD when Axiss2m1xDP.ReadyxS = '1' else Axism2s1xDP; + MUX2xAS : Axism2s2xDN <= Axism2s0xD when Axiss2m1xDN.ReadyxS = '1' else Axism2s2xDP; + MUX3xAS : Axism2s3xD <= Axism2s1xDP when Axiss2m1xDP.ReadyxS = '1' else Axism2s2xDP; + + end block MUXxB; + RegistersxP : process (SysClkxCI, SysRstxRNAI) is begin -- process RegistersxP if SysRstxRNAI = '0' then @@ -117,75 +121,4 @@ begin -- architecture behavioral end if; end process RegistersxP; - MUXxB : block is - begin -- block MUXxB - - MUX1xAS : Axism2s1xDN <= Axism2s0xD when Axiss2m1xDP.ReadyxS = '1' else Axism2s1xDP; - MUX2xAS : Axism2s2xDN <= Axism2s0xD when Axiss2m1xDN.ReadyxS = '1' else Axism2s2xDP; - MUX3xAS : Axism2s3xD <= Axism2s1xDP when MUX3SelectxD = '1'else Axism2s2xDP; - - end block MUXxB; - - -- EntityIOxB : block is - -- begin -- block EntityIOxB - -- -- Axis m2s - -- Axism2s0FromxAS : Axism2s0xD <= Axism2sLinkxDI; - -- Axism2s3ToxAS : Axism2sLinkxDO <= Axism2s3xD; - -- -- Axis s2m - -- Axiss2m0FromxAS : Axiss2m0xD <= Axiss2mLinkxDI; - -- Axiss2m1FromxAS : Axiss2m1xDN <= Axiss2m0xD; - -- Axiss2m1ToxAS : Axiss2mLinkxDO <= Axiss2m1xDP; - -- end block EntityIOxB; - - -- AsyncStatementsxB : block is - -- begin -- block AsyncStatementsxB - -- Axism2s3FromxAS : Axism2s3xD <= Axism2s1xDP when - -- (Axiss2m0xD.ReadyxS = '0' and Axiss2m1xDP.ReadyxS = '1') or - -- (Axiss2m0xD.ReadyxS = '1' and Axiss2m1xDP.ReadyxS = '1') else - -- Axism2s2xDP; - -- end block AsyncStatementsxB; - - -- UpdateRegxP : process (SysClkxCI, SysRstxRNAI) is - -- begin -- process UpdateRegxP - -- if SysRstxRNAI = '0' then - -- -- Axis m2s - -- Axism2s1xDP <= C_NO_AXI4_M2S; - -- Axism2s2xDP <= C_NO_AXI4_M2S; - -- -- Axis s2m - -- Axiss2m1xDP <= C_NO_AXI4_S2M; - -- -- Enable Port - -- -- ScalpFifoEnablexSP <= '0'; - -- elsif rising_edge(SysClkxCI) then - -- -- Axis m2s - -- Axism2s1xDP <= Axism2s1xDN; - -- Axism2s2xDP <= Axism2s2xDN; - -- -- Axis s2m - -- Axiss2m1xDP <= Axiss2m1xDN; - -- -- Enable Port - -- -- ScalpFifoEnablexSP <= ScalpFifoEnablexSN; - -- end if; - -- end process UpdateRegxP; - - -- TransistionOnReadyxP : process (Axism2s0xD, Axism2s1xDP, Axism2s2xDP, - -- Axiss2m0xD.ReadyxS, Axiss2m1xDP.ReadyxS) is - -- begin -- process TransistionOnReadyxP - -- -- Defaults values - -- Axism2s1xDN <= Axism2s1xDP; - -- Axism2s2xDN <= Axism2s2xDP; - - -- if Axiss2m0xD.ReadyxS = '0' and Axiss2m1xDP.ReadyxS = '0' then - -- Axism2s1xDN <= Axism2s1xDP; - -- Axism2s2xDN <= Axism2s2xDP; - -- elsif Axiss2m0xD.ReadyxS = '0' and Axiss2m1xDP.ReadyxS = '1' then - -- Axism2s1xDN <= Axism2s0xD; - -- Axism2s2xDN <= Axism2s2xDP; - -- elsif Axiss2m0xD.ReadyxS = '1' and Axiss2m1xDP.ReadyxS = '0' then - -- Axism2s1xDN <= Axism2s1xDP; - -- Axism2s2xDN <= Axism2s0xD; - -- else - -- Axism2s1xDN <= Axism2s0xD; - -- Axism2s2xDN <= Axism2s0xD; - -- end if; - -- end process TransistionOnReadyxP; - end architecture behavioral; diff --git a/ips/hw/scalp_router/src/sim/tb_scalp_fifo_double_register.vhd b/ips/hw/scalp_router/src/sim/tb_scalp_fifo_double_register.vhd index 695a145..ae0fd80 100644 --- a/ips/hw/scalp_router/src/sim/tb_scalp_fifo_double_register.vhd +++ b/ips/hw/scalp_router/src/sim/tb_scalp_fifo_double_register.vhd @@ -15,7 +15,7 @@ -- Tool version: 2019.1 -- Description: Testbench for scalp_fifo_double_register. -- --- Last update: 2020-02-21 +-- Last update: 2021-05-18 -- --------------------------------------------------------------------------------- library ieee; @@ -33,9 +33,10 @@ use ieee.math_real.all; --use UNISIM.VCOMPONENTS.all; library work; -use work.aurora_axi4_pkg.all; -use work.scalp_misc.all; -use work.scalp_utility.all; +-- use work.aurora_axi4_pkg.all; +use work.axi4_pkg.all; +-- use work.scalp_misc.all; +-- use work.scalp_utility.all; entity tb_scalp_fifo_double_register is @@ -47,13 +48,10 @@ architecture testbench of tb_scalp_fifo_double_register is component scalp_fifo_double_register is port ( - -- System Clock and Reset SysClkxCI : in std_ulogic; SysRstxRNAI : in std_ulogic; - -- Axis Ports (Slave Side) Axism2sLinkxDI : in t_axi4m2s; Axiss2mLinkxDO : out t_axi4s2m; - -- Axis Ports (Master Side) Axism2sLinkxDO : out t_axi4m2s; Axiss2mLinkxDI : in t_axi4s2m); end component scalp_fifo_double_register; @@ -76,7 +74,7 @@ begin -- architecture testbench AsyncStatementsxB : block is begin -- block AsyncStatementsxB SysClkxAS : SysClkxC <= not SysClkxC after (C_CLK_PERIOD / 2); - SysRstxAS : SysRstxRNA <= '1' after (C_CLK_PERIOD * 10); + SysRstxAS : SysRstxRNA <= '1' after (C_CLK_PERIOD * 5); DataxAS : Axism2sLinkInxD.DataxD <= std_ulogic_vector(to_unsigned(CounterxDP, 32)); end block AsyncStatementsxB; @@ -91,13 +89,10 @@ begin -- architecture testbench ScalpFifoDoubleRegisterxI : entity work.scalp_fifo_double_register port map ( - -- System Clock and Reset SysClkxCI => SysClkxC, SysRstxRNAI => SysRstxRNA, - -- Axis Ports (Slave Side) Axism2sLinkxDI => Axism2sLinkInxD, Axiss2mLinkxDO => Axiss2mLinkOutxD, - -- Axis Ports (Master Side) Axism2sLinkxDO => Axism2sLinkOutxD, Axiss2mLinkxDI => Axiss2mLinkInxD); @@ -128,29 +123,29 @@ begin -- architecture testbench wait until (SysRstxRNA = '1'); Axism2sLinkInxD.ValidxS <= '1'; - for i in 0 to 30 loop - wait until rising_edge(SysClkxC); - end loop; -- i + for i in 0 to 60 loop + wait until rising_edge(SysClkxC); + end loop; -- i - Axism2sLinkInxD.ValidxS <= '0'; + Axism2sLinkInxD.ValidxS <= '0'; - for i in 0 to 6 loop - wait until rising_edge(SysClkxC); - end loop; -- i + for i in 0 to 6 loop + wait until rising_edge(SysClkxC); + end loop; -- i - Axism2sLinkInxD.ValidxS <= '1'; + Axism2sLinkInxD.ValidxS <= '1'; - for i in 0 to 14 loop - wait until rising_edge(SysClkxC); - end loop; -- i + -- for i in 0 to 14 loop + -- wait until rising_edge(SysClkxC); + -- end loop; -- i - Axism2sLinkInxD.ValidxS <= '0'; + -- Axism2sLinkInxD.ValidxS <= '0'; - for i in 0 to 10 loop - wait until rising_edge(SysClkxC); - end loop; -- i + -- for i in 0 to 10 loop + -- wait until rising_edge(SysClkxC); + -- end loop; -- i - Axism2sLinkInxD.ValidxS <= '1'; + -- Axism2sLinkInxD.ValidxS <= '1'; wait; end process ValidxP; @@ -160,8 +155,8 @@ begin -- architecture testbench Axiss2mLinkInxD.ReadyxS <= '0'; wait until (SysRstxRNA = '1'); Axiss2mLinkInxD.ReadyxS <= '1'; - wait until rising_edge(SysClkxC); - wait until rising_edge(SysClkxC); + -- wait until rising_edge(SysClkxC); + -- wait until rising_edge(SysClkxC); for i in 0 to 10 loop wait until rising_edge(SysClkxC); @@ -175,29 +170,47 @@ begin -- architecture testbench Axiss2mLinkInxD.ReadyxS <= '1'; - for i in 0 to 40 loop - wait until rising_edge(SysClkxC); - end loop; -- i + wait until rising_edge(SysClkxC); Axiss2mLinkInxD.ReadyxS <= '0'; - for i in 0 to 5 loop - wait until rising_edge(SysClkxC); - end loop; -- i + wait until rising_edge(SysClkxC); - for i in 0 to 20 loop + Axiss2mLinkInxD.ReadyxS <= '1'; + + for i in 0 to 10 loop wait until rising_edge(SysClkxC); end loop; -- i + Axiss2mLinkInxD.ReadyxS <= '0'; + + wait until rising_edge(SysClkxC); + Axiss2mLinkInxD.ReadyxS <= '1'; - for i in 0 to 5 loop - wait until rising_edge(SysClkxC); - end loop; -- i + -- for i in 0 to 40 loop + -- wait until rising_edge(SysClkxC); + -- end loop; -- i - for i in 0 to 10 loop - wait until rising_edge(SysClkxC); - end loop; -- i + -- Axiss2mLinkInxD.ReadyxS <= '0'; + + -- for i in 0 to 5 loop + -- wait until rising_edge(SysClkxC); + -- end loop; -- i + + -- for i in 0 to 20 loop + -- wait until rising_edge(SysClkxC); + -- end loop; -- i + + -- Axiss2mLinkInxD.ReadyxS <= '1'; + + -- for i in 0 to 5 loop + -- wait until rising_edge(SysClkxC); + -- end loop; -- i + + -- for i in 0 to 10 loop + -- wait until rising_edge(SysClkxC); + -- end loop; -- i wait; end process ReadyxP; diff --git a/packages/hw/axi4_pkg/src/hdl/axi4_pkg.vhd b/packages/hw/axi4_pkg/src/hdl/axi4_pkg.vhd index 792aad9..d82274a 100644 --- a/packages/hw/axi4_pkg/src/hdl/axi4_pkg.vhd +++ b/packages/hw/axi4_pkg/src/hdl/axi4_pkg.vhd @@ -15,7 +15,7 @@ -- Tool version: 2020.2 -- Description: AXI4 format bus signals. -- --- Last update: 2020-11-25 +-- Last update: 2021-05-18 -- --------------------------------------------------------------------------------- -- GitLab