文章摘要
这是一个名为TinyTinyTPU的小型2×2脉动阵列矩阵乘法单元项目,采用SystemVerilog语言实现,并部署在FPGA上。该项目模拟了TPU(张量处理单元)的矩阵运算功能,具有精简高效的特点。
文章总结
TinyTinyTPU项目概述
TinyTinyTPU是一个基于2×2脉动阵列的TPU风格矩阵乘法单元,采用SystemVerilog实现并部署在FPGA上。该项目完整实现了TPU架构,包括:
核心组件
- 2×2脉动阵列(4个处理单元)
- 完整的后MAC流水线(累加器、激活函数、归一化、量化)
- 基于UART的主机接口
- 多层MLP推理能力
- Basys3开发板部署(Xilinx Artix-7芯片)
资源占用(Basys3 XC7A35T)
- LUTs:约1,000(利用率5%)
- 触发器:约1,000(利用率3%)
- DSP48E1:8个切片
- BRAM:约10-15块
- 预估门数:约25,000门
设计理念
这是一个极简教学级TPU,旨在: - 学习TPU架构原理 - 理解脉动阵列数据流 - FPGA原型开发实验 - 小规模矩阵运算(2×2)
项目结构
tinytinyTPU-co/
├── rtl/ # SystemVerilog源码
├── sim/ # 仿真环境(Verilator+cocotb)
├── fpga/ # FPGA部署文件
├── host/ # Python主机接口
├── model/ # ML模型训练
└── README.md
关键特性
脉动阵列数据流
- 水平流动:激活值
- 垂直流动:部分和
- 对角线波前权重加载
完整流水线
- 权重FIFO → 矩阵乘法单元 → 累加器 → 激活函数 → 归一化 → 量化
多层MLP支持
- 双缓冲激活值
- 通过UART逐层加载权重
快速开始
仿真环境
bash
cd sim
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
make test # 运行所有测试
FPGA部署
- 使用Vivado或开源工具链(Yosys+nextpnr)
- 通过UART与主机通信(115200波特率)
推理示例
python
from tpu_driver import TPUDriver
tpu = TPUDriver('/dev/ttyUSB0') # 连接FPGA
tpu.write_weights([[1,2],[3,4]]) # 加载权重
tpu.write_activations([[5,6],[7,8]]) # 加载输入
tpu.execute() # 执行推理
print(tpu.read_result()) # 读取结果
架构细节
- PE00 → PE01:激活值水平流动
- PE10 → PE11:部分和垂直流动
- 权重采用对角线波前加载方式
开源工具支持
提供Yosys+nextpnr作为Vivado的替代方案,但需注意: - 时序收敛可能存在问题 - 比特流生成仍需Xilinx工具辅助
应用示例
包含手势识别demo,可实时分类水平/垂直移动轨迹:
bash
cd host
python3 gesture_demo.py # 需先训练模型(model/train.py)
该项目适合作为TPU架构的教学案例,实际生产应用需扩大阵列规模(如256×256)。
评论总结
以下是评论内容的总结:
AI应用优化观点
- 建议将AI用于高成本确定性过程的启发式优化,如预测性执行(95%准确率可显著提升效率)。
- 引用:"Determine the odds... skipping the high latency task chaining 19 times out of 20"
- 引用:"AI can aspire to... that would be pretty good"
硬件发展趋势观点
- 预测专用AI芯片(如TPU)将取代GPU,类比比特币挖矿从GPU到ASIC的演变。
- 引用:"GPU inference will come to an end... wildly inefficient by comparison"
- 引用:"Nvidias 70% margins are too hard to ignore"
技术学习方法观点
- 推崇通过小型项目从头构建(如microGPT)来深入理解技术。
- 引用:"build a tiny version from the ground-up to understand it"
- 引用:"one of the best ways to learn"
其他反馈
- 对项目的兴趣和支持:"Such a cool project!"
- 技术实现疑问:"Great! How do you program it?"
(注:所有评论均无评分数据,故未体现认可度差异)