阶段五:实战项目

🎓 第30课:毕业项目:完整DSP SoC

毕业设计:集成FFT+FIR+IIR的完整DSP片上系统

1. 毕业项目概述

本课是DSP数字信号处理课程的毕业设计项目,我们将集成前29课所学内容,设计一个完整的DSP片上系统(SoC)。该SoC包含FFT频谱分析引擎、FIR滤波器组、IIR均衡器、以及采样率转换器,实现从信号采集到频谱分析再到滤波输出的完整信号处理链路。

2. DSP SoC系统架构

完整DSP SoC的系统架构如下:

ADC → CIC抽取 → FIR滤波 → IIR均衡 → FFT频谱分析 → DAC输出

📋 系统模块清单

模块功能来源课程资源估算
ADC接口数据采集第01课2个IO引脚
CIC抽取器4倍降采样第23课0个乘法器
FIR低通抗混叠滤波第07-09课16个DSP48
IIR均衡器5段参数均衡第13-16课10个DSP48
FFT引擎256点频谱分析第04-06课8个DSP48+2BRAM
NCO本地振荡器第01课1BRAM+1DSP48
控制FSM系统调度本课100LUT

3. Verilog实现:DSP SoC顶层

//=============================================
// dsp_soc_top.v
// 完整DSP SoC顶层模块
// 集成:CIC+FIR+IIR+FFT
//=============================================
module dsp_soc_top #(
    parameter DATA_WIDTH = 16,
    parameter COEFF_WIDTH = 16,
    parameter FFT_N = 256,
    parameter OUT_WIDTH = 32
)(
    input  wire                          clk_100m,     // 100MHz系统时钟
    input  wire                          rst_n,
    // ADC接口
    input  wire signed [DATA_WIDTH-1:0]  adc_data,
    input  wire                          adc_valid,
    // DAC接口
    output wire signed [DATA_WIDTH-1:0]  dac_data,
    output wire                          dac_valid,
    // FFT结果输出
    output wire signed [OUT_WIDTH-1:0]   fft_mag,
    output wire [$clog2(FFT_N)-1:0]      fft_index,
    output wire                          fft_valid,
    // 控制接口
    input  wire [1:0]                    eq_band_sel,
    input  wire signed [COEFF_WIDTH-1:0] eq_gain
);

    // 内部信号
    wire signed [DATA_WIDTH-1:0] cic_out;
    wire                         cic_valid;
    wire signed [OUT_WIDTH-1:0]  fir_out;
    wire                         fir_valid;
    wire signed [OUT_WIDTH-1:0]  iir_out;
    wire                         iir_valid;

    // CIC抽取器(4倍降采样)
    dsp_cic_decimator #(
        .DATA_WIDTH(DATA_WIDTH),
        .STAGES(3),
        .DECIM_RATE(4)
    ) u_cic (
        .clk(clk_100m), .rst_n(rst_n),
        .data_valid(adc_valid), .data_in(adc_data),
        .data_out(cic_out), .out_valid(cic_valid)
    );

    // FIR低通滤波器
    dsp_fir_direct #(
        .DATA_WIDTH(DATA_WIDTH),
        .COEFF_WIDTH(COEFF_WIDTH),
        .TAP(32),
        .OUT_WIDTH(OUT_WIDTH)
    ) u_fir (
        .clk(clk_100m), .rst_n(rst_n),
        .data_valid(cic_valid), .data_in(cic_out),
        .coeffs(fir_coeffs),
        .data_out(fir_out), .out_valid(fir_valid)
    );

    // IIR均衡器
    dsp_iir_eq5band #(
        .DATA_WIDTH(OUT_WIDTH),
        .COEFF_WIDTH(COEFF_WIDTH)
    ) u_iir (
        .clk(clk_100m), .rst_n(rst_n),
        .data_valid(fir_valid), .data_in(fir_out),
        .band_sel(eq_band_sel), .gain(eq_gain),
        .data_out(iir_out), .out_valid(iir_valid)
    );

    // FFT频谱分析器
    dsp_fft_core #(
        .N(FFT_N),
        .DATA_WIDTH(DATA_WIDTH),
        .TWIDDLE_WIDTH(COEFF_WIDTH)
    ) u_fft (
        .clk(clk_100m), .rst_n(rst_n),
        .fwd_inv(1'b0),
        .data_valid(iir_valid),
        .data_re_in(iir_out[DATA_WIDTH-1:0]),
        .data_im_in(0),
        .data_re_out(), .data_im_out(),
        .out_valid(fft_valid), .fft_done()
    );

    // DAC输出选择(IIR均衡后输出)
    assign dac_data  = iir_out[DATA_WIDTH-1:0];
    assign dac_valid = iir_valid;

endmodule

4. Verilog实现:5段IIR均衡器

//=============================================
// dsp_iir_eq5band.v
// 5段参数均衡器
// 每段为二阶IIR峰值/谷值滤波器
//=============================================
module dsp_iir_eq5band #(
    parameter DATA_WIDTH = 32,
    parameter COEFF_WIDTH = 16
)(
    input  wire                          clk,
    input  wire                          rst_n,
    input  wire                          data_valid,
    input  wire signed [DATA_WIDTH-1:0]  data_in,
    input  wire [1:0]                    band_sel,
    input  wire signed [COEFF_WIDTH-1:0] gain,
    output reg  signed [DATA_WIDTH-1:0]  data_out,
    output reg                           out_valid
);
    // 5个频段参数均衡器级联
    // 频段1: 60Hz, 频段2: 250Hz, 频段3: 1kHz
    // 频段4: 4kHz, 频段5: 16kHz
    reg signed [DATA_WIDTH-1:0] band_out [0:4];
    reg signed [COEFF_WIDTH-1:0] b0 [0:4];
    reg signed [COEFF_WIDTH-1:0] b1 [0:4];
    reg signed [COEFF_WIDTH-1:0] b2 [0:4];
    reg signed [COEFF_WIDTH-1:0] a1 [0:4];
    reg signed [COEFF_WIDTH-1:0] a2 [0:4];
    reg signed [DATA_WIDTH-1:0] x1 [0:4];
    reg signed [DATA_WIDTH-1:0] x2 [0:4];
    reg signed [DATA_WIDTH-1:0] y1 [0:4];
    reg signed [DATA_WIDTH-1:0] y2 [0:4];
    integer i;

    initial begin
        // 默认平直增益(bypass)
        for (i = 0; i < 5; i = i + 1) begin
            b0[i] = 16'sd32768; b1[i] = 0; b2[i] = 0;
            a1[i] = 0; a2[i] = 0;
        end
    end

    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            for (i = 0; i < 5; i = i + 1) begin
                x1[i] <= 0; x2[i] <= 0;
                y1[i] <= 0; y2[i] <= 0;
                band_out[i] <= 0;
            end
            data_out <= 0; out_valid <= 1'b0;
        end else if (data_valid) begin
            band_out[0] <= data_in;  // 第一级输入
            for (i = 0; i < 5; i = i + 1) begin
                band_out[i] <= b0[i]*band_out[i] + b1[i]*x1[i] + b2[i]*x2[i]
                            - a1[i]*y1[i] - a2[i]*y2[i];
                x2[i] <= x1[i];
                x1[i] <= band_out[i];
                y2[i] <= y1[i];
                y1[i] <= band_out[i];
            end
            data_out <= band_out[4];
            out_valid <= 1'b1;
        end else out_valid <= 1'b0;
    end
