diff --git a/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_crosslets_remote_ring.vhd b/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_crosslets_remote_ring.vhd index ea76ef8113e5701ef3133c9b28b61ab386cf2631..1ec7de0db3d269388ee83389ea985b8da6ebf426 100644 --- a/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_crosslets_remote_ring.vhd +++ b/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_crosslets_remote_ring.vhd @@ -78,6 +78,24 @@ -- node 78: -1 -1 -1 -1 -1 -1 1800 1599 1351 1137 938 693 472 253 -1 -1 -- node 79: -1 -1 -1 -1 -1 -1 -1 1809 1566 1344 1143 899 681 460 259 -1 -- +-- # FPGA_xst_ring_rx_latency_R (sim: c_nof_delay = 0 with sdp_crosslets_remote_v2.vhd): +-- # 0: -1 -1 -1 -1 -1 -1 -1 -1 1604 1409 1211 1016 818 623 427 230 +-- # 1: 230 -1 -1 -1 -1 -1 -1 -1 -1 1604 1409 1211 1016 818 623 427 +-- # 2: 427 230 -1 -1 -1 -1 -1 -1 -1 -1 1604 1409 1211 1016 818 623 +-- # 3: 623 427 230 -1 -1 -1 -1 -1 -1 -1 -1 1604 1409 1211 1016 818 +-- # 4: 818 623 427 230 -1 -1 -1 -1 -1 -1 -1 -1 1604 1409 1211 1016 +-- # 5: 1016 818 623 427 230 -1 -1 -1 -1 -1 -1 -1 -1 1604 1409 1211 +-- # 6: 1211 1016 818 623 427 230 -1 -1 -1 -1 -1 -1 -1 -1 1604 1409 +-- # 7: 1409 1211 1016 818 623 427 230 -1 -1 -1 -1 -1 -1 -1 -1 1604 +-- # 8: 1604 1409 1211 1016 818 623 427 230 -1 -1 -1 -1 -1 -1 -1 -1 +-- # 9: -1 1604 1409 1211 1016 818 623 427 230 -1 -1 -1 -1 -1 -1 -1 +-- # 10: -1 -1 1604 1409 1211 1016 818 623 427 230 -1 -1 -1 -1 -1 -1 +-- # 11: -1 -1 -1 1604 1409 1211 1016 818 623 427 230 -1 -1 -1 -1 -1 +-- # 12: -1 -1 -1 -1 1604 1409 1211 1016 818 623 427 230 -1 -1 -1 -1 +-- # 13: -1 -1 -1 -1 -1 1604 1409 1211 1016 818 623 427 230 -1 -1 -1 +-- # 14: -1 -1 -1 -1 -1 -1 1604 1409 1211 1016 818 623 427 230 -1 -1 +-- # 15: -1 -1 -1 -1 -1 -1 -1 1604 1409 1211 1016 818 623 427 230 -1 +-- -- # FPGA_xst_ring_rx_latency_R (sim: c_nof_delay = 12): -- # 0: -1 -1 -1 -1 -1 -1 -1 -1 1729 1533 1332 1053 856 638 442 245 -- # 1: 245 -1 -1 -1 -1 -1 -1 -1 -1 1729 1533 1332 1053 856 638 442 @@ -132,6 +150,24 @@ -- node 78: -1 -1 -1 -1 -1 -1 -1 1593 1371 1171 928 732 488 268 12 -1 -- node 79: -1 -1 -1 -1 -1 -1 -1 -1 1587 1387 1143 948 702 480 262 12 -- +-- # FPGA_xst_ring_tx_latency_R (sim: c_nof_delay = 0 with sdp_crosslets_remote_v2.vhd): +-- # 0: 13 -1 -1 -1 -1 -1 -1 -1 -1 1415 1217 1023 824 629 434 237 +-- # 1: 237 13 -1 -1 -1 -1 -1 -1 -1 -1 1415 1217 1023 824 629 434 +-- # 2: 434 237 13 -1 -1 -1 -1 -1 -1 -1 -1 1415 1217 1023 824 629 +-- # 3: 629 434 237 13 -1 -1 -1 -1 -1 -1 -1 -1 1415 1217 1023 824 +-- # 4: 824 629 434 237 13 -1 -1 -1 -1 -1 -1 -1 -1 1415 1217 1023 +-- # 5: 1023 824 629 434 237 13 -1 -1 -1 -1 -1 -1 -1 -1 1415 1217 +-- # 6: 1217 1023 824 629 434 237 13 -1 -1 -1 -1 -1 -1 -1 -1 1415 +-- # 7: 1415 1217 1023 824 629 434 237 13 -1 -1 -1 -1 -1 -1 -1 -1 +-- # 8: -1 1415 1217 1023 824 629 434 237 13 -1 -1 -1 -1 -1 -1 -1 +-- # 9: -1 -1 1415 1217 1023 824 629 434 237 13 -1 -1 -1 -1 -1 -1 +-- # 10: -1 -1 -1 1415 1217 1023 824 629 434 237 13 -1 -1 -1 -1 -1 +-- # 11: -1 -1 -1 -1 1415 1217 1023 824 629 434 237 13 -1 -1 -1 -1 +-- # 12: -1 -1 -1 -1 -1 1415 1217 1023 824 629 434 237 13 -1 -1 -1 +-- # 13: -1 -1 -1 -1 -1 -1 1415 1217 1023 824 629 434 237 13 -1 -1 +-- # 14: -1 -1 -1 -1 -1 -1 -1 1415 1217 1023 824 629 434 237 13 -1 +-- # 15: -1 -1 -1 -1 -1 -1 -1 -1 1415 1217 1023 824 629 434 237 13 +-- -- # FPGA_xst_ring_tx_latency_R (sim: c_nof_delay = 12): -- # 0: 12 -1 -1 -1 -1 -1 -1 -1 -1 1539 1339 1119 862 645 448 251 -- # 1: 251 12 -1 -1 -1 -1 -1 -1 -1 -1 1539 1339 1119 862 645 448 @@ -186,6 +222,24 @@ -- node 78: 1 206 430 648 868 1109 1332 1559 1772 -- node 79: 1 208 430 650 870 1109 1328 1550 1775 -- +-- # FPGA_xst_rx_align_latency_R (sim: c_nof_delay = 0 with sdp_crosslets_remote_v2.vhd): +-- # 0: 1 235 432 628 823 1021 1216 1414 1609 +-- # 1: 1 235 432 628 823 1021 1216 1414 1609 +-- # 2: 1 235 432 628 823 1021 1216 1414 1609 +-- # 3: 1 235 432 628 823 1021 1216 1414 1609 +-- # 4: 1 235 432 628 823 1021 1216 1414 1609 +-- # 5: 1 235 432 628 823 1021 1216 1414 1609 +-- # 6: 1 235 432 628 823 1021 1216 1414 1609 +-- # 7: 1 235 432 628 823 1021 1216 1414 1609 +-- # 8: 1 235 432 628 823 1021 1216 1414 1609 +-- # 9: 1 235 432 628 823 1021 1216 1414 1609 +-- # 10: 1 235 432 628 823 1021 1216 1414 1609 +-- # 11: 1 235 432 628 823 1021 1216 1414 1609 +-- # 12: 1 235 432 628 823 1021 1216 1414 1609 +-- # 13: 1 235 432 628 823 1021 1216 1414 1609 +-- # 14: 1 235 432 628 823 1021 1216 1414 1609 +-- # 15: 1 235 432 628 823 1021 1216 1414 1609 +-- -- # FPGA_xst_rx_align_latency_R (sim: c_nof_delay = 12): -- # 0: 1 199 396 593 810 1109 1308 1506 1702 -- # 1: 1 199 396 593 810 1109 1308 1506 1702 @@ -222,7 +276,7 @@ -- # 14: 1 217 436 653 872 1109 1326 1544 1762 -- # 15: 1 217 436 653 872 1109 1326 1544 1762 -- --- - xst_aligned_latency (SDP-ARTS HW): # FPGA_xst_aligned_latency_R (sim: c_nof_delay = 12, 25): +-- - xst_aligned_latency (SDP-ARTS HW): # FPGA_xst_aligned_latency_R (sim: c_nof_delay = 0, 12, 25): -- node 64: 2051 # 0: 2051 -- node 65: 2051 # 1: 2051 -- node 66: 2051 # 2: 2051 @@ -274,9 +328,13 @@ architecture tb of tb_sdp_crosslets_remote_ring is -- Apply cable delay in tech_pll_clk_156_period units, to remain aligned with tr_10GbE sim model -- . Choose c_cable_delay = 16 * 6.4 ~= 102 ns ~= 20 dp_clk of 5 ns, to match delay seen on HW -- . Minimum c_cable_delay >= 12 * 6.4 = 77 ns ~= 15 dp_clk of 5 ns, else missed blocks in x_sosi + -- This minimum occurs when g_nof_rn > 8 and was found with g_nof_rn = 16. It happens due to + -- that the local crosslets are passed through ring_mux and dp_demux. This causes that the + -- block period of the local crosslets can vary and the there is not enough time to read all + -- aligned croslets. Therefore instead use sdp_crosslets_remote_v2.vhd. -- . Maximum c_cable_delay <= 29 * 6.4 = 185 ns ~= 37 dp_clk of 5 ns, else missed blocks in x_sosi constant c_clk_156_period : time := tech_pll_clk_156_period; -- 6.400020 ns ~= 156.25 MHz - constant c_nof_delay : natural := 20; + constant c_nof_delay : natural := 0; constant c_cable_delay : time := c_clk_156_period * c_nof_delay; -- XST data @@ -345,6 +403,8 @@ architecture tb of tb_sdp_crosslets_remote_ring is signal crosslets_copi_arr : t_mem_copi_arr(c_last_rn downto 0) := (others => c_mem_copi_rst); signal crosslets_cipo_2arr : t_crosslets_cipo_2arr(c_last_rn downto 0); signal x_sosi_2arr : t_crosslets_sosi_2arr(c_last_rn downto 0); + signal x_sosi_2arr_valids : std_logic_vector(g_nof_rn * c_P_sq - 1 downto 0); + signal x_sosi_arr : t_dp_sosi_arr(c_last_rn downto 0); signal x_sosi : t_dp_sosi; -- 10GbE ring @@ -701,7 +761,7 @@ begin ); -- Intermediate crosslets alignment at each node - u_sdp_crosslets_remote : entity work.sdp_crosslets_remote + u_sdp_crosslets_remote : entity work.sdp_crosslets_remote_v2 generic map ( g_P_sq => c_P_sq ) @@ -746,13 +806,29 @@ begin ); end generate; -- gen_dut - x_sosi <= x_sosi_2arr(0)(0); + -- View status of x_sosi_2arr + p_x_sosi_2arr : process(x_sosi_2arr) + begin + for RN in 0 to c_last_rn loop + -- Group all x_sosi_2arr valids into one slv + for P in 0 to c_P_sq - 1 loop + x_sosi_2arr_valids(RN * c_P_sq + P) <= x_sosi_2arr(RN)(P).valid; + end loop; + + -- Group aligned first output from all RN + x_sosi_arr(RN) <= x_sosi_2arr(RN)(0); + end loop; + + -- Get aligned first output from first RN + x_sosi <= x_sosi_2arr(0)(0); + end process; ------------------------------------------------------------------------------ -- Verify crosslets at every node, to check that no packets were lost ------------------------------------------------------------------------------ p_verify_crosslets : process(dp_clk) begin + -- Verify that data /= 0, so no lost data = 0 insertion for RN in 0 to c_last_rn Loop for P in 0 to c_P_sq - 1 loop if x_sosi_2arr(RN)(P).valid = '1' then @@ -761,6 +837,13 @@ begin end if; end loop; end loop; + + -- Verify that all aligned outputs on all RN are valid at the same time + if x_sosi.valid = '1' then + assert vector_and(x_sosi_2arr_valids) = '1' report "Missing aligned output valid" severity error; + else + assert vector_and(x_sosi_2arr_valids) = '0' report "Unexpected aligned output valid" severity error; + end if; end process; ------------------------------------------------------------------------------