diff --git a/applications/apertif/designs/apertif_unb1_correlator/src/vhdl/apertif_unb1_correlator.vhd b/applications/apertif/designs/apertif_unb1_correlator/src/vhdl/apertif_unb1_correlator.vhd index e11dc9f5406a8dcc3adf589073720148448f83bf..528bb01945d75901c19f017c266615a68ed47bd1 100644 --- a/applications/apertif/designs/apertif_unb1_correlator/src/vhdl/apertif_unb1_correlator.vhd +++ b/applications/apertif/designs/apertif_unb1_correlator/src/vhdl/apertif_unb1_correlator.vhd @@ -338,6 +338,10 @@ ARCHITECTURE str OF apertif_unb1_correlator IS SIGNAL mesh_rx_src_in_2arr : t_unb1_board_mesh_siso_2arr; SIGNAL mesh_rx_src_out_2arr : t_unb1_board_mesh_sosi_2arr; + -- dp_block_gen + SIGNAL dp_block_gen_snk_in_arr : t_dp_sosi_arr(c_nof_input_streams-1 DOWNTO 0); + SIGNAL dp_block_gen_src_out_arr : t_dp_sosi_arr(c_nof_input_streams-1 DOWNTO 0); + BEGIN gen_no_offload_bg: IF g_offload_bg=FALSE GENERATE @@ -738,10 +742,14 @@ BEGIN p_add_st_ctrl : PROCESS(reinterleave_out_arr, wpfb_snk_in_ctrl) BEGIN FOR i IN 0 TO c_nof_input_streams-1 LOOP - wpfb_snk_in_arr(i) <= wpfb_snk_in_ctrl; -- SOSI ctrl - wpfb_snk_in_arr(i).data <= reinterleave_out_arr(i).data; - wpfb_snk_in_arr(i).im <= reinterleave_out_arr(i).im; - wpfb_snk_in_arr(i).re <= reinterleave_out_arr(i).re; +-- wpfb_snk_in_arr(i) <= wpfb_snk_in_ctrl; -- SOSI ctrl +-- wpfb_snk_in_arr(i).data <= reinterleave_out_arr(i).data; +-- wpfb_snk_in_arr(i).im <= reinterleave_out_arr(i).im; +-- wpfb_snk_in_arr(i).re <= reinterleave_out_arr(i).re; + dp_block_gen_snk_in_arr(i) <= wpfb_snk_in_ctrl; -- SOSI ctrl + dp_block_gen_snk_in_arr(i).data <= reinterleave_out_arr(i).data; + dp_block_gen_snk_in_arr(i).im <= reinterleave_out_arr(i).im; + dp_block_gen_snk_in_arr(i).re <= reinterleave_out_arr(i).re; END LOOP; END PROCESS; @@ -867,6 +875,49 @@ BEGIN -- WPFB ----------------------------------------------------------------------------- gen_wpfb_unit : IF g_no_dsp=FALSE GENERATE + + -- Workaround: WPFB unit wants 128-word blocks; we're getting 176 word blocks (current fn_beamformer output without transpose). + -- => Re-tag the blocks with 128-word SOP and EOP. + gen_dp_block_gen : FOR i IN 0 TO c_nof_input_streams-1 GENERATE + u_dp_block_gen: ENTITY dp_lib.dp_block_gen + GENERIC MAP ( + g_use_src_in => FALSE, + g_nof_data => 128, + g_nof_blk_per_sync => 1 -- don't care + ) + PORT MAP ( + rst => dp_rst, + clk => dp_clk, + + snk_in => dp_block_gen_snk_in_arr(i), + + src_out => dp_block_gen_src_out_arr(i) + ); + END GENERATE; + -- Workaround: WPFB unit seems to want uninterrupted blocks. + gen_dp_fifo_fill: FOR i IN 0 TO c_nof_input_streams-1 GENERATE + u_dp_fifo_fill : ENTITY dp_lib.dp_fifo_fill + GENERIC MAP ( + g_data_w => 2*c_wpfb_in_dat_w, + g_use_complex => TRUE, + g_use_bsn => FALSE, --FIXME + g_use_channel => FALSE, + g_use_error => FALSE, + g_use_sync => FALSE, + g_fifo_fill => 128, + g_fifo_size => 2*128 + 20 -- Two blocks plus extra margin + ) + PORT MAP ( + rst => dp_rst, + clk => dp_clk, + + snk_in => dp_block_gen_src_out_arr(i), + + src_in => c_dp_siso_rdy, + src_out => wpfb_snk_in_arr(i) + ); + END GENERATE; + u_wpfb_unit : ENTITY wpfb_lib.wpfb_unit GENERIC MAP( g_wpfb => c_wpfb,