跳转到主要内容

P3 FPGA 神经网络推理演示

MNIST MLP INT8 GEMV引擎实现

平台:HME-P3P100N0F676-M0H1_EVB开发板

一、演示功能

在P3 FPGA上运行的硬件神经网络,对输入的28×28手写数字灰度图(784像素,INT8量化)执行两层全连接网络前向推理,输出0~9十个类别的得分并自动给出识别结论。

1.1 端到端数据流

图 1-1 演示系统端到端数据流

完整交互过程为:PC上位机通过USB-UART下发“装载图像”命令和784个量化像素字节;host_if命令解析模块写入激活RAM(EMB实现);启动命令触发nn_core的分层调度状态机——第一层将激活逐拍广播至16路INT8乘累加阵列,与权重ROM(EMB固化)中对应神经元的权重并行做乘加,784拍后经移位量化、ReLU激活写回激活区;重复8组完成全部128个隐层神经元;第二层以同样方式完成128→10的映射;最后argmax模块给出识别结果,主机经UART回读10个INT32得分与top-1结论。

1.2 本演示验证了什么

本次推理的本质数据通路是GEMV(矩阵-向量乘)——这正是一切LLM推理decode阶段的核心算子:大模型每生成一个token,都要对全部权重矩阵做一遍GEMV。因此本演示虽小,验证点却与Hummingbird+式LLM加速器逐项对应:

表 1-1 演示验证点与边缘LLM部署能力的映射

1.3 关键指标

表 1-2 演示关键指标

二、系统方案与微架构

2.1 模型与量化

模型为MNIST手写数字识别MLP:输入层784维(像素归一化后线性量化至[0,127]),隐层128个神经元(ReLU),输出层10类。训练在numpy中完成(SGD+动量,5个epoch),随后做训练后量化(PTQ):权重按层对称INT8(scale = max|W|/127),激活同样线性量化;累加器INT32,量化重校准采用远离零舍入的移位实现——requant(acc,s) = sign(acc)·(|acc|+2^(s-1))>>s,两层移位量经8000样本标定为12和7,保证INT32累加值恰好映射回INT8区间不溢出。

2.2 微架构设计

  • 16路MAC阵列:P3每个DSP块在10×10拆分模式下可并行执行8个INT8乘加,16路MAC理论仅需2个DSP块;RTL以1乘1加的通用写法实现,由综合工具推断映射。
  • 权重ROM:8192字×128bit,每字16字节=16路lane各1字节;L1区6272字(8组×784,字地址=组号×784+k,字节j=神经元16g+j的第k个权重),L2区128字(偏移6272)。一拍读出一个128bit字即可供全部16路。
  • 激活RAM:1K×8bit,低784字节为当前图像,784~911为L1输出(ReLU后INT8),供L2流读。
  • 调度:L1按16神经元一组分时(8组),每组784拍数据+2拍流水排空+16拍量化写回;L2单组10路有效;argmax十拍比较。FSM共7状态,支持背靠背推理。
  • 主机接口:调试寄存器总线(0x00 ID / 0x04 CTRL / 0x08 STATUS / 0x14 RES_DATA / 0x1C ACT_DATA自动递增 / 0x20 CYCLES)+ UART命令链路(A装载/S启动/R回读/D状态/M结果),板级演示无需额外主机CPU。

2.3 代码结构

表 2-2 代码清单

2.4 P3资源占用

三、测试结果

实物图:

批量测试模式:

单张图片测试模式:

【附录:参考资料】

●《HME-P3系列FPGA数据手册》V1.2,京微齐力,2026-04

●《HME-P3系列开发板硬件手册》V1.1,京微齐力,2026-02

● 《HME-P3系列EMB用户手册》《配置用户手册》《IO用户手册》《SoC系统用户手册》

● 《P3复现Hummingbird+与边缘LLM部署可行性评估》,产品部+数字逻辑组,V1.0

● Li, J. 等. Hummingbird+: Advancing FPGA-based LLM Deployment from Research Prototype to Edge Product. ACM FPGA '26

● LeCun等. MNIST手写数字数据库(60K训练/10K测试)

文章来源:京微齐力