ESC
输入关键词搜索文章
目录

FPGA 与 CGRA 可重构架构

嵌入式智能系统与新型计算架构 · L06
FPGA 编程和写 C 代码有什么区别?为什么 AI 推理加速器爱用 FPGA?
CH01 · FPGA 是什么
在硬件和软件之间的第三选择

CPU 是通用处理器——写 C 代码,编译成指令,CPU 逐条执行。ASIC 是专用芯片——电路硬化,速度最快但不可修改。FPGA(Field-Programmable Gate Array,现场可编程门阵列)位于两者之间:硬件电路可重构,但不需要流片

FPGA 的核心思想是:用可编程的「积木」搭建任意数字电路。你不需要去台积电流片,只需要下载一个配置文件,FPGA 就能变成任意逻辑功能。

三种计算范式的对比

CPU:时间复用——一套硬件,按时间片执行不同指令

ASIC:空间固化——一套电路,永久执行固定功能

FPGA:空间重构——一套可编程电路,通过配置改变功能

CH02 · FPGA 内部架构
LUT、CLB、互连与 I/O

FPGA 由三种基本资源组成:

1. LUT(Look-Up Table,查找表)

LUT 是 FPGA 的逻辑基础。一个 N 输入 LUT 可以看作一个 $2^N \times 1$ 的 SRAM,存储了 N 输入布尔函数的完整真值表。通过配置 SRAM 的内容,同一个 LUT 可以实现任意 N 输入逻辑函数。

例如,4 输入 LUT(4-LUT)有 $2^4 = 16$ 个配置位,可以实现 $2^{16}$ 种不同的 4 输入逻辑函数(与、或、非、异或、任意组合)。现代 FPGA 主流使用 6-LUT(64 个配置位)。

2. CLB(Configurable Logic Block,可配置逻辑块)

CLB 是 FPGA 的基本计算单元,通常包含:

  • 2-4 个 LUT
  • 触发器(Flip-Flop,用于时序逻辑)
  • 进位链(Carry Chain,用于快速算术运算)
  • 多路选择器(MUX)

Xilinx 的 CLB 叫 Slice,Intel/Altera 的 CLB 叫 LAB(Logic Array Block)。

3. 互连资源(Interconnect)

CLB 之间通过可编程的互连网络连接。互连由导线段和可编程开关(Switch Box)组成,通过配置决定信号从哪个 CLB 的哪个输出连接到哪个 CLB 的哪个输入。互连资源占 FPGA 芯片面积的 60-80%。

4. I/O 块与专用硬核

芯片边缘的 I/O 块支持多种电平标准(LVDS、SSTL 等)。此外,现代 FPGA 还集成了:

  • BRAM:块 RAM,用于片上存储
  • DSP Slice:专用乘法器/累加器,用于数字信号处理
  • PLL/DLL:时钟管理
  • 高速收发器:PCIe、以太网、SerDes
  • 处理器硬核:如 Xilinx Zynq 集成的 ARM Cortex-A9
CH03 · FPGA 编程的本质
写 Verilog ≠ 写 C 代码

FPGA 的编程语言是硬件描述语言(HDL),如 Verilog 或 VHDL。与 C 代码最大的区别是:C 描述的是「按时间顺序执行的操作」,HDL 描述的是「电路的结构和连接」

// C 代码:顺序执行
int a = b + c;
int d = a * e;  // 必须等上一行完成

// Verilog:并行电路
wire a = b + c;  // 加法器电路
wire d = a * e;  // 乘法器电路,与加法器同时存在
                 // 不是先加后乘,而是两个电路并行工作

C 代码经过编译器翻译成 CPU 指令序列,在时间上串行执行。Verilog 经过综合工具翻译成门级网表,再映射到 FPGA 的 LUT 和互连资源上——最终产物是配置比特流(Bitstream)

配置比特流是什么?

比特流是一个巨大的二进制文件(数 MB 到数十 MB),每一位控制 FPGA 内部的一个可配置点:

• LUT 的 SRAM 内容(决定实现什么逻辑函数)

• 互连开关的状态(决定信号走哪条路径)

• I/O 块的电气参数(驱动强度、电平标准)

• 触发器的初始值

上电时,FPGA 从 Flash 或外部处理器加载比特流,整个芯片就「变成」了你所描述的电路。

时序约束是 FPGA 设计的核心挑战。FPGA 电路在时钟边沿同步工作,信号从触发器出发,经过 LUT 和互连,必须在下一个时钟边沿之前到达目标触发器。这个最大允许延迟叫做建立时间(Setup Time)约束。

如果逻辑路径太长(经过太多级 LUT 或长距离互连),信号传播延迟超过时钟周期,就会出现时序违例(Timing Violation),导致电路工作不稳定。

CH04 · FPGA vs ASIC vs CPU
三者的权衡空间
维度CPUFPGAASIC
灵活性极高(软件定义)中(可重构)无(固定电路)
性能通用,非最优专用场景接近 ASIC最优
功耗高(通用冗余)中(无指令开销)最低
开发成本极高(流片百万刀)
上市时间即时数周-数月1-2 年
单位成本中-高极低(量产后)

FPGA 的「甜点区」是:需要定制硬件加速、但产量不足以支撑 ASIC 流片成本的场景。例如: • 数据中心网络加速(SmartNIC) • 5G 基站信号处理 • AI 推理原型验证 • 航空航天和国防(小批量、高可靠)

CH05 · CGRA:粗粒度可重构
介于 FPGA 和 ASIC 之间的新选择

CGRA(Coarse-Grained Reconfigurable Array,粗粒度可重构阵列)是 FPGA 的「进化版」——把细粒度的 LUT 换成粗粒度的 ALU/PE。

传统 FPGA 的可重构粒度是「门级」(LUT 实现任意布尔函数),而 CGRA 的可重构粒度是「算子级」(ALU 支持加、减、乘、移位、比较等固定操作)。

CGRA vs FPGA

面积效率:CGRA 的 ALU 比 LUT+互连紧凑得多,面积效率高 10-100 倍

编译效率:CGRA 的映射和布线简单得多,编译时间从 FPGA 的数小时缩短到数分钟

灵活性:CGRA 只能做算术和逻辑运算,不能做任意电路

能效:CGRA 的控制开销远低于 FPGA,能效接近 ASIC

CGRA 的典型架构:一个二维 PE 阵列,每个 PE 包含一个 ALU、几个寄存器、本地存储器。PE 之间通过可配置的路由网络连接。数据从阵列边缘流入,在 PE 之间流动计算,结果从边缘流出——数据流执行模型。

代表性 CGRA: • ADRES(IMEC) • MorphoSys(UCI) • HyCUBE(IIT Madras) • SambaNova RDU(商用 AI 加速器)

CH06 · 课后思考
思考与延伸
  1. FPGA 的 LUT 用 SRAM 存储真值表,为什么不用组合逻辑直接实现函数?SRAM 方案有什么优势?
  2. 时序约束中的「建立时间」和「保持时间」分别是什么含义?为什么 FPGA 设计需要同时满足两者?
  3. 假设你要为一个新发明的神经网络结构设计推理加速器,在 FPGA、CGRA 和 ASIC 之间如何选择?需要考虑哪些因素?
  4. 现代 FPGA(如 Xilinx Versal、Intel Agilex)集成了 AI Engine/DSP 硬核。这是向 ASIC 靠拢,还是 FPGA 保持可重构性的必然进化?