阶段二:FIR滤波器

🔄 第10课:FIR转置型结构

转置型FIR——消除关键路径的流水线架构

1. 转置型结构原理

转置定理:将信号流图所有支路方向反转,输入输出互换,系统函数不变。对直接型FIR应用转置得到转置型结构。

关键路径:T_mult + T_add(仅1个乘法器+1个加法器)

🎯 转置型 vs 直接型

特性直接型转置型
关键路径T_mult+log₂(M)·T_addT_mult+T_add
流水线友好需额外寄存器天然流水线
数据流先延迟后乘先乘后延迟
输入扇出到所有乘法器仅1个乘法器

2. Verilog实现:转置型FIR

//=============================================
// dsp_fir_transpose.v
// FIR转置型滤波器
// 关键路径:1个乘法器+1个加法器
//=============================================
module dsp_fir_transpose #(
    parameter DATA_WIDTH = 16,
    parameter COEFF_WIDTH = 16,
    parameter TAP = 16,
    parameter OUT_WIDTH = 32
)(
    input  wire                          clk,
    input  wire                          rst_n,
    input  wire                          data_valid,
    input  wire signed [DATA_WIDTH-1:0]  data_in,
    input  wire signed [COEFF_WIDTH-1:0] coeffs [0:TAP-1],
    output reg  signed [OUT_WIDTH-1:0]   data_out,
    output reg                           out_valid
);
    reg signed [OUT_WIDTH-1:0] acc_chain [0:TAP-1];
    integer i;
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            for (i=0;i<TAP;i=i+1) acc_chain[i]<=0;
            data_out<=0; out_valid<=1'b0;
        end else if (data_valid) begin
            acc_chain[0] <= data_in*coeffs[TAP-1];
            for (i=1;i<TAP;i=i+1)
                acc_chain[i] <= acc_chain[i-1]+data_in*coeffs[TAP-1-i];
            data_out <= acc_chain[TAP-1];
            out_valid <= 1'b1;
        end else out_valid <= 1'b0;
    end
endmodule

3. 流水线转置型FIR

//=============================================
// dsp_fir_transpose_pipe.v
// 流水线转置型FIR
//=============================================
module dsp_fir_transpose_pipe #(
    parameter DATA_WIDTH = 16,
    parameter COEFF_WIDTH = 16,
    parameter TAP = 16,
    parameter OUT_WIDTH = 32,
    parameter PIPE_STAGES = 2
)(
    input  wire                          clk,
    input  wire                          rst_n,
    input  wire                          data_valid,
    input  wire signed [DATA_WIDTH-1:0]  data_in,
    input  wire signed [COEFF_WIDTH-1:0] coeffs [0:TAP-1],
    output reg  signed [OUT_WIDTH-1:0]   data_out,
    output reg                           out_valid
);
    reg signed [DATA_WIDTH-1:0] x_reg;
    reg x_valid;
    reg signed [OUT_WIDTH-1:0] acc [0:TAP-1];
    reg signed [OUT_WIDTH-1:0] pipe_delay [0:PIPE_STAGES-1];
    reg [PIPE_STAGES:0] valid_shift;
    integer i;
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            x_reg<=0; x_valid<=0;
            for (i=0;i<TAP;i=i+1) acc[i]<=0;
            for (i=0;i<PIPE_STAGES;i=i+1) pipe_delay[i]<=0;
            data_out<=0; out_valid<=0; valid_shift<=0;
        end else begin
            x_reg <= data_in; x_valid <= data_valid;
            if (x_valid) begin
                acc[0] <= x_reg*coeffs[TAP-1];
                for (i=1;i<TAP;i=i+1)
                    acc[i] <= acc[i-1]+x_reg*coeffs[TAP-1-i];
            end
            pipe_delay[0] <= acc[TAP-1];
            for (i=1;i<PIPE_STAGES;i=i+1) pipe_delay[i]<=pipe_delay[i-1];
            data_out <= pipe_delay[PIPE_STAGES-1];
            valid_shift <= {valid_shift[PIPE_STAGES:0],data_valid};
            out_valid <= valid_shift[PIPE_STAGES];
        end
    end
endmodule

4. 数值特性与结构选择

⚠️ 转置型定点注意事项

📋 结构选择决策树

需求推荐结构理由
低功耗/低面积对称直接型乘法器最少
高频率(>300MHz)转置型/流水线关键路径最短
大阶数(>64)DA或时分复用资源受限折衷
FPGA实现转置型+DSP级联利用DSP48级联

