可重构计算与FPGA
在软件的灵活性和专用硬件的性能之间寻找最优平衡。FPGA 既是芯片设计的验证平台,也是数据中心和边缘计算的可编程加速器;可重构计算研究的是如何让这套机制更高效、更易用。
这个方向在研究什么
一支芯片团队设计出一种新的处理器架构,在仿真器里跑了三个月,确信逻辑没错,可要真正验证它在硬件上的表现,按常规就得流片——等上几个月,花掉几百万元,一旦做错还得全部推倒重来。但他们还有另一条路:把这套设计灌进一块 FPGA,不过两周,新架构就以接近真实芯片的速度在板子上跑了起来。
这块芯片之所以能做到,是因为它出厂时本是一张空白的画布。通用处理器(CPU、GPU)什么代码都能跑,可为了通用,效率注定上不去;专用芯片(ASIC)把电路为某个任务焊死,性能做到极致,代价却是功能再难改动,重新流片一次又动辄数月,耗费数百万元。FPGA(Field-Programmable Gate Array),也就是现场可编程门阵列,正卡在这两极中间:它是一块出厂后还能反复重画的硬件,重新配置内部的逻辑单元和连线,同一块芯片就能今天跑图像处理、明天跑加密、后天跑神经网络推理。
然而,这种高度的灵活性是有代价的。要让一块芯片能实现任意逻辑、把任意两点连起来,它就得把大量硅片面积留给“可配置”本身。FPGA 的内部是一张网格,密密麻麻铺着可编程的查找表(Look-Up Table, LUT)和可编程的连线。查找表是个有意思的东西。它会预先把每种输入对应的结果填进一张表,用时直接查表取数。遇到一些复杂的函数计算时,这种方式可以节省大量延时和功耗。因为 LUT 本质上是“背答案”,而不是像加法器、乘法器那样真去做运算。理论上,只要 LUT 足够大,它可以映射任何函数。改写表里存的内容,就能拟合任意逻辑。不过这种方式只在做几位输入(如 INT4、INT8)的小逻辑判断时划算。可像 FP32 乘法这种输入组合海量的运算根本列不成表,只能用一大片查找表硬拼,反倒比一个专门的乘法器又慢又费电。这也正是 FPGA 后来要专门做硬乘法器(DSP 块)的原因。
在 FPGA 上,真正干活的逻辑只占一小块,面积和延迟的一半以上都耗在那些可编程的连线和开关上——信号从一个逻辑单元走到另一个,要穿过一长串多路选择器和缓冲器。代价有多大?只用查找表去拼,同一个电路在 FPGA 上平均比 ASIC 大三十多倍、慢四倍;后文会讲到把部分 LUT 替换为专用的硬件,那种方法能把差距收窄到二十倍上下,但终究差一截。
既然面积的大头花在连线上,怎么把逻辑摆放到位、让信号走最短的路,就成了 FPGA 一大研究热点。把设计灌进芯片,要先用 Verilog 描述电路,再经工具综合、布局、布线,生成一份比特流烧进去。其中布局布线(Place-and-Route, P&R)最难:哪个逻辑该落在哪个单元、哪根线该走哪条通道,是一个货真价实的 NP-Hard 问题。设计规模越大,时序就越来越难收敛,一个大型设计的 P&R 跑上几十个小时是常事,跑完还得看随机种子的运气。工业界的 Vivado、Quartus 背后是几十年攒下的启发式算法,学术界则把多伦多大学的开源工具 VTR 当作试验新算法的公共平台。近年兴起的 ML for EDA,目标是把 P&R 的运行时间和结果方差同时压下来。
P&R 是替专家省时间,HLS 则想把门槛本身拆掉。写 RTL 是个力气活,得一个时钟周期一个时钟周期地抠;高层次综合(High-Level Synthesis, HLS)许诺的是另一幅图景:你用 C 或 C++ 把算法写出来,工具自动替你变成电路。但 HLS 性能也没那么好。同一段算法,HLS 生成的电路时钟频率常常比手写低 20% 到 50%,面积也更大,因为工具在决定循环怎么展开、流水线怎么插、数据怎么摆进片上存储时,比较笨拙。大多数时候仍要靠工程师手工写一大堆 pragma 去指点,而这些选择的组合空间是指数级的。于是怎么让工具可以媲美一个经验老道的工程师,不再靠人堆 pragma,也成了一大研究热点。
代价压下去,FPGA 的优势是低延迟和可重构,而不是峰值算力。微软把 FPGA 插进数据中心的每一台服务器,先用来加速 Bing 搜索的网页排序,后来又接管了网络数据包的处理,让流量绕开 CPU 直接在硬件上转发。边缘侧的 AI 推理是FPGA的另一个舒适区。这里看重的不是高吞吐,而是每一帧都准时出结果——自动驾驶、机器人、工业质检都得逐帧实时响应。GPU 为了充分利用算力,通常将一批样本累积后一起计算,单帧延迟因此偏高又不稳定;FPGA 却能把整个网络铺成一条定制流水线,数据流过即出结果,单帧延迟低到毫秒以下还很确定。再加上模型量化到 int8、int4 时,FPGA 能照着这个精度量身搭电路,每个查找表和 DSP 都得到充分利用,在紧巴巴的功耗预算里把能效做得比 GPU 更高。于是怎么把神经网络的算子高效铺到 DSP 和 LUT 上,就成了一个专门的研究方向。
FPGA 一旦进了机架,要同时服务多个租户、应付多变的负载,部分重构就成了关键,即在不停机的前提下,只把芯片的一块区域换成另一个加速器。这才把“可重构”从一次性的编译能力,变成了运行时随需应变的真本事。
在既定的硅片上,软件层面的优化空间有限,那一半以上的连线浪费是 fabric 本身决定的。要再往下压,就只能修改硬件了。FPGA 架构师面临的核心问题是:哪些功能该硬化成专用电路,硬到什么程度,占多少芯片面积? 这是一个权衡:把一个功能焊进硅里,用得上它的应用立刻更小更快更省电;可一旦某块芯片碰上的应用根本用不到它,这部分硅面积就被浪费,挤占了本该留给通用逻辑的资源。
FPGA 这三十年的演化,可以看作一系列反复验证后固化下来的硬件决策。最早的芯片只有查找表和连线,之后才一样样往里加硬块。人们发现几乎每个设计都在做加法,就把进位链硬化进逻辑块;信号处理和 AI 离不开乘累加,于是有了专门的 DSP 块(Digital Signal Processing,数字信号处理);数据总要在片上缓存,BRAM(Block RAM,块状随机存取存储器)也嵌了进来。到了深度学习时代,DSP 又长出按 int8、int4 拆分的张量模式。连接线的开销也开始被硬核化——长线延迟既然不随工艺改善,新一代器件干脆把一张硬核片上网络(Network-on-Chip, NoC)做进芯片,比用可编程逻辑搭出来的软 NoC 省 23 倍面积、快 6 倍;单块芯片大到良率扛不住,就用 interposer(中介层)把好几块裸片拼进一个封装。今天的高端器件(如 AMD Versal)已经是「可编程逻辑 + AI 引擎 + ARM 处理器 + 硬核 NoC」的异构平台,纯查找表只剩其中一小块。
可即便如此,FPGA 还不是可重构的终点。它的灵活来自 bit 级的细粒度可配置,每一个查找表、每一段连线都能单独设定,灵活到了极致,连线的代价也大到了极致。再往前一步是粗粒度的思路:与其让人摆弄每一根线,不如把可重构的颗粒做大,让一个个完整的运算单元按需连成数据通路,这就是 CGRA(Coarse-Grained Reconfigurable Array,粗粒度可重构阵列)与“软件定义芯片”。粒度一粗,配置开销骤降,效率随之向 ASIC 靠拢,代价是不再像 FPGA 那样什么都能配。从 FPGA 到软件定义芯片,核心矛盾始终是灵活性与效率的权衡。
核心研究问题
- FPGA 架构与硬化取舍:路由开销让 FPGA 面积的七八成都耗在连线上,哪些功能该硬化成 DSP、BRAM、硬核 NoC、AI 引擎、各占多大面积是一场赌博,这套异构资源怎么协同是架构的根本问题。
- 布局布线算法:P&R 是 NP 难组合优化,大型设计动辄跑几十小时还受随机种子影响,新启发式和机器学习都在试着把时间和方差压下来,让工具替专家做决策。
- 高层次综合(HLS):HLS 用 C/C++ 自动生成 RTL,频率却常比手写低两到五成,循环展开、流水线、数据流调度还要靠人堆 pragma,难在让工具自动逼近熟练工程师的手写质量。
- 神经网络到 FPGA 的映射:把量化到 4 位甚至 2 位的 DNN 算子高效铺到 DSP/LUT/BRAM 上、最大化数据局部性、最小化片外访存,决定低延迟边缘推理能不能打过 GPU。
- CGRA 与软件定义芯片:把可重构颗粒从 bit 级做粗到 word 级,配置开销骤降、效率向 ASIC 靠拢,但运算单元怎么连成数据通路、应用怎么映射上去,两头都还没有成型的方法。
- 数据中心 FPGA 与异构平台:FPGA 进机架做网络加速、SmartNIC、多租户服务,要和 CPU/GPU 组成异构平台,运行时还要用部分重构调度多个加速器。
- 安全、可靠与抗辐射:比特流不加密就能被复制,多租户要隔离防侧信道,航天场景要抗辐射加固,这些约束贯穿从器件到系统的每一层。
知识路径
离散数学和编程打底,数字设计(含 HDL 和 FPGA 本体)是入口,EDA 是工具链,编译原理支撑 HLS,体系结构决定加速器设计空间,深度学习提供算法需求,操作系统和并行系统支撑运行时管理。节点对应学习地图里的目录:
graph LR
DIS[离散数学] --> DIG[数字设计]
DIS --> DSA[数据结构与算法]
PY[编程入门] --> DSA
PY --> SYS[计算机系统基础]
DIG --> EDA[EDA]
DIG --> SYS
DSA --> EDA
DSA --> COM[编译原理]
SYS --> OS[操作系统]
SYS --> COM
SYS --> ARCH[体系结构]
DIG --> X[可重构计算与FPGA]
EDA --> X
COM --> X
ARCH --> ACC[AI加速器]
ARCH --> PAR[并行与分布式系统]
ML[机器学习] --> DL[深度学习]
DL --> ACC
ACC --> X
OS --> PAR
OS --> X
PAR --> X
classDef math fill:#F3E8FF,stroke:#553C9A
classDef ckt fill:#FFFBEB,stroke:#B7791F
classDef sys fill:#EBF4FF,stroke:#2C5282
classDef ai fill:#F0FDF4,stroke:#16A34A
classDef goal fill:#F1F5F9,stroke:#64748B,stroke-width:2px
class DIS math
class DIG,EDA ckt
class SYS,ARCH,ACC,OS,PAR,COM sys
class PY,DSA,ML,DL ai
class X goal
- 数学:离散数学(布尔代数、图论,FPGA 布局布线的算法语言)
- 算法编程:编程入门(C/C++) · 数据结构与算法
- 电路:数字设计(数字逻辑→HDL→FPGA 是本方向的主干) · EDA
- 系统架构:计算机系统基础 · 体系结构 · 操作系统(运行时与虚拟化) · 编译原理(HLS 高层次综合) · 并行与分布式系统 · AI加速器
- 人工智能:机器学习 · 深度学习
这个方向适合谁
适合想做硬件但等不起流片的人。一个架构改动几小时就能上板看到结果,一块几百块的开发板就能开工,本科生积累第一段硬件科研经历,常常就从这里起步。数字逻辑和 Verilog 打好基础即可入手,想往工具侧走再补算法,布局布线本质是组合优化。日常主要围绕板子,写 RTL、等综合布线、上板抓波形。要认清 FPGA 比 ASIC 慢四倍、大三十倍,它的价值在灵活和低延迟,用它追求峰值算力是用错了方向。
学术界
课题组
境内
-
方华军 清华
可重构处理器架构 | 密码芯片设计 | 低功耗模数混合IC
-
张春 清华
FPGA深度学习加速 | 视觉SLAM协同设计 | 机器人实时计算
-
软件定义芯片 | 可重构计算架构 | 神经网络加速器
-
刘雷波 清华
CGRA 可重构架构 | 密码硬件加速器 | 硬件安全芯片
-
王伶俐 复旦
FPGA 架构设计 | CGRA 设计空间探索 | 可重构计算 EDA
-
王堃 复旦
FPGA 加速器编译器 | 稀疏神经网络加速 | EDA 自动化工具
-
曾璇 复旦
模拟电路 EDA | 互连仿真与时序分析 | 并行 EDA 算法
-
来金梅 复旦
FPGA 神经网络加速器 | 可编程深度学习平台
-
梁云 北大
FPGA HLS 编译优化 | 张量加速器自动生成 | 硬件软件协同设计
-
周学海 中科大
可重构系统与 FPGA 加速 | 面向应用的硬件定制 | 异构多核体系结构
-
王超 中科大
FPGA 可重构计算 | 深度学习加速系统 | 智能处理器架构
-
戴国浩 交大
FPGA LLM 推理加速 | 稀疏计算硬件映射 | 多 FPGA 异构系统
-
张宸 交大
FPGA 深度学习加速器 | 稀疏 AI 计算架构 | GPU 多节点系统设计
-
赵杰茹 交大
高层次综合 HLS | 编译器与硬件协同设计 | LLM 自动生成硬件代码
-
李丽 南大
可重构计算 | 众核处理器体系结构 | 三维片上网络(3D NoC)
-
王则可 浙大
FPGA 加速器设计 | SmartNIC 网络卸载 | FPGA/P4/GPU 异构平台
-
卢丽强 浙大
FPGA 神经网络加速器 | 注意力机制与低精度计算 | AI 芯片软硬件协同
境外
-
异构可重构计算 | 稀疏加速器设计 | 事件驱动视觉处理
-
Wei Zhang(张薇) 港科大
FPGA 敏捷设计流程 | 高层次综合(HLS)与功耗优化 | LLM 与 DNN 硬件加速
-
Peipei Zhou(周佩佩) Brown
异构加速器编译 | FPGA Transformer 加速 | AI 引擎 MLIR 框架
-
Zhiru Zhang(张志汝) Cornell
HLS 编译器设计 | FPGA 数据流加速 | 硬件加速器自动生成
-
Mohamed Abdelfattah Cornell
FPGA 架构创新 | AI 推理硬件设计 | DNN 稀疏混合精度
-
Lana Josipović ETH Zürich
动态调度 HLS | 数据流电路综合 | 编译器硬件协同
-
Cong Hao(郝聪) Georgia Tech
FPGA 神经网络加速 | ML for EDA 布线 | 3D FPGA 架构生成
-
Andre DeHon U Penn
FPGA 架构与互连 | 高层次综合 HLS | 增量编译与局部重配置
-
Vaughn Betz U Toronto
FPGA 架构与 CAD | 3D 堆叠 FPGA | 深度学习硬件映射
-
Jason Anderson U Toronto
FPGA 与 CGRA 架构 | HLS 编译优化 | RL 驱动逻辑综合
-
Jason Cong(丛京生) UCLA
FPGA 设计自动化 | HLS 数据流加速 | 领域专用计算
-
Deming Chen(陈德铭) UIUC
HLS 到 AI 加速器 | LLM 推理加速 | FPGA 异构计算
学术会议与期刊
毕业去向
企业
科研院所
相关科普
论文推荐
待补充
欢迎推荐该方向的入门综述或经典论文,参与建设 →