FPGA基础回顾:架构、关键资源与CPU/GPU对比
各位同学,咱们今天聊聊FPGA的底子。很多人一上来就撸代码,结果资源不够用、时序跑不通,回头才发现——嗯,基础没打牢。我当年也踩过这个坑,所以今天把这部分掰开揉碎了讲。
一、FPGA到底是个啥?
说白了,FPGA就是一块“万能积木”。你买回来的时候,它里面啥都没有,就是一堆逻辑单元、连线、存储块。你想让它干啥,就通过硬件描述语言(Verilog/VHDL)去“搭电路”。
这和CPU不一样。CPU是固定的指令集,你写软件它按部就班执行。FPGA呢?你写的是硬件,是真正的电路。我经常跟团队说:CPU是厨师按菜谱做菜,FPGA是你直接搭了个炒菜机器人。
二、FPGA内部的关键资源
咱们一个一个说。这些资源你天天打交道,但真用对地方的人不多。
1. LUT(查找表)——最基础的逻辑单元
LUT本质上是一个小型的RAM。你给它输入几个信号,它查表输出结果。比如一个4输入LUT,可以实现任意4输入的组合逻辑。
我个人的习惯:写代码时尽量让综合工具自己去优化LUT,别手写一大堆与或非门。工具比你聪明,真的。
2. DSP Slice(数字信号处理单元)——算力的核心
DSP是专门做乘加运算的。一个DSP48E2(Xilinx 7系列)可以做到:
25×18位乘法 + 48位累加,一个时钟周期搞定。
我见过有人用LUT搭乘法器,结果资源爆了、频率还上不去。何必呢?DSP就在那儿,不用白不用。
| 资源类型 | 典型数量(中端FPGA) | 主要用途 |
|---|---|---|
| LUT | 50k~200k | 组合逻辑、小规模存储 |
| DSP Slice | 100~2000 | 乘法、滤波、矩阵运算 |
| BRAM | 100~500块 | 数据缓存、FIFO、查找表 |
| SerDes | 4~32对 | 高速串行通信(PCIe、SRIO、Ethernet) |
3. BRAM(块RAM)——片上存储的王者
BRAM是真正的双口RAM,可以同时读写。一块BRAM通常是36Kb(可配置为两个18Kb)。
避坑指南:我曾经在一个项目里用分布式RAM(LUT搭的)存了2KB数据,结果LUT用掉一半。后来换成BRAM,LUT占用直接降到5%。记住:超过64bit的存储,优先考虑BRAM。
4. SerDes(串行器/解串器)——高速接口的命脉
SerDes负责把并行数据转成高速串行信号发出去,或者反过来。GTP、GTX、GTH这些都是SerDes的不同速率版本。
你想想看,DDR3/DDR4的接口、PCIe、千兆以太网、SATA……哪个离得开SerDes?没有它,FPGA就是个孤岛。
三、FPGA vs CPU vs GPU——谁干谁的活?
这个问题我经常被问到。咱们直接上对比:
| 维度 | CPU | GPU | FPGA |
|---|---|---|---|
| 架构 | 冯·诺依曼/哈佛 | SIMT(单指令多线程) | 可编程逻辑阵列 |
| 并行度 | 低(4~64核) | 极高(数千CUDA核心) | 极高(可定制流水线) |
| 延迟 | 高(指令流水线、缓存) | 高(批量处理) | 极低(硬件直通) |
| 能效比 | 一般 | 较高(浮点运算) | 极高(定制化电路) |
| 开发难度 | 低 | 中 | 高 |
| 典型场景 | 操作系统、控制逻辑 | 图像渲染、AI训练 | 通信基带、工业控制、金融加速 |
我的理解:CPU适合做复杂控制,GPU适合做大规模并行计算(尤其是浮点),FPGA适合做低延迟、高确定性的数据流处理。
举个例子:做FFT(快速傅里叶变换)。
- CPU:软件算,灵活但慢。
- GPU:批量算,吞吐高但延迟大。
- FPGA:流水线算,每个时钟出一个结果,延迟固定。
我在一个雷达信号处理项目里,用FPGA做脉冲压缩(其实就是卷积),延迟控制在1微秒以内。换成GPU?至少几十微秒起步。
四、一张图看懂FPGA资源与对比
下面这张SVG图,把FPGA内部的关键资源和与CPU/GPU的定位关系画清楚了。你保存下来,以后做方案选型时可以参考。
五、总结一下
FPGA不是万能的,但在特定场景下,它是无可替代的。你掌握了LUT、DSP、BRAM、SerDes这四类资源,就掌握了FPGA的命脉。
最后说一句:别把FPGA当CPU用。我见过有人用FPGA跑操作系统,结果资源全浪费在调度上。FPGA的价值在于硬件加速,在于流水线,在于确定性延迟。找准定位,才能发挥它的真正实力。
LUT → 逻辑
DSP → 算力
BRAM → 存储
SerDes → 通信
四者结合,天下无敌。
公众号:蓝海资料掘金营,微信deep3321