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 dfa55240ead64fbe9cfb32daf7284d4da4c7f3c3..fbb7769837f8bbb198348e6c095f8683c7f85f6b 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 @@ -131,7 +131,7 @@ END apertif_unb1_correlator; ARCHITECTURE str OF apertif_unb1_correlator IS -- Firmware version x.y - CONSTANT c_fw_version : t_unb1_board_fw_version := (0, 3); + CONSTANT c_fw_version : t_unb1_board_fw_version := (0, 4); -- Enable block generators CONSTANT c_use_phy : t_c_unb1_board_use_phy := (1, sel_a_b(g_use_bg, 0, 1), 0, 0, 0, 0, 0, 1); @@ -140,8 +140,8 @@ ARCHITECTURE str OF apertif_unb1_correlator IS CONSTANT c_compl_dat_w : NATURAL := 8; -- BSN Alignern + FIFO's - CONSTANT c_block_period : NATURAL := 256; - CONSTANT c_block_size : NATURAL := 176; --FIXME: current fn_beamformer output block size. + CONSTANT c_block_period : NATURAL := 186; --256; --FIXME: first block size was 176/256. Now 128/186,18 (non-integer...), assuming 186 is OK. + CONSTANT c_block_size : NATURAL := 128; --176 CONSTANT c_bsn_align_latency : NATURAL := 3; CONSTANT c_bsn_align_sop_timeout : NATURAL := (c_bsn_align_latency + 1) * c_block_period; -- wait somewhat more than c_bsn_align_latency periods CONSTANT c_bsn_align_xoff_timeout : NATURAL := c_bsn_align_latency * 2 * c_block_period; -- flush factor 2 longer than needed @@ -326,7 +326,7 @@ ARCHITECTURE str OF apertif_unb1_correlator IS SIGNAL diag_data_buf_snk_in_arr : t_dp_sosi_arr(c_nof_10GbE_streams*c_nof_bf_modules-1 DOWNTO 0); -- 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); --FIXME should be 3, not 12 -- Filterbank and Correlator SIGNAL wpfb_snk_in_ctrl : t_dp_sosi; @@ -482,8 +482,8 @@ BEGIN g_nof_streams => c_nof_10GbE_streams, g_data_w => c_xgmii_data_w, g_hdr_field_arr => c_apertif_udp_offload_hdr_field_arr, - g_remove_crc => TRUE, - g_crc_nof_words => 1 + g_remove_crc => FALSE, + g_crc_nof_words => 0 ) PORT MAP ( mm_rst => mm_rst, @@ -499,7 +499,7 @@ BEGIN snk_out_arr => dp_offload_rx_snk_out_arr, src_out_arr => dp_offload_rx_src_out_arr, - src_in_arr => dp_offload_rx_src_in_arr, + src_in_arr => (OTHERS=>c_dp_siso_rdy), --dp_offload_rx_src_in_arr, hdr_fields_out_arr => hdr_fields_out_arr ); @@ -515,6 +515,26 @@ BEGIN dp_offload_rx_restored_src_out_arr(i).err <= dp_offload_rx_src_out_arr(i).err; END GENERATE; + ----------------------------------------------------------------------------- + -- Re-assign SOP and EOP + -- . We're receiving 176-word blocks + -- . WPFB requires blocks of 128 words (2*64, interleaved) + ----------------------------------------------------------------------------- + gen_dp_block_gen : FOR i IN 0 TO c_nof_10GbE_streams-1 GENERATE + u_dp_block_gen : ENTITY dp_lib.dp_block_gen + GENERIC MAP( + g_use_src_in => FALSE, + g_nof_data => 128 + ) + PORT MAP( + rst => dp_rst, + clk => dp_clk, + + snk_in => dp_offload_rx_restored_src_out_arr(i), + src_out => dp_block_gen_src_out_arr(i) + ); + END GENERATE; + ----------------------------------------------------------------------------- -- RX: BSN alignment ----------------------------------------------------------------------------- @@ -535,8 +555,8 @@ BEGIN rst => dp_rst, clk => dp_clk, - snk_out => dp_offload_rx_src_in_arr(i), - snk_in => dp_offload_rx_restored_src_out_arr(i), +-- snk_out => dp_offload_rx_src_in_arr(i), + snk_in => dp_block_gen_src_out_arr(i), src_in => dp_fifo_fill_src_in_arr(i), src_out => dp_fifo_fill_src_out_arr(i) @@ -546,7 +566,7 @@ BEGIN u_dp_bsn_align : ENTITY dp_lib.dp_bsn_align GENERIC MAP ( g_block_size => c_block_size, - g_block_period => c_block_period, + g_block_period => c_block_period, --FIXME: NOT EVEN USED INTERNALLY!!! g_nof_input => c_nof_10GbE_streams, g_xoff_timeout => c_bsn_align_xoff_timeout, g_sop_timeout => c_bsn_align_sop_timeout, @@ -782,10 +802,10 @@ BEGIN p_add_st_ctrl : PROCESS(reinterleave_out_arr, dp_pipeline_src_out) BEGIN FOR i IN 0 TO c_nof_input_streams-1 LOOP - dp_block_gen_snk_in_arr(i) <= dp_pipeline_src_out; -- 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; + wpfb_snk_in_arr(i) <= dp_pipeline_src_out; -- 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; END LOOP; END PROCESS; @@ -905,25 +925,6 @@ BEGIN ); END GENERATE; -- g_use_dumb_mesh_terminals - ----------------------------------------------------------------------------- - -- Re-assign SOP and EOP - -- . WPFB required blocks of 128 words (2*64, interleaved) - ----------------------------------------------------------------------------- - 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 - ) - PORT MAP( - rst => dp_rst, - clk => dp_clk, - - snk_in => dp_block_gen_snk_in_arr(i), - src_out => wpfb_snk_in_arr(i) - ); - END GENERATE; - ----------------------------------------------------------------------------- -- WPFB ----------------------------------------------------------------------------- @@ -1114,6 +1115,7 @@ BEGIN u_ctrl : ENTITY unb1_board_lib.ctrl_unb1_board GENERIC MAP ( g_sim => g_sim, + g_sim_flash_model => FALSE, g_design_name => g_design_name, g_stamp_date => g_stamp_date, g_stamp_time => g_stamp_time,