DF04:CIC 结构、频响、增益与 modulo
目标
理解无乘法器抽取器的数学与寄存器实现,区分自然模溢出、截断误差和饱和。
讲解
N 个高速积分器→抽取 R→N 个低速梳状差分器。梳状器 differential delay 为 M 个低速样本。抽取前的等效高率 FIR:
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 个已接受样本。数学参考取同一份当前样本逐级传播:
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 参考。