5. 练习

📝 练习1:转置验证

手动验证3阶FIR h[n]={1,2,3}的转置型与直接型输出一致,输入x[n]={1,0,0}。

📝 练习2:频率对比

32阶FIR,乘法器4ns,加法器1.5ns。比较直接型与转置型的最大时钟频率。

📝 练习3:面积估算

估算64阶转置型FIR在Xilinx FPGA上的资源(DSP slice+BRAM)。

📝 练习4:混合结构

设计前半转置+后半对称的混合FIR结构,分析关键路径。

🏆 成就解锁:转置型专家

✅ 理解了转置定理及其在FIR中的应用

✅ 掌握了转置型FIR的关键路径优势

✅ 实现了转置型和流水线转置型FIR

✅ 能对比分析直接型与转置型性能

✅ 理解了转置型的定点数值特性

✅ 掌握了FIR结构选择的工程决策

6. 转置型FIR在高速设计中的应用

转置型因其短关键路径,在高速FIR设计中占主导地位。典型应用场景:

🔧 高速FIR应用实例

7. 转置型FIR的面积-频率权衡

📊 面积与频率的Pareto前沿

配置面积(DSP+LUT)Fmax(MHz)功耗(mW)
直接型无优化16 DSP12085
直接型+对称8 DSP12052
转置型16 DSP28095
转置型+2级流水16 DSP+200LUT420120
转置型+对称8 DSP28060

8. Systolic阵列FIR

Systolic阵列是转置型的进一步推广,每个处理单元包含完整的乘法器+加法器+寄存器,数据在相邻单元间流动。优点:(1)极度规整的布局;(2)局部互连,布线短;(3)天然流水线,频率极高;(4)易于扩展阶数。缺点:面积开销大,每级都需要寄存器。

6. 转置型FIR的高速应用

转置型因其短关键路径,在高速FIR设计中占主导地位:

🔧 高速FIR应用实例

7. 面积-频率Pareto分析

📊 面积与频率权衡

配置DSP数Fmax(MHz)功耗(mW)
直接型无优化1612085
直接型+对称812052
转置型1628095
转置型+2级流水16+200LUT420120
转置型+对称828060

8. Systolic阵列FIR

Systolic阵列是转置型的进一步推广,每个处理单元包含完整乘法器+加法器+寄存器,数据在相邻单元间流动。优点:(1)极度规整布局;(2)局部互连布线短;(3)天然流水线频率极高;(4)易于扩展阶数。缺点:面积开销大。适用于ASIC实现,不太适合FPGA(DSP slice不支持systolic映射)。

Systolic PE[k]: y_k = h[k]·x + y_{k-1}(上一级结果)
x_out = x_in(延迟一拍传入下一级)
y_out = y_k(延迟一拍传入下一级)

9. 转置型FIR的定点精度分析

转置型的累加器链在定点实现中有独特的数值特性:

⚠️ 定点精度分析

对于16位数据×16位系数的32阶FIR:最终累加器需要16+16+5=37位。输出截断到32位时,动态范围约192dB。

10. 混合型FIR架构

结合直接型和转置型的优势:

🧩 混合架构策略

11. 转置型FIR的完整设计实例

📌 32阶转置型FIR设计流程

设计规格:fs=100MHz,通带0-20MHz,阻带25MHz以上,通带波纹0.1dB,阻带衰减60dB

12. 转置型与直接型的仿真验证

两种结构的输出应完全一致(在定点精度范围内)。验证方法:

  1. 输入随机序列,比较两种结构的输出误差
  2. 误差应仅来自不同的舍入顺序
  3. 最大误差 ≤ 1 LSB(在相同量化策略下)
  4. 脉冲响应应完全匹配滤波器系数

13. 从直接型到转置型的自动转换

在HLS(高层次综合)工具中,可以通过directive自动将直接型FIR转换为转置型。Vivado HLS的PIPELINE指令会自动在循环间插入寄存器,等效于转置变换。对于手动转换,关键步骤是:(1)将所有延迟单元从输入侧移到输出侧;(2)将加法树改为累加链;(3)调整数据流方向。综合工具通常能自动识别FIR模式并应用最优映射。

11. 补充:FIR转置型结构的进阶主题

FIR转置型结构在进阶应用中还有以下重要主题值得深入研究:

📚 进阶研究方向

12. 与前后课程的关联

本课内容在整个DSP课程体系中处于承上启下的位置:

🔗 课程关联图

