现场可编程门阵列 (FPGA) 是一种多用途的集成电路,与应用程序专用的集成电路 (ASIC) 等传统逻辑器件不同,它被设计为可编程(通常可重新编程)以适应不同的用途,尤其是高性能计算 (HPC) 和原型设计。
词语“现场可编程”是指 FPGA 能够在“现场”或在制造商发布芯片后进行编程。科技制造商 Xilinx 于 1985 年首次推出 FPGA。
FPGA 可以适应多种用例,包括新兴或实验目的,且无需对其硬件进行物理修改或更改。这种可重新配置的多功能性是通过一系列固定可编程逻辑块 (PLB) 和灵活的互连实现的,即可配置为执行复杂操作,也可充当简单的逻辑门。FPGA 还包括从单位触发器到密集型存储器阵列的存储器元件,用于设备内的数字数据存储。
FPGA 因其兼具高性能和出色的多功能性而受到高度重视。它们尤其适用于需要高性能、低延迟和实时灵活性的应用。因此,FPGA 通常用于电信、汽车和航空航天行业。
FPGA 和 ASIC 有不同的用途。
ASIC 是针对特定应用程序开发和优化的,无法重新配置。其内部电路元件(晶体管)按固定结构排列,其间的互连(布线)固定且不可改变。
由于 ASIC 仅用于一个用途,因此它仅包含该用途所需的逻辑元件;例如,如果不需要浮点乘法器,就不会将其纳入设计中。
相反,FPGA 可以针对任何潜在的应用程序进行配置和重新配置。与 ASIC 一样,其内部电路元件以固定结构排列(可编程逻辑块 (PLB)),但两者之间具有可重新配置的互连。FPGA 中的逻辑元件被选择用于支持各种各样的应用程序,但是当不使用特定的逻辑元件时,就会面临“用或丢”的抉择。如果特定应用程序不需要浮点乘法器,但 FPGA 中包含一个浮点乘法器,那么该资源就是未连接的,是 FPGA 中的“浪费空间”。
这两种设备都可以包含数以亿计的晶体管,ASIC 可以利用这些晶体管来提供高效率和高性能,但牺牲了灵活性。开发 ASIC 的前期 NRE 费用可能非常高昂,而单位成本可能相对较低。
FPGA 使用其晶体管来提供高效率和高性能,同时具有极大的灵活性。开发 FPGA 的前期 NRE 费用可能极低,而单位成本通常较高。值得注意的是,这些并不是硬性规定。例如,在性能领域,最新的 FPGA 已发展到能够提供超过 500 MHz 的时钟频率,并且通常采用最先进的硅工艺几何结构制造。简而言之,随着每一代新的 FPGA 问世,FPGA 和 ASIC 之间的界限变得越来越模糊。
FPGA 使用 Verilog 或 VHDL 等标准硬件描述语言 (HDL) 配置其 PLB 和互连器件,从而成为定制的硬件设备。
特定的基于 FPGA 的功能以及这些功能之间的互连都在 HDL 中“描述”。该描述被编译以生成 FPGA 配置文件。借助硬件描述语言,可以使用内置 FPGA 资源(内存阵列、PCI 核心等等),也可以从更原始的 FPGA 元件创建自定义逻辑电路(加法器、多路复用器和其他应用程序专用功能)。
在一个被称为综合的过程中,HDL 代码被转换成网表,这是对实现 HDL 代码所需的逻辑门和互连的有效描述。随后,网表被映射到物理上构成独特电路的 PLB 和互连上。
Intel 和 Altera 等制造商生产的现代 FPGA 提供了广泛的数字和模拟功能,包括令人印象深刻的逻辑密度、闪存、嵌入式处理器和数字信号处理 (DSP) 块。FPGA 可以通过修改电气输入和输出、选择使用的内部资源以及确定这些资源如何通过可配置的路由资源连接来配置和重新配置 — 最终可得到为了解决特定问题而专门定制的硬件解决方案。
与软件开发类似,通过使用预先设计好的各种功能和数字电路库,即所谓的知识产权 (IP) 核,可以简化复杂 FPGA 设计的开发过程。这些库可从 FPGA 供应商和第三方供应商处购买或租赁,他们通常专门开发各种功能。
除了微控制器和转换器等传统电路元件外,为了实现可重新配置的功能,现代 FPGA 设备还结合使用了各种可编程元件。
这些可编程元件主要包括可配置逻辑块 (CLB)、可编程互连、可编程路由、可编程输入/输出块 (IOB)、片上存储器和数字信号处理块 (DSP)。
可配置逻辑块 (CLB) 是 FPGA 的主要组件。CLB 通常包含一些基本逻辑元件(逻辑门、小型查找表、触发器、多路复用器等)。在 CLB 中,触发器通常用作主要数据存储元件,尽管较新的器件系列也可能在 CLB 中加入浅存储元件。
由可编程开关连接的线段构成的连线为 FPGA 逻辑块之间提供了路由路径。包含多个基本半导体开关的开关盒通常用于建立 FPGA 的可编程互连。通过这些互连装置,特定单元或输入焊盘的输出可以连接到电路中的任何其他单元或焊盘。
预制的导线段通过可编程互连连接在一起(或不连接),从而在 FPGA 内提供完全可编程的路由基础设施。路由资源具有层次结构,由长、中、短导线组成,可跨越 FPGA 内部的各种“长度”。借助这种由可编程互连实现的可编程路由基础设施,用户可以配置 FPGA 资源来实施特定的任务或应用程序。
FPGA 与其他外部设备之间的接口通过输入/输出 (I/O) 块 (IOB) 实现。IOB 是可编程的输入和输出资源,其配置与 FPGA 所连接的任何外部设备的协议相匹配。所有进出 FPGA 的信号都是通过设备引脚和相关 IOB 进行的。
最早的 FPGA 仅使用触发器 (FF) 将存储器集成到 FPGA 逻辑块中。然而,随着 FPGA 功能的增加,越来越复杂的设计需要专用的芯片上存储器来进行数据缓冲和重复使用。现代 FPGA 使用大型 SRAM 存储器阵列、较小的查找表 (LUT) 和传统触发器元件,为特定应用程序提供必要的存储。
在早期的 FPGA 中,唯一可用的算术资源是简单的加法器;任何更复杂的资源均从较原始的逻辑元素构造而成。然而,随着硅技术的进步,FPGA 中整合了更复杂的算术资源,最终形成了现代 FPGA DSP 块。DSP 块为实现高性能算术函数提供了高度优化的资源(乘法器、累加器等)。
使用它们,就无需在通用 CLB 中实现这些功能,从而将 CLB 释放出来用于其他用途。 数字滤波、卷积、傅立叶变换、三角函数运算等操作可以利用这些资源,在雷达处理、波束成形、模式识别等应用程序中获得实时性能。
FPGA 有多种不同的变体,可提供各种类型的可配置性、功耗、可编程元件和片上存储器。
FPGA 本质上用途广泛,非常适合许多不同的应用程序。
FPGA 因其高速、并行处理能力而常用于信号处理和数据采集领域。
高速信号处理算法使 FPGA 非常适合执行无人机(如无人驾驶飞机)中使用的飞行控制、传感器处理和通信任务。
用于监控电网、炼油厂和水处理厂等基础设施的工业控制系统使用的 FPGA 可以很容易地进行优化,以满足不同行业的独特需求。在这些重要行业中,FPGA 可用于实现各种自动化和基于硬件的加密功能,从而实现高效的网络安全。
虽然 FPGA 对于需要灵活性的任务来说是非常有用的解决方案,但任务特定的 ASIC 通常更适合标准化操作。随着新系统的开发,FPGA 对于面向新兴技术的新 ASIC 的开发和原型设计非常有价值。
FPGA 可促进高带宽、低延迟服务器、网络和存储基础设施的发展,从而为数据中心增添价值。