1. 802.11a OFDM FPGA实现概述
去年接手了一个无线通信项目,需要基于FPGA实现802.11a协议的物理层。这个标准采用了OFDM(正交频分复用)技术,理论上看起来很美好,但实际用Verilog实现时简直是一场噩梦。现在项目终于交付了,我把开发过程中那些教科书上不会写的坑都整理出来,希望能帮到后来者。
802.11a的OFDM系统在FPGA上实现主要包含以下几个关键模块:QPSK调制解调、IFFT/FFT变换、循环前缀插入与去除、帧同步等。每个模块单独看起来都不复杂,但组合在一起就会出现各种意想不到的问题。比如时序对齐、定点量化误差积累、时钟域交叉等,这些都是在Matlab仿真阶段完全预料不到的情况。
2. QPSK调制实现中的坑
2.1 星座图旋转问题
在实现QPSK调制时,第一个遇到的坑是星座图旋转。理论上QPSK的四个星座点应该位于45°、135°、225°和315°。但在实际FPGA实现中,由于DAC的I/Q通道可能存在相位偏差,导致解调端看到的星座图发生了旋转。
解决方法是在FPGA内部加入相位补偿模块。具体实现是在QPSK调制器后增加一个复数乘法器,通过查找表实现相位旋转。这里的关键是旋转角度需要可配置,我们最终在设计中加入了4-bit控制字,可以以11.25°为步进调整相位。
注意:相位补偿的精度需要根据系统需求确定,过高的精度会导致资源消耗剧增。
2.2 量化噪声影响
另一个容易被忽视的问题是量化噪声。在Matlab仿真中,我们使用浮点数运算,但在FPGA中必须使用定点数。QPSK调制中的I/Q两路信号通常用12-16位定点数表示,但具体位宽需要仔细考量。
我们最初使用12位定点数,发现EVM(误差矢量幅度)指标不达标。经过分析,发现主要问题出在中间运算过程的位数截断上。最终方案是:
- 输入数据:12位
- 中间运算:18位
- 最终输出:14位
这种"宽进严出"的策略有效控制了量化噪声的积累。
3. IFFT/FFT模块的实现陷阱
3.1 定点FFT的缩放策略
802.11a使用64点IFFT/FFT,我们采用了Xilinx的FFT IP核。最大的坑在于缩放策略的选择。FFT IP核提供了三种缩放选项:
- 无缩放
- 块浮点缩放
- 每级缩放
最
