图 2:每个可编程逻辑块都是多种元件的集合,包括查找表、多路复用器和寄存器,所有这些元件都可以进行配置(编程)以根据需要执行操作。(图片来源:Clive "Max" Maxfield)
许多 FPGA 使用 4 输入 LUT,可配置为实现任何 4 输入逻辑功能。为了更好地支持某些应用采用的宽数据路径,有些 FPGA 提供 6 输入、7 输入甚至 8 输入 LUT。LUT 的输出直接连接到逻辑块输出之一和多路复用器输入之一。多路复用器的另一个输入直接连接到逻辑块输入(e)。多路复用器可以配置为选择其中一个输入。
多路复用器的输出馈入寄存器输入。每个寄存器都可以配置为边沿触发的触发器或电平敏感锁存器(尽管如此,但不建议在 FPGA 内部使用锁存器形式的异步逻辑)。每个寄存器的时钟(或使能信号)可以配置为高电平有效或低电平有效。同样,置位 / 复位输入的有效电平也是可配置的。
这些逻辑块可以被视为漂浮在“可编程互连之海”中的“可编程逻辑之岛”。这种互连可配置为将任何逻辑块的任何输出连接到其他逻辑块的任何输入。同样,FPGA 的主要输入可以连接到任何逻辑块的输入,任何逻辑块的输出都可以用来驱动器件的主要输出。
主要的通用输入 / 输出 (GPIO) 以组形式呈现,每组可配置为支持不同的接口标准,例如 LVCMOS、LVDS、LVTTL、HSTL 或 SSTL。另外,输入的阻抗也是可配置的,输出的压摆率也一样可配置。
FPGA 结构进一步扩展可包括 SRAM 块(称为块 RAM (BRAM))、锁相环 (PLL) 和时钟管理器之类的东西(图 1b)。此外,还可以添加数字信号处理 (DSP) 块(DSP 切片)。它们包含可配置的乘法器和可配置的加法器,能够执行乘法累加 (MAC) 运算(图 1c)。
高速 SERDES 块是 FPGA 的另一个常见特性,能支持千兆位串行接口。必须注意的是,并非所有 FPGA 都支持上述全部特性。不同 FPGA 针对不同的市场和应用提供不同的特性集合。
FPGA 中的可编程结构可用来实现所需的任何逻辑功能或功能集合,一直到处理器内核甚至多个内核。如果这些内核是以可编程结构实现的,则称其为“软内核”。相较之下,有些 FPGA(通常称为 SoC FPGA)包含一个或多个“硬内核”处理器,其直接在硅片中实现(图 1d)。这些硬处理器内核可能包括浮点单元 (FPU) 和 L1/L2 高速缓存。
同样,外设接口功能(如 CAN、I2C、SPI、UART 和 USB)可以实现为可编程结构中的软内核,但许多 FPGA 将其作为硬内核在硅片中实现。处理器内核、接口功能和可编程结构之间的
通信通常利用 AMBA 和 AXI 之类的高速总线实现。
第一批 FPGA 是由 Xilinx 于 1985 年推出上市,仅包含一个 8 x 8 可编程逻辑块阵列(没有 RAM 块、DSP 块等)。相比之下,当今的高端 FPGA 可以包含数十万个逻辑块、数千个 DSP 块和以兆位 (Mb) 计的 RAM。总体而言,它们可能包含数十亿个晶体管,相当于数千万个等效门(例如 2 输入 NAND 门)。
备选配置技术
为了确定逻辑块的功能和互连的布线,需要借助配置单元,后者可以用 0/1(断开 / 接通)开关来形象地表示。这些单元还用于配置 GPIO 接口标准、输入阻抗、输出压摆率等。根据具体 FPGA,这些配置单元可以采用如下三种技术之一来实现:
反熔丝:这些配置单元是一次性可编程 (OTP) 单元,意味着一旦对器件进行了编程,就无法撤回。此类器件往往仅限于太空和高安全性应用。其销量很小,因此价格很高,可谓昂贵的设计选择。
闪存:像基于反熔丝的配置单元一样,基于闪存的单元也是非易失性的。与反熔丝单元不同,闪存单元可以根据需要重新编程。闪存配置单元可以承受辐射,因而这些器件适合于太空应用(不过要对上部金属化层和封装进行修改)。
SRAM:采用这种手段时,配置数据存储在外部存储器中,每次 FPGA 上电时都要从存储器中加载数据(或在动态配置情况下,按照指令要求加载数据)。
对于配置单元基于反熔丝或闪存的 FPGA,优势在于它们是“即时接通”,功耗很小。这些技术的一个缺点是,除了用于创建芯片其余部分的基础 CMOS 工艺之外,他们还需要其他处理步骤。
对于配置单元基于 SRAM 技术的 FPGA,优势在于使用与芯片其余部分相同的 CMOS 工艺制造,并且具有更高的性能,因为它通常比反熔丝和闪存技术领先一代或两代。主要缺点是 SRAM 配置单元比(相同技术节点的)反熔丝和闪存单元更耗电,并且容易因为辐射而发生单粒子翻转 (SEU)。
长期以来,后一个缺点导致基于 SRAM 的 FPGA 被认为不适合用于航空航天应用。最近,业界采用了特殊缓解策略,使得基于 SRAM 的 FPGA 与基于闪存的 FPGA 一同出现在“好奇号”火星漫游车等系统上。
利用 FPGA 提供灵活性
FPGA 适用于多种多样的应用,特别适合用于实现智能接口功能、电机控制、算法加速和高性能计算 (HPC)、图像和视频处理、机器视觉、人工智能 (AI)、机器学习 (ML)、深度学习 (DL)、雷达、波束赋形、基站以及通信。
一个简单的例子是在其他使用不同接口标准或通信协议的器件之间提供智能接口。请考虑一个现有系统,其中有一个应用处理器使用旧式接口连接到相机传感器和显示设备(图 3a)。
图 3:FPGA 可用于在其他使用不同接口标准或通信协议的器件之间提供智能接口,从而延长基于旧式器件的现有设计的寿命。(图片来源:Clive "Max" Maxfield)
现在,假设系统的创建者希望将相机传感器和显示设备升级为更轻、更便宜、功耗更低的现代产品。唯一的问题是,两个新外设或其中之一可能使用现代接口标准,而原应用处理器 (AP) 却无法提供支持。或者,它们可能支持完全不同的通信协议,例如移动行业处理器接口(MIPI)。在这种情况下,采用支持多种 I/O 标准的 FPGA,再加之以某些软 MIPI IP 内核,将能提供一条快速、低成本、无风险的升级路径(图 3b)。
再举一个应用例子,考虑一些计算密集型任务,例如执行雷达系统所需的信号处理或通信基站中的波束赋形。采用冯诺依曼或哈佛架构的常规处理器非常适合某些任务,但不适合于需要重复执行相同操作序列的任务。这是因为运行单个线程的单个处理器内核一次只能执行一条指令(图 4a)。
图 4:微处理器一次只能(顺序地)执行一条指令,与此不同的是,FPGA 中的多个功能块可以同时(并发地)执行。另外,FPGA 能以大规模并行方式实现适当的算法。(图片来源:Clive "Max" Maxfield)
相比之下,FPGA 中可以同时执行多个功能,支持以流水线方式完成一系列操作,进而实现更大的吞吐量。同样,FPGA 不像处理器那样执行相同的操作,例如对 1,000 对数据值再执行 1,000 次运算,而是在可编程结构中实例化 1,000 个加法器,从而在单个时钟周期中以大规模并行方式执行相同的计算(图 4b)。
哪些厂商制造 FPGA?
这是一幅不断演变的画卷。具备最高容量和性能的高端器件有两家主要制造商,分别是 Intel(其收购了 Altera)和 Xilinx。
Intel 和 Xilinx 提供从低端 FPGA 到高端 SoCFPGA 的各种产品。另一家几乎完全专注于 FPGA 的供应商是 Lat
tice Semiconductor,其针对的是中低端应用。最后但并非最不重要的一家是 Microchip Technology(通过收购 Actel、Atmel 和 Microsemi),现在可提供多个系列的中小型 FPGA 和低端 SoC FPGA 类产品。
由于产品系列众多,每个系列提供不同的资源、性能、容量和封装样式,因此为眼前的任务选择最佳器件可能很棘手。
下面是一些例子:Intel 器件;Lattice Semiconductor 器件;以及 Xilinx 器件。
如何使用 FPGA 进行设计?
传统的 FPGA 设计方法是工程师使用 Verilog 或 VHDL 之类的硬件描述语言来捕获设计意图。首先可以对这些描述进行
仿真,以验证其是否符合要求,然后将其传送给综合工具,生成用于配置(编程)FPGA 的配置文件。
每家 FPGA 供应商要么有自己内部开发的工具链,要么提供专业供应商定制的工具版本。无论哪种情况,都可以从 FPGA 供应商网站获得这些工具。另外,成熟工具套件可能有免费或低成本的版本。
为使 FPGA 更易于为软件开发人员所用,一些 FPGA 供应商现在提供高级综合 (HLS) 工具。这些工具会解析在 C、C++或 OpenCL 中以高级抽象所捕获的期望行为的算法描述,并生成输入以提供给较低级的综合引擎。
对于希望入门的设计人员,有许多开发和评估板可用,每种板提供不同的功能和特性。这里给出三个例子:DFRobot 的 DFR0600 开发套件,其具有 Xilinx 的 Zynq-7000 SoC FPGA;Terasic Inc. 的 DE10 Nano,其具有 Intel 的 Cyclone V SoC FPGA;ICE40HX1K-STICK-EVN 评估板,其具有 Lattice Semiconductor 的低功耗 iCE40 FPGA。
若设计人员计划使用基于 FPGA 的 PCIe 子卡来加速 X86 主板上运行的应用程序,可以关注 Alveo PCIe 子卡等产品,也是由 Xilinx 提供。
总结
最佳设计解决方案常常由 FPGA、处理器与 FPGA 的组合或以硬处理器内核作为部分结构的 FPGA 提供。
FPGA 多年来发展迅速,能够满足灵活性、处理速度、功耗等多方面的设计需求,适合于广泛的应用。