field-programmable gate array (FPGA),中文全称:现场可编程门阵列( 简称:FPGA ) ,是一种集成电路,设计用于在制造后由客户或设计人员进行配置——因此称为现场可编程。FPGA 配置通常使用硬件描述语言(HDL) 指定,类似于用于专用集成电路(ASIC)的语言。电路图以前用于指定配置,但由于电子设计自动化工具的出现,这种情况越来越少见。 FPGA 包含一组可编程 逻辑块,以及允许块连接在一起的可重新配置互连的层次结构。逻辑块可以配置为执行复杂的组合功能,或充当简单的逻辑门,如AND和XOR。在大多数 FPGA 中,逻辑块还包括存储器元件,它们可能是简单的触发器或更完整的存储器块。许多 FPGA 可以重新编程以实现不同的逻辑功能,允许在计算机软件中执行灵活的可重构计算。 FPGA在嵌入式系统开发中具有显着的作用,因为它们能够同时启动系统软件 (SW) 和硬件 (HW) 开发,在开发的早期阶段就能够进行系统性能仿真,并允许各种系统分区(软件和硬件) )在最终冻结系统架构之前的试验和迭代。 应用 FPGA 可用于解决任何可计算的问题。FPGA 可用于实现诸如 Xilinx MicroBlaze或 Altera Nios II之类的软微处理器这一事实已经证明了这一点。它们的优势在于它们对于某些应用程序的速度要快得多,因为它们的并行特性和在某些过程中使用的门数方面的最优性。 FPGA 最初是作为CPLD的竞争对手,用于为印刷电路板实现胶合逻辑。随着其尺寸、功能和速度的增加,FPGA 接管了额外的功能,以至于一些现在作为完整的片上系统(SoC) 销售。特别是随着1990年代后期在 FPGA 架构中引入专用乘法器,传统上仅作为数字信号处理器硬件(DSP)的唯一储备的应用开始采用 FPGA 代替。 FPGA的发展推动了这些设备的使用增加,其架构允许开发针对复杂任务优化的硬件解决方案,例如 3D MRI 图像分割、3D 离散小波变换、断层图像重建或 PET/MRI 系统。 开发的解决方案可以通过并行处理执行密集的计算任务,可动态重新编程,并且成本低,同时满足与医学成像相关的硬实时要求。 使用 FPGA的另一个趋势是硬件加速,人们可以使用 FPGA 来加速算法的某些部分,并在 FPGA 和通用处理器之间共享部分计算。搜索引擎Bing在2014年因其搜索算法采用 FPGA 加速而闻名。截至2018年,FPGA 越来越多地用作AI 加速器,包括微软所谓的“Project Catapult” ,并用于加速人工神经网络用于机器学习应用。 传统上,FPGA 已被保留用于产量较小的特定垂直应用。对于这些小批量应用,公司为可编程芯片的单位硬件成本支付的溢价比用于创建 ASIC的开发资源更实惠。截至2017年,新的成本和性能动态扩大了可行应用的范围。 Gigabyte Technology公司创建了一个 i-RAM 卡,它使用 Xilinx FPGA,但如果大量制造定制芯片会更便宜。选择 FPGA 是为了将其快速推向市场,最初的运行量仅为1000个,这使得 FPGA 成为最佳选择。该设备允许人们将计算机 RAM 用作硬盘驱动器。 主要制造商 2016年,长期的行业竞争对手赛灵思(现为AMD的一部分)和Altera(现为英特尔的子公司)是 FPGA 市场的领导者。当时,他们控制了近90%的市场。Xilinx(现为 AMD)和Altera(现为 Intel)都为Windows和Linux(ISE / Vivado和Quartus )提供专有的 电子设计自动化软件,使工程师能够设计、分析、仿真和综合(编译)他们的设计。 其他制造商包括: 微芯片: Microsemi(前身为Actel),生产反熔丝、基于闪存的混合信号FPGA;2018年被Microchip收购 Atmel,一些 Altera 兼容器件的第二个来源;还有上面提到的 FPSLIC ;2016年被 Microchip 收购 Lattice Semiconductor,生产基于 SRAM的低功耗FPGA,具有集成配置闪存、即时启动和实时重配置功能 SiliconBlue Technologies,它提供基于 SRAM的极低功耗 FPGA,并带有可选的集成非易失性配置存储器;2011年被莱迪思收购 QuickLogic, 制造超低功耗传感器集线器、极低功耗、低密度基于 SRAM的 FPGA,具有显示桥 MIPI 和RGB 输入、MIPI、RGB 和LVDS 输出 Achronix,以1.5 GHz 结构速度制造基于 SRAM的 FPGA 2010年3月,Tabula宣布了他们的 FPGA 技术,该技术使用时分复用逻辑和互连,声称可以为高密度应用节省成本。2015年3月24日,Tabula正式关闭。 2015年6月1日,英特尔宣布将以约167亿美元收购 Altera,并于2015年12月30日完成收购。 2020年10月27日,AMD 宣布将收购 Xilinx。 设计 当代 FPGA 拥有大量的逻辑门和RAM 块资源来实现复杂的数字计算。由于 FPGA 设计采用非常快的 I/O 速率和双向数据总线,因此在设置时间和保持时间内验证有效数据的正确时序成为一项挑战。 平面规划使 FPGA 内的资源分配能够满足这些时间限制。FPGA 可用于实现ASIC可以执行的任何逻辑功能。发货后更新功能的能力、部分设计的部分重新配置以及相对于 ASIC 设计较低的非经常性工程成本(尽管通常较高的单位成本),为许多应用提供了优势。 除了数字功能外,一些 FPGA 还具有模拟功能。最常见的模拟功能是每个输出引脚上的可编程压摆率,允许工程师在轻负载引脚上设置低速率,否则会振铃或耦合不可接受,并在高速通道上的重负载引脚上设置更高速率否则运行太慢。 石英晶体振荡器、片上电阻电容振荡器和带有嵌入式压控振荡器的锁相环也很常见用于时钟生成和管理以及高速串行器-解串器 (SERDES) 发送时钟和接收器时钟恢复。 相当常见的是设计用于连接到差分信号通道的输入引脚上的差分比较器。一些“混合信号FPGA”已将外围模数转换器(ADC) 和数模转换器(DAC) 与模拟信号调理模块集成在一起,使其能够作为片上系统(SoC)运行. 此类设备模糊了 FPGA之间的界限,FPGA在其内部可编程互连结构上承载数字1 和0,与现场可编程模拟阵列(FPAA),在其内部可编程互连结构上承载模拟值。 逻辑块 最常见的 FPGA 架构由一组逻辑块(称为可配置逻辑块、CLB 或逻辑阵列块、LAB,取决于供应商)、I/O 焊盘和布线通道组成。通常,所有布线通道具有相同的宽度(线数)。多个 I/O 焊盘可能适合阵列中一行的高度或一列的宽度。 “应用电路必须映射到具有足够资源的 FPGA。虽然所需的 CLB/LAB 和I/O的数量很容易从设计中确定,但即使在具有相同数量的设计之间,所需的布线轨道数量也可能有很大差异。(例如,交叉开关比具有相同门数的脉动阵列需要更多的布线。 由于未使用的布线轨道增加了部件的成本(并降低了性能)而没有任何好处,FPGA 制造商试图只提供足够多的轨道,以便可以路由适合查找表(LUT) 和I/O的大多数设计。这是由诸如从Rent 规则得出的估计确定的或通过对现有设计进行实验。” 截至2018年,正在开发用于路由和互连的片上网络架构。 通常,一个逻辑块由几个逻辑单元(称为 ALM、LE、切片等)组成。一个典型的单元由一个4输入 LUT、一个全加器(FA) 和一个D 型触发器组成。这些可能被分成两个 3 输入 LUT。在正常模式下,它们通过第一个多路复用器(mux) 组合成一个4输入 LUT。在算术模式下,它们的输出被馈送到加法器。模式选择被编程到第二个多路复用器中。输出可以是同步的或异步的,取决于第三个多路复用器的编程。在实践中,加法器的全部或部分作为函数存储到 LUT 中以节省空间. 硬块 现代 FPGA 系列扩展了上述功能,包括固定在硅片中的更高级别的功能。与从逻辑原语构建它们相比,将这些通用功能嵌入到电路中可以减少所需的面积并提高这些功能的速度。这些例子包括乘法器、通用DSP 模块、嵌入式处理器、高速 I/O 逻辑和嵌入式存储器。 更高端的 FPGA 可以包含高速数千兆位收发器和硬 IP 核,例如处理器核、以太网 介质访问控制单元、PCI / PCI Express控制器和外部存储器控制器。这些内核与可编程结构一起存在,但它们是由晶体管而不是 LUT 构建的,因此它们具有 ASIC 级别的性能和功耗在不消耗大量结构资源的情况下,为特定于应用程序的逻辑留出更多结构。多千兆位收发器还包含高性能模拟输入和输出电路以及高速串行器和解串器,这些组件不能用 LUT 构建。更高级别的物理层 (PHY) 功能(例如线路编码)可能会或可能不会与硬逻辑中的串行器和解串器一起实现,具体取决于 FPGA。 软核 使用硬宏处理器的另一种方法是利用在 FPGA 逻辑中实现的软处理器 IP 内核。Nios II、MicroBlaze和Mico32是流行的软核处理器的例子。许多现代 FPGA 是在“运行时”进行编程的,这导致了可重构计算或可重构系统的想法——CPU可以重新配置自身以适应手头的任务。此外,新的非 FPGA 架构开始出现。诸如 Stretch S5000等软件可配置微处理器采用混合方法,在同一芯片上提供一系列处理器内核和类似 FPGA的可编程内核。 整合 2012年,粗粒度架构方法更进一步,将传统FPGA的逻辑块和互连与嵌入式微处理器及相关外设相结合,形成完整的“可编程芯片上的系统”。这项工作反映了 Burroughs Advanced Systems Group的 Ron Perloff 和Hanan Potash在1982年创建的架构,该架构将可重新配置的CPU 架构组合在一个称为 SB24的单芯片上。这种混合技术的示例可以在Xilinx Zynq-7000all Programmable SoC中找到,其中包括一个1.0 GHz双核ARM Cortex-A9MPCore 处理器嵌入在 FPGA的逻辑结构或Altera Arria V FPGA 中,其中包括一个800MHz双核 ARM Cortex-A9MPCore。 Atmel FPSLIC 是另一种此类设备,它使用AVR处理器与 Atmel的可编程逻辑架构相结合。Microsemi SmartFusion设备包含一个 ARM Cortex-M3 硬核处理器内核(具有高达512kB的闪存和64kB的 RAM)和模拟外设,例如多通道模数转换器和数模转换器到他们基于闪存的 FPGA 架构。 计时 FPGA 内部的大部分电路都是需要时钟信号的同步电路。FPGA 包含用于时钟和复位的专用全局和区域路由网络,因此它们可以以最小的偏差交付。此外,FPGA 通常包含模拟锁相环和/或延迟锁定环组件,以合成新的时钟频率以及衰减抖动。复杂的设计可以使用具有不同频率和相位关系的多个时钟,每个时钟形成单独的时钟域. 这些时钟信号可以由振荡器在本地生成,也可以从高速串行数据流中恢复。构建时钟域交叉电路时必须小心避免亚稳态。FPGA 通常包含能够用作具有不同时钟的双港口 RAM的 RAM 块,有助于构建连接不同时钟域的FIFO和双港口缓冲器。 3D 架构 为了缩小 FPGA的尺寸和功耗,Tabula和Xilinx等供应商推出了3D 或堆叠架构。 在推出28nm7系列 FPGA之后,赛灵思表示,这些 FPGA 产品线中的几个最高密度部件将在一个封装中使用多个裸片构建,采用为 3D 构建和堆叠芯片组件。 Xilinx的方法将几个(三个或四个)有源 FPGA 裸片并排堆叠在一个硅中介层上 ——一块承载无源互连的硅片。 多芯片结构还允许使用不同的工艺技术创建 FPGA的不同部分,因为 FPGA 结构本身和超高速28Gbit/s 串行收发器之间的工艺要求不同。以这种方式构建的 FPGA 称为异构FPGA。 Altera的异构方法包括使用单个单片 FPGA 芯片并使用英特尔的嵌入式多芯片互连桥 (EMIB) 技术将其他芯片/技术连接到 FPGA。 编程 为了定义 FPGA的行为,用户提供硬件描述语言(HDL) 或原理图设计的设计。HDL 形式更适合处理大型结构,因为它可以指定高级功能行为,而不是手动绘制每个部分。但是,原理图输入可以更轻松地可视化设计及其组件模块。 使用电子设计自动化工具,生成技术映射网表。然后可以使用称为布局布线的过程使网表适合实际的 FPGA 架构,该过程通常由 FPGA 公司的专有布局布线软件执行。用户将通过时序分析、仿真和其他验证和确认方法来验证地图、布局和布线结果。设计和验证过程完成后,通常使用 FPGA 供应商的专有软件生成的二进制文件用于(重新)配置 FPGA。该文件通过串行接口(JTAG )传输到 FPGA/CPLD) 或EEPROM等外部存储设备。 最常见的 HDL 是VHDL和Verilog以及诸如SystemVerilog之类的扩展。然而,为了降低在 HDL 中设计的复杂性,已经将其与汇编语言进行比较,有一些举措[由谁?]通过引入替代语言来提高抽象级别。National Instruments的LabVIEW图形化编程语言(有时称为“G”)有一个 FPGA 插件模块,可用于定位和编程 FPGA 硬件。Verilog旨在简化流程,使 HDL 更加健壮和灵活。Verilog 目前是最流行的。Verilog 创建了一个抽象级别来隐藏其实现的细节。与 VHDL 不同,Verilog 具有类似 C的语法。 为了简化 FPGA 中复杂系统的设计,存在经过测试和优化的预定义复杂功能和电路库,以加快设计过程。这些预定义电路通常称为知识产权 (IP) 内核,可从 FPGA 供应商和第三方 IP 供应商处获得。它们很少是免费的,通常是在专有许可下发布的。其他预定义电路可从开发人员社区获得,例如OpenCores(通常在免费和开源许可下发布,例如GPL、BSD或类似许可)和其他来源。这种设计被称为“开源硬件”。 在典型的设计流程中,FPGA 应用程序开发人员将在整个设计过程的多个阶段对设计进行仿真。最初,通过创建测试平台来模拟VHDL或Verilog中的RTL描述,以模拟系统并观察结果。然后,在综合引擎将设计映射到网表后,网表被转换为门级描述,在此重复仿真以确认综合过程没有错误。最后,设计在 FPGA 中进行布局,此时可以添加传播延迟,然后再次运行仿真,并使用这些值进行反向注释到网表上。 最近,程序员正在使用OpenCL(开放计算语言)来利用 FPGA 提供的性能和功率效率。OpenCL 允许程序员使用 C 编程语言开发代码,并使用 OpenCL 结构将 FPGA 功能作为 OpenCL 内核。有关详细信息,请参阅高级综合和C 到 HDL。 |