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
parent
a64e94a109
commit
737418a1b0
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue