diff --git a/libraries/io/eth/tb/vhdl/tb_eth_tester.vhd b/libraries/io/eth/tb/vhdl/tb_eth_tester.vhd index 7a89799b5b3935da46cf30bc9ceaf061ff25aa40..c29a4da00e91421ca0f71a8e85fc3934d7d538a1 100644 --- a/libraries/io/eth/tb/vhdl/tb_eth_tester.vhd +++ b/libraries/io/eth/tb/vhdl/tb_eth_tester.vhd @@ -1,6 +1,6 @@ ------------------------------------------------------------------------------- -- --- Copyright 2020 +-- Copyright 2022 -- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> -- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands -- @@ -20,7 +20,8 @@ -- AUthor: E. Kooistra -- Purpose: Test bench for eth_tester -- Description: See detailed design in [1] --- The g_nof_streams >= 1 are tested independently. +-- The g_nof_streams >= 1 are tested independently, using g_bg_ctrl_first for +-- BG in stream 0 and g_bg_ctrl_others for all other streams. -- Usage: -- > as 8 -- > run -a @@ -44,19 +45,20 @@ USE work.tb_eth_tester_pkg.ALL; ENTITY tb_eth_tester IS GENERIC ( - g_tb_str : STRING := ""; - g_nof_streams : NATURAL := 2; - - -- sl: enable - -- sl: enable_sync - -- nat: samples_per_packet - -- nat: blocks_per_sync - -- nat: gapsize - -- nat: mem_low_adrs - -- nat: mem_high_adrs - -- nat: bsn_init - g_bg_ctrl_first : t_diag_block_gen_integer := ('1', '1', 50, 8, 100, 0, 30, 0); -- for first stream - g_bg_ctrl_others : t_diag_block_gen_integer := ('1', '1', 30, 8, 10, 0, 30, 0) -- for other streams + g_tb_str : STRING := ""; -- use to distinguish logging from tb instances in tb_tb + g_nof_streams : NATURAL := 1; + + -- t_diag_block_gen_integer = + -- sl: enable + -- sl: enable_sync + -- nat: samples_per_packet + -- nat: blocks_per_sync + -- nat: gapsize + -- nat: mem_low_adrs + -- nat: mem_high_adrs + -- nat: bsn_init + g_bg_ctrl_first : t_diag_block_gen_integer := ('1', '1', 50, 8, 100, 0, c_diag_bg_mem_max_adr, 0); -- for first stream + g_bg_ctrl_others : t_diag_block_gen_integer := ('1', '1', 30, 8, 10, 0, c_diag_bg_mem_max_adr, 0) -- for other streams ); END tb_eth_tester; @@ -71,15 +73,18 @@ ARCHITECTURE tb OF tb_eth_tester IS CONSTANT c_sync_period_first : NATURAL := c_slot_len_first * g_bg_ctrl_first.blocks_per_sync; CONSTANT c_sync_period_others : NATURAL := c_slot_len_others * g_bg_ctrl_others.blocks_per_sync; + CONSTANT c_sync_period_max : NATURAL := largest(c_sync_period_first, c_sync_period_others); CONSTANT c_nof_sync : NATURAL := 3; - CONSTANT c_run_time : NATURAL := c_nof_sync * largest(c_sync_period_first, c_sync_period_others); + CONSTANT c_run_time : NATURAL := c_nof_sync * c_sync_period_max; CONSTANT c_nof_sync_first : NATURAL := c_run_time / c_sync_period_first; CONSTANT c_nof_sync_others : NATURAL := c_run_time / c_sync_period_others; - CONSTANT c_nof_sop_first : NATURAL := g_bg_ctrl_first.blocks_per_sync; - CONSTANT c_nof_sop_others : NATURAL := g_bg_ctrl_others.blocks_per_sync; - CONSTANT c_nof_valid_first : NATURAL := c_nof_sop_first * ceil_div(g_bg_ctrl_first.samples_per_packet * c_octet_w, c_word_w); - CONSTANT c_nof_valid_others : NATURAL := c_nof_sop_others * ceil_div(g_bg_ctrl_others.samples_per_packet * c_octet_w, c_word_w); + CONSTANT c_mon_nof_sop_first : NATURAL := g_bg_ctrl_first.blocks_per_sync; + CONSTANT c_mon_nof_sop_others : NATURAL := g_bg_ctrl_others.blocks_per_sync; + CONSTANT c_mon_nof_valid_first_tx : NATURAL := c_mon_nof_sop_first * ceil_div(g_bg_ctrl_first.samples_per_packet * c_octet_w, c_word_w); + CONSTANT c_mon_nof_valid_first_rx : NATURAL := c_mon_nof_sop_first * g_bg_ctrl_first.samples_per_packet; + CONSTANT c_mon_nof_valid_others_tx : NATURAL := c_mon_nof_sop_others * ceil_div(g_bg_ctrl_others.samples_per_packet * c_octet_w, c_word_w); + CONSTANT c_mon_nof_valid_others_rx : NATURAL := c_mon_nof_sop_others * g_bg_ctrl_others.samples_per_packet; -- Use sim default src MAC, IP, UDP port from eth_tester_pkg.vhd and based on c_gn_index CONSTANT c_gn_index : NATURAL := 17; -- global node index @@ -93,10 +98,8 @@ ARCHITECTURE tb OF tb_eth_tester IS SIGNAL st_rst : STD_LOGIC := '1'; SIGNAL st_clk : STD_LOGIC := '1'; SIGNAL st_pps : STD_LOGIC := '0'; + SIGNAL stimuli_end : STD_LOGIC := '0'; SIGNAL tb_end : STD_LOGIC := '0'; - SIGNAL first_end : STD_LOGIC := '0'; - SIGNAL others_end : STD_LOGIC := '0'; - -- Use same bg_ctrl for all streams, this provides sufficient test coverage SIGNAL bg_ctrl_arr : t_diag_block_gen_integer_arr(g_nof_streams-1 DOWNTO 0); @@ -122,17 +125,31 @@ ARCHITECTURE tb OF tb_eth_tester IS SIGNAL reg_strobe_total_count_rx_cipo : t_mem_cipo; -- . reg_strobe_total_count - SIGNAL tx_count_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); - SIGNAL rx_count_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); - SIGNAL exp_count_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); + SIGNAL tx_total_count_nof_packets_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); + SIGNAL rx_total_count_nof_packets_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); + SIGNAL exp_total_count_nof_packets_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); -- same for both tx and rx + + SIGNAL rx_total_count_nof_valids_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); + SIGNAL rx_exp_total_count_nof_valids_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); + + SIGNAL rx_total_count_nof_corrupted_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); + SIGNAL rx_exp_total_count_nof_corrupted_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); -- . reg_bsn_monitor_v2 - SIGNAL tx_nof_sop_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); - SIGNAL tx_nof_valid_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); - SIGNAL tx_latency_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); - SIGNAL rx_nof_sop_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); - SIGNAL rx_nof_valid_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); - SIGNAL rx_latency_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); + SIGNAL tx_mon_nof_sop_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); + SIGNAL tx_mon_nof_valid_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); + SIGNAL tx_mon_latency_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); + SIGNAL rx_mon_nof_sop_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); + SIGNAL rx_mon_nof_valid_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); + SIGNAL rx_mon_latency_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); + + -- View in Wave window + SIGNAL dbg_c_mon_nof_sop_first : NATURAL := c_mon_nof_sop_first; + SIGNAL dbg_c_mon_nof_sop_others : NATURAL := c_mon_nof_sop_others; + SIGNAL dbg_c_mon_nof_valid_first_tx : NATURAL := c_mon_nof_valid_first_tx; + SIGNAL dbg_c_mon_nof_valid_first_rx : NATURAL := c_mon_nof_valid_first_rx; + SIGNAL dbg_c_mon_nof_valid_others_tx : NATURAL := c_mon_nof_valid_others_tx; + SIGNAL dbg_c_mon_nof_valid_others_rx : NATURAL := c_mon_nof_valid_others_rx; BEGIN @@ -142,7 +159,7 @@ BEGIN st_rst <= '1', '0' AFTER st_clk_period*5; -- Using - --SIGNAL exp_count_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); + --SIGNAL exp_total_count_nof_packets_arr : t_natural_arr(g_nof_streams-1 DOWNTO 0); -- (g_nof_streams-1 DOWNTO 1 => c_nof_sync * g_bg_ctrl_others.blocks_per_sync, -- 0 => c_nof_sync * g_bg_ctrl_first.blocks_per_sync); -- yields verror 1074, verror 1048, therefor use p_init instead, and @@ -152,25 +169,13 @@ BEGIN bg_ctrl_arr <= (OTHERS => g_bg_ctrl_others); bg_ctrl_arr(0) <= g_bg_ctrl_first; - exp_count_arr <= (OTHERS => c_nof_sync_others * g_bg_ctrl_others.blocks_per_sync); - exp_count_arr(0) <= c_nof_sync_first * g_bg_ctrl_first.blocks_per_sync; - WAIT; - END PROCESS; + exp_total_count_nof_packets_arr <= (OTHERS => c_nof_sync_others * g_bg_ctrl_others.blocks_per_sync); + exp_total_count_nof_packets_arr(0) <= c_nof_sync_first * g_bg_ctrl_first.blocks_per_sync; - -- Timing signals to run each BG for c_nof_sync periods - p_first_end : PROCESS - BEGIN - proc_common_wait_until_high(st_clk, st_pps); - proc_common_wait_some_cycles(st_clk, c_sync_period_first * c_nof_sync); - first_end <= '1'; - WAIT; - END PROCESS; + rx_exp_total_count_nof_valids_arr <= (OTHERS => c_nof_sync_others * g_bg_ctrl_others.blocks_per_sync * g_bg_ctrl_others.samples_per_packet); + rx_exp_total_count_nof_valids_arr(0) <= c_nof_sync_first * g_bg_ctrl_first.blocks_per_sync * g_bg_ctrl_first.samples_per_packet; - p_others_end : PROCESS - BEGIN - proc_common_wait_until_high(st_clk, st_pps); - proc_common_wait_some_cycles(st_clk, c_sync_period_others * c_nof_sync); - others_end <= '1'; + rx_exp_total_count_nof_corrupted_arr <= (OTHERS => 0); -- default no Rx errors WAIT; END PROCESS; @@ -212,31 +217,69 @@ BEGIN -- Disable the other BG proc_mem_mm_bus_wr(v_offset + 0, 0, mm_clk, reg_bg_ctrl_copi); END LOOP; - proc_common_wait_some_cycles(mm_clk, 100); + proc_common_wait_some_cycles(st_clk, c_sync_period_max); + stimuli_end <= '1'; ------------------------------------------------------------------------- -- Verification: Total nof Tx packets = total nof Rx packets ------------------------------------------------------------------------- FOR I IN g_nof_streams-1 DOWNTO 0 LOOP + -- . read low part, ignore high part (= 0) of two word total counts v_offset := I * c_dp_strobe_total_count_reg_adr_span; - -- . read low part, ignore high part (= 0) - -- . Tx + -- Tx total nof packets proc_mem_mm_bus_rd(v_offset + 0, mm_clk, reg_strobe_total_count_tx_cipo, reg_strobe_total_count_tx_copi); proc_mem_mm_bus_rd_latency(1, mm_clk); - tx_count_arr(I) <= TO_UINT(reg_strobe_total_count_tx_cipo.rddata(c_word_w-1 DOWNTO 0)); - -- . Rx + tx_total_count_nof_packets_arr(I) <= TO_UINT(reg_strobe_total_count_tx_cipo.rddata(c_word_w-1 DOWNTO 0)); + proc_common_wait_some_cycles(mm_clk, 1); + ASSERT tx_total_count_nof_packets_arr(I) = exp_total_count_nof_packets_arr(I) REPORT g_tb_str & + "Wrong Tx total nof packets count(" & NATURAL'IMAGE(I) & + "), Tx count = " & NATURAL'IMAGE(tx_total_count_nof_packets_arr(I)) & + " /= " & NATURAL'IMAGE(exp_total_count_nof_packets_arr(I)) & + " = Expected count" SEVERITY ERROR; + + -- Rx total nof packets proc_mem_mm_bus_rd(v_offset + 0, mm_clk, reg_strobe_total_count_rx_cipo, reg_strobe_total_count_rx_copi); proc_mem_mm_bus_rd_latency(1, mm_clk); - rx_count_arr(I) <= TO_UINT(reg_strobe_total_count_rx_cipo.rddata(c_word_w-1 DOWNTO 0)); + rx_total_count_nof_packets_arr(I) <= TO_UINT(reg_strobe_total_count_rx_cipo.rddata(c_word_w-1 DOWNTO 0)); + proc_common_wait_some_cycles(mm_clk, 1); + ASSERT rx_total_count_nof_packets_arr(I) = exp_total_count_nof_packets_arr(I) REPORT g_tb_str & + "Wrong Rx total nof packets count(" & NATURAL'IMAGE(I) & + "), Rx count = " & NATURAL'IMAGE(rx_total_count_nof_packets_arr(I)) & + " /= " & NATURAL'IMAGE(exp_total_count_nof_packets_arr(I)) & + " = Expected count" SEVERITY ERROR; + + -- Rx total nof valids + proc_mem_mm_bus_rd(v_offset + 2, mm_clk, reg_strobe_total_count_rx_cipo, reg_strobe_total_count_rx_copi); + proc_mem_mm_bus_rd_latency(1, mm_clk); + rx_total_count_nof_valids_arr(I) <= TO_UINT(reg_strobe_total_count_rx_cipo.rddata(c_word_w-1 DOWNTO 0)); + proc_common_wait_some_cycles(mm_clk, 1); + ASSERT rx_total_count_nof_valids_arr(I) = rx_exp_total_count_nof_valids_arr(I) REPORT g_tb_str & + "Wrong Rx total nof valids count(" & NATURAL'IMAGE(I) & + "), Rx count = " & NATURAL'IMAGE(rx_total_count_nof_valids_arr(I)) & + " /= " & NATURAL'IMAGE(rx_exp_total_count_nof_valids_arr(I)) & + " = Expected count" SEVERITY ERROR; + + -- Rx total nof corrupted + proc_mem_mm_bus_rd(v_offset + 4, mm_clk, reg_strobe_total_count_rx_cipo, reg_strobe_total_count_rx_copi); + proc_mem_mm_bus_rd_latency(1, mm_clk); + rx_total_count_nof_corrupted_arr(I) <= TO_UINT(reg_strobe_total_count_rx_cipo.rddata(c_word_w-1 DOWNTO 0)); proc_common_wait_some_cycles(mm_clk, 1); - ASSERT rx_count_arr(I) = tx_count_arr(I) REPORT g_tb_str & "Wrong total block count(" - & NATURAL'IMAGE(I) & "), Rx count = " - & NATURAL'IMAGE(rx_count_arr(I)) & " /= " - & NATURAL'IMAGE(tx_count_arr(I)) & " = Tx count" SEVERITY ERROR; - ASSERT rx_count_arr(I) = exp_count_arr(I) REPORT g_tb_str & "Wrong total block count(" - & NATURAL'IMAGE(I) & "), Rx count = " - & NATURAL'IMAGE(rx_count_arr(I)) & " /= " - & NATURAL'IMAGE(exp_count_arr(I)) & " = Expected count" SEVERITY ERROR; + ASSERT rx_total_count_nof_corrupted_arr(I) = rx_exp_total_count_nof_corrupted_arr(I) REPORT g_tb_str & + "Wrong Rx total nof corrupted count(" & NATURAL'IMAGE(I) & + "), Rx count = " & NATURAL'IMAGE(rx_total_count_nof_corrupted_arr(I)) & + " /= " & NATURAL'IMAGE(rx_exp_total_count_nof_corrupted_arr(I)) & + " = Expected count" SEVERITY ERROR; + + print_str(g_tb_str & + "Tx total counts monitor(" & NATURAL'IMAGE(I) & ") :" & + " nof_packets = " & NATURAL'IMAGE(tx_total_count_nof_packets_arr(I))); + + print_str(g_tb_str & + "Rx total counts monitor(" & NATURAL'IMAGE(I) & ") :" & + " nof_packets = " & NATURAL'IMAGE(rx_total_count_nof_packets_arr(I)) & + ", nof_valids = " & NATURAL'IMAGE(rx_total_count_nof_valids_arr(I)) & + ", nof_corrupted = " & NATURAL'IMAGE(rx_total_count_nof_corrupted_arr(I))); + END LOOP; ------------------------------------------------------------------------- @@ -250,53 +293,52 @@ BEGIN -- . Tx proc_mem_mm_bus_rd(v_offset + 3, mm_clk, reg_bsn_monitor_v2_tx_cipo, reg_bsn_monitor_v2_tx_copi); proc_mem_mm_bus_rd_latency(1, mm_clk); - tx_nof_sop_arr(I) <= TO_UINT(reg_bsn_monitor_v2_tx_cipo.rddata(c_word_w-1 DOWNTO 0)); + tx_mon_nof_sop_arr(I) <= TO_UINT(reg_bsn_monitor_v2_tx_cipo.rddata(c_word_w-1 DOWNTO 0)); proc_mem_mm_bus_rd(v_offset + 4, mm_clk, reg_bsn_monitor_v2_tx_cipo, reg_bsn_monitor_v2_tx_copi); proc_mem_mm_bus_rd_latency(1, mm_clk); - tx_nof_valid_arr(I) <= TO_UINT(reg_bsn_monitor_v2_tx_cipo.rddata(c_word_w-1 DOWNTO 0)); + tx_mon_nof_valid_arr(I) <= TO_UINT(reg_bsn_monitor_v2_tx_cipo.rddata(c_word_w-1 DOWNTO 0)); proc_mem_mm_bus_rd(v_offset + 6, mm_clk, reg_bsn_monitor_v2_tx_cipo, reg_bsn_monitor_v2_tx_copi); proc_mem_mm_bus_rd_latency(1, mm_clk); - tx_latency_arr(I) <= TO_UINT(reg_bsn_monitor_v2_tx_cipo.rddata(c_word_w-1 DOWNTO 0)); + tx_mon_latency_arr(I) <= TO_UINT(reg_bsn_monitor_v2_tx_cipo.rddata(c_word_w-1 DOWNTO 0)); -- . Rx proc_mem_mm_bus_rd(v_offset + 3, mm_clk, reg_bsn_monitor_v2_rx_cipo, reg_bsn_monitor_v2_rx_copi); proc_mem_mm_bus_rd_latency(1, mm_clk); - rx_nof_sop_arr(I) <= TO_UINT(reg_bsn_monitor_v2_rx_cipo.rddata(c_word_w-1 DOWNTO 0)); + rx_mon_nof_sop_arr(I) <= TO_UINT(reg_bsn_monitor_v2_rx_cipo.rddata(c_word_w-1 DOWNTO 0)); proc_mem_mm_bus_rd(v_offset + 4, mm_clk, reg_bsn_monitor_v2_rx_cipo, reg_bsn_monitor_v2_rx_copi); proc_mem_mm_bus_rd_latency(1, mm_clk); - rx_nof_valid_arr(I) <= TO_UINT(reg_bsn_monitor_v2_rx_cipo.rddata(c_word_w-1 DOWNTO 0)); + rx_mon_nof_valid_arr(I) <= TO_UINT(reg_bsn_monitor_v2_rx_cipo.rddata(c_word_w-1 DOWNTO 0)); proc_mem_mm_bus_rd(v_offset + 6, mm_clk, reg_bsn_monitor_v2_rx_cipo, reg_bsn_monitor_v2_rx_copi); proc_mem_mm_bus_rd_latency(1, mm_clk); - rx_latency_arr(I) <= TO_UINT(reg_bsn_monitor_v2_rx_cipo.rddata(c_word_w-1 DOWNTO 0)); + rx_mon_latency_arr(I) <= TO_UINT(reg_bsn_monitor_v2_rx_cipo.rddata(c_word_w-1 DOWNTO 0)); proc_common_wait_some_cycles(mm_clk, 1); print_str(g_tb_str & - "Tx BSN monitor(" & NATURAL'IMAGE(I) & ") :" & - ", nof_sop = " & NATURAL'IMAGE(tx_nof_sop_arr(I)) & - ", nof_valid = " & NATURAL'IMAGE(tx_nof_valid_arr(I)) & - ", latency = " & NATURAL'IMAGE(tx_latency_arr(I))); + "Tx BSN monitor(" & NATURAL'IMAGE(I) & ") :" & + " nof_sop = " & NATURAL'IMAGE(tx_mon_nof_sop_arr(I)) & + ", nof_valid = " & NATURAL'IMAGE(tx_mon_nof_valid_arr(I)) & + ", latency = " & NATURAL'IMAGE(tx_mon_latency_arr(I))); print_str(g_tb_str & - "Rx BSN monitor(" & NATURAL'IMAGE(I) & ") :" & - ", nof_sop = " & NATURAL'IMAGE(rx_nof_sop_arr(I)) & - ", nof_valid = " & NATURAL'IMAGE(rx_nof_valid_arr(I)) & - ", latency = " & NATURAL'IMAGE(rx_latency_arr(I))); + "Rx BSN monitor(" & NATURAL'IMAGE(I) & ") :" & + " nof_sop = " & NATURAL'IMAGE(rx_mon_nof_sop_arr(I)) & + ", nof_valid = " & NATURAL'IMAGE(rx_mon_nof_valid_arr(I)) & + ", latency = " & NATURAL'IMAGE(rx_mon_latency_arr(I))); IF I = 0 THEN - ASSERT tx_nof_sop_arr(I) = g_bg_ctrl_first.blocks_per_sync REPORT g_tb_str & "Wrong tx nof_sop for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; - ASSERT rx_nof_sop_arr(I) = g_bg_ctrl_first.blocks_per_sync REPORT g_tb_str & "Wrong rx nof_sop for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; - ASSERT tx_nof_valid_arr(I) = c_nof_valid_first REPORT g_tb_str & "Wrong tx nof_valid for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; - ASSERT rx_nof_valid_arr(I) = c_nof_valid_first REPORT g_tb_str & "Wrong rx nof_valid for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; - ASSERT tx_latency_arr(I) = 0 REPORT g_tb_str & "Wrong tx latency for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; + ASSERT tx_mon_nof_sop_arr(I) = c_mon_nof_sop_first REPORT g_tb_str & "Wrong tx nof_sop for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; + ASSERT rx_mon_nof_sop_arr(I) = c_mon_nof_sop_first REPORT g_tb_str & "Wrong rx nof_sop for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; + ASSERT tx_mon_nof_valid_arr(I) = c_mon_nof_valid_first_tx REPORT g_tb_str & "Wrong tx nof_valid for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; + ASSERT rx_mon_nof_valid_arr(I) = c_mon_nof_valid_first_rx REPORT g_tb_str & "Wrong rx nof_valid for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; + ASSERT tx_mon_latency_arr(I) = 0 REPORT g_tb_str & "Wrong tx latency for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; ELSE - ASSERT tx_nof_sop_arr(I) = g_bg_ctrl_others.blocks_per_sync REPORT g_tb_str & "Wrong tx nof_sop for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; - ASSERT rx_nof_sop_arr(I) = g_bg_ctrl_others.blocks_per_sync REPORT g_tb_str & "Wrong rx nof_sop for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; - ASSERT tx_nof_valid_arr(I) = c_nof_valid_others REPORT g_tb_str & "Wrong tx nof_valid for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; - ASSERT rx_nof_valid_arr(I) = c_nof_valid_others REPORT g_tb_str & "Wrong rx nof_valid for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; - ASSERT rx_latency_arr(I) = 22 REPORT g_tb_str & "Wrong rx latency for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; + ASSERT tx_mon_nof_sop_arr(I) = c_mon_nof_sop_others REPORT g_tb_str & "Wrong tx nof_sop for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; + ASSERT rx_mon_nof_sop_arr(I) = c_mon_nof_sop_others REPORT g_tb_str & "Wrong rx nof_sop for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; + ASSERT tx_mon_nof_valid_arr(I) = c_mon_nof_valid_others_tx REPORT g_tb_str & "Wrong tx nof_valid for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; + ASSERT rx_mon_nof_valid_arr(I) = c_mon_nof_valid_others_rx REPORT g_tb_str & "Wrong rx nof_valid for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; + ASSERT rx_mon_latency_arr(I) = 22 REPORT g_tb_str & "Wrong rx latency for stream (" & NATURAL'IMAGE(I) & ")" SEVERITY ERROR; END IF; END LOOP; - ------------------------------------------------------------------------- -- End of test -------------------------------------------------------------------------