先写四则运算,不是绕弯子。FPGA里不存在"数字",只有寄存器堆里的一串bit。16位定点和32位浮点,占的资源、能表达的精度完全不同。一个16位加法器的进位链,延迟就是16级门,直接卡住你的数据通路能不能在目标频率下跑通。
理解了这层,再看FFT IP就顺了。IP内部是蝶形运算的流水级,N点FFT就是log₂N级,每级一次复数乘加。你能算出512点FFT吃多少LUT、多少DSP48、多少BRAM,才能在整机里合理切分资源。课程第21课把加法、乘法、除法的RTL手写和IP调用做了对比仿真,第22课直接调FFT IP出频谱图,两课衔接,从"算得清每级延迟"到"调得动IP参数"。
实际项目里,一个512点FFT纯RTL手写,光复数乘法器就要吃掉几百个DSP48。用IP变成拖拽配置,但前提是你得知道IP的吞吐延迟是多少周期、数据位宽怎么跟你的信号匹配。这种判断力,从加法器一级级搭上来才有。
三步。第一步,MATLAB里双精度跑一遍,记下输出峰值和最小可分辨幅度,算出动态范围。第二步,按动态范围定字长——峰值只用满量程的六成,余量留给突发,别把满刻度留给它。第三步,系数和中间通路全部换成定点,仿真对比双精度结果,误差在系统容差内就过关。
有个坑:FIR系数从24位截到16位,高频段衰减可能直接从-80dB掉到-60dB。在MATLAB里看着只是0.001的数值变化,到了实际射频系统就是带外泄漏多了20dB,滤波器直接废。量化不是"差不多就行",得对着系统指标算。
课程第20课覆盖定点浮点转换和量化误差公式,第23课调FIR IP做低通,第24课手写移动平滑滤波。理论、IP、手撕RTL三层递进,避免"会调IP但参数一改就崩"的状态。
总结与思考题
FPGA数字信号处理落地,核心就两件事:精度取舍和资源预算。先算清系统容多少误差、剩多少LUT和BRAM,代码才写得动。
你的FIR从64阶扩到128阶,BRAM只剩一半,砍精度还是改流水架构?
CTA
精度、资源、频率,三个约束同时摆上桌,是FPGA工程师的日常。如果你正卡在"仿真对但上板就翻车"这一步,点官网右下角会话窗口,跟我们的FPGA讲师聊一下当前模块的卡点,帮你定位下一步该攻哪里。
未经许可,禁止转载!
下一篇:没有了