关键词:LEGO 加速器、自动生成 RTL、空间加速器、张量应用、AI 芯片设计、Gemmini 对比、数据流融合、MIT Han Lab


一句话先给答案

LEGO 是 MIT Han Lab 2025 年发布的开源框架,像搭积木一样把深度学习里的张量运算直接变成可综合的芯片 RTL,不需要手写模板,就能让 AI 模型在定制加速器上跑出 3.2 倍速度、节省 2.4 倍能耗。


本文讲什么?

  1. 为什么需要 LEGO?—— 手工写 AI 加速器 RTL 的痛
  2. LEGO 到底怎么“搭积木”?—— 三步工作流图解
  3. 它跟以前的“模板派”有何不同?—— 一张表看懂
  4. 真实跑起来有多快?—— 对 Gemmini 实测数据
  5. 想自己玩,怎么上手?—— 代码、依赖、示例命令
  6. 常见疑问 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 前端:自动生成“数据流图”

  1. 利用仿射变换找出“谁在什么时候复用哪块数据”
  2. 求解线性方程组,得到 PE 之间“直连”或“FIFO 延迟”两种最优连接
  3. 用最小生成树 (Chu-Liu) 剪掉冗余边,保证每个 PE 只有一条有效数据源

结果:一张“FU 级网表”—— 节点是乘加器(MAC),边是数据线 + 延迟标签。

2.3 后端:把网表变成可综合 RTL

  1. 将 FU 拆成“寄存器-算子-多路选择”原子节点(DAG)
  2. 用线性规划插最少 pipeline 寄存器,让时序收敛
  3. 再跑三轮优化:

    • 广播改写链 → 省寄存器
    • 提取归约树 → 省加法器级数
    • 引脚复用 → 动态数据流共用硬件

输出:可直接丢给 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 端到端对比
evaluation


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}
}

相关阅读