FPGA 基础知识:什么是FPGA? – wiki基地


深入理解FPGA基础知识:什么是FPGA?

在数字时代飞速发展的今天,各种高性能计算芯片层出不穷,从我们熟悉的CPU(中央处理器)到GPU(图形处理器),再到为特定任务而生的ASIC(专用集成电路)。然而,在这些主流芯片之外,还有一种同样重要且应用广泛的集成电路,它以其独特的灵活性和并行计算能力,在许多关键领域扮演着不可或缺的角色——它就是FPGA。

FPGA,全称为 Field-Programmable Gate Array,中文译作 现场可编程门阵列。仅仅从这个拗口的名称,可能还难以理解它的真正含义。本文将深入浅出地剖析FPGA的基础概念、内部结构、工作原理、优劣势以及应用领域,帮助读者全面理解“什么是FPGA”。

第一章:认识FPGA——定义与核心概念

要理解FPGA,我们需要分解它的全称:

  1. Field-Programmable(现场可编程): 这是FPGA最核心的特点。与传统的ASIC不同,ASIC在制造出厂后,其内部的电路功能就已经被“固化”了,无法更改。而FPGA则可以在用户现场(”Field”)进行编程和配置。这意味着用户可以通过下载一个配置文件(称为“比特流”,Bitstream),来改变芯片内部逻辑门的连接方式和功能,从而实现不同的数字电路功能。这种可编程性使得同一块FPGA芯片可以被反复配置,执行不同的任务,极大地提高了灵活性。

  2. Gate Array(门阵列): 这是FPGA早期结构的一种描述。它指的是芯片内部像矩阵一样排列着大量的基本逻辑单元(如逻辑门)。虽然现代FPGA的内部结构远比简单的门阵列复杂,包含各种更高级的硬核资源,但“门阵列”这个词保留下来,传达了FPGA是由大量可配置的基本逻辑单元组成的思想。这些逻辑单元可以通过编程连接起来,构建出任何想要的数字电路。

综合起来,FPGA的本质是一种高度灵活、可重复配置的数字集成电路。它不是像CPU那样执行存储在内存中的指令序列,而是通过改变其内部硬件电路的连接方式,直接构建出执行特定功能的硬件电路。

FPGA与CPU、ASIC的对比

为了更好地理解FPGA的定位,我们将其与另外两种常见的芯片进行对比:

  • FPGA vs. ASIC (专用集成电路):

    • 灵活性: FPGA具备现场可编程性,功能可随时更改;ASIC功能在制造时固化,无法更改。
    • 性能: ASIC是为特定功能量身定制的硬件电路,性能通常最优,时钟频率高,功耗最低;FPGA性能受限于可编程互连资源的延迟,时钟频率通常低于同代ASIC,功耗也相对较高。
    • 开发成本(NRE Cost): FPGA开发初期成本较低,无需投入昂贵的流片费用;ASIC需要巨大的前期设计和流片投入,NRE成本非常高。
    • 单位成本: 在小批量生产时,FPGA单位成本可能低于ASIC;在大批量生产时,ASIC由于摊薄了NRE成本,单位成本远低于FPGA。
    • 开发周期: FPGA开发周期相对较短;ASIC开发周期长且风险高。
    • 总结: FPGA适用于需要灵活功能、产品迭代快、小批量或中等批量生产、或前期预算有限的应用;ASIC适用于功能固定、追求极致性能和功耗、且产量巨大的应用。
  • FPGA vs. CPU (中央处理器):

    • 工作方式: CPU是基于指令集架构,通过软件执行指令序列来实现功能(顺序执行);FPGA是通过配置硬件电路来实现功能(天然并行执行)。
    • 并行性: CPU通过多核或线程实现并行,但本质上仍是共享资源和时分复用,存在开销;FPGA可以为每个独立任务分配专用的硬件资源,实现大规模真正的硬件并行,理论上可以同时执行数千甚至数万个操作。
    • 性能: CPU擅长复杂的控制逻辑和通用计算;FPGA擅长并行数据处理、流水线操作以及需要低延迟、高吞吐的应用。对于特定并行任务,FPGA的性能可以远超同等成本的CPU。
    • 开发难度: CPU主要通过软件编程(C++, Python等),相对容易;FPGA需要硬件描述语言(HDL)编程,更接近底层硬件设计,难度更高。
    • 总结: CPU是通用的计算引擎,擅长复杂决策和任务管理;FPGA是高度并行的硬件加速器,擅长数据流处理和计算密集型任务。它们往往协同工作,CPU负责控制和高级任务,FPGA负责加速关键运算。

