From 31e6b575293c541e7f1b6bf2f91a4ee61ad25c9c Mon Sep 17 00:00:00 2001 From: Eric Kooistra <kooistra@astron.nl> Date: Thu, 14 Sep 2023 16:29:57 +0200 Subject: [PATCH] Support design revision parameter use_bdo_multiple_destinations. --- .../src/vhdl/lofar2_unb2b_sdp_station.vhd | 27 +++++++------- .../src/vhdl/lofar2_unb2b_sdp_station_pkg.vhd | 37 ++++++++++--------- .../src/vhdl/lofar2_unb2c_sdp_station.vhd | 25 +++++++------ .../src/vhdl/lofar2_unb2c_sdp_station_pkg.vhd | 37 ++++++++++--------- .../sdp/src/vhdl/node_sdp_beamformer.vhd | 20 +++++----- .../sdp/src/vhdl/sdp_beamformer_output.vhd | 7 ++-- .../libraries/sdp/src/vhdl/sdp_station.vhd | 18 +++++---- 7 files changed, 90 insertions(+), 81 deletions(-) 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 76c4d3cc12..d1081da37d 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,19 +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_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_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 ) 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 0c5ca0f1ac..e65f35ec02 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,30 +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_xsub : boolean; - use_ring : boolean; - P_sq : natural; + 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; end record; - constant c_ait : t_lofar2_unb2b_sdp_station_config := (false, false, false, false, false, false, false, 0); - constant c_fsub : t_lofar2_unb2b_sdp_station_config := (false, true, false, false, false, false, false, 0); + 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); -- 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, 0); - constant c_bf_ring : t_lofar2_unb2b_sdp_station_config := (false, true, false, true, false, false, true, 0); - constant c_xsub_one : t_lofar2_unb2b_sdp_station_config := (false, true, false, false, false, true, false, 1); - constant c_xsub_ring : t_lofar2_unb2b_sdp_station_config := (false, true, false, false, false, true, true, 9); + 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); -- 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, true, true, 9); - constant c_full : t_lofar2_unb2b_sdp_station_config := (false, true, false, true, false, true, true, 9); - constant c_full_wg_os : t_lofar2_unb2b_sdp_station_config := (true, true, true, true, false, true, true, 9); + 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); -- 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, true, true, 9); + constant c_full_os : t_lofar2_unb2b_sdp_station_config := (false, true, true, true, false, false, 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 8635117451..6862b4620f 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,18 +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_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_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 ) 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 fead337700..89fdb57b34 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,29 +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_xsub : boolean; - use_ring : boolean; - P_sq : natural; + 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; end record; - constant c_ait : t_lofar2_unb2c_sdp_station_config := (false, false, false, false, false, false, false, 0); - constant c_fsub : t_lofar2_unb2c_sdp_station_config := (false, true, false, false, false, false, false, 0); + 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); -- 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, 0); - constant c_bf_ring : t_lofar2_unb2c_sdp_station_config := (false, true, false, true, false, false, true, 0); - constant c_xsub_one : t_lofar2_unb2c_sdp_station_config := (false, true, false, false, false, true, false, 1); - constant c_xsub_ring : t_lofar2_unb2c_sdp_station_config := (false, true, false, false, false, true, true, 9); - constant c_full_wg : t_lofar2_unb2c_sdp_station_config := (true, true, false, true, true, true, true, 9); + 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); -- Use c_full for LOFAR2 Station SDP operations - constant c_full : t_lofar2_unb2c_sdp_station_config := (false, true, false, true, true, true, true, 9); - constant c_full_wg_os : t_lofar2_unb2c_sdp_station_config := (true, true, true, true, true, true, true, 9); - constant c_full_os : t_lofar2_unb2c_sdp_station_config := (false, true, true, true, true, true, true, 9); + 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); -- 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 d278d1ab57..6a5a17961a 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_beamformer.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_beamformer.vhd @@ -40,14 +40,15 @@ use work.sdp_pkg.all; entity node_sdp_beamformer is generic ( - 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_scope_selected_beamlet : natural := 0; + 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_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 + g_subband_raw_dat_w : natural; -- default: c_sdp_W_subband; + g_subband_raw_fraction_w : natural -- default: 0 ); port ( dp_clk : in std_logic; @@ -255,8 +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_beamset_id => g_beamset_id, + g_use_transpose => g_use_bdo_transpose, + g_use_multiple_destinations => g_use_bdo_multiple_destinations ) port map ( mm_rst => mm_rst, diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_output.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_output.vhd index 4012eabd82..159ec45ff8 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_output.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_output.vhd @@ -45,8 +45,9 @@ use work.sdp_pkg.all; entity sdp_beamformer_output is generic ( - g_beamset_id : natural := 0; - g_use_transpose : boolean := false + g_beamset_id : natural := 0; + g_use_transpose : boolean := false; + g_use_multiple_destinations : boolean := false ); port ( dp_clk : in std_logic; @@ -303,7 +304,7 @@ begin dp_packet_reorder_word <= unpack_data(dp_packet_reorder_src_out.data(c_sdp_W_dual_pol_beamlet - 1 downto 0)); -- Use synchronous reset in d signals - p_dp_clk_synchronous : process(dp_clk) + p_dp_clk : process(dp_clk) begin if rising_edge(dp_clk) then r_identity <= d_identity; diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd index ebd79dc6d4..77a525d30f 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd @@ -66,7 +66,8 @@ entity sdp_station is g_use_oversample : boolean := false; g_use_xsub : boolean := true; g_use_bf : boolean := true; - g_use_bdo_transpose : boolean := false; + g_use_bdo_transpose : boolean := false; + g_use_bdo_multiple_destinations : boolean := false; g_use_ring : boolean := true; g_P_sq : natural := 1 ); @@ -908,13 +909,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_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_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 ) port map( dp_clk => dp_clk, -- GitLab