FPGA基础回顾:架构、关键资源与CPU/GPU对比

各位同学,咱们今天聊聊FPGA的底子。很多人一上来就撸代码,结果资源不够用、时序跑不通,回头才发现——嗯,基础没打牢。我当年也踩过这个坑,所以今天把这部分掰开揉碎了讲。

一、FPGA到底是个啥?

说白了,FPGA就是一块“万能积木”。你买回来的时候,它里面啥都没有,就是一堆逻辑单元、连线、存储块。你想让它干啥,就通过硬件描述语言(Verilog/VHDL)去“搭电路”。

这和CPU不一样。CPU是固定的指令集,你写软件它按部就班执行。FPGA呢?你写的是硬件,是真正的电路。我经常跟团队说:CPU是厨师按菜谱做菜,FPGA是你直接搭了个炒菜机器人。

二、FPGA内部的关键资源

咱们一个一个说。这些资源你天天打交道,但真用对地方的人不多。

1. LUT(查找表)——最基础的逻辑单元

LUT本质上是一个小型的RAM。你给它输入几个信号,它查表输出结果。比如一个4输入LUT,可以实现任意4输入的组合逻辑。

我个人的习惯:写代码时尽量让综合工具自己去优化LUT,别手写一大堆与或非门。工具比你聪明,真的。

小技巧:LUT也可以当移位寄存器用,尤其是做延迟线的时候。我在一个视频处理项目里就用LUT搭了128级延迟,省了BRAM。

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就是个孤岛。

核心要点:SerDes的PLL配置非常关键。我曾经因为参考时钟抖动太大,导致10Gbps链路死活锁不住。后来换了低抖动晶振,问题解决。时钟是SerDes的生命线。

三、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关键资源与对比定位图 FPGA 内部架构 LUT 查找表(组合逻辑) DSP Slice 乘加运算单元 BRAM 块RAM(存储) SerDes 高速串行接口 可编程互联(Routing) 连接所有资源 IO 引脚(含高速IO) 与CPU/GPU对比 CPU 控制流、复杂逻辑 低并行、高延迟 GPU 数据并行、浮点运算 高吞吐、高延迟 FPGA 流水线、定制化电路 极低延迟、高能效 FPGA = 可编程硬件加速器 | CPU/GPU = 通用处理器

五、总结一下

FPGA不是万能的,但在特定场景下,它是无可替代的。你掌握了LUT、DSP、BRAM、SerDes这四类资源,就掌握了FPGA的命脉。

最后说一句:别把FPGA当CPU用。我见过有人用FPGA跑操作系统,结果资源全浪费在调度上。FPGA的价值在于硬件加速,在于流水线,在于确定性延迟。找准定位,才能发挥它的真正实力。

核心记忆点
LUT → 逻辑
DSP → 算力
BRAM → 存储
SerDes → 通信
四者结合,天下无敌。

公众号:蓝海资料掘金营,微信deep3321