diff --git a/libraries/dsp/correlator/src/vhdl/corr_accumulator.vhd b/libraries/dsp/correlator/src/vhdl/corr_accumulator.vhd index 1c30f85c5def51b858e5e9d54ef0649fa5c406e9..aa28a3132f03411a44f9c4c11e42ce395cf56dc4 100644 --- a/libraries/dsp/correlator/src/vhdl/corr_accumulator.vhd +++ b/libraries/dsp/correlator/src/vhdl/corr_accumulator.vhd @@ -33,6 +33,7 @@ USE dp_lib.dp_stream_pkg.ALL; ENTITY corr_accumulator IS GENERIC ( + g_sim : BOOLEAN; g_nof_inputs : NATURAL; -- Number of input streams g_nof_accumulators : NATURAL; -- Number of accumulators to keep per input stream g_integration_period : NATURAL; -- Number of timesamples to accumulate @@ -77,7 +78,6 @@ ARCHITECTURE str OF corr_accumulator IS SIGNAL dp_block_gen_snk_in_arr : t_dp_sosi_arr(g_nof_inputs-1 DOWNTO 0); SIGNAL dp_block_gen_src_out_arr : t_dp_sosi_arr(g_nof_inputs-1 DOWNTO 0); - SIGNAL nxt_dp_block_gen_snk_in_arr : t_dp_sosi_arr(g_nof_inputs-1 DOWNTO 0); SIGNAL sim_snk_in_val_cnt : NATURAL; SIGNAL nxt_sim_snk_in_val_cnt : NATURAL; @@ -167,10 +167,10 @@ BEGIN -- of zeros initially. ----------------------------------------------------------------------------- gen_src_out_arr : FOR i IN 0 TO g_nof_inputs-1 GENERATE - nxt_dp_block_gen_snk_in_arr(i).re <= RESIZE_DP_DSP_DATA(dp_fifo_sc_src_out_arr(i).re); - nxt_dp_block_gen_snk_in_arr(i).im <= RESIZE_DP_DSP_DATA(dp_fifo_sc_src_out_arr(i).im); + dp_block_gen_snk_in_arr(i).re <= RESIZE_DP_DSP_DATA(dp_fifo_sc_src_out_arr(i).re); + dp_block_gen_snk_in_arr(i).im <= RESIZE_DP_DSP_DATA(dp_fifo_sc_src_out_arr(i).im); - nxt_dp_block_gen_snk_in_arr(i).valid <= '1' WHEN TO_UINT(acc_cnt_arr(i))<g_nof_accumulators AND dp_fifo_sc_src_out_arr(i).valid='1' ELSE '0'; + dp_block_gen_snk_in_arr(i).valid <= '1' WHEN TO_UINT(acc_cnt_arr(i))<g_nof_accumulators AND dp_fifo_sc_src_out_arr(i).valid='1' ELSE '0'; END GENERATE; END GENERATE; @@ -193,11 +193,11 @@ BEGIN FOR i IN 0 TO g_nof_inputs-1 LOOP IF snk_in_arr(i).valid = '1' AND sim_snk_in_val_cnt<g_nof_accumulators THEN - nxt_dp_block_gen_snk_in_arr(i).re <= RESIZE_DP_DSP_DATA(TO_SVEC(g_integration_period*TO_SINT(snk_in_arr(i).re),c_acc_data_w)); - nxt_dp_block_gen_snk_in_arr(i).im <= RESIZE_DP_DSP_DATA(TO_SVEC(g_integration_period*TO_SINT(snk_in_arr(i).im),c_acc_data_w)); - nxt_dp_block_gen_snk_in_arr(i).valid <= '1'; + dp_block_gen_snk_in_arr(i).re <= RESIZE_DP_DSP_DATA(TO_SVEC(g_integration_period*TO_SINT(snk_in_arr(i).re),c_acc_data_w)); + dp_block_gen_snk_in_arr(i).im <= RESIZE_DP_DSP_DATA(TO_SVEC(g_integration_period*TO_SINT(snk_in_arr(i).im),c_acc_data_w)); + dp_block_gen_snk_in_arr(i).valid <= '1'; ELSE - nxt_dp_block_gen_snk_in_arr(i) <= c_dp_sosi_rst; + dp_block_gen_snk_in_arr(i) <= c_dp_sosi_rst; END IF; END LOOP; END PROCESS; @@ -207,23 +207,29 @@ BEGIN ----------------------------------------------------------------------------- -- Add SOP and EOP for easier verification ----------------------------------------------------------------------------- - gen_dp_block_gen : FOR i IN 0 TO g_nof_inputs-1 GENERATE - u_dp_block_gen: ENTITY dp_lib.dp_block_gen - GENERIC MAP ( - g_use_src_in => FALSE, - g_nof_data => g_nof_accumulators, - g_nof_blk_per_sync => g_integration_period - ) - PORT MAP ( - rst => rst, - clk => clk, + gen_sim_sop_eop : IF g_sim = TRUE GENERATE + gen_dp_block_gen : FOR i IN 0 TO g_nof_inputs-1 GENERATE + u_dp_block_gen: ENTITY dp_lib.dp_block_gen + GENERIC MAP ( + g_use_src_in => FALSE, + g_nof_data => g_nof_accumulators, + g_nof_blk_per_sync => g_integration_period + ) + PORT MAP ( + rst => rst, + clk => clk, + + snk_in => dp_block_gen_snk_in_arr(i), + src_out => dp_block_gen_src_out_arr(i) + ); + END GENERATE; - snk_in => dp_block_gen_snk_in_arr(i), - src_out => dp_block_gen_src_out_arr(i) - ); + src_out_arr <= dp_block_gen_src_out_arr; END GENERATE; - src_out_arr <= dp_block_gen_src_out_arr; + no_sim_sop_eop : IF g_sim = FALSE GENERATE + src_out_arr <= dp_block_gen_snk_in_arr; + END GENERATE; ----------------------------------------------------------------------------- -- Registers @@ -234,13 +240,11 @@ BEGIN acc_cnt_arr <= (OTHERS=>(OTHERS=>'0')); corr_adder_snk_in_2arr_2 <= (OTHERS=>(OTHERS=>c_dp_sosi_rst)); reg_snk_in_arr <= (OTHERS=>c_dp_sosi_rst); - dp_block_gen_snk_in_arr <= (OTHERS=>c_dp_sosi_rst); sim_snk_in_val_cnt <= 0; ELSIF rising_edge(clk) THEN acc_cnt_arr <= nxt_acc_cnt_arr; corr_adder_snk_in_2arr_2 <= nxt_corr_adder_snk_in_2arr_2; reg_snk_in_arr <= snk_in_arr; - dp_block_gen_snk_in_arr <= nxt_dp_block_gen_snk_in_arr; sim_snk_in_val_cnt <= nxt_sim_snk_in_val_cnt; END IF; END PROCESS; diff --git a/libraries/dsp/correlator/src/vhdl/correlator.vhd b/libraries/dsp/correlator/src/vhdl/correlator.vhd index 09800c098999a2dbf195ebd65b07e69fbeb70bac..7e2f6d9a6007181f403aea125763e20756b22d7d 100644 --- a/libraries/dsp/correlator/src/vhdl/correlator.vhd +++ b/libraries/dsp/correlator/src/vhdl/correlator.vhd @@ -32,6 +32,7 @@ USE dp_lib.dp_stream_pkg.ALL; ENTITY correlator IS GENERIC ( + g_sim : BOOLEAN; g_nof_input_streams : NATURAL; g_input_unfold_factor : NATURAL := 0; -- 2**g_input_unfold_factor = number of inputs carried on one input stream g_nof_pre_mult_folds : NATURAL := 0; -- Number of pre-multiplier stage folds. @@ -250,6 +251,7 @@ BEGIN ----------------------------------------------------------------------------- u_corr_accumulator : ENTITY work.corr_accumulator GENERIC MAP ( + g_sim => g_sim, g_nof_inputs => c_nof_mults, g_nof_accumulators => c_nof_accumulators, g_integration_period => c_integration_period, diff --git a/libraries/dsp/correlator/tb/vhdl/tb_correlator.vhd b/libraries/dsp/correlator/tb/vhdl/tb_correlator.vhd index cf57ad21d442b6a653da2bfcc2354e753f2ae96b..26a88542fb03d1c8e2f439ed48a6b46d319f4ed8 100644 --- a/libraries/dsp/correlator/tb/vhdl/tb_correlator.vhd +++ b/libraries/dsp/correlator/tb/vhdl/tb_correlator.vhd @@ -203,6 +203,7 @@ BEGIN ----------------------------------------------------------------------------- u_correlator : ENTITY work.correlator GENERIC MAP ( + g_sim => TRUE, g_nof_input_streams => c_nof_input_streams, g_input_unfold_factor => g_nof_input_folds, g_nof_pre_mult_folds => g_nof_pre_mult_folds,