场景与任务
通信、雷达和部分机载场景要把连续数据流做实时谱分析。指令流平台吞吐不够,GPU 功耗偏高,赛题要求把 FFT 做到 FPGA 上,并相对基线再提速。
Competition · 2023
第十二届中国软件杯 · 基 4 MDC 流水线
把基线基 2 SDF 换成 4 路并行的基 4 MDC。1024 点在同样 20 ns 时钟下从 2057 拍降到 513 拍,约 4.01 倍;末级可切基 4 / 基 8,覆盖 16 点以上的 2ⁿ 点。
01
通信、雷达和部分机载场景要把连续数据流做实时谱分析。指令流平台吞吐不够,GPU 功耗偏高,赛题要求把 FFT 做到 FPGA 上,并相对基线再提速。
赛题要求两件事:1024 点在相同时钟下相对基 2 SDF 提速 4 倍;算法能伸缩到 2048、4096。验证落在 Vivado 2018.3 + Modelsim 功能仿真,用 MATLAB 出激励和 SNR。
02
顶层按点数生成 log₄N 级流水。中间级是标准 MDC 单元,末级是基 4/8 蝶形。每级 4 路并行:蝶形 → 打拍 → 复乘 → 延迟 → 换向 → 再延迟。
第一路旋转因子恒为 1,不进复乘。控制模块用同一个计数器同时给出换向选择和旋转因子地址。
03
问题:基 2 SDF 单路串行,1024 点要 2057 拍,到不了赛题的 4 倍。
改动:改成 4 路 Multi-path Delay Commutator,按 log₄N 级流水;1024 点 5 级。
效果:同样 20 ns 时钟,50 ns 进到 10310 ns 出,共 513 拍,相对基线 4.01 倍。
问题:基 2 级数多,复乘次数也多。
改动:每级用基 4 加减完成复加;第 1 路 W=1 直通,另外 3 路再复乘。
效果:复乘次数大约是基 2 的 3/4,每级只留 3 个复数乘法器。
问题:4 路到达时刻不同,直接进下一级会乘错旋转因子。
改动:复乘后按 D、2D、3D 延迟;换向做行列转置;再延迟收齐。控制 FSM 和一个计数器同时出 data_sel 和旋转因子地址。
效果:各级数据对得上,控制流和数据流拆开,少占一套计数逻辑。
问题:传统基 4 MDC 只能算 4ⁿ 点。2048 要补零,多算很多拍。
改动:末级改成基 4/8:4ⁿ 只走基 4;2ⁿ 但非 4ⁿ 时再补一级基 2(W₈¹ / W₈³)。
效果:同一套顶层覆盖 16 点以上任意 2ⁿ,2048 / 4096 不用另开工程。
问题:离线存满 N 个旋转因子太占 ROM;在线生成又拉长关键路径。
改动:MATLAB 预生成前 N/8+1 点;其余按八分圆对称做保留、取反或实虚互换。
效果:存储从 N 降到 N/8+1,查表延迟仍是一拍。
问题:64 bit 补码乘完会超出位宽,截位不当频谱会歪。
改动:数据与旋转因子都用 32 实 + 32 虚;旋转因子走 Q 格式,复乘后右移 16 再截位。
效果:三组 1024 点双音 SNR 约 76 dB,和 MATLAB 金标准对得上。


04
验证分三步:先用 Modelsim 看模块对不对,再量整条流水线从进到出的拍数,最后把输出拉回 MATLAB 对频谱和 SNR。激励是双音信号,放大 1000 倍写成 64 bit 定点。金标准是自写基 2 DIF。差值超过 200 报警。工具是 Vivado 2018.3 和 Modelsim DE-64 10.6c。
2057 / 513,相对基 2 SDF
时钟 20 ns,50 ns 进到 10310 ns 出
三组双音,差值阈值 200
2048 / 4096 点 SNR 仍约 75 dB
200 + 300 Hz 等幅双音,1024 点。超阈值 0 处,SNR 75.94 dB。
200 k + 300 kHz,1024 点。超阈值 0 处,SNR 75.94 dB。
10 k + 20 kHz,幅度 1:2。超阈值 1 处,SNR 76.05 dB。
同组 1 激励扩到 2048 / 4096 点,SNR 75.01 / 75.82 dB。
先确认控制、蝶形、换向和单级流水各自能跑通,再接到顶层。下面四张都是 Modelsim 功能仿真,黑底绿线是信号取值。




模块接好后,用 16 点看延迟是否对得上理论;再用 1024 点量整次变换的拍数。时钟 20 ns。基线基 2 SDF 要 2057 拍,这里要压到 514 拍以内。



硬件输出写成 test_real_out / test_imag_out,再送回 MATLAB。上面一张是金标准,下面一张是流水线 FFT。谱峰位置和相对幅度对得上,再算 SNR。


05
算法负责人:把基线从 R2SDF 换成 R4MDC,推 4 倍加速对应的拍数,设计边界对齐、末级混合基和旋转因子压缩,并用 MATLAB 金标准卡 SNR。