# DF04：CIC 结构、频响、增益与 modulo

## 目标

理解无乘法器抽取器的数学与寄存器实现，区分自然模溢出、截断误差和饱和。

## 讲解

N 个高速积分器→抽取 R→N 个低速梳状差分器。梳状器 differential delay 为 M 个低速样本。抽取前的等效高率 FIR：

```text
H(z) = [(1-z^(-R*M))/(1-z^(-1))]^N
     = [sum(k=0...R*M-1, z^(-k))]^N
DC gain = (R*M)^N
equivalent length = N*(R*M-1)+1
group delay = N*(R*M-1)/2 high-rate samples
```

M=1、N=3、R=16：等效长度 46，DC 增益 4096，群延迟 22.5 输入样本，即 3.662109375 μs。归一化幅度为 `|sin(pi*f*R/Fs)/(R*sin(pi*f/Fs))|^N`，DC 用极限值 1。

零点在 kFs/R。通带逐渐下垂，且每个零点周围存在有限宽度的衰减区；不能只查零点就证明附近整形噪声不会折入。

## 样本更新契约

定义 x[n] 是第 n 个已接受样本。数学参考取同一份当前样本逐级传播：

```text
i1_next = i1_old + x[n]
i2_next = i2_old + i1_next
i3_next = i3_old + i2_next
每 16 次接受后选择 post-update i3_next
```

抽取相位固定 p=15：选择 n=15、31、47…。低速 comb 同样用当前级差分结果推进下一 comb，保存各级旧输入作延迟。

若 RTL 直接写 `i2 <= i2+i1; i3 <= i3+i2`，两级读取旧状态，增加了额外样本延迟。它可以作为另一种明确的实现，但不会自动匹配这里的相位契约；首版用显式 next 值匹配数学模型。组合串接带来三加法器路径，综合后要审查时序。

## 位宽与模运算

1-bit 二电平 ±1 在 signed 中至少需 2 位表示。保守完整输出位宽为 `B_in+ceil(N*log2(R*M))`，此例 2+12=14 位。实际输出范围为 −4096…4096，signed13 的最大 4095 不足以容纳 +4096。

积分器可无限累加，任何有限宽度都可能绕回。全部相关加减以同一 2^14 模数运算，comb 消去累加的历史，最终有界输出可恢复正确 signed 值；不在积分器插入饱和。各级裁位/不同宽度需要专门误差设计，不能沿用完整位宽结论。

raw 输出 CODE 的归一化值为 CODE/4096，即可视为 signed14/F12，不必立即右移 12 位成整数，那样会丢掉大量信息。

## Worked example

在数值 core 的单位冲激输入下，等效 FIR 抽取 p=15 的首两个非零输出为 136、120，之后为 0。常数 +1 从零状态输入，前三个低率输出为 816、3536、4096，随后稳定 4096。

物理 bit 输入没有 0 样本；可比较两条合法码流（一条全 −1，一条只在 n=0 改为 +1），输出差应为上述冲激响应的两倍。数值 core 可以独立测试冲激，但顶层仍坚持二电平映射。

## 实验与验收

用三个长度 16 的 boxcar 卷积形成独立 FIR 参考，与递归 CIC 和 14 位 modulo 版本比较，固定相位。长时间全 +1 强制积分器多次绕回，comb 输出仍正确。再故意改成饱和或旧值串接，观察失败。

验收必须包含频响、DC、启动、正负端点、绕回和输出相位；“只看幅频响应一样”不够。答案见 [DF04 参考](10_answers.md)。
