“
关键词: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)  
