Zing 论坛

正文

YUA-T16:面向LLM推理的INT8矩阵加速硬件开源项目

YUA-T16是一个专为大型语言模型前馈网络推理设计的INT8精度16x16 GEMM矩阵乘法加速器,提供从RTL设计到FPGA验证再到ASIC流片的完整硬件加速解决方案。

硬件加速器GEMMINT8量化LLM推理FPGAASIC脉动阵列边缘AI开源硬件SystemVerilog
发布时间 2026/04/05 23:16最近活动 2026/04/05 23:27预计阅读 6 分钟
YUA-T16:面向LLM推理的INT8矩阵加速硬件开源项目
1

章节 01

导读 / 主楼:YUA-T16:面向LLM推理的INT8矩阵加速硬件开源项目

YUA-T16是一个专为大型语言模型前馈网络推理设计的INT8精度16x16 GEMM矩阵乘法加速器,提供从RTL设计到FPGA验证再到ASIC流片的完整硬件加速解决方案。

2

章节 02

项目背景与动机

随着大型语言模型(LLM)的快速发展,推理效率已成为制约AI应用普及的关键瓶颈。特别是Transformer架构中的前馈网络(Feed-Forward Network, FFN)层,占据了模型推理时间和能耗的很大一部分。传统的通用处理器(CPU/GPU)在执行矩阵乘法(GEMM)操作时存在能效比低、延迟高等问题,难以满足边缘设备和实时应用的需求。

YUA-T16项目应运而生,它是一个专为LLM FFN推理设计的硬件加速器,采用INT8量化精度,专注于16x16矩阵乘法瓦片(tile)的高效计算。该项目不仅提供了完整的RTL设计,还包含了从FPGA验证到ASIC多项目晶圆(MPW)流片的完整工具链,为研究者和开发者提供了一个端到端的硬件加速解决方案。

3

章节 03

矩阵乘法单元(MXU)架构

YUA-T16的核心是一个16x16的INT8矩阵乘法单元,采用脉动阵列(systolic array)架构实现高效的并行计算。这种设计允许数据在阵列中流动,每个处理单元(PE)在数据经过时执行乘累加(MAC)操作,最大限度地减少了内存访问次数,提高了计算吞吐量。

INT8量化的选择基于以下考虑:

  • 精度与效率的平衡:INT8在保持模型精度的同时,将内存带宽和计算资源需求降低了4倍(相比FP32)
  • 硬件友好性:定点运算比浮点运算更简单,可以显著降低芯片面积和功耗
  • 行业趋势:主流LLM框架(如TensorRT、ONNX Runtime)已广泛支持INT8推理
4

章节 04

完整的硬件-软件协同设计

项目采用了典型的AI加速器分层架构:

1. 计算层(MXU)

  • 16x16 INT8脉动阵列
  • 支持矩阵-矩阵乘法和矩阵-向量乘法
  • 内置累加器和激活函数单元

2. 存储层次

  • 片上SRAM用于权重和激活值的缓存
  • 支持分块(tiling)策略以处理更大的矩阵
  • DMA引擎用于高效的数据搬运

3. 控制层

  • 基于状态机的指令调度器
  • 支持命令队列和流水线执行
  • 可配置的计算精度和数据格式

4. 主机接口

  • PCIe接口用于与主机CPU通信
  • 内存映射寄存器(MMIO)用于配置和状态查询
  • 中断机制用于任务完成通知
5

章节 05

寄存器映射设计

项目定义了48个寄存器,分布在11个功能块中,提供了对加速器各个方面的精细控制:

功能块 关键寄存器 说明
全局 G2_ID (0x47320001), VERSION, CAP0 设备识别和能力查询
复位 BOOT_CAUSE, SW_RESET, WDOG_CTRL 系统复位和看门狗控制
队列 Q0-Q3 DOORBELL, STATUS, OVERFLOW 命令队列管理
DMA SUBMIT_LO/HI, CTRL, STATUS, ERR_CODE DMA传输控制
内存管理 USAGE, RESERVED, STATE 内存压力状态监控
计算单元 RUNSTATE, CTRL, FAULT_STATUS 计算单元状态和控制
性能监控 MXU_BUSY_CYCLES, TILE_COUNT, FREEZE 性能计数器
中断 PENDING, MASK, FORCE, CAUSE_LAST 中断管理
追踪 HEAD, TAIL, CTRL 1K条目追踪缓冲区

这种寄存器映射设计遵循了硬件设计的最佳实践,提供了清晰的软件接口,便于驱动程序开发和系统调试。

6

章节 06

Python主机软件栈

项目提供了完整的主机端软件栈,包含14个Python模块:

  • orbit_device.py:设备硬件抽象层(HAL),提供底层寄存器访问
  • orbit_mmio_map.py:寄存器映射的单一定义源(SSOT),确保软硬件一致性
  • orbit_desc.py:描述符打包器和CRC校验,用于DMA传输配置
  • orbit_scheduler.py:操作调度器,优化任务提交顺序
  • orbit_debug_protoa.py:调试命令行接口,支持运行时状态查询和配置修改

这些工具不仅简化了硬件验证过程,也为最终的驱动程序开发提供了参考实现。

7

章节 07

验证策略

项目采用了多层次的验证方法:

1. 单元测试

  • 16个测试文件,包含208个测试用例
  • 使用cocotb框架进行Python-based测试
  • 覆盖所有主要功能模块

2. 集成测试

  • 主机驱动的RTL协同仿真
  • GEMM端到端(E2E)测试验证
  • DMA传输完整性检查

3. FPGA验证

  • 基于AMD VCK190评估板的实现
  • Vivado项目配置和Tcl脚本
  • 板级冒烟测试

4. ASIC准备

  • OpenLane流程支持
  • 多项目晶圆(MPW)就绪设计
  • 位流(PDI)已成功生成(0错误)
8

章节 08

项目结构与代码组织

yua-t16/
├── rtl/                     # SystemVerilog RTL源码(7个新模块)
│   ├── mxu_core.sv          # 矩阵乘法单元核心
│   ├── mxu_ctrl.sv          # 控制逻辑
│   ├── mxu_datapath.sv      # 数据通路
│   ├── mxu_sram.sv          # 片上存储
│   ├── mxu_dma.sv           # DMA引擎
│   ├── mxu_top.sv           # 顶层封装
│   └── mxu_pkg.sv           # 共享参数和类型定义
│
├── tb/                      # 测试平台(cocotb)
│   ├── tb_g2_ctrl_top_host_e2e.py  # 主机驱动GEMM E2E测试
│   ├── dma_responder.py            # DMA测试内存模型
│   └── ...
│
├── tools/                   # Python主机栈(14个模块)
│   ├── orbit_device.py      # 设备HAL
│   ├── orbit_mmio_map.py    # 寄存器映射SSOT
│   ├── orbit_desc.py        # 描述符打包器+CRC
│   ├── orbit_scheduler.py   # 操作调度器
│   └── orbit_debug_protoa.py # 调试CLI
│
├── tests/                   # 16个测试文件,208个测试
├── fpga/vck190/             # Vivado项目+Tcl脚本
├── scripts/                 # 板级冒烟测试
├── openlane/                # ASIC设计流程配置
├── runtime/                 # 运行时库
├── driver/                  # 驱动程序源码
├── include/                 # 头文件
├── sim/                     # 仿真脚本
├── spec/                    # 设计文档
└── docs/                    # 15份设计文档

这种清晰的代码组织结构体现了专业硬件设计项目的最佳实践,便于团队协作和代码维护。