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 05b1eed4cada981d995f1a2c6692a4f2957acdcc..fa2c8dbc440ffbb42d7ed729b06c19e2cfc93c97 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_beamformer.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_beamformer.vhd @@ -128,7 +128,13 @@ ARCHITECTURE str OF node_sdp_beamformer IS SIGNAL scope_bf_sum_sosi_arr : t_dp_sosi_integer_arr(c_sdp_N_pol_bf-1 DOWNTO 0); SIGNAL scope_bf_out_sosi_arr : t_dp_sosi_integer_arr(c_sdp_N_pol_bf-1 DOWNTO 0); SIGNAL beamlet_scale : STD_LOGIC_VECTOR(c_sdp_W_beamlet_scale-1 DOWNTO 0); + + SIGNAL node_index : NATURAL RANGE 0 TO c_sdp_N_pn_max-1 := 0; + BEGIN + + node_index <= TO_UINT(gn_id); + --------------------------------------------------------------- -- Beamlet Subband Select --------------------------------------------------------------- @@ -183,7 +189,8 @@ BEGIN dp_clk => dp_clk, mm_rst => mm_rst, mm_clk => mm_clk, - + + node_index => node_index, local_bf_sosi => local_bf_sosi, from_ri_sosi => from_ri_sosi, to_ri_sosi => to_ri_sosi, diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_remote.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_remote.vhd index d5094cfe9d89615cf87a0042d0daddc8efe3908b..abb11bce5443ed475fbe23e8d78ed7042ed16e22 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_remote.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_beamformer_remote.vhd @@ -41,6 +41,8 @@ ENTITY sdp_beamformer_remote IS dp_clk : IN STD_LOGIC; dp_rst : IN STD_LOGIC; + node_index : IN NATURAL RANGE 0 TO c_sdp_N_pn_max-1 := 0; + local_bf_sosi : IN t_dp_sosi; from_ri_sosi : IN t_dp_sosi; to_ri_sosi : OUT t_dp_sosi; @@ -162,6 +164,8 @@ BEGIN dp_rst => dp_rst, dp_clk => dp_clk, + node_index => node_index, + -- Streaming input in_sosi_arr => dispatch_sosi_arr, out_sosi_arr => beamlets_data_sosi_arr @@ -172,10 +176,10 @@ BEGIN BEGIN beamlets_sosi_arr(0) <= beamlets_data_sosi_arr(0); beamlets_sosi_arr(1) <= beamlets_data_sosi_arr(1); - beamlets_sosi_arr(0).re(c_sdp_W_beamlet_sum-1 DOWNTO 0) <= beamlets_data_sosi_arr(0).data(c_sdp_W_beamlet_sum -1 DOWNTO 0); - beamlets_sosi_arr(0).im(c_sdp_W_beamlet_sum-1 DOWNTO 0) <= beamlets_data_sosi_arr(0).data( c_data_w -1 DOWNTO c_sdp_W_beamlet_sum); - beamlets_sosi_arr(1).re(c_sdp_W_beamlet_sum-1 DOWNTO 0) <= beamlets_data_sosi_arr(1).data(c_sdp_W_beamlet_sum -1 DOWNTO 0); - beamlets_sosi_arr(1).im(c_sdp_W_beamlet_sum-1 DOWNTO 0) <= beamlets_data_sosi_arr(1).data( c_data_w -1 DOWNTO c_sdp_W_beamlet_sum); + beamlets_sosi_arr(0).re <= RESIZE_DP_DSP_DATA(beamlets_data_sosi_arr(0).data(c_sdp_W_beamlet_sum -1 DOWNTO 0)); + beamlets_sosi_arr(0).im <= RESIZE_DP_DSP_DATA(beamlets_data_sosi_arr(0).data( c_data_w -1 DOWNTO c_sdp_W_beamlet_sum)); + beamlets_sosi_arr(1).re <= RESIZE_DP_DSP_DATA(beamlets_data_sosi_arr(1).data(c_sdp_W_beamlet_sum -1 DOWNTO 0)); + beamlets_sosi_arr(1).im <= RESIZE_DP_DSP_DATA(beamlets_data_sosi_arr(1).data( c_data_w -1 DOWNTO c_sdp_W_beamlet_sum)); END PROCESS; --------------------------------------------------------------- @@ -218,8 +222,8 @@ BEGIN bf_sum_sosi <= pipelined_beamlets_sosi; -- To preserve sosi control signals as dp_complex_add removes them. bf_sum_data_sosi.data(c_sdp_W_beamlet_sum -1 DOWNTO 0) <= i_bf_sum_sosi.re(c_sdp_W_beamlet_sum-1 DOWNTO 0); bf_sum_data_sosi.data( c_data_w -1 DOWNTO c_sdp_W_beamlet_sum) <= i_bf_sum_sosi.im(c_sdp_W_beamlet_sum-1 DOWNTO 0); - bf_sum_sosi.re(c_sdp_W_beamlet_sum-1 DOWNTO 0) <= i_bf_sum_sosi.re(c_sdp_W_beamlet_sum-1 DOWNTO 0); - bf_sum_sosi.im(c_sdp_W_beamlet_sum-1 DOWNTO 0) <= i_bf_sum_sosi.im(c_sdp_W_beamlet_sum-1 DOWNTO 0); + bf_sum_sosi.re <= RESIZE_DP_DSP_DATA(i_bf_sum_sosi.re(c_sdp_W_beamlet_sum-1 DOWNTO 0)); + bf_sum_sosi.im <= RESIZE_DP_DSP_DATA(i_bf_sum_sosi.im(c_sdp_W_beamlet_sum-1 DOWNTO 0)); END PROCESS; u_dp_repack_data_local : ENTITY dp_lib.dp_repack_data diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd index dc4be0e0de275e94504e84764f624fa6ca8c2b87..788ce58dd3fdb02009e5f36e06dce5dfd17c056f 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_station.vhd @@ -492,10 +492,10 @@ ARCHITECTURE str OF sdp_station IS SIGNAL fsub_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0); -- weighted subbands SIGNAL bs_sosi : t_dp_sosi; - SIGNAL xst_from_ri_sosi : t_dp_sosi; - SIGNAL xst_to_ri_sosi : t_dp_sosi; - SIGNAL bf_from_ri_sosi_arr : t_dp_sosi_arr(c_sdp_N_beamsets-1 DOWNTO 0); - SIGNAL bf_to_ri_sosi_arr : t_dp_sosi_arr(c_sdp_N_beamsets-1 DOWNTO 0); + SIGNAL xst_from_ri_sosi : t_dp_sosi := c_dp_sosi_rst; + SIGNAL xst_to_ri_sosi : t_dp_sosi := c_dp_sosi_rst; + SIGNAL bf_from_ri_sosi_arr : t_dp_sosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL bf_to_ri_sosi_arr : t_dp_sosi_arr(c_sdp_N_beamsets-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); SIGNAL lane_rx_cable_sosi_arr : t_dp_sosi_arr(c_nof_lane-1 DOWNTO 0); SIGNAL lane_tx_cable_sosi_arr : t_dp_sosi_arr(c_nof_lane-1 DOWNTO 0); SIGNAL lane_rx_board_sosi_arr : t_dp_sosi_arr(c_nof_lane-1 DOWNTO 0); diff --git a/libraries/base/dp/src/vhdl/dp_bsn_align_v2.vhd b/libraries/base/dp/src/vhdl/dp_bsn_align_v2.vhd index 3f83496de73c2a7b8d9d07ff013ebffd164be04a..125a82f533fd942e12b3da0f7331e7a7973881c7 100644 --- a/libraries/base/dp/src/vhdl/dp_bsn_align_v2.vhd +++ b/libraries/base/dp/src/vhdl/dp_bsn_align_v2.vhd @@ -118,7 +118,7 @@ ARCHITECTURE rtl OF dp_bsn_align_v2 IS TYPE t_bsn_arr IS ARRAY (INTEGER RANGE <>) OF STD_LOGIC_VECTOR(g_bsn_w-1 DOWNTO 0); TYPE t_channel_arr IS ARRAY (INTEGER RANGE <>) OF STD_LOGIC_VECTOR(c_channel_w-1 DOWNTO 0); - TYPE t_adr_arr IS ARRAY (INTEGER RANGE <>) OF STD_LOGIC_VECTOR(c_mem_ram.adr_w-1 DOWNTO 0); + TYPE t_adr_arr IS ARRAY (INTEGER RANGE <>) OF STD_LOGIC_VECTOR(c_ram_buf.adr_w-1 DOWNTO 0); TYPE t_filled_arr IS ARRAY (INTEGER RANGE <>) OF STD_LOGIC_VECTOR(c_buffer_nof_blocks-1 DOWNTO 0); -- State @@ -136,7 +136,7 @@ ARCHITECTURE rtl OF dp_bsn_align_v2 IS dp_sosi : t_dp_sosi; -- p_read rd_blk_pointer : INTEGER; -- use integer to detect need to wrap to natural - rd_offset : STD_LOGIC_VECTOR(c_mem_ram.adr_w-1 DOWNTO 0); + rd_offset : STD_LOGIC_VECTOR(c_ram_buf.adr_w-1 DOWNTO 0); rd_copi : t_mem_copi; fill_cipo_arr : t_mem_cipo_arr(g_nof_streams-1 DOWNTO 0); -- used combinatorial to contain rd_cipo_arr from buffer or replacement data out_bsn : STD_LOGIC_VECTOR(g_bsn_w-1 DOWNTO 0); -- hold BSN until next sop, for easy view in Wave window @@ -251,7 +251,7 @@ BEGIN -- p_write IF in_sosi_arr_p(I).valid = '1' THEN -- . increment address during block - v.wr_copi_arr(I).address := RESIZE_MEM_ADDRESS(INCR_UVEC(r.wr_copi_arr(I).address(c_mem_ram.adr_w-1 DOWNTO 0), 1)); + v.wr_copi_arr(I).address := RESIZE_MEM_ADDRESS(INCR_UVEC(r.wr_copi_arr(I).address(c_ram_buf.adr_w-1 DOWNTO 0), 1)); v.wr_copi_arr(I).wr := '1'; v.wr_copi_arr(I).wrdata := RESIZE_MEM_SDATA(in_sosi_arr_p(I).data); END IF; @@ -260,8 +260,8 @@ BEGIN -- . set address at start of block w.blk_pointer_slv := in_sosi_arr_p(I).bsn(c_blk_pointer_w-1 DOWNTO 0); w.product_slv := MULT_UVEC(w.blk_pointer_slv, c_block_size_slv); - -- . resize to c_mem_ram.adr_w - v.wr_copi_arr(I).address := RESIZE_MEM_ADDRESS(RESIZE_UVEC(w.product_slv, c_mem_ram.adr_w)); + -- . resize to c_ram_buf.adr_w + v.wr_copi_arr(I).address := RESIZE_MEM_ADDRESS(RESIZE_UVEC(w.product_slv, c_ram_buf.adr_w)); -- . set filled flag at sop, so assume rest of block will follow in time v.filled_arr(I)(TO_UINT(w.blk_pointer_slv)) := '1'; @@ -292,7 +292,7 @@ BEGIN -- . update read address of read block pointer w.blk_pointer_slv := TO_UVEC(v.rd_blk_pointer, c_blk_pointer_w); w.product_slv := MULT_UVEC(w.blk_pointer_slv, c_block_size_slv); - v.rd_offset := RESIZE_UVEC(w.product_slv, c_mem_ram.adr_w); + v.rd_offset := RESIZE_UVEC(w.product_slv, c_ram_buf.adr_w); -- . issue mm_sosi, if there is output ready to be read, indicated by filled reference block IF r.filled_arr(0)(v.rd_blk_pointer) = '1' THEN @@ -343,7 +343,7 @@ BEGIN -- Do the output via the MM interface -------------------------------------------------------------------------- -- . adjust the rd address to the current buffer output block - -- sum yields c_mem_ram.adr_w bits, because left operand in ADD_UVECdetermines width + -- sum yields c_ram_buf.adr_w bits, because left operand in ADD_UVECdetermines width v.rd_copi := mm_copi; v.rd_copi.address := RESIZE_MEM_ADDRESS(ADD_UVEC(r.rd_offset, mm_copi.address)); @@ -357,7 +357,7 @@ BEGIN -- Do the output via the DP streaming interface -------------------------------------------------------------------------- -- . adjust the rd address - -- sum yields c_mem_ram.adr_w bits, because left operand in ADD_UVECdetermines width + -- sum yields c_ram_buf.adr_w bits, because left operand in ADD_UVECdetermines width v.rd_copi := dp_copi; v.rd_copi.address := RESIZE_MEM_ADDRESS(ADD_UVEC(r.rd_offset, dp_copi.address));