光
FPGA 高速采集系统中,FIR 滤波器是最常见的 DSP 模块。用好 DSP 硬核的级联结构,可以显著节省逻辑资源并提升频率。本帖讨论 FIR 在 DSP48 上的实现细节,与基础的 DSP Slice 用法帖互为补充。
一、结构选择
1. 直接型:每个抽头一个乘法器,加法树求和,加法树占用大量 LUT,频率受限;
2. 转置型:输入广播到所有乘法器,结果沿 PCOUT 级联累加,适合 DSP48 级联,但输入扇出大;
3. 脉动型(systolic):输入和部分和都流水传递,DSP48 原生支持,频率最高,Xilinx 推荐用于高速 FIR。
对称系数时可利用预加器,乘法器数量减半。
二、位宽规划
1. ADC 数据进入前先做符号扩展或对齐,例如 14 位 ADC 扩展到 18 位输入口;
2. 系数量化:通常 16~18 位,量化后用 MATLAB 比较频响,阻带衰减损失应控制在 1~2dB 内;
3. 累加位宽:输入位宽 + 系数位宽 + log2(抽头数)。例如 16 位数据、18 位系数、64 抽头,需要 16+18+6 = 40 位,在 48 位累加器内安全。
三、多速率与资源复用
采样率远低于时钟频率时,可用时分复用让一个 DSP 处理多个抽头,资源 = 抽头数 / 复用倍数。抽取滤波器可用多相结构。
四、常见坑
1. 长滤波器累加溢出,仿真时未用满幅信号测试;
2. 级联链跨越 DSP 列边界时,布线延迟增加;
3. 截位方式(截断与舍入)引入直流偏置。
讨论:
1. 你们做 FIR 时,系数量化位宽一般取多少?
2. 多通道 FIR 你们用时分复用还是并行实现?
一、结构选择
1. 直接型:每个抽头一个乘法器,加法树求和,加法树占用大量 LUT,频率受限;
2. 转置型:输入广播到所有乘法器,结果沿 PCOUT 级联累加,适合 DSP48 级联,但输入扇出大;
3. 脉动型(systolic):输入和部分和都流水传递,DSP48 原生支持,频率最高,Xilinx 推荐用于高速 FIR。
对称系数时可利用预加器,乘法器数量减半。
二、位宽规划
1. ADC 数据进入前先做符号扩展或对齐,例如 14 位 ADC 扩展到 18 位输入口;
2. 系数量化:通常 16~18 位,量化后用 MATLAB 比较频响,阻带衰减损失应控制在 1~2dB 内;
3. 累加位宽:输入位宽 + 系数位宽 + log2(抽头数)。例如 16 位数据、18 位系数、64 抽头,需要 16+18+6 = 40 位,在 48 位累加器内安全。
三、多速率与资源复用
采样率远低于时钟频率时,可用时分复用让一个 DSP 处理多个抽头,资源 = 抽头数 / 复用倍数。抽取滤波器可用多相结构。
四、常见坑
1. 长滤波器累加溢出,仿真时未用满幅信号测试;
2. 级联链跨越 DSP 列边界时,布线延迟增加;
3. 截位方式(截断与舍入)引入直流偏置。
讨论:
1. 你们做 FIR 时,系数量化位宽一般取多少?
2. 多通道 FIR 你们用时分复用还是并行实现?

