“
关键词:LEGO 加速器、自动生成 RTL、空间加速器、张量应用、AI 芯片设计、Gemmini 对比、数据流融合、MIT Han Lab
一句话先给答案
LEGO 是 MIT Han Lab 2025 年发布的开源框架,像搭积木一样把深度学习里的张量运算直接变成可综合的芯片 RTL,不需要手写模板,就能让 AI 模型在定制加速器上跑出 3.2 倍速度、节省 2.4 倍能耗。
本文讲什么?
-
为什么需要 LEGO?—— 手工写 AI 加速器 RTL 的痛 -
LEGO 到底怎么“搭积木”?—— 三步工作流图解 -
它跟以前的“模板派”有何不同?—— 一张表看懂 -
真实跑起来有多快?—— 对 Gemmini 实测数据 -
想自己玩,怎么上手?—— 代码、依赖、示例命令 -
常见疑问 FAQ —— License、商用、FPGA、功耗、坑点
1. 为什么需要 LEGO?—— 手工写 AI 加速器 RTL 的痛
痛点 | 具体表现 | 后果 |
---|---|---|
模板僵化 | Gemmini/MAGNET 只能调参,不能改拓扑 | 新算子(Attention、MTTKRP)塞不进去 |
数据流单一 | 一种阵列只能跑一种“并行策略” | 模型换层就要换芯片,成本爆炸 |
控制逻辑冗余 | 每个 PE 都配独立地址发生器 | 面积 ×2.0,功耗 ×2.6 |
人力周期长 | 手写 RTL → 验证 → 后端,月级别 | 算法周级迭代,硬件追不上 |
LEGO 目标:让“算法-硬件”迭代周期从月变天,且不把设计空间锁死。
2. LEGO 到底怎么“搭积木”?—— 三步工作流图解
2.1 输入:张量算子描述(你只管写循环)
// GEMM 例子
for (int i = 0; i < M; i++)
for (int j = 0; j < N; j++)
for (int k = 0; k < K; k++)
Y[i][j] += X[i][k] * W[k][j];
把循环写成 Python 嵌套列表或 MLIR 文件即可,无需画电路图。
2.2 前端:自动生成“数据流图”
-
利用仿射变换找出“谁在什么时候复用哪块数据” -
求解线性方程组,得到 PE 之间“直连”或“FIFO 延迟”两种最优连接 -
用最小生成树 (Chu-Liu) 剪掉冗余边,保证每个 PE 只有一条有效数据源
结果:一张“FU 级网表”—— 节点是乘加器(MAC),边是数据线 + 延迟标签。
2.3 后端:把网表变成可综合 RTL
-
将 FU 拆成“寄存器-算子-多路选择”原子节点(DAG) -
用线性规划插最少 pipeline 寄存器,让时序收敛 -
再跑三轮优化: -
广播改写链 → 省寄存器 -
提取归约树 → 省加法器级数 -
引脚复用 → 动态数据流共用硬件
-
输出:可直接丢给 Synopsys DC 或 Xilinx Vivado 的 Verilog,28 nm 下 1 GHz 综合通过。
3. 它跟以前的“模板派”有何不同?
框架 | 是否手写模板 | 支持拓扑自由度 | 能否融合多数据流 | 控制逻辑共享 | RTL 质量 |
---|---|---|---|---|---|
Gemmini | ✅ 必须 | ❌ 仅 2D 脉动 | ❌ | ❌ 每个 PE 独立 | 高,但僵化 |
AutoSA | ✅ HLS C 模板 | ❌ 仅 2D | ❌ | ❌ | 中等 |
TensorLib | ❌ | ✅ 任意 2D | ❌ 只能单流 | ❌ | 高,面积浪费 |
LEGO | ❌ | ✅ 任意维 | ✅ 一键融合 | ✅ 单控制单元广播 | 更高,面积-功耗双降 |
4. 真实跑起来有多快?—— 对 Gemmini 实测数据
测试平台:TSMC 28 nm,256 MAC,256 kB 片上 SRAM,128-bit 16 GB/s DRAM 接口。
模型 | Gemmini 延迟 (ms) | LEGO 延迟 (ms) | 加速 | 能耗比 Gemmini 节省 |
---|---|---|---|---|
ResNet50 | 8.7 | 2.7 | 3.2× | 2.4× |
MobileNetV2 | 12.1 | 3.8 | 3.2× | 2.4× |
BERT-base | 6.5 | 2.1 | 3.1× | 2.3× |
GPT-2 1k token | 95 | 92 | 1.03× | 1.1× (带宽瓶颈) |
“
图:LEGO 与 Gemmini 端到端对比
5. 想自己玩,怎么上手?
5.1 环境依赖
-
Ubuntu 20.04+ / macOS 12+ -
Python ≥ 3.8 -
C++17 编译器(g++-9 或 clang-12) -
CMake ≥ 3.20 -
Java 11(HiGHS LP 求解器需要) -
SpinalHDL(后端自动生成 Verilog) -
Synopsys DC 或 Vivado(可选,仅综合)
5.2 一键安装
git clone https://github.com/mit-han-lab/lego.git
cd lego
pip install -r requirements.txt
./scripts/setup.sh # 自动装 HiGHS、SpinalHDL
5.3 跑第一个 GEMM 示例
# 1. 写循环描述
python examples/gemm/write_loop.py --M=64 --N=64 --K=512 -o gemm.json
# 2. 前端生成网表
./build/bin/lego-front --input gemm.json --output gemm.adg
# 3. 后端生成 Verilog
./build/bin/lego-back --adg gemm.adg --verilog gemm_rtl
# 4. 综合(示例)
vivado -mode batch -source scripts/synth.tcl -tclargs gemm_rtl
5.4 目录结构一眼看懂
lego/
├─ examples/ # GEMM、Conv2d、Attention、MTTKRP 官方样例
├─ docs/ # 仿射表示、DAG 算法论文原文
├─ scripts/ # 综合、仿真、功耗分析脚本
├─ spinal/ # SpinalHDL 原语库
└─ build/ # 编译产出,自动生成
6. 常见疑问 FAQ
问 | 答 |
---|---|
License 是什么? | MIT,可商用,需保留版权 |
只能 ASIC 吗? | 不,FPGA 同样友好,已测 Xilinx U280 |
支持稀疏算子吗? | 当前版本聚焦稠密张量,稀疏在 Roadmap |
控制流会跨时钟域吗? | 不会,LEGO 把控制信号做成局部 systolic,时钟域统一 |
功耗降低 2.4 倍的核心原因? | 1) 单地址发生器共享 2) 归约树平衡 3) 无用路径自动 clock-gating |
与 HLS 相比优势? | HLS 只能优化循环,LEGO 同时优化“数据路径 + 存储 + 控制”,面积再降 35% |
有图形界面吗? | 暂时没有,全命令行;可视化 DAG 可用 dot -Tpng gemm.dot -o gemm.png |
最大能跑多大阵列? | 论文实测 16 384 个 FU,生成时间 < 3 min,Scaling 接近线性 |
7. 结论:一句话带走
LEGO 把“写循环 → 出芯片”变成一条命令,不再需要手写 RTL 模板,还能让 AI 模型跑得更快、更省电;如果你想定制自己的张量加速器,又苦于周期太长,先试试 LEGO,再决定是否流片。
引用
若需在论文或博客中引用,请使用官方 BibTeX:
@inproceedings{lin2025lego,
title={LEGO: Spatial Accelerator Generation and Optimization for Tensor Applications},
author={Lin, Yujun and Zhang, Zhekai and Han, Song},
booktitle={2025 IEEE International Symposium on High Performance Computer Architecture (HPCA)},
pages={1335--1347},
year={2025},
organization={IEEE}
}
相关阅读
-
MIT Han Lab 项目主页 -
arXiv 全文 PDF -
Gemmini 开源地址 (对比 baseline)