第一章: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内部结构示意图 IOB IOB IOB IOB CLB阵列 (可配置逻辑块) LUT + 触发器 + 进位链 Block RAM (块存储器) 18Kb/36Kb DSP Slice (数字信号处理) 乘法器 + 累加器 布线资源 (Routing) 可编程互连线 + 开关矩阵 硬核处理器 ARM Cortex-A系列 高速收发器 GTP/GTX/GTH

这张图是我自己画的,基本涵盖了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的世界很大,咱们慢慢探索。


专注资料整理