目录
[一、什么是 FPGA](#一、什么是 FPGA)
[二、FPGA 的发展历史](#二、FPGA 的发展历史)
[三、FPGA 的基本结构](#三、FPGA 的基本结构)
[四、FPGA 的工作原理](#四、FPGA 的工作原理)
[五、FPGA 的应用领域](#五、FPGA 的应用领域)
一、什么是 FPGA
FPGA 即现场可编程门阵列,是一种可编程逻辑器件,用户可通过改变配置信息对其功能进行定义。它最初作为 ASIC 领域中的半定制电路出现,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
FPGA 是 "现场可编程逻辑门阵列(Field-Programmable Gate Array)" 的缩写。它是一个含有可编辑元件的半导体设备,可供使用者现在程序化的逻辑门阵列元件。FPGA 可以通过编程来实现各种数字电路,包括微处理器、数字信号处理器、数字信号编解码器等。
FPGA 的发展历史可以追溯到 20 世纪 80 年代初,主要分为四个阶段:发明阶段、扩展阶段、积累阶段和系统阶段。
- 发明阶段(1984 - 1992):1985 年,赛灵思公司推出首款 FPGA 器件 XC2064,仅包含 64 个逻辑模块,每个模块含有两个 3 输入查找表和一个寄存器。该器件晶片尺寸大,成本高,产量对大晶片来说超线性,导致初期赛灵思无产品可卖。
- 扩展阶段(1992 - 1999):FPGA 初创公司是无晶圆厂公司,无法获得领先芯片技术。到上世纪 90 年代后期,IC 代工厂生产晶体管和电线,使得基于 SRAM 的 FPGA 可以制造。新工艺使晶体管数量增加,成本减半,FPGA 尺寸增大。CMP 技术使 FPGA 厂商增加片上互联,适应更大的 LUT 容量。
- 积累阶段(2000 - 2007):FPGA 在新千年成为数字系统通用组件,容量和设计尺寸快速增加,并在数据通信领域占据市场。降低成本促使小型研发团队采用 FPGA。FPGA 厂商通过生产低成本 FPGA 和开发软逻辑库应对市场增长挑战。设计特点发生改变,FPGA 在计算密集型应用中发挥重要作用,成为一个系统。
- 系统时代(2008 - 至今):FPGA 整合了系统模块和控制功能,如 Zynq All-Programmable 器件。工具也在不断发展,系统 FPGA 需要高效的系统编程语言,如 OpenCL 和 C 语言编程。
FPGA 的基本结构由可编程逻辑单元(CLB)、输入输出块(IOB)、块随机访问存储器模块(BRAM)和时钟管理模块(CMM)等组成。CLB 是 FPGA 中最基本的逻辑单元,由查找表(LUT)和触发器组成,可实现任意逻辑功能。IOB 用于连接 FPGA 芯片和外部电路,BRAM 可存储大量数据并支持高速读写,CMM 用于管理时钟信号。
FPGA 的工作原理是通过将设计好的硬件描述语言(HDL)代码综合、映射到 FPGA 芯片中来实现编程和配置。设计者使用 HDL 语言如 Verilog、VHDL 等来描述逻辑电路,并进行时序分析、布局布线等操作,最终生成可加载到 FPGA 芯片中的配置文件。FPGA 的编程和配置可以通过 JTAG 接口、USB 接口、SD 卡等方式实现,还支持在线配置。
二、FPGA 的发展历史
- 发明阶段(1984 - 1992):1984 年,赛灵思公司发明了世界首款 FPGA。1985 年,赛灵思推出首款 FPGA 器件 XC2064,该器件仅包含 64 个逻辑模块,每个模块含有两个 3 输入查找表 (LUT) 和一个寄存器。这款器件采用 2.5 微米工艺技术制造,晶片尺寸大,成本高,产量对大晶片来说超线性,导致初期赛灵思无产品可卖。在这个阶段,FPGA 架构师寻求通过架构和工艺创新来提高 FPGA 设计效率。由于基于 SRAM 的 FPGA 片上 SRAM 占据了大部分晶片面积,基于反熔丝的 FPGA 以牺牲可重编程能力为代价,避免了这个问题。FPGA 架构也经历了从复杂的 LUT 结构到 NAND 门再到单个晶体管的演变。此外,多 FPGA 系统变得流行,自动化多芯片分区软件成为 FPGA 设计套件的重要组成部分,而完全不同的 FPGA 架构排除了通用设计工具的可能,FPGA 厂商担负起了为各自器件开发电子设计自动化 (EDA) 的任务。
- 扩展阶段(1992 - 1999):FPGA 初创公司是无晶圆厂公司,在当时无法获得领先芯片技术。到上世纪 90 年代后期,IC 代工厂意识到 FPGA 是理想的工艺发展推动因素,开始为 FPGA 生产晶体管和电线,使得基于 SRAM 的 FPGA 可以制造。每一代新工艺的出现都会将晶体管数量增加一倍,使每功能成本减半,并将最大 FPGA 的尺寸增大一倍。化学 - 机械抛光 (CMP) 技术允许代工厂在 IC 上堆叠更多金属层,使 FPGA 厂商能够大幅增加片上互联,以适应更大的 LUT 容量。在这个阶段,自动综合、布局和布线已经成为设计流程的必要步骤,FPGA 公司的命运对 EDA 工具的依赖程度不亚于对 FPGA 功能的依赖程度。基于 SRAM 的 FPGA 在这个时期实现了明显的产品优势,因为它们率先采用了每种新工艺节点,而基于反熔丝的 FPGA 则丧失了竞争优势。
- 积累阶段(2000 - 2007):新千年伊始,FPGA 已成为数字系统中的通用组件,容量和设计尺寸快速增加,并在数据通信领域开辟了巨大市场。2000 年代初期互联网泡沫破灭之后,降低成本的需求促使小型研发团队采用 FPGA,而不是风险较高的定制芯片。FPGA 厂商通过生产低成本 FPGA 和开发针对重要功能的软逻辑 (IP) 库,来应对市场增长挑战。这些软逻辑功能中最值得注意的是存储器控制器、各种通信协议模块(包括以太网 MAC),甚至软微处理器(如赛灵思 MicroBlaze 处理器)。设计特点在这个阶段发生了改变,FPGA 在计算密集型应用中发挥重要作用,成为一个系统。
- 系统时代(2008 - 至今):FPGA 整合了系统模块和控制功能,如 Zynq All-Programmable 器件。工具也在不断发展,系统 FPGA 需要高效的系统编程语言,如 OpenCL 和 C 语言编程。
三、FPGA 的基本结构
FPGA 的基本结构由可编程逻辑单元(CLB)、输入输出块(IOB)、块随机访问存储器模块(BRAM)和时钟管理模块(CMM)等组成。
可编程逻辑单元(CLB)
CLB 是 FPGA 中最基本的逻辑单元,由查找表(LUT)和触发器组成,可实现任意逻辑功能。目前主流 FPGA 都采用了基于 SRAM 工艺的查找表结构,查找表本质上就是一个 RAM。当用户通过原理图或 HDL 语言描述了一个逻辑电路以后,FPGA 开发软件会自动计算逻辑电路的所有可能结果,列成一个真值表的形式,并把真值表事先写入 RAM。对于查找表,目前 FPGA 中多使用 4 输入或 6 输入的 LUT,所以每一个 LUT 可以看成一个有 4 位或 6 位地址线的 RAM,可实现与、或、非、异或等逻辑运算。触发器用于存储逻辑电路中的状态信息,如寄存器、计数器等。
输入输出块(IOB)
IOB 用于连接 FPGA 芯片和外部电路,负责了 FPGA 数据信号收录、传输的作业要求。为了便于管理和适应多种电器标准,FPGA 的 IOB 被划分为若干个组(Bank),每个 Bank 的接口标准由其接口电压 VCCO 决定,一个 Bank 只能有一种 VCCO,但不同 Bank 的 VCCO 可以不同。只有相同电气标准和物理特性的端口才能连接在一起,VCCO 电压相同是接口标准的基本条件。FPGA 的 IOB 被设计为可编程模式,可通过软件的灵活配置,适配不同的电气标准与 I/O 物理特性,可以调整匹配阻抗特性、上下拉电阻、以及调整驱动电流的大小等。
块随机访问存储器模块(BRAM)
BRAM 可存储大量数据并支持高速读写,针对数据端口传输的位置、存储结构、元件功能等要素,提供一个最稳定的逻辑存储方式。BRAM 专用集成电路是服务于各个行业控制的应用型电路,可以配置成单端口 RAM、双端口 RAM、内容地址存储器(CAM)以及 FIFO 等常用存储结构。相对于由 LUT 组成的分布式 RAM,BRAM 速度更快,容量更大,使用 BRAM 资源不占用额外的逻辑资源,不过使用的时候消耗的 BRAM 资源只能是其块大小的整数倍,就算只存了 1 bit 也要占用一个 BRAM。
时钟管理模块(CMM)
CMM 用于管理时钟信号,可以提高时钟频率和减少时钟抖动。在赛灵思 7 系列 FPGA 中,时钟管理模块(CMT)包括一个混合模式时钟管理器(MMCM)和一个锁相环(PLL)。MMCM 和 PLL 作为频率合成器,能够灵活地对输入到 FPGA 中的时钟信号进行任意分频、倍频、相位调整和占空比调整,从而输出所需的时钟信号。用于实现复杂的时序控制和时钟同步功能。相较于 PLL,MMCM 在配置上更加灵活,提供了更多功能选项,例如,MMCM 可以用于差分信号的生成,具有更高的适用性和通用性。MMCM 可以接收输入时钟,并根据需求生成一个或多个输出时钟,并支持相位调节和频率合成等功能。PLL 由前置分频计数器(D 计数器)、相位 - 频率检测器(PFD)电路,电荷泵、环路滤波器、压控振荡器(VCO)、反馈乘法器计数器(M 计数器)和后置分频计数器(O1 - O6 计数器)组成。在工作时,PFD 检测其参考频率(FREF)和反馈信号之间的相位差和频率差,控制电荷泵和环路滤波器将相位差转换为控制电压;VCO 根据不同的控制电压产生不同的震荡频率,从而影响 Feedback 信号的相位和频率。在 FREF 和 Feedback 信号具有相同的相位和频率之后,就认为 PLL 处于锁相的状态。
四、FPGA 的工作原理
- 最基本逻辑单元是可编程逻辑单元(CLB),由查找表(LUT)和触发器组成,可实现任意逻辑功能。
FPGA 中的可编程逻辑单元(CLB)是实现各种逻辑功能的基本单元。目前主流 FPGA 都采用基于 SRAM 工艺的查找表结构,查找表本质上就是一个 RAM。当用户通过原理图或 HDL 语言描述一个逻辑电路后,FPGA 开发软件会自动计算逻辑电路的所有可能结果,列成真值表形式,并把真值表事先写入 RAM。对于查找表,目前 FPGA 中多使用 4 输入或 6 输入的 LUT,所以每一个 LUT 可以看成一个有 4 位或 6 位地址线的 RAM,可实现与、或、非、异或等逻辑运算。触发器用于存储逻辑电路中的状态信息,如寄存器、计数器等。
- 逻辑单元通过可编程连线连接,形成数字电路。
FPGA 中的逻辑单元通过可编程连线连接在一起,这些连线构成了数字电路的基础。通过对这些连线进行编程,可以实现不同逻辑单元之间的连接方式,从而构建出各种复杂的数字电路。
- 具有可编程输入输出块,连接外部电路。
FPGA 具有可编程输入输出块(IOB),用于连接 FPGA 芯片和外部电路。为了便于管理和适应多种电器标准,FPGA 的 IOB 被划分为若干个组(Bank),每个 Bank 的接口标准由其接口电压 VCCO 决定,一个 Bank 只能有一种 VCCO,但不同 Bank 的 VCCO 可以不同。只有相同电气标准和物理特性的端口才能连接在一起,VCCO 电压相同是接口标准的基本条件。FPGA 的 IOB 被设计为可编程模式,可通过软件的灵活配置,适配不同的电气标准与 I/O 物理特性,可以调整匹配阻抗特性、上下拉电阻、以及调整驱动电流的大小等。
- 时钟管理模块管理时钟信号,包括分频、延迟、缓冲等功能。
时钟管理模块(CMM)用于管理时钟信号,可以提高时钟频率和减少时钟抖动。在赛灵思 7 系列 FPGA 中,时钟管理模块(CMT)包括一个混合模式时钟管理器(MMCM)和一个锁相环(PLL)。MMCM 和 PLL 作为频率合成器,能够灵活地对输入到 FPGA 中的时钟信号进行任意分频、倍频、相位调整和占空比调整,从而输出所需的时钟信号。用于实现复杂的时序控制和时钟同步功能。相较于 PLL,MMCM 在配置上更加灵活,提供了更多功能选项,例如,MMCM 可以用于差分信号的生成,具有更高的适用性和通用性。MMCM 可以接收输入时钟,并根据需求生成一个或多个输出时钟,并支持相位调节和频率合成等功能。PLL 由前置分频计数器(D 计数器)、相位 - 频率检测器(PFD)电路,电荷泵、环路滤波器、压控振荡器(VCO)、反馈乘法器计数器(M 计数器)和后置分频计数器(O1 - O6 计数器)组成。在工作时,PFD 检测其参考频率(FREF)和反馈信号之间的相位差和频率差,控制电荷泵和环路滤波器将相位差转换为控制电压;VCO 根据不同的控制电压产生不同的震荡频率,从而影响 Feedback 信号的相位和频率。在 FREF 和 Feedback 信号具有相同的相位和频率之后,就认为 PLL 处于锁相的状态。
- 通过将硬件描述语言代码综合、映射到芯片中实现编程和配置,可通过多种方式实现,还支持在线配置。
FPGA 的编程和配置是通过将硬件描述语言(HDL)代码综合、映射到 FPGA 芯片中来实现的。设计者使用 HDL 语言如 Verilog、VHDL 等来描述逻辑电路,并进行时序分析、布局布线等操作,最终生成可加载到 FPGA 芯片中的配置文件。FPGA 的编程和配置可以通过 JTAG 接口、USB 接口、SD 卡等方式实现,还支持在线配置。
五、FPGA 的应用领域
- 通信系统:可实现无线通信中的高速数字信号处理,内部集成适合通信领域的资源。FPGA 在通信领域的应用十分广泛,得益于其内部结构特点,可轻松实现分布式算法结构,对实现无线通信中的高速数字信号处理极为有利。在无线通信系统中,许多功能模块需要大量滤波运算,而这些滤波函数通常需要大量乘和累加操作,通过 FPGA 实现分布式算术结构能有效完成这些操作。Xilinx 公司的 FPGA 内部集成了基带处理、接口和连接功能以及 RF 三大类资源。基带处理资源包括信道编解码和同步算法实现等;接口和连接资源涵盖无线基站对外的高速通信接口及内部背板协议实现;RF 应用资源包括调制 / 解调、上 / 下变频、削峰以及预失真等关键技术的实现。总之,学好 FPGA,在通信领域大有可为。
- 数字信号处理:高速并行处理能力使其在该领域广泛应用,性能远超通用 DSP 处理器。在数字信号处理领域,FPGA 凭借高速并行处理能力所向披靡。其最大优势是并行处理机制,利用并行架构实现数字信号处理功能,特别适合完成 FIR 等数字滤波这样重复性的数字信号处理任务。对于高速并行的数字信号处理任务,FPGA 性能远远超过通用 DSP 处理器的串行执行架构。此外,FPGA 接口的电压和驱动能力都是可编程配置的,不像传统 DSP 受指令集控制,能处理高速信号,在数字信号处理领域应用广泛。
- 视频图像处理:处理数据高效,在图像质量要求提高的背景下受市场欢迎。随着人们对图像质量的追求不断提高,处理芯片需要实时处理的数据量越来越大,图像压缩算法也越来越复杂,单纯使用 ASSP 或 DSP 已无法满足如此大的数据处理量。这时 FPGA 的优势凸显,它可以更加高效地处理数据,在综合考虑成本后,在图像处理领域越来越受到市场欢迎。FPGA 在视频处理方面也有出色表现,可极大提高视频处理的速度和效率,广泛应用于视频编解码、色彩处理等。FPGA 芯片具有强大的逻辑资源和低延迟特性,能提供实时高速的图像处理能力,与目标平台紧密集成,实现高效图像分析和处理。
- 高速接口设计:高速处理能力和多 IO 决定其在该领域的优势。在高速接口设计领域,FPGA 的高速处理能力和多达成百上千个的 IO 使其具有独特优势。例如与 PC 端进行数据交互时,传统做法需要多个接口芯片,会使硬件外设复杂、体积庞大。而使用 FPGA,不同的接口逻辑都可以在内部实现,配合 DDR 存储器使用,能使接口数据处理更加得心应手。
- 人工智能:在人工智能系统前端信息处理上应用广泛,如自动驾驶、智能机器人等。FPGA 在人工智能系统的前端部分应用广泛,例如自动驾驶,需要对各种交通信号进行采集,用到多种传感器,对传感器进行综合驱动和融合处理就可以使用 FPGA。智能机器人需要对图像或声音信号进行处理也可以使用 FPGA。FPGA 在人工智能领域以其灵活性、低延迟和高能效等优势,为 AI 应用提供强大硬件支持,可加速深度学习、优化机器学习算法、进行实时数据处理和边缘计算。
- IC 设计:在 IC 前端验证方面起到重要作用,将 IC 代码移植到 FPGA 进行验证。IC 设计门槛较高,但并非遥不可及。IC 设计是在硅基衬底上搭建特定功能的电路组合,而 PCB 设计是在印制线路板上用元器件搭建电路组合。IC 设计一旦失败损失惨重,所以强调一版成功。保证 IC 一版成功就要进行充分的仿真测试和 FPGA 验证,仿真验证是在服务器上面跑仿真软件进行测试,FPGA 验证主要是把 IC 的代码移植到 FPGA 上面,使用 FPGA 综合工具进行综合、布局布线到最终生成 bit 文件,然后下载到 FPGA 验证板上面进行验证,对于复杂的 IC 还可以拆成几个部分功能分别验证,每个功能模块放在一个 FPGA 上面,FPGA 生成的电路非常接近真实的 IC 芯片。