diff --git a/libraries/io/eth/tb/vhdl/tb_tb_eth_tester.vhd b/libraries/io/eth/tb/vhdl/tb_tb_eth_tester.vhd index b5c0cc5e4e93d94e99a65933eeb2d649738d180f..daecca1384d940c8261150f3127d6ca0503208d3 100644 --- a/libraries/io/eth/tb/vhdl/tb_tb_eth_tester.vhd +++ b/libraries/io/eth/tb/vhdl/tb_tb_eth_tester.vhd @@ -40,7 +40,7 @@ END tb_tb_eth_tester; ARCHITECTURE tb OF tb_tb_eth_tester IS -- Multi tb - CONSTANT c_tb_w : NATURAL := 60; -- sufficiently long to fit all tb instances + CONSTANT c_tb_w : NATURAL := 100; -- sufficiently long to fit all tb instances CONSTANT c_tb_end_vec : STD_LOGIC_VECTOR(c_tb_w-1 DOWNTO 0) := (OTHERS=>'1'); SIGNAL tb_end_vec : STD_LOGIC_VECTOR(c_tb_w-1 DOWNTO 0) := c_tb_end_vec; -- best view as hex in Wave Window @@ -66,6 +66,7 @@ ARCHITECTURE tb OF tb_tb_eth_tester IS -- Choose c_gap_len somewhat larger to have packet link rate < 1 Gbps CONSTANT c_gap_len : NATURAL := c_gap_len_min * 2; -- for g_nof_streams = 1 + CONSTANT c_long_gap : NATURAL := c_gap_len_min * 10; CONSTANT c_short_gap : NATURAL := 10; -- to cause BG xon/xoff flow control CONSTANT c_zero_gap : NATURAL := 0; -- to verify BG ready flow control @@ -110,9 +111,9 @@ BEGIN -- g_bg_ctrl_others : t_diag_block_gen_integer := ('1', '1', 30, 8, 10, 0, 30, 0) -- for other streams -- Tb instance prefix: - -- . st = streaming Tx-Rx interface - -- . sim = sim_tse Tx-Rx interface - -- . tech = tech_tse Tx-Rx interface + -- . u_st : uses streaming Tx-Rx interface + -- . u_sim : uses sim_tse Tx-Rx interface + -- . u_tech : uses tech_tse Tx-Rx interface ----------------------------------------------------------------------------- -- Single stream @@ -122,23 +123,46 @@ BEGIN u_sim_tse : ENTITY work.tb_eth_tester GENERIC MAP (1, c_nof_sync, 1, TRUE, 1, c_bg_ctrl_one, c_bg_ctrl_rst) PORT MAP (tb_end_vec(1)); u_tech_tse : ENTITY work.tb_eth_tester GENERIC MAP (2, c_nof_sync, 1, TRUE, 0, c_bg_ctrl_one, c_bg_ctrl_rst) PORT MAP (tb_end_vec(2)); - -- Try nof blocks_per_sync = 1 + -- Try large block size and nof blocks_per_sync = 1 u_st_jumbo1 : ENTITY work.tb_eth_tester GENERIC MAP (10, c_nof_sync, 1, FALSE, 1, ('1', '1', c_block_len_jumbo, 1, c_zero_gap, 0, c_high, 0), - c_bg_ctrl_rst) + c_bg_ctrl_rst) PORT MAP (tb_end_vec(10)); - -- Try large block size + -- Try large block sizes u_st_jumbo2 : ENTITY work.tb_eth_tester GENERIC MAP (11, c_nof_sync, 1, FALSE, 1, ('1', '1', c_block_len_jumbo, 2, c_zero_gap, 0, c_high, 0), - c_bg_ctrl_rst) + c_bg_ctrl_rst) PORT MAP (tb_end_vec(11)); u_sim_tse_jumbo : ENTITY work.tb_eth_tester GENERIC MAP (12, c_nof_sync, 1, TRUE, 1, ('1', '1', c_block_len_jumbo, 2, c_zero_gap, 0, c_high, 0), - c_bg_ctrl_rst) + c_bg_ctrl_rst) PORT MAP (tb_end_vec(12)); + u_tech_tse_jumbo : ENTITY work.tb_eth_tester GENERIC MAP (13, c_nof_sync, 1, TRUE, 0, + ('1', '1', c_block_len_jumbo, 2, c_zero_gap, 0, c_high, 0), + c_bg_ctrl_rst) + PORT MAP (tb_end_vec(13)); + + -- Try small block sizes + -- . BG supports samples_per_packet >= 2, BG treats samples_per_packet = 1 as 2 + -- . ETH MAC pads samples_per_packet <= 6 to 6, to have minimum packet length of 64 octets, + -- because hdr = 14 + 20 + 8 + 12 and crc = 4 have 58 octets. + + u_st_len2 : ENTITY work.tb_eth_tester GENERIC MAP (20, c_nof_sync, 1, FALSE, 1, + ('1', '1', 2, 8, c_gap_len, 0, c_high, 0), + c_bg_ctrl_rst) + PORT MAP (tb_end_vec(20)); + u_sim_tse_len2 : ENTITY work.tb_eth_tester GENERIC MAP (21, c_nof_sync, 1, TRUE, 1, + ('1', '1', 2, 8, c_gap_len, 0, c_high, 0), + c_bg_ctrl_rst) + PORT MAP (tb_end_vec(21)); + u_tech_tse_len6 : ENTITY work.tb_eth_tester GENERIC MAP (22, c_nof_sync, 1, TRUE, 0, + ('1', '1', 6, 8, c_gap_len, 0, c_high, 0), + c_bg_ctrl_rst) + PORT MAP (tb_end_vec(22)); + -- Try different BG block lengths to verify sosi.empty nof octets in last word u_st_bg_len_0 : ENTITY work.tb_eth_tester GENERIC MAP (30, c_nof_sync, 1, FALSE, 1, c_bg_ctrl_len_0, c_bg_ctrl_rst) PORT MAP (tb_end_vec(30)); u_st_bg_len_1 : ENTITY work.tb_eth_tester GENERIC MAP (31, c_nof_sync, 1, FALSE, 1, c_bg_ctrl_len_1, c_bg_ctrl_rst) PORT MAP (tb_end_vec(31)); @@ -167,23 +191,23 @@ BEGIN -- Multiple streams ----------------------------------------------------------------------------- u_st_multiple_streams : ENTITY work.tb_eth_tester - GENERIC MAP (50, c_nof_sync, c_nof_streams, FALSE, 1, + GENERIC MAP (80, c_nof_sync, c_nof_streams, FALSE, 1, c_bg_ctrl_multiple_first, c_bg_ctrl_multiple_others) - PORT MAP (tb_end_vec(50)); + PORT MAP (tb_end_vec(80)); -- Use tse to verify dp_mux and dp_demux in ETH module [1] u_sim_tse_multiple_streams : ENTITY work.tb_eth_tester - GENERIC MAP (51, c_nof_sync, c_nof_streams, TRUE, 1, + GENERIC MAP (81, c_nof_sync, c_nof_streams, TRUE, 1, c_bg_ctrl_multiple_first, c_bg_ctrl_multiple_others) - PORT MAP (tb_end_vec(51)); + PORT MAP (tb_end_vec(81)); u_sim_tse_multiple_bg_flow_control : ENTITY work.tb_eth_tester - GENERIC MAP (52, c_nof_sync_many, c_nof_streams, TRUE, 1, + GENERIC MAP (82, c_nof_sync_many, c_nof_streams, TRUE, 1, ('1', '1', c_block_len, 8, c_short_gap, 0, c_high, 0), ('1', '1', c_others_len, 8, c_short_gap, 0, c_high, 0)) - PORT MAP (tb_end_vec(52)); + PORT MAP (tb_end_vec(82)); tb_end <= '1' WHEN tb_end_vec = c_tb_end_vec ELSE '0';