1. FPGA概述:从零开始认识这个“万能芯片”
大家好,我是你们的FPGA讲师。在正式开始之前,我想先聊聊我自己的经历。十几年前我刚入行时,第一次拿到Xilinx的Spartan-3开发板,看着上面密密麻麻的引脚,说实话有点懵。但后来我发现,FPGA这东西,说白了就是一块“万能积木”——你想让它干什么,它就干什么。今天我们就从最基础的内容开始,把FPGA的来龙去脉理清楚。
1.1 FPGA发展历史:从“胶合逻辑”到“万能芯片”
FPGA的全称是Field Programmable Gate Array,现场可编程门阵列。这个概念最早由Xilinx公司的创始人Ross Freeman在1985年提出。当时他有个疯狂的想法:能不能做一种芯片,用户买回去之后还能自己改电路?
嗯,这在当时简直是天方夜谭。因为传统的ASIC(专用集成电路)一旦流片,电路就焊死了,改不了。但Ross Freeman坚持了下来,第一颗FPGA芯片XC2064诞生了,只有64个逻辑块,64个触发器。放在今天,连个计数器都跑不起来。但在当时,这已经是革命性的突破。
我个人觉得,FPGA的发展可以分成三个阶段:
- 第一阶段(1985-2000年):胶合逻辑时代。FPGA主要用来做接口转换、逻辑粘合。我记得那时候做项目,FPGA就是个“万能胶”,把CPU、DSP、外设粘在一起。
- 第二阶段(2000-2010年):片上系统时代。FPGA开始集成硬核处理器(比如PowerPC)、DSP模块、高速收发器。这时候的FPGA已经可以独立完成一个系统级设计。
- 第三阶段(2010年至今):异构计算时代。FPGA开始集成AI引擎、HBM高带宽内存、网络硬核。说白了,FPGA已经从一个“逻辑芯片”变成了“计算芯片”。
重要节点:2012年,Xilinx推出Zynq系列,首次在FPGA中集成ARM Cortex-A9硬核处理器。这标志着FPGA正式进入“异构计算”时代。我在2013年第一次用Zynq做项目时,那种“一颗芯片搞定一切”的感觉,真的很震撼。
1.2 FPGA与ASIC对比:为什么不用ASIC?
很多初学者会问:既然ASIC性能更好、成本更低,为什么还要用FPGA?这个问题我当年也问过我的导师。他的回答很简单:你愿意等半年吗?
ASIC的流片周期通常需要3-6个月,一次流片费用少则几十万,多则上千万。而且一旦流片回来发现bug,对不起,重新来一遍。FPGA就灵活多了,改代码、重新编译、下载,几分钟搞定。
我给大家列个对比表,一目了然:
| 对比项 | FPGA | ASIC |
|---|---|---|
| 开发周期 | 几周到几个月 | 几个月到一年 |
| 修改成本 | 几乎为零(重新编译即可) | 极高(重新流片) |
| 单位成本 | 较高(适合小批量) | 极低(适合大规模量产) |
| 性能 | 中等(受限于可编程结构) | 极高(全定制优化) |
| 功耗 | 较高(可编程开关消耗) | 较低(全定制设计) |
| 适用场景 | 原型验证、小批量、快速迭代 | 大规模量产、高性能要求 |
我的建议:如果你做的是小批量产品(几千片以内),或者还在原型验证阶段,用FPGA。如果产品量很大(几十万片以上),而且性能要求极高,那就考虑转ASIC。我曾经有个项目,前期用FPGA验证了半年,确认没问题后才转的ASIC,一次流片成功。这就是FPGA的价值——帮你“试错”。
1.3 FPGA内部结构:拆开看看里面有什么
FPGA内部到底长什么样?我习惯把它想象成一个“乐高城市”。下面这张图是我画的FPGA内部结构示意图,你看完就明白了。
从上图可以看到,FPGA内部主要由这几部分组成:
1.3.1 CLB(可配置逻辑块)
CLB是FPGA的核心,说白了就是“乐高积木块”。每个CLB里面包含若干个LUT(查找表)和触发器。LUT本质上是一个小型的RAM,你可以用它来实现任何组合逻辑。比如你想实现一个与门,LUT里就存好真值表;想实现一个加法器,LUT里就存好加法结果。
我的经验:CLB的数量决定了FPGA的“逻辑容量”。选型时,我一般会留出30%的余量。为什么?因为布线阶段可能会消耗额外的逻辑资源。我曾经有个项目,综合报告显示只用了70%的LUT,结果布线时发现资源不够,最后不得不换更大容量的芯片。嗯,从那以后我就学乖了。
1.3.2 IOB(输入输出块)
IOB是FPGA与外界通信的“桥梁”。每个IOB可以配置成输入、输出或双向。现代FPGA的IOB还支持多种电平标准,比如LVCMOS、LVDS、HSTL等。你想想看,如果你的FPGA要跟3.3V的器件通信,但核心电压只有1.2V,IOB就是负责电平转换的“翻译官”。
1.3.3 Block RAM(块存储器)
Block RAM是FPGA内部的“小仓库”。每个Block RAM通常是18Kb或36Kb,可以配置成单端口、双端口、FIFO等模式。我经常用它来做数据缓存、FIFO队列、查找表等。
避坑指南:我曾经在项目中使用Block RAM做FIFO,结果发现读写时钟域不同步时,出现了数据丢失。后来才意识到,跨时钟域处理必须用格雷码或者双触发器同步。记住:Block RAM本身不处理跨时钟域问题,你得自己加同步逻辑。
1.3.4 DSP Slice(数字信号处理单元)
DSP Slice是专门为数学运算设计的硬核模块。每个DSP Slice包含一个乘法器、一个加法器和一个累加器。你可以用它来实现乘加运算、FIR滤波器、FFT等。相比用LUT搭乘法器,DSP Slice的速度快得多,功耗也低得多。
举个例子,如果你用LUT实现一个18x18的乘法器,可能需要几百个LUT,而且最高只能跑到100MHz。但用DSP Slice,一个就够了,跑500MHz都没问题。这就是硬核的优势。
1.3.5 时钟资源
时钟是FPGA的“心跳”。FPGA内部有专门的时钟网络,包括PLL(锁相环)、MMCM(混合模式时钟管理器)、全局时钟缓冲器等。PLL可以用来倍频、分频、移相。比如你输入一个50MHz的时钟,PLL可以倍频到200MHz,或者分频到25MHz。
我个人习惯,所有时钟信号都必须经过全局时钟网络。为什么?因为全局时钟网络的延迟最小、抖动最低。如果你把时钟信号当普通信号走局部布线,时序很容易出问题。
1.4 主流FPGA厂商介绍
目前全球FPGA市场主要由两家公司垄断:Xilinx(现在叫AMD Xilinx)和Intel(原Altera)。另外还有几家中国厂商正在崛起。
| 厂商 | 代表系列 | 特点 | 适用场景 |
|---|---|---|---|
| AMD Xilinx | Spartan、Artix、Kintex、Virtex、Zynq | 市场占有率最高,工具链成熟(Vivado) | 从低端到高端全覆盖 |
| Intel (Altera) | Cyclone、Arria、Stratix、Agilex | 与Intel处理器集成度高,工具链Quartus | 通信、数据中心、嵌入式 |
| Lattice | iCE40、MachXO、ECP5 | 低功耗、小封装 | 消费电子、IoT、桥接 |
| 紫光同创 | Logos、Titan | 国产替代,性价比高 | 国内项目、军工、安防 |
| 安路科技 | ELF、PHOENIX | 国产替代,工具链易用 | 工业控制、通信 |
我的选型建议:如果你是初学者,我建议从Xilinx的Artix-7系列开始。为什么?因为资料最多、社区最活跃、Vivado工具链也相对友好。等你熟悉了基本流程,再根据项目需求选择其他厂商。我个人最早用的是Altera的Cyclone II,后来转到了Xilinx,现在两个平台都在用。说实话,工具链各有千秋,但核心的RTL设计思想是通用的。
好了,这一章的内容就到这里。FPGA的世界很大,我们从最基础的结构开始,一步步深入。下一章我们会聊RTL设计的基本概念,包括组合逻辑和时序逻辑的区别,以及如何写好一个规范的Verilog模块。到时候见。
公众号:蓝海资料掘金营,微信deep3321