diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/lofar2_unb2b_sdp_station.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/lofar2_unb2b_sdp_station.vhd index d1081da37d29c20e329ab796f227ceff30d126bb..b293ea12e27dbbe5832679200f756b61de20950c 100644 --- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/lofar2_unb2b_sdp_station.vhd +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/lofar2_unb2b_sdp_station.vhd @@ -804,20 +804,20 @@ begin ----------------------------------------------------------------------------- u_sdp_station : entity lofar2_sdp_lib.sdp_station generic map ( - g_sim => g_sim, - g_wpfb => g_wpfb, - g_wpfb_complex => g_wpfb_complex, - g_bsn_nof_clk_per_sync => g_bsn_nof_clk_per_sync, - g_scope_selected_subband => g_scope_selected_subband, - g_no_jesd => c_revision_select.no_jesd, - g_use_fsub => c_revision_select.use_fsub, - g_use_oversample => c_revision_select.use_oversample, - g_use_xsub => c_revision_select.use_xsub, - g_use_bf => c_revision_select.use_bf, - g_use_bdo_transpose => c_revision_select.use_bdo_transpose, - g_use_bdo_multiple_destinations => c_revision_select.use_bdo_multiple_destinations, - g_use_ring => c_revision_select.use_ring, - g_P_sq => c_revision_select.P_sq + g_sim => g_sim, + g_wpfb => g_wpfb, + g_wpfb_complex => g_wpfb_complex, + g_bsn_nof_clk_per_sync => g_bsn_nof_clk_per_sync, + g_scope_selected_subband => g_scope_selected_subband, + g_no_jesd => c_revision_select.no_jesd, + g_use_fsub => c_revision_select.use_fsub, + g_use_oversample => c_revision_select.use_oversample, + g_use_xsub => c_revision_select.use_xsub, + g_use_bf => c_revision_select.use_bf, + g_use_bdo_transpose => c_revision_select.use_bdo_transpose, + g_nof_bdo_destinations_max => c_revision_select.nof_bdo_destinations_max, + g_use_ring => c_revision_select.use_ring, + g_P_sq => c_revision_select.P_sq ) port map ( diff --git a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/lofar2_unb2b_sdp_station_pkg.vhd b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/lofar2_unb2b_sdp_station_pkg.vhd index e65f35ec02f1047a436b00813f96f2f1ada738ec..f7da00a28564493a8e525870cb770b4ef89469cb 100644 --- a/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/lofar2_unb2b_sdp_station_pkg.vhd +++ b/applications/lofar2/designs/lofar2_unb2b_sdp_station/src/vhdl/lofar2_unb2b_sdp_station_pkg.vhd @@ -31,31 +31,31 @@ package lofar2_unb2b_sdp_station_pkg is ----------------------------------------------------------------------------- type t_lofar2_unb2b_sdp_station_config is record - no_jesd : boolean; - use_fsub : boolean; - use_oversample : boolean; - use_bf : boolean; - use_bdo_transpose : boolean; - use_bdo_multiple_destinations : boolean; - use_xsub : boolean; - use_ring : boolean; - P_sq : natural; + no_jesd : boolean; + use_fsub : boolean; + use_oversample : boolean; + use_bf : boolean; + use_bdo_transpose : boolean; + nof_bdo_destinations_max : natural; -- <= c_sdp_bdo_mm_nof_destinations_max + use_xsub : boolean; + use_ring : boolean; + P_sq : natural; end record; - constant c_ait : t_lofar2_unb2b_sdp_station_config := (false, false, false, false, false, false, false, false, 0); - constant c_fsub : t_lofar2_unb2b_sdp_station_config := (false, true, false, false, false, false, false, false, 0); + constant c_ait : t_lofar2_unb2b_sdp_station_config := (false, false, false, false, false, 1, false, false, 0); + constant c_fsub : t_lofar2_unb2b_sdp_station_config := (false, true, false, false, false, 1, false, false, 0); -- use c_bf on one node also to simulate bdo transpose -- use c_bf_ring with ring also to simulate bdo identity - constant c_bf : t_lofar2_unb2b_sdp_station_config := (false, true, false, true, false, false, false, false, 0); - constant c_bf_ring : t_lofar2_unb2b_sdp_station_config := (false, true, false, true, false, false, false, true, 0); - constant c_xsub_one : t_lofar2_unb2b_sdp_station_config := (false, true, false, false, false, false, true, false, 1); - constant c_xsub_ring : t_lofar2_unb2b_sdp_station_config := (false, true, false, false, false, false, true, true, 9); + constant c_bf : t_lofar2_unb2b_sdp_station_config := (false, true, false, true, false, 1, false, false, 0); + constant c_bf_ring : t_lofar2_unb2b_sdp_station_config := (false, true, false, true, false, 1, false, true, 0); + constant c_xsub_one : t_lofar2_unb2b_sdp_station_config := (false, true, false, false, false, 1, true, false, 1); + constant c_xsub_ring : t_lofar2_unb2b_sdp_station_config := (false, true, false, false, false, 1, true, true, 9); -- use c_full_wg for SDP regression test on Arts-unb2b - constant c_full_wg : t_lofar2_unb2b_sdp_station_config := (true, true, false, true, true, false, true, true, 9); - constant c_full : t_lofar2_unb2b_sdp_station_config := (false, true, false, true, false, false, true, true, 9); - constant c_full_wg_os : t_lofar2_unb2b_sdp_station_config := (true, true, true, true, false, false, true, true, 9); + constant c_full_wg : t_lofar2_unb2b_sdp_station_config := (true, true, false, true, true, 1, true, true, 9); + constant c_full : t_lofar2_unb2b_sdp_station_config := (false, true, false, true, false, 1, true, true, 9); + constant c_full_wg_os : t_lofar2_unb2b_sdp_station_config := (true, true, true, true, false, 1, true, true, 9); -- use c_full_os for SDP on LTS-unb2b of Disturb2 - constant c_full_os : t_lofar2_unb2b_sdp_station_config := (false, true, true, true, false, false, true, true, 9); + constant c_full_os : t_lofar2_unb2b_sdp_station_config := (false, true, true, true, false, 1, true, true, 9); -- Function to select the revision configuration. function func_sel_revision_rec(g_design_name : string) return t_lofar2_unb2b_sdp_station_config; diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/lofar2_unb2c_sdp_station.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/lofar2_unb2c_sdp_station.vhd index 6862b4620fc00a9e665f8fe07edd96d13fd9737a..d9154faa443f87f2a84acb36e108a01eb2d24772 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/lofar2_unb2c_sdp_station.vhd +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/lofar2_unb2c_sdp_station.vhd @@ -770,19 +770,19 @@ begin ----------------------------------------------------------------------------- u_sdp_station : entity lofar2_sdp_lib.sdp_station generic map ( - g_sim => g_sim, - g_wpfb => g_wpfb, - g_bsn_nof_clk_per_sync => g_bsn_nof_clk_per_sync, - g_scope_selected_subband => g_scope_selected_subband, - g_no_jesd => c_revision_select.no_jesd, - g_use_fsub => c_revision_select.use_fsub, - g_use_oversample => c_revision_select.use_oversample, - g_use_xsub => c_revision_select.use_xsub, - g_use_bf => c_revision_select.use_bf, - g_use_bdo_transpose => c_revision_select.use_bdo_transpose, - g_use_bdo_multiple_destinations => c_revision_select.use_bdo_multiple_destinations, - g_use_ring => c_revision_select.use_ring, - g_P_sq => c_revision_select.P_sq + g_sim => g_sim, + g_wpfb => g_wpfb, + g_bsn_nof_clk_per_sync => g_bsn_nof_clk_per_sync, + g_scope_selected_subband => g_scope_selected_subband, + g_no_jesd => c_revision_select.no_jesd, + g_use_fsub => c_revision_select.use_fsub, + g_use_oversample => c_revision_select.use_oversample, + g_use_xsub => c_revision_select.use_xsub, + g_use_bf => c_revision_select.use_bf, + g_use_bdo_transpose => c_revision_select.use_bdo_transpose, + g_nof_bdo_destinations_max => c_revision_select.nof_bdo_destinations_max, + g_use_ring => c_revision_select.use_ring, + g_P_sq => c_revision_select.P_sq ) port map ( diff --git a/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/lofar2_unb2c_sdp_station_pkg.vhd b/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/lofar2_unb2c_sdp_station_pkg.vhd index 89fdb57b349264aec4d9125bb723b0abc2746532..177d5cfa3f656620bf33c69a72e92c8420474743 100644 --- a/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/lofar2_unb2c_sdp_station_pkg.vhd +++ b/applications/lofar2/designs/lofar2_unb2c_sdp_station/src/vhdl/lofar2_unb2c_sdp_station_pkg.vhd @@ -31,30 +31,30 @@ package lofar2_unb2c_sdp_station_pkg is ----------------------------------------------------------------------------- type t_lofar2_unb2c_sdp_station_config is record - no_jesd : boolean; - use_fsub : boolean; - use_oversample : boolean; - use_bf : boolean; - use_bdo_transpose : boolean; - use_bdo_multiple_destinations : boolean; - use_xsub : boolean; - use_ring : boolean; - P_sq : natural; + no_jesd : boolean; + use_fsub : boolean; + use_oversample : boolean; + use_bf : boolean; + use_bdo_transpose : boolean; + nof_bdo_destinations_max : natural; -- <= c_sdp_bdo_mm_nof_destinations_max + use_xsub : boolean; + use_ring : boolean; + P_sq : natural; end record; - constant c_ait : t_lofar2_unb2c_sdp_station_config := (false, false, false, false, false, false, false, false, 0); - constant c_fsub : t_lofar2_unb2c_sdp_station_config := (false, true, false, false, false, false, false, false, 0); + constant c_ait : t_lofar2_unb2c_sdp_station_config := (false, false, false, false, false, 1, false, false, 0); + constant c_fsub : t_lofar2_unb2c_sdp_station_config := (false, true, false, false, false, 1, false, false, 0); -- use c_bf on one node also to simulate bdo transpose -- use c_bf_ring with ring also to simulate bdo identity - constant c_bf : t_lofar2_unb2c_sdp_station_config := (false, true, false, true, true, false, false, false, 0); - constant c_bf_ring : t_lofar2_unb2c_sdp_station_config := (false, true, false, true, false, false, false, true, 0); - constant c_xsub_one : t_lofar2_unb2c_sdp_station_config := (false, true, false, false, false, false, true, false, 1); - constant c_xsub_ring : t_lofar2_unb2c_sdp_station_config := (false, true, false, false, false, false, true, true, 9); - constant c_full_wg : t_lofar2_unb2c_sdp_station_config := (true, true, false, true, true, false, true, true, 9); + constant c_bf : t_lofar2_unb2c_sdp_station_config := (false, true, false, true, true, 1, false, false, 0); + constant c_bf_ring : t_lofar2_unb2c_sdp_station_config := (false, true, false, true, false, 1, false, true, 0); + constant c_xsub_one : t_lofar2_unb2c_sdp_station_config := (false, true, false, false, false, 1, true, false, 1); + constant c_xsub_ring : t_lofar2_unb2c_sdp_station_config := (false, true, false, false, false, 1, true, true, 9); + constant c_full_wg : t_lofar2_unb2c_sdp_station_config := (true, true, false, true, true, 1, true, true, 9); -- Use c_full for LOFAR2 Station SDP operations - constant c_full : t_lofar2_unb2c_sdp_station_config := (false, true, false, true, true, false, true, true, 9); - constant c_full_wg_os : t_lofar2_unb2c_sdp_station_config := (true, true, true, true, true, false, true, true, 9); - constant c_full_os : t_lofar2_unb2c_sdp_station_config := (false, true, true, true, true, false, true, true, 9); + constant c_full : t_lofar2_unb2c_sdp_station_config := (false, true, false, true, true, 1, true, true, 9); + constant c_full_wg_os : t_lofar2_unb2c_sdp_station_config := (true, true, true, true, true, 1, true, true, 9); + constant c_full_os : t_lofar2_unb2c_sdp_station_config := (false, true, true, true, true, 1, true, true, 9); -- Function to select the revision configuration. function func_sel_revision_rec(g_design_name : string) return t_lofar2_unb2c_sdp_station_config; diff --git a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_beamformer.vhd b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_beamformer.vhd index 6a5a17961acb3510a95d385887ca5858ecead7e2..16bba9218c6b21e76bb1aeacfc4dfa45e66fee83 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_beamformer.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_beamformer.vhd @@ -40,13 +40,13 @@ use work.sdp_pkg.all; entity node_sdp_beamformer is generic ( + -- Use no default, to force instance to set it g_sim : boolean := false; g_sim_sdp : t_sdp_sim := c_sdp_sim; - g_beamset_id : natural := 0; - g_use_bdo_transpose : boolean := false; - g_use_bdo_multiple_destinations : boolean := false; + g_beamset_id : natural; + g_use_bdo_transpose : boolean; + g_nof_bdo_destinations_max : natural; g_scope_selected_beamlet : natural := 0; - -- Use no default raw width, to force instance to set it g_subband_raw_dat_w : natural; -- default: c_sdp_W_subband; g_subband_raw_fraction_w : natural -- default: 0 ); @@ -256,9 +256,9 @@ begin --------------------------------------------------------------- u_sdp_beamformer_output : entity work.sdp_beamformer_output generic map( - g_beamset_id => g_beamset_id, - g_use_transpose => g_use_bdo_transpose, - g_use_multiple_destinations => g_use_bdo_multiple_destinations + g_beamset_id => g_beamset_id, + g_use_transpose => g_use_bdo_transpose, + g_nof_destinations_max => g_nof_bdo_destinations_max ) port map ( mm_rst => mm_rst, diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd index 77a525d30f18ad9a4bde74ff5f7873f98187d106..a40ee3c528fcc79c9be8e97a8172b2703f15834c 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd @@ -54,22 +54,23 @@ use ring_lib.ring_pkg.all; entity sdp_station is generic ( - g_sim : boolean := false; -- Overridden by TB - g_sim_sdp : t_sdp_sim := c_sdp_sim; -- Used when g_sim = TRUE, otherwise use HW defaults - g_sim_sync_timeout : natural := 1024; - g_wpfb : t_wpfb := c_sdp_wpfb_subbands; - g_wpfb_complex : t_wpfb := c_sdp_wpfb_complex_subbands; - g_bsn_nof_clk_per_sync : natural := c_sdp_N_clk_per_sync; -- Default 200M, overide for short simulation - g_scope_selected_subband : natural := 0; - g_no_jesd : boolean := false; - g_use_fsub : boolean := true; - g_use_oversample : boolean := false; - g_use_xsub : boolean := true; - g_use_bf : boolean := true; - g_use_bdo_transpose : boolean := false; - g_use_bdo_multiple_destinations : boolean := false; - g_use_ring : boolean := true; - g_P_sq : natural := 1 + g_sim : boolean := false; -- Overridden by TB + g_sim_sdp : t_sdp_sim := c_sdp_sim; -- Used when g_sim = TRUE, otherwise use HW defaults + g_sim_sync_timeout : natural := 1024; + g_wpfb : t_wpfb := c_sdp_wpfb_subbands; + g_wpfb_complex : t_wpfb := c_sdp_wpfb_complex_subbands; + g_bsn_nof_clk_per_sync : natural := c_sdp_N_clk_per_sync; -- Default 200M, overide for short simulation + g_scope_selected_subband : natural := 0; + -- Use no default, to force instance to set it + g_no_jesd : boolean; + g_use_fsub : boolean; + g_use_oversample : boolean; + g_use_xsub : boolean; + g_use_bf : boolean; + g_use_bdo_transpose : boolean; + g_nof_bdo_destinations_max : natural; + g_use_ring : boolean; + g_P_sq : natural ); port ( -- System @@ -909,14 +910,14 @@ begin gen_bf : for beamset_id in 0 to c_sdp_N_beamsets - 1 generate u_bf : entity work.node_sdp_beamformer generic map( - g_sim => g_sim, - g_sim_sdp => g_sim_sdp, - g_beamset_id => beamset_id, - g_use_bdo_transpose => g_use_bdo_transpose, - g_use_bdo_multiple_destinations => g_use_bdo_multiple_destinations, - g_scope_selected_beamlet => g_scope_selected_subband, - g_subband_raw_dat_w => c_subband_raw_dat_w, - g_subband_raw_fraction_w => c_subband_raw_fraction_w + g_sim => g_sim, + g_sim_sdp => g_sim_sdp, + g_beamset_id => beamset_id, + g_use_bdo_transpose => g_use_bdo_transpose, + g_nof_bdo_destinations_max => g_nof_bdo_destinations_max, + g_scope_selected_beamlet => g_scope_selected_subband, + g_subband_raw_dat_w => c_subband_raw_dat_w, + g_subband_raw_fraction_w => c_subband_raw_fraction_w ) port map( dp_clk => dp_clk, diff --git a/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_beamformer_output.vhd b/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_beamformer_output.vhd index 69a52466c91568dcba64d3f57a69f03f22648822..74ac05033500c0474d7a8d28fe57a0c7ebb79f4a 100644 --- a/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_beamformer_output.vhd +++ b/applications/lofar2/libraries/sdp/tb/vhdl/tb_sdp_beamformer_output.vhd @@ -42,10 +42,10 @@ use work.tb_sdp_pkg.all; entity tb_sdp_beamformer_output is generic ( - g_nof_repeat : natural := 50; - g_beamset_id : natural := 0; - g_use_transpose : boolean := true; - g_use_multiple_destinations : boolean := false + g_nof_repeat : natural := 50; + g_beamset_id : natural := 0; + g_use_transpose : boolean := false; + g_nof_destinations_max : natural := 1 ); end tb_sdp_beamformer_output; @@ -212,7 +212,7 @@ begin generic map ( g_beamset_id => g_beamset_id, g_use_transpose => g_use_transpose, - g_use_multiple_destinations => g_use_multiple_destinations, + g_nof_destinations_max => g_nof_destinations_max, g_sim_force_bsn_error => false ) port map ( @@ -340,8 +340,8 @@ begin p_verify_rx_beamlet_list : process -- Nof complex (= nof re = nof im = c_N) values in t_sdp_beamlet_packet_list constant c_N : natural := c_sdp_cep_nof_beamlets_per_packet * c_sdp_N_pol_bf; - variable v_prev_re : natural := prev_re; - variable v_prev_im : natural := prev_im; + variable v_re : natural; + variable v_im : natural; begin -- Wait until end of a beamlet packet -- . use at least one wait statement in process to avoid Modelsim warning: (vcom-1090) @@ -362,14 +362,18 @@ begin wait until rising_edge(dp_clk); rx_beamlet_list_val <= '0'; -- Verify rx_beamlet_list + -- . get last values from previous block + v_re := prev_re; + v_im := prev_im; for vI in 0 to c_N - 1 loop -- Verify incrementing beamlets - v_prev_re := (v_prev_re + 1) mod c_beamlet_mod; - v_prev_im := (v_prev_im + 1) mod c_beamlet_mod; - assert to_uint(rx_beamlet_list_re(vI)) = v_prev_re report "Wrong re_beamlet." severity error; - assert to_uint(rx_beamlet_list_im(vI)) = v_prev_im report "Wrong im_beamlet." severity error; + v_re := (v_re + 1) mod c_beamlet_mod; + v_im := (v_im + 1) mod c_beamlet_mod; + assert to_uint(rx_beamlet_list_re(vI)) = v_re report "Wrong re_beamlet." severity error; + assert to_uint(rx_beamlet_list_im(vI)) = v_im report "Wrong im_beamlet." severity error; end loop; - prev_re <= v_prev_re; - prev_im <= v_prev_im; + -- . hold last values for next block + prev_re <= v_re; + prev_im <= v_im; end process; end tb; diff --git a/applications/lofar2/libraries/sdp/tb/vhdl/tb_tb_sdp_beamformer_output.vhd b/applications/lofar2/libraries/sdp/tb/vhdl/tb_tb_sdp_beamformer_output.vhd index 881383bb6c521d754b60c6ed98b5761c77d57f1e..dfedeb7a55f70b49e70994c4010d0902e40bbcaf 100644 --- a/applications/lofar2/libraries/sdp/tb/vhdl/tb_tb_sdp_beamformer_output.vhd +++ b/applications/lofar2/libraries/sdp/tb/vhdl/tb_tb_sdp_beamformer_output.vhd @@ -36,11 +36,11 @@ end tb_tb_sdp_beamformer_output; architecture tb of tb_tb_sdp_beamformer_output is signal tb_end : std_logic := '0'; -- declare tb_end to avoid 'No objects found' error on 'when -label tb_end' begin - -- g_nof_repeat : natural := 10; - -- g_beamset_id : natural := 0; - -- g_use_transpose : boolean := false; - -- g_use_multiple_destinations : boolean := false + -- g_nof_repeat : natural := 10; + -- g_beamset_id : natural := 0; + -- g_use_transpose : boolean := false; + -- g_nof_destinations_max : natural := 1; - u_one_identity : entity work.tb_sdp_beamformer_output generic map( 50, 0, false, false); - u_one_transpose : entity work.tb_sdp_beamformer_output generic map( 50, 0, true, false); + u_one_identity : entity work.tb_sdp_beamformer_output generic map( 50, 0, false, 1); + u_one_transpose : entity work.tb_sdp_beamformer_output generic map( 50, 0, true, 1); end tb;