Verilog · 项目报告

fguzman82/gateGPT

Full Transformer into a custom chip. microGPT in RTL, generating names on a Virtex-5 FPGA at ~56k tokens/second.

已完成 打开 GitHub
F
521星标
87Fork
0Issue
未知许可证

分析结果

项目分析

gateGPT 是一个用 Verilog-2001/RTL 实现的小型字符级 GPT 推理核心,将类似 Andrej Karpathy microGPT 的单层 Transformer 完整运行在 Xilinx Virtex-5 FPGA 上。项目包含 RTL 推理核心、定点整数参考实现、训练与权重导出工具、微码汇编器、iSim 测试平台以及 XUPV5/ML509 板级工程。模型规模较小:1 个 Transformer block、24 维 embedding、4 个 attention head、context 长度 16、词表 27,使用 Q5.11 16 位定点数。最终设计在 XC5VLX110T 上 80 MHz 闭合时序,约 5.4 万到 6.9 万 tokens/s,可在 LCD 上实时生成英文名字。该仓库更偏向 FPGA/数字电路/AI 加速器研究和教学,不是通用大模型推理框架。

适用领域 FPGA / Verilog RTL / 数字 IC / ASIC 原型 / AI 硬件加速 / Transformer 推理 / 定点量化 / 嵌入式系统 / Xilinx ISE / Virtex-5 / 硬件微码架构 / 低资源神经网络推理
配置难度 高。需要同时理解 Transformer 推理、定点量化、Verilog RTL、FPGA BRAM/DSP 资源映射、Xilinx ISE 工具链、时序收敛和硬件仿真。对于熟悉 FPGA 的工程师,这是一个很好的中高级参考项目;对于只会 Python/深度学习的开发者,上手门槛较高。
商业价值 商业直接落地价值较低,因为模型规模极小、目标平台老旧,不能作为通用 LLM 推理产品。但技术和教育价值较高:它展示了 Transformer 推理核心如何被拆解为硬件模块、如何做定点 bit-exact 验证、如何用 KV cache 和并行 MAC 提升吞吐、如何处理 FPGA 综合和时序问题。对 AI 芯片团队、FPGA 加速器团队、硬件课程和原型研究有参考价值,可作为小型 Transformer ASIC/FPGA 架构探索的起点。
01

技术亮点

  • 完整 Transformer block 以 RTL 方式实现,而不仅是单个算子或软件模拟。
  • 采用 microcode-ROM sequencer 驱动模块化 datapath actuator,架构比手写巨型状态机更清晰。
  • 实现 persistent KV cache,增量解码时只计算新 token 的 K/V,吞吐相比初版显著提升。
  • 最终在真实 Virtex-5 板卡上 80 MHz 闭合时序并验证运行,不只是仿真项目。
  • 推理速度达到约 5.4 万到 6.9 万 tokens/s,对于极小字符模型和老款 FPGA 来说很有展示价值。
  • 提供 Python bit-exact 定点参考实现,可用于 RTL 对齐和验证。
  • 包含 RMSNorm、matvec、attention、exp、sampler、embedding、vecop 等多个可学习的硬件模块。
  • README 记录了详细优化过程,包括 KV cache、并行 MAC、并行 attention divider、radix-4 divider、BRAM/DSP pipeline 等工程经验。
  • 对 Xilinx ISE/XST 的综合坑点有详细说明,例如 `$readmemh` ROM 被清零、寄存器被错误常量折叠、BRAM 模板推断失败等。
  • 资源利用和时序数据非常透明,适合作为 FPGA AI 加速器性能分析案例。
02

目标用户

  • FPGA 开发者
  • 数字 IC / RTL 工程师
  • AI 芯片架构研究人员
  • 对 Transformer 硬件实现感兴趣的学生和教师
  • 希望学习定点神经网络推理的开发者
  • 使用老款 Xilinx ISE / Virtex-5 平台的硬件工程师
  • 想研究 KV cache、attention、softmax、采样器等模块硬件化的人
03

