diff --git a/libraries/dsp/correlator/src/vhdl/corr_accumulator.vhd b/libraries/dsp/correlator/src/vhdl/corr_accumulator.vhd index 4b8bbe55d4b7e763f6390b39cf4cde5c844c72ea..1f254351abd407668a8770999f436be67e50c8fb 100644 --- a/libraries/dsp/correlator/src/vhdl/corr_accumulator.vhd +++ b/libraries/dsp/correlator/src/vhdl/corr_accumulator.vhd @@ -67,8 +67,12 @@ ARCHITECTURE str OF corr_accumulator IS SIGNAL nxt_corr_adder_snk_in_2arr_2 : t_dp_sosi_2arr_2(g_nof_inputs-1 DOWNTO 0); -- Array of pairs SIGNAL corr_adder_src_out_arr : t_dp_sosi_arr(g_nof_inputs-1 DOWNTO 0); - TYPE t_dp_fifo_sc_usedw_arr IS ARRAY(g_nof_inputs-1 DOWNTO 0) OF STD_LOGIC_VECTOR(ceil_log2(g_nof_accumulators)-1 DOWNTO 0); + TYPE t_dp_fifo_sc_usedw_arr IS ARRAY(g_nof_inputs-1 DOWNTO 0) OF STD_LOGIC_VECTOR(ceil_log2(g_nof_accumulators)-1 DOWNTO 0); + TYPE t_dp_fifo_sc_used_words_arr IS ARRAY(g_nof_inputs-1 DOWNTO 0) OF STD_LOGIC_VECTOR(ceil_log2(g_nof_accumulators) DOWNTO 0); SIGNAL dp_fifo_sc_usedw_arr : t_dp_fifo_sc_usedw_arr; + SIGNAL dp_fifo_sc_used_words_arr : t_dp_fifo_sc_used_words_arr; + SIGNAL dp_fifo_sc_wr_ful_arr : STD_LOGIC_VECTOR(g_nof_inputs-1 DOWNTO 0); + SIGNAL dp_fifo_sc_src_in_arr : t_dp_siso_arr(g_nof_inputs-1 DOWNTO 0); SIGNAL dp_fifo_sc_src_out_arr : t_dp_sosi_arr(g_nof_inputs-1 DOWNTO 0); @@ -138,17 +142,21 @@ BEGIN PORT MAP ( rst => rst, clk => clk, - + + wr_ful => dp_fifo_sc_wr_ful_arr(i), usedw => dp_fifo_sc_usedw_arr(i), snk_in => corr_adder_src_out_arr(i), src_in => dp_fifo_sc_src_in_arr(i), src_out => dp_fifo_sc_src_out_arr(i) ); + + -- The FIFO does not output the MSbit in its usedw output; it is output as wr_ful. Restore the full number of words here. + dp_fifo_sc_used_words_arr(i) <= dp_fifo_sc_wr_ful_arr(i) & dp_fifo_sc_usedw_arr(i); -- Shift out the first accumulated value when it aligns with the corresponding current value at the adder input -- . this produces the dp_fifo_sc_src_out_arr data in sync with reg_snk_in_arr data - dp_fifo_sc_src_in_arr(i).ready <= snk_in_arr(i).valid WHEN TO_UINT(dp_fifo_sc_usedw_arr(i))>=g_nof_accumulators-1-c_adder_latency-c_fifo_latency-1 ELSE '0'; + dp_fifo_sc_src_in_arr(i).ready <= snk_in_arr(i).valid WHEN TO_UINT(dp_fifo_sc_used_words_arr(i))>=g_nof_accumulators-c_adder_latency-c_fifo_latency-1 ELSE '0'; END GENERATE;