DF07:系数与数据的 bit-accurate 实现
目标
为每个运算写清 signed 属性、总位数 W、小数位 F、舍入点与溢出策略,建立可用于 RTL 逐样本比对的参考。
四层模型
- 浮点、未量化系数:判断算法指标。
- 浮点、量化系数:隔离系数量化误差。
- 整数、规定模数/舍入/饱和:判断数据通路精度。
- RTL:与第 3 层逐样本完全相同,再测第 1–3 层的性能差异。
最终 SNR 或幅度接近不够证明 bit-accurate,一位差异也要解释。整数模型用任意精度或足够宽的容器显式模拟硬件规则,不能让宿主整数无意溢出代替规定行为。
起始格式
| 位置 | W/F | 策略 |
|---|---|---|
| bit 映射 | signed2/F0 | −1、+1 |
| CIC 状态/差分 | signed14/F0 raw | 全级同模数,正常绕回 |
| CIC 输出解释 | signed14/F12 | 数值=raw/4096,不裁位 |
| FIR 系数 | signed24/F22 | 先检查范围;保持对称/半带结构 |
| 第一级 FIR 乘积 | signed38/F34 | 不先缩窄 |
| 第一级 FIR 累加 | signed43/F34,L=31 的保守起点 | 最后一次舍入到输出 |
| 后两级 FIR 乘积 | signed48/F42 | 输入 signed24/F20 |
| 第二级 FIR 累加 | signed54/F42,L=47 | 按极值/系数 L1 复查 |
| 最终 FIR 累加 | signed56/F42,L=161 | 按极值/系数 L1 复查 |
| FIR 级输出与最终接口 | signed24/F20 | ties-to-even,越界饱和并置状态 |
这些是候选格式,不是精度已通过的结论。signed24/F20 容器约为 [−8,8),输入物理 FS 仍为峰值 1;不能把容器最大值当成 ADC 满量程。
W_in+W_coef+ceil(log2 L) 给保守累加位宽,实际可用 |x|max×sum|h| 的范围收紧。对称结构的 pre-add 需 W_in+1;重新计算乘积/累加位宽,而不是把预加结果截回输入宽度。
舍入与范围
第一 FIR 从 F34 到 F20,舍入右移 14 位;后两级从 F42 到 F20,舍入右移 22 位。正负 half-tie 均按 nearest/even 处理,负最小值取绝对值前扩宽。饱和比较在缩窄前完成。
CIC 允许的 modulo overflow 与 FIR 输出 saturation 是不同事件。不能把每个积分器绕回都标为数据故障,也不能用饱和替代 CIC 的模运算。
DC 常数 +1 经过已归一化的全链,应约为输出整数码 2^20=1048576。常数 −1 对应 −1048576;接口最高符号位仍为 bit23。
系数量化
量化保留 symmetry、halfband 中心 1/2 与零系数;需要 DC=1 时记录如何修正总和,以及对频响的影响。不能单独修一侧系数而破坏线性相位。
最近舍入的单系数误差≤2^(−F−1),粗界 |ΔH|≤L×2^(−F−1)。L=161、F22 时约 1.92×10^−5,该界已高于 100 dB 阻带对应的 10^−5 幅度,因此原浮点阻带通过不保证量化后通过。
实际误差往往低于粗界,但必须重新评估频响;必要时增系数位宽/设计裕量、重做 DC 修正并更新全部乘积格式。不同位置的裁位/舍入噪声经后级处理,不能一概按均匀白噪声预算。
实验与验收
覆盖正负极值、半单位、DC、交替码、长时间 CIC 绕回、系数 sum/L1、随机合法码流和 startup。比较四层模型的 sample、频响、噪声及 saturation 次数。验收要求每个裁位有理由、每个指标有证据。答案见 DF07 参考。