FPGA 串行与并行 FIR 滤波器全解析
FIR 滤波器是 FPGA 数字信号处理的基础模块其核心是乘累加MAC卷积运算。根据 MAC 单元的调度方式主要分为串行 FIR时间换空间单乘法器分时复用和并行 FIR空间换时间多乘法器全并行两大类二者在资源消耗、吞吐速率、时序约束等方面差异显著需根据采样率、阶数和资源预算选型。一、FIR 运算本质有限长单位冲激响应滤波器的输出为输入序列与单位冲激响应的线性卷积 \(y[n] \sum_{k0}^{N-1} h[k] \cdot x[n-k]\) 其中N 为滤波器阶数抽头数\(h[k]\) 为第 k 个抽头的系数\(x[n-k]\) 为延迟 k 拍的输入数据所有 FPGA 实现架构的差异本质上都是对乘累加运算的不同并行度调度。二、串行 FIR 滤波器Serial FIR1. 架构原理串行 FIR 是单 MAC 单元分时复用的极致资源节约型架构整个滤波器仅使用 1 个乘法器 1 个累加器通过计数器 / 状态机调度在 N 个时钟周期内依次完成 N 个抽头的乘加运算最终输出一次滤波结果。完整信号流向输入数据进入移位寄存器链存储 N 个历史输入值计数器循环计数 0~N-1通过多路选择器选通对应延迟数据与系数选通数据与系数送入乘法器结果送入累加器持续求和计满 N 个周期后输出最终结果累加器清零进入下一轮线性相位优化若系数满足对称特性 \(h[k]h[N-1-k]\)可先将对称位置的输入数据相加再相乘乘法次数直接减少一半仅需 N/2 个周期即可完成一次输出是工程必用优化手段。2. 核心特性时钟约束系统时钟频率必须 ≥ 输入采样率 × N对称优化后为 N/2吞吐率每 N 个时钟周期输出 1 个有效采样最高采样率 \(F_s F_{clk}/N\)延迟输出延迟为 N 个时钟周期属于高延迟架构资源占用仅消耗 1 个 DSP 乘法单元、N 个数据寄存器、少量控制逻辑资源消耗极低适用场景高阶滤波器、低速采样、FPGA 资源紧张的场景如低速传感器信号滤波3. 可综合 Verilog 实现8 阶对称串行 FIRverilogmodule fir_serial_sym #( parameter N 8, // 滤波器总阶数 parameter DW 16, // 输入数据位宽 parameter CW 16 // 系数位宽 )( input clk, input rst_n, input din_valid, // 输入采样有效标志 input signed [DW-1:0] din, // 输入数据 output reg dout_valid, // 输出结果有效标志 output reg signed [DWCW$clog2(N)-1:0] dout // 全精度输出 ); localparam HALF_N N / 2; // 对称系数仅需存储前半组 reg signed [CW-1:0] coeff [0:HALF_N-1]; initial begin coeff[0] 16h0FFF; coeff[1] 16h1FFF; coeff[2] 16h2FFF; coeff[3] 16h3FFF; end // 输入移位寄存器链存储历史数据 reg signed [DW-1:0] shift_reg [0:N-1]; integer i; always (posedge clk or negedge rst_n) begin if(!rst_n) for(i0; iN; ii1) shift_reg[i] 0; else if(din_valid) begin shift_reg[0] din; for(i1; iN; ii1) shift_reg[i] shift_reg[i-1]; end end // 运算计数器调度分时乘加 reg [$clog2(HALF_N)-1:0] cnt; always (posedge clk or negedge rst_n) begin if(!rst_n) cnt 0; else if(din_valid || cnt ! 0) cnt cnt 1b1; end // 对称数据相加 单乘法器分时复用 wire signed [DW:0] data_add; wire signed [DWCW-1:0] mult_out; assign data_add shift_reg[cnt] shift_reg[N-1-cnt]; assign mult_out data_add * coeff[cnt]; // 累加器 reg signed [DWCW$clog2(N)-1:0] acc_reg; always (posedge clk or negedge rst_n) begin if(!rst_n) acc_reg 0; else if(cnt 0) acc_reg mult_out; else acc_reg acc_reg mult_out; end // 输出控制 always (posedge clk or negedge rst_n) begin if(!rst_n) begin dout_valid 1b0; dout 0; end else if(cnt HALF_N-1) begin dout_valid 1b1; dout acc_reg mult_out; end else begin dout_valid 1b0; end end endmodule三、并行 FIR 滤波器Parallel FIR1. 架构原理并行 FIR 为每个抽头配备独立乘法器所有乘法运算在同一时钟周期内并行完成再通过加法网络求和1 个时钟周期即可输出一次滤波结果。工程中优先采用转置型并行结构替代传统直接型加法树将累加路径拆分为逐级级联的加法链加法路径均匀分布时序收敛更容易更适配 FPGA 内嵌 DSP 块的级联特性。转置型并行信号流向移位寄存器链同时输出 N 路延迟数据对称数据先相加再送入对应乘法器乘法结果沿加法链逐级累加最后一级输出最终结果2. 核心特性时钟约束系统时钟频率可等于输入采样率单周期输出吞吐率每 1 个时钟周期输出 1 个有效采样最高采样率 \(F_s \approx F_{clk}\)延迟纯组合逻辑延迟 1 周期插入流水线后延迟为数周期但吞吐率不变资源占用消耗 N 个 DSP 单元对称优化后 N/2 个资源随阶数线性增长适用场景高速 AD 采样、数字通信、雷达信号等低延迟、高吞吐场景3. 可综合 Verilog 实现8 阶转置型并行 FIR对称优化verilogmodule fir_parallel_trans #( parameter N 8, parameter DW 16, parameter CW 16 )( input clk, input rst_n, input din_valid, input signed [DW-1:0] din, output reg dout_valid, output reg signed [DWCW$clog2(N)-1:0] dout ); localparam HALF_N N / 2; // 对称系数 reg signed [CW-1:0] coeff [0:HALF_N-1]; initial begin coeff[0] 16h0FFF; coeff[1] 16h1FFF; coeff[2] 16h2FFF; coeff[3] 16h3FFF; end // 输入延迟链生成对称数据对 reg signed [DW-1:0] shift_reg [0:N-1]; integer i; always (posedge clk or negedge rst_n) begin if(!rst_n) for(i0; iN; ii1) shift_reg[i] 0; else if(din_valid) begin shift_reg[0] din; for(i1; iN; ii1) shift_reg[i] shift_reg[i-1]; end end // 对称数据相加 并行乘法阵列 wire signed [DW:0] add_half [0:HALF_N-1]; wire signed [DWCW-1:0] mult_out [0:HALF_N-1]; genvar g; generate for(g0; gHALF_N; gg1) begin : gen_mult assign add_half[g] shift_reg[g] shift_reg[N-1-g]; assign mult_out[g] add_half[g] * coeff[g]; end endgenerate // 转置型累加链时序优于二叉加法树 wire signed [DWCW$clog2(N)-1:0] sum_chain [0:HALF_N-1]; generate assign sum_chain[0] mult_out[0]; for(g1; gHALF_N; gg1) begin : gen_add_chain assign sum_chain[g] sum_chain[g-1] mult_out[g]; end endgenerate // 输出寄存器打拍 always (posedge clk or negedge rst_n) begin if(!rst_n) begin dout_valid 1b0; dout 0; end else begin dout_valid din_valid; dout sum_chain[HALF_N-1]; end end endmodule四、核心指标对比表表格对比维度串行 FIR对称优化全并行 FIR对称优化核心思想时间换空间单 MAC 分时复用空间换时间多 MAC 全并行DSP 乘法器数量1 个N/2 个单输出所需时钟周期N/2 个1 个时钟与采样率关系\(F_{clk} \ge F_s \times N/2\)\(F_{clk} \ge F_s\)最高采样率\(2F_{clk}/N\)\(\approx F_{clk}\)输出延迟高N/2 个周期低1~ 数级流水线周期逻辑资源占用极低移位寄存器 控制逻辑较高寄存器 加法链阶数扩展性阶数提升不增加乘法器阶数提升线性消耗 DSP 资源时序收敛难度低单乘法器路径短高多路并行布线复杂适用场景低速、高阶、资源受限高速、低阶、低延迟五、工程实践优化技巧1. 半并行折衷架构实际工程中极少采用纯串行或纯并行主流方案是半并行半串行架构配置 M 个乘法器每 N/M 个周期输出一次结果可根据采样率和资源预算灵活调整并行度 M实现资源与性能的最优平衡。2. FPGA 专属优化DSP 块原语调用直接例化 DSP48E1/DSP48E2 原语避免综合器用逻辑搭建乘法器大幅提升时序与资源利用率流水线插入并行结构在乘法输出、累加级插入流水线寄存器最高工作频率可提升 2~3 倍移位寄存器优化使用 SRL16/SRL32 原语实现延迟链替代触发器节省大量寄存器资源位宽规划全精度位宽 输入位宽 系数字宽 \(\lceil log_2(N) \rceil\)输出时按需截位并增加饱和溢出保护系数量化根据通带纹波、阻带衰减要求合理量化系数减少位宽降低资源消耗