axi_adc_decimate: Use sequential processing for CIC comb stage

The minimum decimation of the CIC block is 5. This means new data arrives
at the comb stages at most every 5 clock cycles. Rather than letting the
logic sit idle during those 4 extra cycles use it to sequentially process
the comb stages of the filter. This reduces the logic utilization of the
filter by quite a bit.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
main
Lars-Peter Clausen 2017-04-03 16:38:25 +02:00
parent a64e94a109
commit 737418a1b0
1 changed files with 20 additions and 9 deletions

View File

@ -109,18 +109,29 @@ module cic_decim (
.data_in(data_stage[i]),
.data_out(data_stage[i+1])
);
cic_comb #(
.DATA_WIDTH(DATA_WIDTH)
) i_comb (
.clk(clk),
.ce(ce_comb),
.data_in(data_stage[i+6]),
.data_out(data_stage[i+7])
);
end
endgenerate
cic_comb #(
.DATA_WIDTH(DATA_WIDTH),
.SEQ(5)
) i_comb0 (
.clk(clk),
.ce(ce_comb),
.data_in(data_stage[6]),
.data_out(data_stage[11])
);
cic_comb #(
.DATA_WIDTH(DATA_WIDTH),
.SEQ(1)
) i_comb1 (
.clk(clk),
.ce(ce_comb),
.data_in(data_stage[11]),
.data_out(data_stage[12])
);
assign data_final_stage = data_stage[2*NUM_STAGES];
always @(posedge clk) begin