配置要求

  • 硬件目标:Xilinx Virtex-5 XC5VLX110T-1 FF1136,README 中验证平台为 XUPV5 / ML509。
  • FPGA 工具链:Xilinx ISE 14.7、XST、iSim、ngdbuild、map、par、trce、bitgen。
  • HDL:Verilog-2001。
  • Python:需要 Python 3、numpy、torch。
  • 时钟:板上 100 MHz oscillator 经 DCM CLKFX ×4/5 生成 80 MHz core clock。
  • 模型参数:1 block、4 heads、head-dim 6、n_embed 24、MLP hidden 96、context 16、vocab 27。
  • 定点格式:Q5.11 signed 16-bit,FRAC=11。
  • 资源需求:最终版本约使用 16.5k LUT、5.5k FF、62 个 DSP48E、2 个 RAMB36。
  • DSP 资源接近满载:在 XC5VLX110T 上 DSP48E 使用率约 96%,移植到更小 FPGA 时风险较高。
  • 老版本 XST 对 `$readmemh` ROM 初始化存在综合与仿真不一致问题,项目使用 case function 常量 ROM 规避。
04

适用场景

  • 学习如何用 RTL 实现完整 Transformer 推理数据通路
  • 研究小模型 GPT 在 FPGA 上的定点化与硬件调度
  • 作为 AI 加速器课程或实验项目的参考设计
  • 分析 KV cache、并行 MAC、RMSNorm、attention softmax 等模块的硬件优化方法
  • 验证 Python 定点参考模型与 RTL bit-exact 对齐流程
  • 移植到其他 FPGA 或改造成 ASIC 原型
  • 研究微码 ROM sequencer 驱动模块化 datapath 的架构方式
  • 复现实板上 LCD 名字生成演示
05

部署与配置

  • 准备 Python 3 环境,并安装 numpy、torch 等训练和导出依赖。
  • 训练模型:运行 `python tools/train.py`,生成 `tools/weights.npz`。
  • 导出定点权重和 RTL include 文件:运行 `python tools/export.py`,生成 `generated/*.hex`、`core/core_params.vh`、`gains.vh` 等文件。
  • 生成微码:运行 `python tools/ucode_asm.py`,生成 `generated/ucode.hex` 和 `core/coremap.vh`。
  • 使用 Xilinx iSim 仿真:执行 `fuse -incremental -prj tb_core.prj -o sim/tb_core_sim work.tb_core`。
  • 运行仿真测试:执行 `./sim/tb_core_sim -tclbatch sim/isim_run.tcl`,应输出 `CYCLES_PER_TOKEN` 和 `CORE PASS`。
  • 如需上板,使用 Xilinx ISE 14.7,对 `xupv5_microgpt_top.prj` 和 `board/xupv5_microgpt.ucf` 进行 xst、ngdbuild、map、par、trce、bitgen 流程。
  • 目标器件为 `xc5vlx110t-1-ff1136`,适用于 XUPV5 / ML509 一类 Virtex-5 开发板。
  • 下载 bitstream 后,模型会在板载 LCD 上生成名字,旋转编码器可调节生成速率和采样温度。
06

风险与注意事项

  • 模型非常小,只能生成字符级英文名字,不能用于真实通用 NLP 或大模型场景。
  • 依赖老旧 Xilinx ISE 14.7 和 Virtex-5 平台,现代 Vivado 或其他 FPGA 平台移植需要额外工作。
  • DSP 使用率高达约 96%,在同级或更小器件上继续扩展模型规模空间有限。
  • README 中未声明明确 license,商业使用、二次分发或集成到产品前需要确认授权。
  • XST 14.7 存在综合与仿真不一致风险,需要认真检查综合报告中的 tied-to-default、constant-folding 等警告。
  • 定点格式、模型结构和上下文长度高度定制,改 vocab、hidden size、block 数、context 长度都可能需要重新训练、导出、调整 ROM 和时序。
  • 项目主要面向研究和教学,不具备生产级可维护性、跨平台构建脚本或标准 CI。
  • 硬件验证依赖特定开发板外设,例如 LCD、旋转编码器、UCF 约束等,非同款板卡需要改板级代码。
  • 权重 ROM 使用 LUT-baked constants,模型稍大后 LUT/ROM 组织方式可能成为瓶颈。
  • 如果开发者缺乏 Verilog、FPGA 时序收敛和 Xilinx 工具链经验,上手难度较高。

历史记录

热榜历史快照

2026-06-19 第12名 新收录 · github_search