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_in(data_stage[i]),
|
||||||
.data_out(data_stage[i+1])
|
.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
|
end
|
||||||
endgenerate
|
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];
|
assign data_final_stage = data_stage[2*NUM_STAGES];
|
||||||
|
|
||||||
always @(posedge clk) begin
|
always @(posedge clk) begin
|
||||||
|
|
Loading…
Reference in New Issue