因此,FPGA提供了一种独特的折衷方案:它不像ASIC那样性能极致但缺乏灵活性,也不像CPU那样通用但并行能力和确定性有限。FPGA的价值在于其既具备硬件的高速并行处理能力,又拥有类似软件的可重编程性

第二章:FPGA的内部结构——构建可编程世界的积木

理解FPGA如何实现其功能,关键在于了解其内部的基本构成模块。现代FPGA的内部结构是一个复杂的层次化体系,但核心组成部分包括:

  1. 可配置逻辑块 (Configurable Logic Block, CLB) 或逻辑单元 (Logic Element, LE):

    • 这是FPGA最基本的计算单元,是实现用户逻辑功能的地方。不同的FPGA厂商(如Xilinx/AMD, Intel/Altera)对这些单元有不同的命名,但其基本组成和功能类似。
    • 一个典型的CLB/LE通常包含以下组件:

      • 查找表 (Look-Up Table, LUT): 这是实现组合逻辑的核心。LUT本质上是一个小型SRAM(静态随机存取存储器)。一个N输入的LUT可以实现任何N个输入变量的布尔函数。例如,一个4输入的LUT可以实现任何4变量的组合逻辑函数。当用户设计好逻辑功能后,综合工具会将这个功能映射到一个或多个LUT,并将对应的真值表(或者说,每个输入组合对应的输出值)下载到LUT的SRAM中。这样,当输入信号到来时,LUT就像一个小型存储器一样,根据输入地址查找并输出预存的结果,从而实现逻辑功能。
      • 触发器 (Flip-Flop, FF): 这是实现时序逻辑的核心,通常是D触发器。它们用于存储数据、构建寄存器、计数器、状态机等。LUT的输出可以连接到触发器的输入,触发器的输出也可以连接回LUT或其他逻辑。
      • 多路选择器 (Multiplexer, MUX): 用于在多个输入中选择一个输出,常用于构建更复杂的逻辑或者在不同功能之间切换。
      • 进位链 (Carry Chain): 专用的高速硬连线,用于高效地实现加法、减法等算术运算,避免通过通用路由资源带来的延迟。
    • 大量的CLB/LE以阵列形式分布在FPGA芯片中。

  2. 可编程互连资源 (Programmable Interconnect):

    • 如果说CLB是积木块,那么互连资源就是连接这些积木块的“可编程导线”。它们是FPGA灵活性和性能的关键瓶颈所在。
    • 互连资源包括不同长度的导线(短线、长线、全局线等)和大量的可编程开关矩阵 (Switch Matrix)。
    • 通过配置这些开关矩阵,可以将一个CLB的输出连接到另一个CLB的输入、连接到I/O块、连接到专用的硬核资源等。
    • 芯片的大部分面积和功耗往往都消耗在这些互连资源上。布线复杂度和延迟是FPGA设计中需要重点优化的问题。
  3. 输入/输出块 (Input/Output Block, IOB):

    • 这些是位于芯片边缘的模块,用于FPGA芯片与外部世界进行通信。
    • IOB负责将外部引脚的电信号转换成芯片内部可以处理的逻辑信号(输入),以及将内部逻辑信号转换成符合外部标准的电信号输出。
    • IOB通常具备可配置性,支持不同的电平标准(如LVCMOS, LVDS, SSTL等)、驱动强度、上下拉电阻、以及寄存器(用于输入或输出的同步)。
  4. 专用硬核资源 (Dedicated Hard IP Blocks):

    • 随着FPGA技术的演进,为了提高性能和效率,厂商在FPGA中集成了许多针对特定功能的硬核电路。这些硬核是ASIC级别的实现,性能和功耗远优于用CLB构建的软核实现。
    • 常见的硬核资源包括:
      • 块状RAM (Block RAM, BRAM): 专用的内存块,用于实现高速、大容量的片上存储,如FIFO(先入先出队列)、缓存等。
      • DSP切片 (DSP Slices): 专用于数字信号处理的硬核,包含乘法器、加法器、累加器等,可以高效地执行乘法-累加运算(MAC),广泛应用于数字滤波、FFT、机器学习推理等领域。
      • 时钟管理单元 (Clock Management Units, CMUs): 如PLL (锁相环) 和 DCM (数字时钟管理器)。它们用于生成、分发、倍频、分频、移相和去抖动时钟信号,是高速数字系统设计的关键。
      • 高速收发器 (Transceivers): 也称为SerDes (Serializer/Deserializer)。这些硬核用于实现高速串行通信接口,如PCIe, Ethernet, USB 3.0+, DisplayPort等,极大地简化了高速接口的设计。
      • 处理器硬核 (Processor Hard Cores): 一些高端FPGA(如Xilinx的Zynq系列或AMD的Versal系列)直接集成了ARM Cortex-A/R等高性能处理器。这种结构称为SoC FPGA (System-on-Chip FPGA),它将CPU的灵活性与FPGA的并行加速能力结合在一个芯片上。
      • PCIe控制器、以太网MAC等协议硬核: 用于高效实现标准通信协议。

