Learning · Step 7

CIC filters

A CIC (cascaded integrator–comb) filter is the cheapest way to decimate or interpolate by a large factor. It is built entirely from adders and delays — no multipliers — so its fixed-point story is not about Q-formats or rounding. It is about one thing: register width.

A CIC decimator is N integrator stages running at the high rate, a rate change by R, then N comb stages at the low rate. The integrators each have a pole at z = 1 — they accumulate without bound. The whole filter's gain is (R·M)^N, where M is the comb's differential delay (1 or 2). To carry that gain without losing the top bits, every register must grow by ⌈N·log₂(R·M)⌉ bits over the input width. That is the Hogenauer bit-growth rule — the single most important number when you size a CIC.

Now the counterintuitive part: let the integrators overflow. They will wrap constantly — and that is correct. As long as every register is the full B_in + ⌈N·log₂(R·M)⌉ bits wide, two's-complement wraparound in the integrators is exactly undone by the comb subtractions downstream. So you must never saturate a CIC integrator — saturation clips the wrap and permanently corrupts the output. This is the opposite of the rule for an ordinary accumulator.

After the combs you have a full-width result with the (R·M)^N gain baked in. Scale it back down (a shift), then truncate to the output word — that final truncation is the filter's only quantization step. The explorer below sizes the registers for you.

x[n] N integrators high rate · wrap ↓R N combs low rate y[m] Every register: B_in + ⌈N·log₂(R·M)⌉ bits — integrators wrap, never saturate.

Try it

Set the stage count, rate change, differential delay and input width — the register bit budget and the verdict update live.

input bits bit growth

What to notice

Key fixed-point rules

Step exam

Answer all 3 questions correctly to complete this step.

  1. A CIC filter's register bit growth is:

  2. The integrator stages of a CIC filter should be:

  3. A CIC filter is built from: