第二章:FPGA架构初探:内部结构与主流厂商概览
说实话,很多初学者第一次接触FPGA时,都会把它当成一块“万能芯片”。
我当年刚入行时也这么想。直到有一次,我在项目中试图用LUT实现一个复杂的乘法器,结果时序跑不过,被老工程师狠狠教育了一顿。嗯,从那以后我才真正开始研究FPGA内部到底长什么样。
2.1 FPGA的核心:可编程逻辑块
FPGA之所以“可编程”,靠的是内部的基本单元。你可以把它想象成一块乐高底板,上面有各种标准积木块。我们通过编程来决定这些积木怎么连。
最基本的积木,就是逻辑单元。一个典型的逻辑单元包含两部分:
- 查找表(LUT):本质是一个小型的RAM。输入信号作为地址,查表输出结果。说白了,它就是用存储的方式实现任意组合逻辑。
- 触发器(FF):用于存储状态。时序逻辑全靠它。
核心概念:一个LUT + 一个FF = 一个基本逻辑单元(Slice或LE)。
我习惯把LUT比作“查字典”,输入是单词,输出是释义。FF则是“记事本”,记下当前的状态。
为什么会这样设计?因为任何数字逻辑,都可以拆解成组合逻辑(LUT实现)和时序逻辑(FF实现)。
2.2 存储与运算:BRAM和DSP
光有LUT和FF还不够。做复杂设计时,你会发现内存不够用,算数太慢。
块RAM(BRAM):FPGA内部集成的专用存储模块。容量从几Kb到几十Mb不等。
- 我建议:能用BRAM就别用LUT搭RAM。后者既浪费资源,又跑不快。
- 避坑指南:我曾经在视频缓存项目中,用LUT搭了个小FIFO,结果资源爆了。换成BRAM后,面积直接降了80%。
数字信号处理单元(DSP):专门做乘加运算的硬核。
- 你想想看,如果用LUT实现一个18x18的乘法器,需要几百个LUT,延迟还大。
- DSP一个时钟周期就能搞定。做滤波、FFT、矩阵运算时,它是绝对的主力。
个人经验:在通信基带项目中,我习惯把DSP配置成“乘加”模式。这样既能做FIR滤波器,又能做复数乘法,一石二鸟。
2.3 连接内外:IO与布线资源
FPGA不能只活在芯片内部。它需要跟外界打交道。
IO单元:负责芯片引脚与内部逻辑的接口。支持各种电平标准(LVCMOS、LVDS、SSTL等)。
- 我遇到过最坑的事:板子画好了,才发现某个Bank的电压设错了,导致所有IO信号电平不匹配。嗯,从那以后我每次画板前都会仔细核对Bank电压。
布线资源:连接所有单元的“高速公路”。
- 说白了,FPGA的布局布线工具,就是在帮你规划这些路怎么走。
- 如果时序不满足,多半是布线太绕了。
2.4 主流厂商芯片系列概览
目前FPGA市场基本被两家公司垄断:Xilinx(现属AMD)和Intel(原Altera)。
我个人的习惯是:做高速接口选Xilinx,做低功耗选Intel。当然这只是粗略分法。
| 厂商 | 系列 | 定位 | 典型应用 |
|---|---|---|---|
| Xilinx | Spartan / Artix | 低成本、低功耗 | 工业控制、IoT |
| Kintex | 中端、平衡型 | 通信、图像处理 | |
| Virtex / Versal | 高端、高性能 | 数据中心、雷达、AI | |
| Intel | MAX / Cyclone | 低成本、低功耗 | 消费电子、汽车 |
| Arria | 中端、平衡型 | 无线通信、广播 | |
| Stratix / Agilex | 高端、高性能 | 网络、军事、HPC |
注意:选型时不要只看逻辑资源。BRAM和DSP的数量往往才是瓶颈。
我曾经在图像处理项目中,LUT用了不到30%,但BRAM用了90%。最后不得不换更大芯片。
2.5 知识体系总览
下面这张图,帮你把FPGA内部结构串起来。建议保存下来,以后做设计时对照着看。
这张图你看懂了吗?核心就三点:
- 逻辑靠LUT+FF:实现任意数字逻辑
- 存储靠BRAM:别用LUT硬堆
- 运算靠DSP:乘法、滤波、FFT的利器
至于IO和布线,它们是“血管”和“神经”,保证数据能正确进出和流动。
我的建议:初学者不用死记硬背每个系列的参数。先理解架构,选型时再查手册。我做了十年FPGA,每次选型还是要翻datasheet。
公众号:蓝海资料掘金营,微信deep3321