diff --git a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd index 191577e824056e530783ed46a88fcb65a9133d2b..675928d71b20adb802983c10a889f8e7f26ce3eb 100644 --- a/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd +++ b/applications/lofar2/libraries/sdp/src/vhdl/node_sdp_correlator.vhd @@ -54,18 +54,18 @@ ENTITY node_sdp_correlator IS mm_rst : IN STD_LOGIC; mm_clk : IN STD_LOGIC; - reg_dp_sync_insert_v2_mosi : IN t_mem_mosi := c_mem_mosi_rst; - reg_dp_sync_insert_v2_miso : OUT t_mem_miso; - reg_crosslets_info_mosi : IN t_mem_mosi := c_mem_mosi_rst; - reg_crosslets_info_miso : OUT t_mem_miso; - reg_bsn_scheduler_xsub_mosi : IN t_mem_mosi := c_mem_mosi_rst; - reg_bsn_scheduler_xsub_miso : OUT t_mem_miso; - ram_st_xsq_mosi : IN t_mem_mosi := c_mem_mosi_rst; - ram_st_xsq_miso : OUT t_mem_miso; - reg_stat_enable_mosi : IN t_mem_mosi := c_mem_mosi_rst; - reg_stat_enable_miso : OUT t_mem_miso; - reg_stat_hdr_dat_mosi : IN t_mem_mosi := c_mem_mosi_rst; - reg_stat_hdr_dat_miso : OUT t_mem_miso; + reg_dp_bsn_sync_scheduler_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_dp_bsn_sync_scheduler_miso : OUT t_mem_miso; + reg_crosslets_info_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_crosslets_info_miso : OUT t_mem_miso; + reg_bsn_scheduler_xsub_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_bsn_scheduler_xsub_miso : OUT t_mem_miso; + ram_st_xsq_mosi : IN t_mem_mosi := c_mem_mosi_rst; + ram_st_xsq_miso : OUT t_mem_miso; + reg_stat_enable_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_stat_enable_miso : OUT t_mem_miso; + reg_stat_hdr_dat_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_stat_hdr_dat_miso : OUT t_mem_miso; sdp_info : IN t_sdp_info; gn_id : IN STD_LOGIC_VECTOR(c_sdp_W_gn_id-1 DOWNTO 0); @@ -77,9 +77,6 @@ END node_sdp_correlator; ARCHITECTURE str OF node_sdp_correlator IS - CONSTANT c_nof_blk_per_sync_max : NATURAL := c_sdp_xst_nof_blk_per_sync_max; - CONSTANT c_nof_blk_per_sync_min : NATURAL := c_sdp_xst_nof_blk_per_sync_min; - CONSTANT c_nof_masters : POSITIVE := 2; -- crosslet statistics offload @@ -91,14 +88,18 @@ ARCHITECTURE str OF node_sdp_correlator IS SIGNAL master_mosi_arr : t_mem_mosi_arr(0 TO c_nof_masters-1) := (OTHERS=>c_mem_mosi_rst); SIGNAL master_miso_arr : t_mem_miso_arr(0 TO c_nof_masters-1) := (OTHERS=>c_mem_miso_rst); - SIGNAL quant_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); - SIGNAL xin_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); - SIGNAL xsel_sosi : t_dp_sosi := c_dp_sosi_rst; - SIGNAL crosslets_sosi_arr : t_dp_sosi_arr(g_P_sq-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); - SIGNAL crosslets_mosi_arr : t_mem_mosi_arr(g_P_sq-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); - SIGNAL crosslets_miso_arr : t_mem_miso_arr(g_P_sq-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); + SIGNAL quant_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL dp_bsn_sync_scheduler_snk_in : t_dp_sosi := c_dp_sosi_rst; + SIGNAL dp_bsn_sync_scheduler_src_out : t_dp_sosi := c_dp_sosi_rst; + SIGNAL xin_sosi_arr : t_dp_sosi_arr(c_sdp_P_pfb-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL xsel_sosi : t_dp_sosi := c_dp_sosi_rst; + SIGNAL crosslets_sosi_arr : t_dp_sosi_arr(g_P_sq-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); + SIGNAL crosslets_mosi_arr : t_mem_mosi_arr(g_P_sq-1 DOWNTO 0) := (OTHERS => c_mem_mosi_rst); + SIGNAL crosslets_miso_arr : t_mem_miso_arr(g_P_sq-1 DOWNTO 0) := (OTHERS => c_mem_miso_rst); + - SIGNAL crosslets_info : STD_LOGIC_VECTOR(c_sdp_crosslets_info_reg_w-1 DOWNTO 0); + SIGNAL dp_bsn_sync_scheduler_out_start : STD_LOGIC; + SIGNAL crosslets_info : STD_LOGIC_VECTOR(c_sdp_crosslets_info_reg_w-1 DOWNTO 0); BEGIN --------------------------------------------------------------- -- Requantize 18b to 16b @@ -126,27 +127,41 @@ BEGIN END GENERATE; --------------------------------------------------------------- - -- dp_sync_insert_v2 + -- mmp_dp_bsn_sync_scheduler --------------------------------------------------------------- - u_dp_sync_insert_v2 : ENTITY dp_lib.dp_sync_insert_v2 + dp_bsn_sync_scheduler_snk_in <= quant_sosi_arr(0); + p_bsn_sync : PROCESS(dp_bsn_sync_scheduler_src_out) + BEGIN + xin_sosi_arr <= quant_sosi_arr; + FOR I IN 0 TO c_sdp_P_pfb-1 LOOP + xin_sosi_arr(I).sop <= dp_bsn_sync_scheduler_src_out.sop; + xin_sosi_arr(I).eop <= dp_bsn_sync_scheduler_src_out.eop; + xin_sosi_arr(I).valid <= dp_bsn_sync_scheduler_src_out.valid; + xin_sosi_arr(I).sync <= dp_bsn_sync_scheduler_src_out.sync; + END LOOP; + END PROCESS; + + u_mmp_dp_bsn_sync_scheduler : ENTITY dp_lib.mmp_dp_bsn_sync_scheduler GENERIC MAP ( - g_nof_streams => c_sdp_P_pfb, - g_nof_blk_per_sync => c_nof_blk_per_sync_max, - g_nof_blk_per_sync_min => c_nof_blk_per_sync_min + g_block_size => c_sdp_N_fft, + g_ctrl_interval_size_min => c_sdp_xst_nof_blk_per_sync_min ) PORT MAP ( dp_rst => dp_rst, dp_clk => dp_clk, mm_rst => mm_rst, - mm_clk => mm_clk, + mm_clk => mm_clk, + + reg_mosi => reg_dp_bsn_sync_scheduler_mosi, + reg_miso => reg_dp_bsn_sync_scheduler_miso, - reg_mosi => reg_dp_sync_insert_v2_mosi, - reg_miso => reg_dp_sync_insert_v2_miso, + in_sosi => dp_bsn_sync_scheduler_snk_in, + out_sosi => dp_bsn_sync_scheduler_src_out, + + out_start => dp_bsn_sync_scheduler_out_start - in_sosi_arr => quant_sosi_arr, - out_sosi_arr => xin_sosi_arr ); - + --------------------------------------------------------------- -- Crosslet Subband Select --------------------------------------------------------------- @@ -170,6 +185,7 @@ BEGIN reg_bsn_scheduler_xsub_mosi => reg_bsn_scheduler_xsub_mosi, reg_bsn_scheduler_xsub_miso => reg_bsn_scheduler_xsub_miso, + start_trigger => dp_bsn_sync_scheduler_out_start, out_crosslets_info => crosslets_info ); diff --git a/libraries/base/dp/src/vhdl/mmp_dp_bsn_sync_scheduler.vhd b/libraries/base/dp/src/vhdl/mmp_dp_bsn_sync_scheduler.vhd index 842fa3175e688d1c4048b4417abd2a526e9e6579..f6d791cbd082ace1b76eb2d7022e3e1b889a596c 100644 --- a/libraries/base/dp/src/vhdl/mmp_dp_bsn_sync_scheduler.vhd +++ b/libraries/base/dp/src/vhdl/mmp_dp_bsn_sync_scheduler.vhd @@ -62,8 +62,9 @@ USE work.dp_stream_pkg.ALL; ENTITY mmp_dp_bsn_sync_scheduler IS GENERIC ( - g_bsn_w : NATURAL := c_dp_stream_bsn_w; - g_block_size : NATURAL := 256 -- = number of data valid per BSN block, must be >= 2 + g_bsn_w : NATURAL := c_dp_stream_bsn_w; + g_block_size : NATURAL := 256; -- = number of data valid per BSN block, must be >= 2 + g_ctrl_interval_size_min : NATURAL := 19530 -- Minimum interval size to use if MM write interval size is set too small. ); PORT ( -- Clocks and reset @@ -126,7 +127,8 @@ BEGIN -- Register mapping -- . Write wr_ctrl_enable <= reg_wr( 0); - ctrl_interval_size <= TO_UINT(reg_wr( 2*c_word_w-1 DOWNTO 1*c_word_w)); + ctrl_interval_size <= TO_UINT(reg_wr( 2*c_word_w-1 DOWNTO 1*c_word_w)) WHEN + g_ctrl_interval_size_min < TO_UINT(reg_wr( 2*c_word_w-1 DOWNTO 1*c_word_w)) ELSE g_ctrl_interval_size_min; wr_start_bsn_64( c_word_w-1 DOWNTO 0) <= reg_wr( 3*c_word_w-1 DOWNTO 2*c_word_w); -- low word wr_start_bsn_64(2*c_word_w-1 DOWNTO 1*c_word_w) <= reg_wr( 4*c_word_w-1 DOWNTO 3*c_word_w); -- high word