第一章:FPGA概述——从零开始认识这个“万能芯片”
大家好,我是你们的FPGA讲师。今天咱们聊聊FPGA的“前世今生”。
说实话,我第一次接触FPGA是在大学实验室。那时候看着开发板上一堆密密麻麻的引脚,心里直犯嘀咕:这玩意儿到底能干啥?后来做了十几年项目,才真正体会到它的魅力。
1.1 FPGA发展历史:从“胶合逻辑”到“系统级平台”
FPGA的历史,其实不算长。1985年,Xilinx公司推出了世界上第一款FPGA——XC2064。那时候的FPGA,说白了就是一堆可编程的逻辑门,用来做“胶合逻辑”——把几个芯片粘在一起用。
我记得刚入行时,前辈跟我说:“早期的FPGA,连个乘法器都没有,想做DSP?门儿都没有。”确实,那时候的FPGA只能做些简单的地址译码、接口转换。
但技术的发展总是超出想象。到了90年代,FPGA开始集成块RAM、PLL锁相环。2000年以后,DSP硬核、高速收发器、ARM处理器……一个个往里面塞。现在的FPGA,已经是一个完整的系统级芯片了。
关键里程碑:
- 1985年:Xilinx推出首款FPGA,64个逻辑单元
- 1991年:Actel推出反熔丝FPGA,主打高可靠性
- 1998年:Xilinx Virtex系列问世,集成块RAM
- 2002年:Altera Stratix系列,加入DSP硬核
- 2010年:Xilinx Zynq系列,ARM+FPGA异构架构
- 2020年:Intel Agilex系列,7nm工艺,AI加速
1.2 FPGA与ASIC对比:为什么不用专用芯片?
这个问题,我几乎每次上课都会被问到。你想想看,ASIC(专用集成电路)性能强、功耗低、成本低(量大的话),那为什么还要用FPGA?
答案就两个字:灵活。
我在一个通信项目中遇到过这种情况:客户的需求改了三次,每次都要调整协议。如果用ASIC,每次改版就是几十万美金打水漂。但用FPGA呢?改几行代码,重新综合一下,第二天就能跑新版本。
我的经验之谈:
选FPGA还是ASIC,主要看三点:
- 量级:年出货量<1000片,FPGA划算;>10万片,考虑ASIC
- 时间:3个月内要出样?FPGA;1年以后量产?ASIC
- 变更频率:协议还在改?老老实实用FPGA
| 对比项 | FPGA | ASIC |
|---|---|---|
| 开发周期 | 几周到几个月 | 6个月到2年 |
| NRE成本 | 低(几万到几十万) | 高(百万到千万) |
| 单位成本 | 高(几百到几千) | 低(几块到几十块) |
| 性能 | 中等 | 高 |
| 功耗 | 较高 | 低 |
| 可重配置 | 支持 | 不支持 |
注意:别以为FPGA就万能。我曾经有个项目,用FPGA做4K视频处理,结果功耗飙到30W,散热片烫得能煎鸡蛋。后来评估了一下,还是换ASIC方案了。
1.3 FPGA基本结构:拆开看看里面有什么
FPGA内部到底长什么样?我画个图给大家看看。
这张图是我自己画的,基本涵盖了FPGA的核心模块。咱们一个个说。
1.3.1 CLB——可配置逻辑块
CLB是FPGA的“心脏”。每个CLB里面包含几个Slice,每个Slice又有LUT(查找表)、触发器和进位链。
LUT是什么?说白了就是一个“查表器”。你给它4个输入,它就能输出任意4输入逻辑函数的结果。我刚开始学的时候,总觉得LUT很神秘,后来发现其实就是个16×1的SRAM。
避坑指南:我曾经在项目中犯过一个低级错误——把LUT当ROM用。虽然能实现,但综合工具会报一堆警告。后来我学乖了,存数据就用Block RAM,别折腾LUT。
1.3.2 IOB——输入输出块
IOB是FPGA和外界打交道的“窗口”。它支持各种电平标准:LVCMOS、LVDS、HSTL、SSTL……
我记得有个项目,客户要求用3.3V的IO口接1.8V的DDR3。我当时就懵了,后来查手册才发现,Xilinx的HP Bank支持1.8V,HR Bank支持3.3V。嗯,选对Bank很重要。
1.3.3 Block RAM——块存储器
Block RAM是FPGA内部的“小仓库”。每个BRAM通常是18Kb或36Kb,可以配置成单端口、双端口、甚至FIFO。
我一般这么用:
- 数据缓存:用BRAM做FIFO,简单粗暴
- 查找表:比如正弦波表,存BRAM里
- 帧缓冲:视频处理时存一帧图像
1.3.4 DSP Slice——数字信号处理单元
DSP Slice是FPGA的“算力担当”。每个DSP Slice包含一个乘法器和一个累加器,可以完成乘加运算。
做数字信号处理时,DSP Slice是宝贝。比如FIR滤波器,一个DSP Slice就能实现一个乘加单元。我做过一个256阶的FIR,用了256个DSP Slice,跑在200MHz,稳得很。
1.3.5 布线资源——FPGA的“高速公路”
布线资源是FPGA的“血管”。它把CLB、BRAM、DSP这些模块连接起来。
布线资源分几种:
- 短线:连接相邻模块,延迟小
- 长线:跨区域连接,延迟大
- 全局时钟线:专门给时钟信号用,歪斜小
注意:布线资源是FPGA的瓶颈。我见过一个项目,逻辑资源用了不到50%,但布线资源用满了,导致时序收敛不了。最后只能降频跑。
1.4 主流FPGA厂商介绍
目前FPGA市场,基本是“两超多强”的格局。
| 厂商 | 代表系列 | 工艺 | 特点 |
|---|---|---|---|
| AMD (原Xilinx) | Virtex, Kintex, Artix, Zynq | 7nm | 市场老大,工具链成熟 |
| Intel (原Altera) | Stratix, Arria, Cyclone, Agilex | 10nm | 与Intel处理器深度整合 |
| Lattice | iCE40, ECP5, CrossLink | 28nm | 低功耗、小封装 |
| Microchip (原Microsemi) | PolarFire, SmartFusion | 28nm | 军工、航天级可靠性 |
我个人习惯用AMD(原Xilinx)的芯片,主要是Vivado工具用顺手了。但Intel的Quartus也不差,尤其是做SoC FPGA时,和ARM核的整合做得很好。
Lattice的芯片我用来做小项目,比如接口转换、传感器采集。功耗低,价格也便宜。
至于Microchip的FPGA,说实话,我只有在军工项目里用过。那玩意儿贵得离谱,但可靠性确实没话说。
我的建议:
初学者选FPGA,别纠结。Xilinx的Artix-7或者Intel的Cyclone IV,淘宝上几百块一块开发板,够你玩两年。等做项目了,再根据需求选芯片。
好了,第一章的内容就到这里。FPGA的世界很大,咱们慢慢探索。