FPGA的内部结构就像一个巨大的由各种类型的积木和连接线组成的网格。通过下载比特流,用户实际上是在告诉FPGA:将哪些积木放在哪里(Placement),以及如何用连接线将它们连接起来(Routing),从而形成特定的数字电路功能。

第三章:FPGA的工作原理与设计流程

FPGA不像CPU那样有操作系统和软件执行流程,它的工作原理是基于硬件电路的配置和并行执行。

  1. 工作原理:

    • 当FPGA芯片上电或复位后,它会从外部非易失性存储器(如配置Flash)或通过JTAG等接口加载配置数据,即比特流 (Bitstream)
    • 这个比特流包含了配置FPGA内部所有可编程单元(LUT、触发器、开关矩阵、IOB、硬核参数等)所需的信息。
    • 加载完成后,FPGA内部的电路连接和功能就被确定下来,形成了一个特定的、定制化的硬件电路。
    • 此后,这个硬件电路就开始以其设计的时钟频率并行运行,直接处理输入数据并产生输出。没有指令解释,没有软件开销,数据的流动和处理直接由硬件逻辑决定,因此可以实现极高的吞吐量和确定性。
    • 大多数主流FPGA(如基于SRAM配置技术的)在掉电后配置信息会丢失,因此每次上电都需要重新加载比特流。
  2. FPGA设计流程:

    • 与软件开发使用高级语言不同,FPGA设计主要使用硬件描述语言 (Hardware Description Language, HDL)。最常用的HDL是 VHDLVerilog,以及更现代的 SystemVerilog
    • HDL不是像C++或Java那样的顺序执行编程语言,而是用来描述硬件电路的结构和行为。例如,你用HDL描述一个加法器时,你不是告诉FPGA先做什么再做什么,而是描述了这个加法器有哪些输入、输出,以及输入和输出之间的逻辑关系(即,它是一个加法器电路)。
    • FPGA设计流程主要包括以下步骤:
      • 设计输入 (Design Entry): 使用HDL编写代码来描述期望的硬件功能。也可以使用原理图输入或其他高层设计工具。
      • 功能仿真 (Functional Simulation): 在将设计映射到FPGA硬件之前,使用仿真工具验证HDL代码的逻辑功能是否正确。这不考虑时序延迟,只验证逻辑行为。
      • 综合 (Synthesis): 使用综合工具将HDL代码转换为一个与特定FPGA器件无关的门级网表 (Netlist)。网表描述了设计所需的逻辑门、触发器等基本元件以及它们之间的连接关系。
      • 设计约束 (Design Constraints): 在将网表映射到具体FPGA芯片上之前,需要为设计添加约束信息,最重要的包括时钟频率(时序约束)、管脚分配(物理约束)以及对某些逻辑单元的放置要求。这些约束指导后续的实现工具。
      • 实现 (Implementation): 这是将综合后的网表映射到目标FPGA器件上的过程,通常分为三个子步骤:
        • 映射 (Mapping) / 转换 (Translation): 将网表中的逻辑元件映射到目标FPGA的特定资源上,例如将逻辑门组合映射到LUT,将寄存器映射到触发器。
        • 布局 (Placement): 将映射后的逻辑单元和硬核资源安排到FPGA芯片的物理位置上(即确定每个LUT、触发器、BRAM、DSP等放在芯片的哪个具体位置)。
        • 布线 (Routing): 根据网表中的连接关系,利用FPGA的可编程互连资源将布局好的各个逻辑单元连接起来。这个步骤至关重要,因为它直接影响设计的性能(最高时钟频率)和资源利用率。
      • 时序分析 (Timing Analysis): 在布局布线完成后,工具会根据实际的布线延迟分析电路的时序性能,检查是否满足所有的时序约束(例如,信号是否能在时钟周期内稳定到达)。如果时序不满足要求,设计者需要修改代码、调整约束或优化布局布线。
      • 时序仿真 (Timing Simulation): 在确认时序满足要求后,进行包含时序延迟的仿真,以确保设计在实际硬件中的行为符合预期。
      • 生成比特流 (Generate Bitstream): 当所有检查通过后,生成用于配置目标FPGA芯片的二进制文件——比特流。
      • 配置 (Configuration): 将生成的比特流加载到FPGA芯片中,完成硬件电路的配置。
      • 硬件调试 (Hardware Debugging): 在实际硬件上测试设计功能,使用逻辑分析仪等工具进行调试。

