跳到主要内容

第22章 硬件平台概述:FPGA/DSP在实时信号处理中的应用、系统控制逻辑

返回课程目录:FMCW激光雷达技术课程(公开版)

引言:实时处理的核心需求

在FMCW(调频连续波)激光雷达系统中,回波信号包含目标的距离、速度与角度信息。这些信息需要通过快速傅里叶变换(FFP)、数字滤波、解调等算法实时提取。这对硬件平台的并行处理能力、确定性与低延迟提出了极高要求。

通用处理器(CPU)难以满足这些需求,因此,现场可编程门阵列(FPGA)和数字信号处理器(DSP)成为实现实时信号处理与系统控制的关键硬件。

FPGA与DSP核心特性对比

特性FPGADSP
核心优势硬件级并行,可定制化逻辑,极低延迟高效的乘加运算,优化的指令集,编程相对简单
处理范式数据流驱动,并行处理指令序列驱动,顺序/流水线处理
典型应用环节前端数据采集、数字下变频、FFT预处理、系统状态机控制后端复杂算法(如点云聚类、目标跟踪)、标定补偿计算
开发语言VHDL, Verilog, HLS (高层次综合)C, C++, 汇编
功耗与灵活性功耗相对较高,可重配置,灵活性极强功耗较低,固定架构,灵活性中等

在FMCW激光雷达中的具体应用

1. FPGA的核心任务

  • **高速数据采集与接口管理:**控制ADC(模数转换器)以数百MHz速率采样相干探测后的中频信号。

  • 实时数字信号预处理:

    1. 数字混频与滤波(移除直流分量与高频噪声)
    2. 执行快速傅里叶变换(FFT),将时域信号转为频域,提取差频。
    3. 峰值检测与坐标提取。
  • **系统控制逻辑(状态机):**控制激光调制、扫描单元(如MEMS)、数据缓存与传输的精确时序。

2. DSP的核心任务

  • **高级算法处理:**对FPGA预处理后的数据进行二次处理,如多帧数据关联、速度解模糊、噪声抑制。
  • **点云生成与初步过滤:**将距离、速度、角度信息融合为三维点云,并执行离群点滤除。
  • **通信与上位机交互:**处理以太网、CAN等通信协议,将结果打包发送给主控制器。

典型硬件系统架构图

【原文此处有示意图,图片内容见源资料对应页面】

图:FPGA与DSP协同工作的典型FMCW激光雷达信号处理链

关键代码示例:FPGA中的FFT预处理逻辑(简化的Verilog思路)

以下代码片段展示了FPGA中控制FFT IP核进行实时频谱分析的简化状态机思路。


// 模块定义:控制FFT IP核进行连续流处理
module FFT_Controller (
input wire clk, // 系统时钟 (例如 100MHz)
input wire reset_n, // 异步复位,低有效
input wire [15:0] adc_data, // 来自ADC的采样数据
input wire data_valid, // 数据有效标志
output reg fft_start, // 启动FFT计算
output reg [15:0] fft_real_in,// 输入到FFT的实部数据
output reg [15:0] fft_imag_in,// 输入到FFT的虚部数据 (设为0)
input wire fft_done, // FFT计算完成标志
input wire [31:0] fft_mag_out // FFT输出的幅度值(来自后续幅度计算模块)
);

// 状态定义
localparam IDLE = 3'b000;
localparam LOAD_BUFFER = 3'b001;
localparam START_FFT = 3'b010;
localparam WAIT_FFT = 3'b011;
localparam OUTPUT_MAG = 3'b100;

reg [2:0] current_state, next_state;
reg [7:0] sample_counter; // 计数1024个采样点
reg [15:0] data_buffer [0:1023]; // 数据缓存RAM(简化表示)

// 状态机时序逻辑
always @(posedge clk or negedge reset_n) begin
if (!reset_n)
current_state <= IDLE;
else
current_state <= next_state;
end

// 状态机组合逻辑与操作
always @(*) begin
next_state = current_state;
fft_start = 1'b0;
case (current_state)
IDLE: begin
if (data_valid) next_state = LOAD_BUFFER;
end
LOAD_BUFFER: begin
// 将ADC数据存入缓冲区
data_buffer[sample_counter] <= adc_data;
if (sample_counter == 8'd255) begin // 缓存了256个点(示例)
next_state = START_FFT;
end
end
START_FFT: begin
fft_start = 1'b1; // 启动FFT IP核
next_state = WAIT_FFT;
end
WAIT_FFT: begin
if (fft_done) next_state = OUTPUT_MAG;
end
OUTPUT_MAG: begin
// 此处可以将fft_mag_out送入峰值检测模块
next_state = IDLE;
end
endcase
end

// 采样点计数器逻辑
always @(posedge clk or negedge reset_n) begin
if (!reset_n)
sample_counter <= 8'b0;
else if (current_state == LOAD_BUFFER && data_valid)
sample_counter <= sample_counter + 1;
else if (current_state == IDLE)
sample_counter <= 8'b0;
end

// 连接FFT输入数据(虚部置零)
always @(posedge clk) begin
if (current_state == LOAD_BUFFER) begin
fft_real_in <= adc_data;
fft_imag_in <= 16'b0;
end
end

endmodule

**说明:**此简化代码展示了FPGA如何以硬件并行的方式,通过状态机精确控制数据流和FFT计算过程,确保实时性。实际工程中会使用供应商提供的FFT IP核并包含更复杂的窗函数、缓存管理逻辑。

设计考量与选型建议

  • **性能平衡:**根据系统带宽、点云速率和算法复杂度,在FPGA和DSP之间合理分配任务。通常,FPGA处理前端高吞吐量流水线,DSP处理后端复杂决策。
  • **资源评估:**FPGA需要评估逻辑单元(LUT)、DSP Slice、块RAM数量;DSP需要评估核心频率、MAC单元数量及内存带宽。
  • **开发周期:**FPGA硬件描述语言开发周期较长,但性能最优;DSP的C语言开发更快,适合算法迭代。
  • **集成方案:**现代SoC(如Zynq UltraScale+ MPSoC)集成了ARM处理器、FPGA和专用DSP单元,为FMCW激光雷达提供了高度集成的单芯片解决方案。