一、FPGA概述:从零开始理解这个“万能芯片”
大家好,我是你们的FPGA讲师。今天咱们聊聊FPGA到底是什么。说实话,我入行那会儿,第一次听到“现场可编程门阵列”这七个字,脑子里全是问号。但别急,这东西其实没那么玄乎。
1.1 什么是FPGA?
FPGA,全称Field Programmable Gate Array。翻译过来就是“现场可编程门阵列”。
你想想看,CPU是固定的,出厂时指令集就焊死了。GPU也是固定的,专门为图形计算优化。ASIC更狠,流片一次几百万,改都不能改。
但FPGA不一样。它就像一堆积木,你可以随时拆了重搭。今天搭一个网络交换机,明天改成视频处理器。硬件功能可以“软件化”地更新。
核心理解:FPGA是一种“硬件可编程”的芯片。你写的代码,最终变成了实实在在的电路。
我个人习惯把FPGA比作“乐高底板”。底板上有很多小颗粒(逻辑单元),你用代码告诉它们怎么连。连好了,就是一个专用处理器。不满意?重新连一遍就行。
1.2 FPGA vs CPU vs GPU vs ASIC
很多初学者会问:FPGA和这些芯片到底有啥区别?我直接给你画个表,一目了然。
| 芯片类型 | 架构特点 | 灵活性 | 性能/功耗比 | 典型应用 |
|---|---|---|---|---|
| CPU | 冯·诺依曼,串行执行 | 软件灵活,硬件固定 | 中等 | 操作系统、通用计算 |
| GPU | 大规模并行,SIMT | 软件灵活,硬件固定 | 高(图形/矩阵) | 图形渲染、AI训练 |
| ASIC | 全定制,固定逻辑 | 零灵活性 | 最高 | 比特币矿机、手机基带 |
| FPGA | 可编程逻辑阵列 | 硬件可重构 | 较高(特定场景) | 原型验证、通信、工业控制 |
说白了,CPU是“万能厨师”,什么菜都能做,但一次只能炒一个。GPU是“流水线大厨”,一次能炒几百份同样的菜。ASIC是“专用炒菜机器人”,只做一道菜,但快得离谱。FPGA呢?它是“可编程厨房”,今天做川菜,明天改做日料,台面、灶具都能重新摆。
我的经验:我在项目中遇到过客户非要拿FPGA跑Linux。嗯,能跑,但效率感人。FPGA强在“硬实时”和“低延迟”,不是用来跑操作系统的。选型时一定要想清楚:你到底需要什么?
1.3 FPGA内部结构:拆开看看里面有什么
FPGA内部到底长什么样?我直接画一张图,你一看就懂。
FPGA内部主要由这几大块组成:
- LUT(查找表):这是FPGA最核心的单元。说白了,就是一个“真值表”。输入4个或6个信号,输出1个结果。LUT可以实现任何组合逻辑。我刚开始学的时候,总觉得LUT很神秘,后来发现它就是一块小内存,存着所有可能的输出结果。
- FF(触发器):用来存储状态。时序逻辑全靠它。每个LUT后面基本都跟着一个FF。你写的always块(Verilog)或process块(VHDL),综合出来就是一堆FF。
- BRAM(块存储器):FPGA内部的RAM。容量从几Kb到几十Mb不等。我做过一个视频缓存项目,BRAM用得特别多。注意,BRAM是硬核,不是LUT搭出来的,速度更快,功耗更低。
- DSP(数字信号处理单元):专门做乘加运算的硬核。比如DSP48E1,一个时钟周期就能完成一次18x18位乘法加48位累加。做FIR滤波器、FFT时,DSP就是你的主力。
- IO(输入输出接口):连接外部世界的通道。支持各种电平标准:LVCMOS、LVDS、HSTL等。选型时IO数量是个硬指标,不够用就麻烦了。
避坑指南:我曾经在一个项目中,把LUT当RAM用,结果资源爆了。后来才意识到,能用BRAM就别用LUT搭。LUT搭RAM不仅浪费逻辑资源,时序还差。记住:硬核优先,软核兜底。
1.4 FPGA的工作原理:它到底是怎么“编程”的?
FPGA的工作原理,说白了就三步:
- 配置:上电后,FPGA从外部存储器(比如Flash)读取配置文件。这个文件里存着所有LUT的真值表、FF的初始值、互连开关的状态。
- 连接:根据配置文件,FPGA内部的开关矩阵把各个逻辑单元连起来。就像你搭积木时,把不同颜色的积木拼在一起。
- 运行:连接完成后,FPGA就变成了你设计的电路。输入信号进来,经过LUT、FF、BRAM、DSP,输出结果。一切都是硬件并行执行的。
你想想看,CPU执行指令是一条一条来的。FPGA呢?所有逻辑同时工作。这就是为什么FPGA在低延迟场景下无敌。
关键点:FPGA的“编程”不是写软件,而是“画电路”。你写的Verilog代码,最终被综合工具翻译成一张网表,然后映射到LUT、FF这些硬件资源上。
举个例子,你想实现一个加法器:
// Verilog代码
module adder (
input [7:0] a,
input [7:0] b,
output [8:0] sum
);
assign sum = a + b;
endmodule
这段代码综合后,会占用几个LUT(实现加法逻辑)和几个FF(如果需要流水线)。工具会自动选择最优的映射方式。你不需要关心底层细节,但理解底层能帮你写出更好的代码。
嗯,这里要注意:FPGA的配置是易失性的。断电后配置就丢了。所以开发板上通常有个配置芯片,上电时自动加载。我见过有人忘了焊配置芯片,结果板子每次上电都是空的,折腾了半天才发现。
好了,FPGA的概述就讲到这里。记住:FPGA是硬件可编程的芯片,内部由LUT、FF、BRAM、DSP、IO组成。它的工作原理就是“配置+连接+运行”。下一章我们聊聊怎么选开发板,那才是真正动手的开始。
公众号:蓝海资料掘金营,微信deep3321