endmodule

5. 系统集成与验证

DSP SoC的集成验证需要分层进行:

  1. 单元测试:每个模块独立验证(已在前面各课完成)
  2. 接口测试:模块间的数据格式和时序匹配
  3. 系统测试:完整链路的端到端验证
  4. 性能测试:频率响应、动态范围、延迟测量
  5. 压力测试:最坏情况输入下的稳定性

6. 资源使用总结

📊 Xilinx Artix-7 XC7A100T资源估算

资源使用量可用量利用率
DSP48E13524014.6%
BRAM1881355.9%
LUT5000634007.9%
FF40001268003.2%

7. 课程总结

恭喜你完成了全部30课的DSP数字信号处理课程!让我们回顾一下学习之旅:

🎓 课程回顾

8. 练习

📝 练习1:系统集成

将所有模块集成到dsp_soc_top中,完成编译和综合。

📝 练习2:板级验证

在FPGA开发板上实现完整DSP SoC,用音频输入验证均衡器效果。

📝 练习3:性能优化

分析SoC的关键路径,通过流水线优化将工作频率提升到200MHz。

📝 练习4:功能扩展

添加UART控制接口,允许通过串口实时调整均衡器参数。

🏆 成就解锁:DSP架构师

✅ 完成了全部30课的DSP数字信号处理课程

✅ 实现了完整的DSP SoC片上系统

✅ 掌握了从理论到硬件的完整设计流程

✅ 具备了独立设计复杂数字信号处理系统的能力

✅ 你已经是合格的DSP硬件工程师了!🎉

11. DSP SoC的进阶优化

在基础SoC实现之上,还可以进行以下进阶优化:

🚀 进阶优化方向

12. 设计经验总结

在整个课程的学习中,最重要的经验总结:

💡 核心设计原则

13. 毕业设计答辩准备

毕业设计答辩需要准备以下材料:

📋 答辩清单

14. 从课程到职业

完成本课程后,你已具备以下职业能力:

💼 职业方向

15. 继续学习路径

📚 进阶学习推荐