基于 Verilog 的多架构定点 FFT 处理器实现,覆盖 32/128 点,支持仿真验证与 FPGA 上板。目标平台 Xilinx Artix-7 (XC7A100T),纯手写 RTL,未使用任何厂商 FFT IP。
| 目录 | 架构 | 点数 | 吞吐率 | DSP | 特点 |
|---|---|---|---|---|---|
F4T_Legacy |
Radix-2 DIF (原位) | 32 / 128 | 1 samp/clk | ~16 | 入门实现,教学用 |
F4T_SDF / F4T_SDF_2 |
SDF 单路延迟反馈 | 128 | 1 samp/clk | ~8 | 低资源、流水线 |
F4T_MDF |
MDF 4 路并行 | 32 / 128 | 4 samp/clk | ~32 | 高吞吐、上板验证 |
F4T_FullPar32 |
全并行 | 32 | 32 samp/clk | ~144 | 最低延迟 (15 clk) |
F4T_FullPar128 |
全并行 | 128 | 128 samp/clk | >800 | 仿真验证 (超 DSP 容量) |
- 数据格式: Q3.12 定点 (16-bit, [-8, 7.9997])
- 旋转因子: Q1.15 定点 (16-bit)
- 缩放策略: 每级右移 1 bit,输出幅度 = 真实幅度 / N
- 输出顺序: 位反转序 (Bit-Reversed Order)
- 复数乘法: 伪 IP 核优化,特殊旋转因子零 DSP 消耗
- Vivado 2020.2+
- MATLAB (用于重新生成测试向量,可选)
- 将
fixed_pkg.vh中的DATA_ROOT修改为本机data/目录的绝对路径 - 在 Vivado Tcl Console 中:
cd <repo_path>/F4T_MDF/scripts
source create_vivado_projects.tcl- 或直接使用 Tcl 脚本运行 CLI 仿真:
cd <repo_path>/F4T_MDF/sim
source run_xsim_128_all.tcl ;# 128 点全模式回归cd <repo_path>/F4T_FullPar32/src/scripts
source create_project_32.tcl生成 Bitstream 后下载到开发板,ILA 触发条件设为 start_btn。
FPGA_Fixed_FFT/
├── F4T_Legacy/ # Radix-2 DIF 原位 FFT
│ ├── src/verilog/ # RTL 源码
│ ├── tb/ # 测试平台
│ ├── scripts/ # 自动验证脚本
│ └── sim_data/ # 仿真数据
├── F4T_SDF/ # SDF v1 (含 Vivado 工程)
├── F4T_SDF_2/ # SDF v2 (重构版)
│ ├── src/rtl/ # RTL 源码
│ ├── src/tb/ # 测试平台
│ ├── src/constraint/ # FPGA 约束
│ └── data/ # 仿真数据
├── F4T_MDF/ # MDF 4 路并行
│ ├── rtl/ # RTL 源码
│ ├── tb/ # 测试平台
│ ├── scripts/ # 工程创建脚本
│ └── data/ # 仿真数据
├── F4T_FullPar32/ # 32 点全并行
├── F4T_FullPar128/ # 128 点全并行
├── F4T_FullPar/ # 全并行 (合并工程)
└── doc/ # 设计文档
| 架构 | 点数 | LUT | FF | DSP | WNS (ns) | 功耗 (W) |
|---|---|---|---|---|---|---|
| FullPar | 32 | 7,549 | 5,408 | 144 | +0.119 | 0.614 |
| MDF | 32 | 3,682 | 2,944 | 32 | - | - |
| MDF | 128 | 14,296 | 11,776 | 128 | - | - |
| SDF | 128 | 1,802 | 1,472 | 8 | - | - |
128 点全并行所需 DSP (>800) 超出 XC7A100T 容量 (240),仅仿真验证。
每个架构均包含 MATLAB 参考数据生成器和自动对比测试平台:
- MATLAB 脚本生成激励和参考结果 (.hex)
- Testbench 读取数据驱动 DUT
- 自动将 FFT 输出与 MATLAB 参考逐点对比
- Tcl Console 输出
PASSED/FAILED及误差统计
skyswordx (circLΣMoon),Triwalt
MIT