FPGA基础:架构、应用和用途
现场可编程门阵列 (FPGA) 是一种集成电路,由带有用户可编程互连的内部硬件模块组成,可以根据特定应用程序定制操作。
什么是FPGA?
现场可编程门阵列 (FPGA) 是一种集成电路,由内部硬件模块和用户可编程互连组成,能够针对特定应用定制操作功能。这些互连可以随时重新编程,使FPGA在器件生命周期内支持设计更改,甚至支持新的应用。
FPGA 的起源可追溯到更早期的设备,如可编程只读存储器 (PROM) 和可编程逻辑器件 (PLD)。这些设备可以在工厂或现场进行编程,但它们使用熔丝技术(因此有“烧制 PROM”一说),一旦编程后就无法更改。相比之下,FPGA 将其配置信息存储在可重编程介质中,如静态 RAM (SRAM) 或闪存。FPGA 制造商包括 Intel、 Lattice Semiconductor、 Microchip Technology 和 Microsemi。
FPGA 架构
基础FPGA架构 (图1) 包括数千个称为可配置逻辑块 (CLB) 的基本单元,它们被一个称为结构的可编程互连系统包围,该系统对CLB之间的信号进行路由。输入/输出 (I/O) 块负责FPGA与外部设备之间的接口。
根据制造商的不同,CLB 也可能被称为逻辑块 (LB)、逻辑元件 (LE) 或逻辑单元 (LC)。
基本的FPGA架构(图片来源:National Instruments)
图1
单个CLB(图2)由多个逻辑块组成。查找表(LUT)是FPGA的特性之一。LUT存储了针对任何输入组合的预定义逻辑输出列表:具有四到六个输入位的LUT被广泛使用。标准逻辑功能,例如多路复用器(mux)、全加器(FAs)和触发器,也很常见。
简化的CLB:四输入LUT由两个三输入单元组成。(图片来源:Wikipedia)
图 2
CLB中的组件数量和排列因设备而异;图2中的简化示例包含两个三输入LUT (1)、一个FA (3) 和一个D型触发器 (5),以及一个标准多路复用器 (2) 和两个多路复用器 (4) 和 (6),它们在FPGA编程期间被配置。
此简化的 CLB 具有两种操作模式。在正常模式下,LUT 与 Mux 2 结合形成一个四输入的 LUT;在算术模式下,LUT 的输出会与另一个 CLB 的进位输入一起作为输入传递到 FA。Mux 4 在 FA 输出或 LUT 输出之间进行选择。Mux 6 通过 D 触发器决定操作是异步的还是与 FPGA 时钟同步的。
当前一代的 FPGA 包括能够通过单个模块执行多种操作的更复杂的 CLB;CLB 可以组合进行更复杂的操作,例如乘法器、寄存器、计数器,甚至是数字信号处理 (DSP) 功能。
CPLD与FPGA的比较
最初,FPGA 仅包括图 1 中的模块,除此之外几乎没有其他功能,但现在设计人员可以选择具有多种功能的产品。较低复杂度的设备(如简单可编程逻辑器件(SPLD)和复杂可编程逻辑器件(CPLD))填补了离散逻辑器件与入门级 FPGA 之间的空白。
入门级FPGA注重低功耗、低逻辑密度和每芯片低复杂性。功能更高的设备增加了专用于特定功能的功能块:例如时钟管理组件、锁相环 (PLLs)、高速串行器和解串器、以太网MAC、PCI Express控制器和高速收发器。这些功能块可以通过CLB实现(称为软IP),或者设计为独立的电路,即硬IP。硬IP块在性能方面有所提升,但牺牲了可重配置性。
在高端领域,FPGA 产品系列包括将 FPGA 架构、硬件 IP 和微处理器 CPU 内核集成到一个单一组件中的复杂片上系统 (SoC) 部件。与单独的设备相比,SoC FPGA 提供了更高的集成度、更低的功耗、更小的板尺寸以及核心与其他模块之间更高带宽的通信。
SoC FPGA
SoC FPGA 包含广泛的处理能力以适应不同的应用。例如,低成本、低功耗的 SoC FPGA(如英特尔的 Cyclone V)针对高产量应用,例如工业电机控制驱动器、协议桥接、视频处理卡和手持设备。该器件(图 3)有两部分:FPGA 部分和基于单核或双核 32 位 Arm Cortex-A9 MPCORE、运行频率为 925 MHz 的硬处理器系统 (HPS)。每部分都包含其各自的一组外设,其中包括第三方供应商的硬 IP。
Cyclone V SoC 内部框图(图片来源:Cornell University)
Figure 3
在规模的另一端,Stratix 10 SX 针对通信、数据中心加速、高性能计算(HPC)、雷达处理和 ASIC 原型设计等高性能应用;该 FPGA 包含一个运行频率高达 1.5 GHz 的四核 64 位 Arm Cortex-A53。
FPGA设计
我们如何将数千个硬件模块的集合转换成正确的配置来执行应用程序?基于FPGA的设计首先需要在开发工具中定义所需的计算任务,然后将其编译成一个配置文件,该文件包含如何连接CLB和其他模块的信息。这个过程类似于软件开发周期,只是目标是设计硬件本身,而不是在预定义的硬件平台上运行的一组指令。
设计人员传统上使用硬件描述语言 (HDL),例如 VHDL (图 4) 或 Verilog 来设计 FPGA 配置。
用于带符号加法器的示例 VHDL 代码(图片来源:Wikipedia)
图 4
一旦使用HDL创建并验证了FPGA设计,编译器将把基于文本的文件转化为配置文件,其中包含有关组件应如何连接的信息。即使HDL代码没有错误,选择错误的FPGA仍可能导致编译失败——例如,FPGA的某种特定资源用尽,或者编译器无法创建组件之间所需的路径。
采用HDL方法的一个挑战是,配置FPGA既需要编程技能,也需要对底层硬件的详细了解,而所需的专业知识并不普遍可得。
因此,供应商提供了软件开发工具包(SDK),使设计人员可以使用 C/C++、Python 和 OpenCL 等流行的高级语言来开发 FPGA 解决方案。还提供了高级综合(HLS)设计工具;这些工具运行在诸如 National Instrument 的 LabVIEW 之类的框架上,并以图形块图而非代码行的形式呈现。
FPGA 的用途:某些应用的理想选择
能够配置FPGA的硬件、在需要时重新配置,并针对特定功能集进行优化,这使得FPGA在众多应用中成为一种有吸引力的选项。
FPGA 通常用于在开发 ASIC 成本过高或耗时过长的情况下提供定制化解决方案。FPGA 应用可以在数小时或数天内配置完成,而不是几个月。当然,FPGA 的灵活性是有代价的:与等效的 ASIC 相比,FPGA 可能速度较慢,需求更多的 PCB 面积,并消耗更多功率。
即使 ASIC 将被设计用于高产量生产,FPGA 也广泛用于系统验证,包括硅前验证、硅后验证和固件开发。这使得制造商可以在芯片工厂生产之前验证其设计。
FPGA 应用
许多应用依赖于相同操作的并行执行;能够将FPGA的CLB配置为数百或数千个相同的处理块,可应用于图像处理、人工智能(AI)、数据中心硬件加速器、企业网络和汽车高级驾驶辅助系统(ADAS)。
随着需求的变化以及新协议和标准的采用,这些应用领域中的许多正在迅速变化。FPGA使制造商能够实施可在必要时更新的系统。
FPGA 使用的一个很好的例子是高速搜索:Microsoft 在其数据中心使用 FPGA 来运行 Bing 搜索算法。FPGA 可以进行更改以支持新创建的算法。如果需求发生变化,设计可以重新配置以运行 HPC 应用程序中的仿真或建模程序。这种灵活性是使用 ASIC 难以或无法实现的。
其他FPGA的用途包括航空航天与国防、医疗电子、数字电视、消费电子、工业电机控制、科学仪器、网络安全系统和无线通信。
FPGA 历史:接下来是什么?
随着这些新兴应用的出现,FPGA市场正以健康的速度增长:根据行业研究公司MarketsandMarkets的数据,其2016年的市场价值为53.4亿美元,预计到2023年将增长到95亿美元。这意味着复合年增长率(CAGR)为8.5%,而相比之下,更大的通用微处理器市场(价值740亿美元)的复合年增长率约为2%。
数据的指数增长,以及AI、机器学习、高性能计算(HPC)和基因组学等快速变化领域的出现,需要快速、灵活和适应性强的架构。FPGA在利用这些新机遇方面具有良好的优势。
文章标签