diff --git a/libraries/io/eth/tb/vhdl/tb_eth.vhd b/libraries/io/eth/tb/vhdl/tb_eth.vhd index 800d7afc20d020e09bfb62927889f645234c5c6d..fc7d86206d035ff132083e0c34b26eb16d603d31 100644 --- a/libraries/io/eth/tb/vhdl/tb_eth.vhd +++ b/libraries/io/eth/tb/vhdl/tb_eth.vhd @@ -50,6 +50,7 @@ USE common_lib.common_network_layers_pkg.ALL; USE common_lib.common_network_total_header_pkg.ALL; USE dp_lib.dp_stream_pkg.ALL; USE technology_lib.technology_pkg.ALL; +USE technology_lib.technology_select_pkg.ALL; USE tech_tse_lib.tech_tse_pkg.ALL; USE tech_tse_lib.tb_tech_tse_pkg.ALL; USE WORK.eth_pkg.ALL; @@ -58,8 +59,9 @@ USE WORK.eth_pkg.ALL; ENTITY tb_eth IS -- Test bench control parameters GENERIC ( - g_technology_dut : NATURAL := c_tech_stratixiv; - g_technology_lcu : NATURAL := c_tech_stratixiv; + g_technology_dut : NATURAL := c_tech_select_default; + g_technology_lcu : NATURAL := c_tech_select_default; + g_tb_end : BOOLEAN := TRUE; -- when TRUE then tb_end ends this simulation, else a higher multi-testbench will end the simulation -- g_data_type = c_tb_tech_tse_data_type_symbols = 0 -- g_data_type = c_tb_tech_tse_data_type_counter = 1 -- g_data_type = c_tb_tech_tse_data_type_arp = 2 @@ -67,6 +69,9 @@ ENTITY tb_eth IS -- g_data_type = c_tb_tech_tse_data_type_udp = 4 g_data_type : NATURAL := c_tb_tech_tse_data_type_udp ); + PORT ( + tb_end : OUT STD_LOGIC + ); END tb_eth; @@ -197,7 +202,6 @@ ARCHITECTURE tb OF tb_eth IS CONSTANT c_dut_control_tx_en : NATURAL := 2**c_eth_mm_reg_control_bi.tx_en; -- Clocks and reset - SIGNAL tb_end : STD_LOGIC := '0'; SIGNAL eth_clk : STD_LOGIC := '0'; -- tse reference clock SIGNAL sys_clk : STD_LOGIC := '0'; -- system clock SIGNAL st_clk : STD_LOGIC; -- stream clock @@ -251,6 +255,7 @@ ARCHITECTURE tb OF tb_eth IS SIGNAL lcu_led : t_tech_tse_led; -- Verification + SIGNAL tx_end : STD_LOGIC := '0'; SIGNAL tx_pkt_cnt : NATURAL := 0; SIGNAL rx_pkt_cnt : NATURAL := 0; @@ -258,8 +263,8 @@ BEGIN -- run 50 us - eth_clk <= NOT eth_clk OR tb_end AFTER eth_clk_period/2; -- TSE reference clock - sys_clk <= NOT sys_clk OR tb_end AFTER sys_clk_period/2; -- System clock + eth_clk <= NOT eth_clk AFTER eth_clk_period/2; -- TSE reference clock + sys_clk <= NOT sys_clk AFTER sys_clk_period/2; -- System clock mm_clk <= sys_clk; st_clk <= sys_clk; @@ -446,7 +451,7 @@ BEGIN -- proc_tech_tse_tx_packet(tx_total_header, 105, g_data_type, c_tx_ready_latency, c_nof_tx_not_valid, st_clk, lcu_tx_en, lcu_tx_siso, lcu_tx_sosi); FOR I IN 0 TO 1500 * 5 LOOP WAIT UNTIL rising_edge(st_clk); END LOOP; - tb_end <= '1'; + tx_end <= '1'; WAIT; END PROCESS; @@ -555,7 +560,8 @@ BEGIN p_tb_end : PROCESS BEGIN - WAIT UNTIL tb_end='1'; + tb_end <= '0'; + WAIT UNTIL tx_end='1'; -- Verify that all transmitted packets have been received IF tx_pkt_cnt=0 THEN @@ -566,9 +572,14 @@ BEGIN REPORT "Not all transmitted packets were received." SEVERITY ERROR; END IF; - -- Do keep wait for 10 us after tb_end. Otherwise without wait for 10 us use severity FAILURE to stop the simulation and avoid the PLL lost lock messages after the tb_end. + -- Do keep wait for 10 us after tx_end. WAIT FOR 10 us; - ASSERT FALSE REPORT "Simulation tb_eth finished." SEVERITY NOTE; + tb_end <= '1'; + IF g_tb_end=FALSE THEN + REPORT "Tb simulation finished." SEVERITY NOTE; + ELSE + REPORT "Tb simulation finished." SEVERITY FAILURE; + END IF; WAIT; END PROCESS; diff --git a/libraries/io/eth/tb/vhdl/tb_tb_eth.vhd b/libraries/io/eth/tb/vhdl/tb_tb_eth.vhd index 55cf0109c770c9b2fd38a9652e788a09ef565f67..e612c87c426737f2e5c2b49b00b92d420da2bc81 100644 --- a/libraries/io/eth/tb/vhdl/tb_tb_eth.vhd +++ b/libraries/io/eth/tb/vhdl/tb_tb_eth.vhd @@ -30,28 +30,46 @@ LIBRARY IEEE, technology_lib, tech_tse_lib; USE IEEE.std_logic_1164.ALL; USE technology_lib.technology_pkg.ALL; +USE technology_lib.technology_select_pkg.ALL; USE tech_tse_lib.tb_tech_tse_pkg.ALL; ENTITY tb_tb_eth IS GENERIC ( - g_technology_dut : NATURAL := c_tech_stratixiv + g_technology_dut : NATURAL := c_tech_select_default ); END tb_tb_eth; ARCHITECTURE tb OF tb_tb_eth IS - CONSTANT c_technology_lcu : NATURAL := c_tech_stratixiv; + CONSTANT c_technology_lcu : NATURAL := c_tech_select_default; + + CONSTANT c_tb_end_vec : STD_LOGIC_VECTOR(7 DOWNTO 0) := (OTHERS=>'1'); + SIGNAL tb_end_vec : STD_LOGIC_VECTOR(7 DOWNTO 0) := c_tb_end_vec; -- sufficiently long to fit all tb instances BEGIN - -- Try ETH settings : GENERIC MAP (g_data_type => ) +-- g_technology_dut : NATURAL := c_tech_select_default; +-- g_technology_lcu : NATURAL := c_tech_select_default; +-- g_tb_end : BOOLEAN := TRUE; -- when TRUE then tb_end ends this simulation, else a higher multi-testbench will end the simulation +-- -- g_data_type = c_tb_tech_tse_data_type_symbols = 0 +-- -- g_data_type = c_tb_tech_tse_data_type_counter = 1 +-- -- g_data_type = c_tb_tech_tse_data_type_arp = 2 +-- -- g_data_type = c_tb_tech_tse_data_type_ping = 3 +-- -- g_data_type = c_tb_tech_tse_data_type_udp = 4 +-- g_data_type : NATURAL := c_tb_tech_tse_data_type_udp - u_use_symbols : ENTITY work.tb_eth GENERIC MAP (g_technology_dut, c_technology_lcu, c_tb_tech_tse_data_type_symbols); - u_use_counter : ENTITY work.tb_eth GENERIC MAP (g_technology_dut, c_technology_lcu, c_tb_tech_tse_data_type_counter); - u_use_arp : ENTITY work.tb_eth GENERIC MAP (g_technology_dut, c_technology_lcu, c_tb_tech_tse_data_type_arp ); - u_use_ping : ENTITY work.tb_eth GENERIC MAP (g_technology_dut, c_technology_lcu, c_tb_tech_tse_data_type_ping ); - u_use_udp : ENTITY work.tb_eth GENERIC MAP (g_technology_dut, c_technology_lcu, c_tb_tech_tse_data_type_udp ); + u_use_symbols : ENTITY work.tb_eth GENERIC MAP (g_technology_dut, c_technology_lcu, FALSE, c_tb_tech_tse_data_type_symbols) PORT MAP (tb_end_vec(0)); + u_use_counter : ENTITY work.tb_eth GENERIC MAP (g_technology_dut, c_technology_lcu, FALSE, c_tb_tech_tse_data_type_counter) PORT MAP (tb_end_vec(1)); + u_use_arp : ENTITY work.tb_eth GENERIC MAP (g_technology_dut, c_technology_lcu, FALSE, c_tb_tech_tse_data_type_arp ) PORT MAP (tb_end_vec(2)); + u_use_ping : ENTITY work.tb_eth GENERIC MAP (g_technology_dut, c_technology_lcu, FALSE, c_tb_tech_tse_data_type_ping ) PORT MAP (tb_end_vec(3)); + u_use_udp : ENTITY work.tb_eth GENERIC MAP (g_technology_dut, c_technology_lcu, FALSE, c_tb_tech_tse_data_type_udp ) PORT MAP (tb_end_vec(4)); + p_tb_end : PROCESS + BEGIN + WAIT UNTIL tb_end_vec=c_tb_end_vec; + REPORT "Multi tb simulation finished." SEVERITY FAILURE; + WAIT; + END PROCESS; END tb;