diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd index c4f00556fd23b77db881b6ae11d734929ce001c2..499fa927b47a3392314f18b139e73cc7ba8e6369 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/revisions/lofar2_unb2c_sdp_station_bf/tb_lofar2_unb2c_sdp_station_bf.vhd @@ -361,6 +361,7 @@ architecture tb of tb_lofar2_unb2c_sdp_station_bf is constant c_addr_w_reg_stat_enable_bst : natural := c_sdp_reg_stat_enable_addr_w; constant c_addr_w_reg_dp_xonoff : natural := 1; constant c_addr_w_ram_st_bst : natural := ceil_log2(c_sdp_S_sub_bf * c_sdp_N_pol_bf * c_stat_data_sz); + constant c_addr_w_reg_bsn_monitor_v2 : natural := 3; -- . Address spans of a single MM instance -- . c_sdp_S_pn = 12 instances constant c_mm_span_reg_diag_wg : natural := 2**c_addr_w_reg_diag_wg; @@ -373,6 +374,7 @@ architecture tb of tb_lofar2_unb2c_sdp_station_bf is constant c_mm_span_reg_stat_enable_bst : natural := 2**c_addr_w_reg_stat_enable_bst; constant c_mm_span_reg_dp_xonoff : natural := 2**c_addr_w_reg_dp_xonoff; constant c_mm_span_ram_st_bst : natural := 2**c_addr_w_ram_st_bst; + constant c_mm_span_reg_bsn_monitor_v2 : natural := 2**c_addr_w_reg_bsn_monitor_v2; constant c_mm_file_reg_ppsh : string := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "PIO_PPS"; constant c_mm_file_reg_bsn_source_v2 : string := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_SOURCE_V2"; @@ -390,6 +392,8 @@ architecture tb of tb_lofar2_unb2c_sdp_station_bf is constant c_mm_file_reg_sdp_info : string := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_SDP_INFO"; constant c_mm_file_reg_hdr_dat : string := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_HDR_DAT"; -- c_sdp_N_beamsets = 2 beamsets constant c_mm_file_reg_bdo_destinations : string := mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BDO_DESTINATIONS"; + constant c_mm_file_reg_bsn_monitor_v2_beamlet_output : string := + mmf_unb_file_prefix(c_unb_nr, c_node_nr) & "REG_BSN_MONITOR_V2_BEAMLET_OUTPUT"; -- Tb BSN moments constant c_stimuli_done_bsn : natural := c_init_bsn + c_bsn_latency + c_nof_block_per_sync * 4; @@ -424,6 +428,9 @@ architecture tb of tb_lofar2_unb2c_sdp_station_bf is signal rd_nof_destinations_act : natural; signal rd_nof_destinations_max : natural; signal rd_nof_blocks_per_packet : natural; + signal rd_bsn_monitor_v2_beamlet_output : std_logic := '0'; -- strobe + signal rd_bsn_monitor_v2_beamlet_output_xon : std_logic; + signal rd_bsn_monitor_v2_beamlet_output_ready : std_logic; -- WG signal current_bsn_wg : std_logic_vector(c_dp_stream_bsn_w - 1 downto 0); @@ -738,6 +745,17 @@ begin report "Wrong MM read SDP info block_period" severity ERROR; + ---------------------------------------------------------------------------- + -- Read 10GbE beamlet output SISO status before enable beamlet output + ---------------------------------------------------------------------------- + mmf_mm_bus_rd(c_mm_file_reg_bsn_monitor_v2_beamlet_output, 0, rd_data, tb_clk); + proc_common_wait_some_cycles(tb_clk, 1); + rd_bsn_monitor_v2_beamlet_output <= '1'; + rd_bsn_monitor_v2_beamlet_output_xon <= rd_data(0); + rd_bsn_monitor_v2_beamlet_output_ready <= rd_data(1); + proc_common_wait_some_cycles(tb_clk, 10); + rd_bsn_monitor_v2_beamlet_output <= '0'; + ------------------------------------------------------------------------------ ---- Set and check BF per beamset ------------------------------------------------------------------------------ @@ -1168,6 +1186,21 @@ begin -- Stimuli done, now verify results at end of test stimuli_done <= '1'; + ---------------------------------------------------------------------------- + -- Read 10GbE beamlet output SISO status again during active beamlet + -- output, because BSN monitor status only gets updated at sosi.sync + -- These MP are not useful, because they are only updated when there + -- is active beamlet output data and because ready remains '0' when it + -- toggles during a sync interval. + ---------------------------------------------------------------------------- + mmf_mm_bus_rd(c_mm_file_reg_bsn_monitor_v2_beamlet_output, 0, rd_data, tb_clk); + proc_common_wait_some_cycles(tb_clk, 1); + rd_bsn_monitor_v2_beamlet_output <= '1'; + rd_bsn_monitor_v2_beamlet_output_xon <= rd_data(0); + rd_bsn_monitor_v2_beamlet_output_ready <= rd_data(1); + proc_common_wait_some_cycles(tb_clk, 10); + rd_bsn_monitor_v2_beamlet_output <= '0'; + --------------------------------------------------------------------------- -- Read subband statistics --------------------------------------------------------------------------- diff --git a/libraries/base/dp/src/vhdl/dp_bsn_monitor_v2.vhd b/libraries/base/dp/src/vhdl/dp_bsn_monitor_v2.vhd index 339533f55ebd8422d8fff957ae7cfeee69b0e07c..f9d09a9bb90e6d478f945089d687409f7ed32bf5 100644 --- a/libraries/base/dp/src/vhdl/dp_bsn_monitor_v2.vhd +++ b/libraries/base/dp/src/vhdl/dp_bsn_monitor_v2.vhd @@ -37,6 +37,8 @@ -- valid remains active until an acknowledge by ready) -- . If mon_sync_timeout = '1', all output vectors are forced -1 (all ones) to -- indicate they are not valid. +-- . The single bit siso status signals mon_ready_stable and mon_xon_stable +-- are less useful, because they do not support an invalid value. -- -------------------------------------------------------------------------- library IEEE, common_lib;