13. 设计经验总结

在实际工程中,FIR转置型结构的设计经验总结如下:(1)始终从系统级需求出发,不要过早陷入实现细节;(2)先用浮点仿真验证算法正确性,再转为定点;(3)系数量化后必须重新验证频率响应;(4)硬件实现前用C/MATLAB模型作为参考;(5)综合后检查时序和资源是否符合预期;(6)板级验证时用已知的测试信号对比参考输出。每一步验证都是必要的,跳过任何一步都可能导致最终的调试时间成倍增加。

📌 关键设计检查清单

13. 设计经验总结

在实际工程中,FIR转置型结构的设计经验总结如下:(1)始终从系统级需求出发,不要过早陷入实现细节;(2)先用浮点仿真验证算法正确性,再转为定点;(3)系数量化后必须重新验证频率响应;(4)硬件实现前用C/MATLAB模型作为参考;(5)综合后检查时序和资源是否符合预期;(6)板级验证时用已知的测试信号对比参考输出。每一步验证都是必要的,跳过任何一步都可能导致最终的调试时间成倍增加。

📌 关键设计检查清单

13. 设计经验总结

在实际工程中,FIR转置型结构的设计经验总结如下:(1)始终从系统级需求出发,不要过早陷入实现细节;(2)先用浮点仿真验证算法正确性,再转为定点;(3)系数量化后必须重新验证频率响应;(4)硬件实现前用C/MATLAB模型作为参考;(5)综合后检查时序和资源是否符合预期;(6)板级验证时用已知的测试信号对比参考输出。每一步验证都是必要的,跳过任何一步都可能导致最终的调试时间成倍增加。

📌 关键设计检查清单

13. 设计经验总结

在实际工程中,FIR转置型结构的设计经验总结如下:(1)始终从系统级需求出发,不要过早陷入实现细节;(2)先用浮点仿真验证算法正确性,再转为定点;(3)系数量化后必须重新验证频率响应;(4)硬件实现前用C/MATLAB模型作为参考;(5)综合后检查时序和资源是否符合预期;(6)板级验证时用已知的测试信号对比参考输出。每一步验证都是必要的,跳过任何一步都可能导致最终的调试时间成倍增加。

📌 关键设计检查清单

13. 设计经验总结

在实际工程中,FIR转置型结构的设计经验总结如下:(1)始终从系统级需求出发,不要过早陷入实现细节;(2)先用浮点仿真验证算法正确性,再转为定点;(3)系数量化后必须重新验证频率响应;(4)硬件实现前用C/MATLAB模型作为参考;(5)综合后检查时序和资源是否符合预期;(6)板级验证时用已知的测试信号对比参考输出。每一步验证都是必要的,跳过任何一步都可能导致最终的调试时间成倍增加。

📌 关键设计检查清单

13. 设计经验总结

在实际工程中,FIR转置型结构的设计经验总结如下:(1)始终从系统级需求出发,不要过早陷入实现细节;(2)先用浮点仿真验证算法正确性,再转为定点;(3)系数量化后必须重新验证频率响应;(4)硬件实现前用C/MATLAB模型作为参考;(5)综合后检查时序和资源是否符合预期;(6)板级验证时用已知的测试信号对比参考输出。每一步验证都是必要的,跳过任何一步都可能导致最终的调试时间成倍增加。

📌 关键设计检查清单

13. 设计经验总结

在实际工程中,FIR转置型结构的设计经验总结如下:(1)始终从系统级需求出发,不要过早陷入实现细节;(2)先用浮点仿真验证算法正确性,再转为定点;(3)系数量化后必须重新验证频率响应;(4)硬件实现前用C/MATLAB模型作为参考;(5)综合后检查时序和资源是否符合预期;(6)板级验证时用已知的测试信号对比参考输出。每一步验证都是必要的,跳过任何一步都可能导致最终的调试时间成倍增加。

📌 关键设计检查清单

13. 设计经验总结

在实际工程中,FIR转置型结构的设计经验总结如下:(1)始终从系统级需求出发,不要过早陷入实现细节;(2)先用浮点仿真验证算法正确性,再转为定点;(3)系数量化后必须重新验证频率响应;(4)硬件实现前用C/MATLAB模型作为参考;(5)综合后检查时序和资源是否符合预期;(6)板级验证时用已知的测试信号对比参考输出。每一步验证都是必要的,跳过任何一步都可能导致最终的调试时间成倍增加。

📌 关键设计检查清单