这个流程通常是迭代的,如果某个步骤(如时序分析)发现问题,就需要返回前面的步骤进行修改。整个设计过程高度依赖于FPGA厂商提供的复杂设计工具套件(如Xilinx的Vivado,Intel的Quartus Prime)。

近年来,高层次综合 (High-Level Synthesis, HLS) 技术也越来越流行。HLS允许设计者使用C、C++或SystemC等高级语言来描述算法,然后由工具自动将其综合成HDL代码,再进行后续的FPGA设计流程。这有助于提高设计效率,特别是对于算法密集型的应用,但也对工具的智能性和设计者的控制力提出了新的挑战。

第四章:FPGA的优势与劣势——为什么选择或不选择FPGA?

FPGA作为一种独特的硬件平台,拥有其显著的优势和局限性:

优势:

  1. 极高的灵活性与可重编程性: 这是FPGA最大的卖点。同一块芯片可以通过软件更新来改变其功能,适应标准变化、算法升级或修复Bug,延长产品生命周期,降低硬件重制的风险和成本。
  2. 真正的硬件并行性: FPGA可以为不同的计算任务分配独立的硬件资源,实现大规模的并行处理。对于许多需要同时处理大量数据流的任务(如网络数据包处理、图像/视频处理、信号处理),FPGA的并行能力远超顺序执行的CPU。
  3. 高性能与低延迟: 对于特定任务,FPGA构建的定制硬件电路可以实现比通用处理器更高的吞吐量和更低的延迟。数据直接在硬件逻辑中流动,没有操作系统中断、缓存未命中、指令流水线停顿等开销。
  4. 更快的上市时间 (Time-to-Market) 与更低的初期成本 (NRE Cost): 相比于ASIC漫长的设计、验证和流片周期及昂贵的初期投入,使用成熟的FPGA芯片进行开发可以大大缩短产品从概念到市场的距离,且无需承担高昂的流片风险。
  5. 确定性 (Determinism): 由于是纯硬件电路,FPGA的行为是高度可预测和确定的,没有CPU中常见的缓存、中断或操作系统调度带来的不确定性,这对于实时控制、精密测量等应用至关重要。
  6. 功耗效率 (针对特定任务): 虽然总体功耗可能高于ASIC,但对于某些需要并行处理且CPU无法高效完成的任务,FPGA可以通过定制硬件只执行必要的操作,避免通用处理器执行无关指令的功耗,因此在单位工作量下的功耗效率可能优于CPU。
  7. 安全性: 硬件逻辑相对于软件更难被逆向工程或植入恶意代码。一些FPGA还提供了硬件级别的加密和安全启动功能。

劣势:

  1. 单位成本相对较高: 尽管NRE成本低,但在大批量生产中,FPGA芯片本身的单位价格通常比同等复杂度的ASIC高得多。
  2. 功耗较高: 相比于为特定功能优化的ASIC,FPGA的可编程互连结构和配置SRAM会带来额外的功耗,对于电池供电或对功耗极度敏感的应用可能不太适合。
  3. 性能限制: 可编程互连资源带来的信号延迟限制了FPGA的最高时钟频率,通常低于同代ASIC。复杂的布线也可能成为性能瓶颈。
  4. 设计复杂性高: 使用HDL进行硬件设计比软件编程更抽象、更复杂,需要对数字逻辑、时序分析、物理实现等方面有深入理解。设计、验证和调试周期相对较长。
  5. 开发工具复杂且昂贵: FPGA设计需要依赖厂商提供的复杂、专业的EDA (Electronic Design Automation) 工具链,这些工具的学习曲线陡峭且授权费用高昂。
  6. 资源限制: 单个FPGA芯片的逻辑容量、内存、DSP资源等是有限的。对于超出其容量的巨大设计,可能需要多片FPGA或考虑ASIC。

因此,选择是否使用FPGA,需要综合考虑项目的需求(性能、灵活性、成本、上市时间、功耗等)、技术团队的能力以及预期的产量。

第五章:FPGA的应用领域——它们在哪里大显身手?

凭借其独特的优势,FPGA在众多领域找到了用武之地:

  1. 通信:

    • 基站设备:实现信号处理、信道编码/解码、协议处理。
    • 网络设备:高速路由器、交换机、防火墙中的线速数据包处理、流量管理、深度包检测。
    • 卫星通信:信号调制解调、信道化。
  2. 数据中心:

    • 计算加速:用于机器学习推理、数据分析、基因测序、金融计算等高吞吐量、低延迟的应用加速。
    • 网络功能虚拟化 (NFV) 和软件定义网络 (SDN) 中的加速。
    • 存储加速。
  3. 汽车电子:

    • 高级驾驶辅助系统 (ADAS):图像/视频处理、传感器融合、模式识别。
    • 信息娱乐系统、车载通信系统。
  4. 航空航天与国防:

    • 雷达和声纳系统:信号处理、波束形成。
    • 电子战系统:信号侦测、干扰。
    • 卫星载荷、空间探测器控制系统。
    • 由于其可重编程性和对恶劣环境(如辐射)的适应性(部分型号),FPGA非常适合这些领域。
  5. 工业自动化与控制:

    • 实时控制系统:电机控制、机器人控制、可编程逻辑控制器 (PLC)。
    • 机器视觉系统:图像采集与处理。
  6. 医疗设备:

    • 医学影像设备(CT, MRI, 超声)的信号处理和图像重建。
    • 基因测序仪。
  7. 广播与专业视频:

    • 视频采集、处理、编码、传输、格式转换。
    • 实时视频特效。
  8. 测试与测量:

    • 高性能示波器、频谱分析仪、任意波形发生器等仪器中的高速数据采集、处理和生成。
  9. 高性能计算 (HPC):

    • 作为CPU的协处理器,加速特定计算密集型任务。
  10. 消费电子:

    • 在产品开发初期用于原型验证,或在产品生命周期需要频繁功能升级的场景。虽然最终大规模量产可能转向ASIC,但FPGA在前期起着关键作用。

在许多应用中,FPGA常常与CPU或其他处理器协同工作,形成异构计算系统。CPU负责复杂的控制、任务调度和通用计算,而FPGA则作为协处理器,完成对计算性能、实时性或并行度要求极高的特定任务加速。

第六章:总结与未来展望

回到最初的问题:“什么是FPGA?”

FPGA是一种独特的数字集成电路,它通过现场可编程的互连和逻辑资源,允许用户在硬件层面构建定制化的数字电路。它既提供了接近ASIC的硬件加速能力和确定性,又拥有类似软件的可修改和升级的灵活性。

FPGA不是简单地执行指令,而是直接构建硬件电路来完成任务。你可以将其想象成一个巨大的、包含各种可配置数字组件的电子积木盘,而你的设计(通过HDL描述)就是告诉它如何将这些积木块以特定的方式连接起来,形成一个能够高速、并行执行你想要功能的电路。

在数字技术不断演进的今天,FPGA的重要性日益凸显。随着人工智能、5G通信、边缘计算等新技术的兴起,对高性能、低延迟、灵活可变的硬件加速需求越来越大。FPGA凭借其并行处理能力和可重构性,在这些领域展现出巨大的潜力。

未来的FPGA技术将继续向更高密度、更高性能、更低功耗的方向发展,同时也会集成更多的高级硬核(如更强大的DSP、AI加速单元、更高带宽的内存接口和更高速的收发器)。高层次综合 (HLS) 工具的成熟也将进一步降低FPGA的设计门槛,使得更多开发者能够利用FPGA的强大能力。

总而言之,FPGA是连接软件灵活性和硬件高性能之间的重要桥梁,是实现复杂数字系统功能的强大工具。理解FPGA,就是理解现代数字硬件设计的一种关键范式。


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部