把 NPU 轻松搬上 FPGA 的工具 —— 下一步是 ASIC
用 YAML 定义 NPU,在真实 FPGA 上运行。一张规格就能完成小型 NPU 的校验、综合并让它跑在 Zynq-7000 上的推理优先(inference-first)NPU 全栈。
真实 FPGA(Zynq-7000)验证的 3 款 NPU。同一个编译器,在 QMTECH XC7Z020 开发板上以真实硅片实证了关键词识别 · 工业故障诊断 · 小型 LLM(FFN-on-NPU)—— 不是仿真。
spec → compile → bitstream → 真实 FPGA,单一 CLI 完成。138 个算子(17 组)、INT4/INT8 量化、4 个后端(cpu_ref · npu_sim · zynq_ps · zynq_pl_stub)、15 个 CLI 子命令,整个周期走的是同一条流水线。
同一编译器 · 同一开发板(QMTECH XC7Z020,Zynq-7000)—— 综合并实测验证三款不同的 NPU
DS-CNN + 16 层 GRU + FC 以 INT8 量化。全图 NPU IP(kws_npu_top)合成,90 MHz @ DSP 45% / BRAM 24%。
| 精度 | 11/11(CPU↔NPU 100% 一致) |
|---|---|
| 加速 | CPU 比 8.07×(3.17 ms/推理) |
| 流式 | 200 帧 5.166 s · 38.7 inf/s |
xsdb 6 阶段启动 + UART 输出 11/11 精度 · 8.07× 加速 · 每个关键词的置信度。
振动 FFT → 3×Conv1D + MaxPool + GAP + 2×FC INT8。bearing_npu_top IP,90 MHz @ DSP 86% / BRAM 12%。
| 精度 | 40/40(CPU↔NPU 100% 一致) |
|---|---|
| 加速 | CPU 比 11.13×(≈4 ms/推理,252 inf/s) |
| 实时监控 | 200 窗口 · 召回率 100% · 误报 0% |
Demo 1 —— 精度验证。40 个测试样本分类表(每类 CPU/NPU 周期、11.13× 加速)。
Demo 2 —— 实时监控。200 窗口流式(故障类、置信度,召回率 100% · 误报 0%)。
nanoGPT 10.77M(D=384 · 6 层、TinyShakespeare)。仅 FFN(fc1 → gelu → fc2)卸载至 NPU,其余在 ARM —— XC7Z020 上让 LLM 跑起来的混合 L2 构型。
| 验证 | CPU↔NPU 文本 5/5 比特一致 |
|---|---|
| 资源 | DSP 9% · BRAM 2% · LUT 17%(FFN 专用) |
| 意义 | 在 Zynq-7000 上实证 LLM 推理分割的可能性 |
Demo 1 —— 比特一致。5 个 prompt × 16 字符生成 —— CPU↔NPU 文本 5/5 一致验证。
Demo 2 —— 实时流。50 字符 ROMEO prompt 生成 —— FFN-on-NPU 混合实时推理。
※ 三个项目全部为同一 EulerNPU 编译器输出直接合成的真实硅片结果(非仿真)。开发板:QMTECH XC7Z020 CLG484-1(Zynq-7000),PL 时钟 90–100 MHz,ARM Cortex-A9 PS。同一流程下一步即 ASIC 合成。
在 FPGA 上证明后,用同一个流程走到 ASIC
138 个算子、10 种 DType,从 spec.yaml 一路到 FPGA 推理
NPU 推理所需的全部算子,体系化为 17 组。覆盖高效注意力(FlashAttention · GQA)、视觉编码器、MoE/Sparse、Diffusion、Speculative Decoding 等最新架构。
| Core Math | MatMul, Add, Mul, Div, Sqrt 等基础数学运算 |
|---|---|
| Activation | ReLU, GELU, SiLU, Sigmoid, Softmax 等 |
| Normalization | LayerNorm, RMSNorm, BatchNorm, GroupNorm |
| Conv/Vision | Conv2D, DepthwiseConv, Pool, Resize, Patch |
| Sequence/Attention | ScaledDotProduct, MultiHeadAttention, RoPE, ALiBi |
| Efficient Attention NEW | FlashAttention, SlidingWindowAttention, MultiQueryAttention(GQA) |
| MoE/Sparse | TopKRouter, ExpertDispatch, LoadBalanceLoss |
| Recurrent | LSTM, GRU, SRU |
| Graph | Concat, Split, Reshape, Transpose, Gather, Scatter |
| Multimodal | CrossAttention, VisionProjection, AudioMel |
| Vision Encoder NEW | PatchEmbed, ClsTokenPrepend, ImageNorm |
| Diffusion NEW | TimestepEmbed, NoiseSample, DDIMStep, CFGScale, FlowMatchStep |
| Speculative Decoding NEW | TokenAcceptance, DraftVerify, PrefixCacheLookup/Store |
| Quantization | Quantize, Dequantize, FakeQuantize, PackInt4/UnpackInt4 |
| Mamba/SSM | SelectiveScan, Discretize, SSMConv |
| Cache Compress | KVCacheCompress, SlidingWindow, H2O |
| Autonomy | PointCloud, BEVProject, TrajectoryPredict |
按精度与性能需求分为 3 个层级。
| Tier 0 (必需) | fp32, int32 —— 所有算子均支持 |
|---|---|
| Tier 1 (推荐) | fp16, bf16, int8, uint8 —— 大多数算子支持 |
| Tier 2 (扩展) | int16, int4, fp8_e4m3, fp8_e5m2 —— 特定算子 |
| cpu_ref | 主机 NumPy 参考实现(无依赖即可立即运行) |
|---|---|
| npu_sim | 功能仿真 + 执行 trace + 逐算子周期/MAC/延迟估计 |
| zynq_ps | Zynq ARM PS 执行 |
| zynq_pl_stub | FPGA PL 卸载分析 / 仿真 |
| Zynq-7000 | XC7Z020, AXI-Lite MMIO 传输 |
|---|---|
| Zynq UltraScale+ | ZU3EG, ZU9EG (INT4 / 高性能目标) |
从YAML规格到可部署的.npuart文件
声明式YAML规格文件经过验证、IR转换和优化后,编译为.npuart(NPU Archive)格式。
| 输入 | spec.yaml — 声明式计算图定义 |
|---|---|
| 验证 | 算子兼容性、数据类型、形状推断检查 |
| IR | 中间表示——图优化、算子融合 |
| 输出 | .npuart 二进制——可直接在运行时加载 |
编译后的.npuart文件可在模拟器或Zynq-7020 FPGA硬件上运行。
| 模拟器 | 周期精确模拟,支持性能分析 |
|---|---|
| FPGA | Zynq-7020 AXI-Lite MMIO运行时 |
| 性能分析 | 逐层延迟、内存带宽、利用率报告 |
单一入口点 eulernpu —— 15 个子命令覆盖完整工作流(支持 --lang ko|en|zh|ja|es)
| 命令 | 说明 |
|---|---|
eulernpu info | 显示平台、支持算子与 dtype 信息 |
eulernpu validate | 校验 spec.yaml 算子图(JSON-Schema + 23 条语义规则) |
eulernpu migrate-spec NEW | 0.4 → 0.5 规格自动迁移 |
eulernpu compile | 将 spec.yaml 编译为 .npuart 工件 |
eulernpu run | 在 cpu_ref/npu_sim/zynq 后端运行 .npuart 工件 |
eulernpu sim | 功能仿真 + 周期/MAC/延迟估计 |
eulernpu generate NEW | 自回归 token 生成(KV 缓存) |
eulernpu quantize NEW | INT8/INT4 权重量化(--weight-bits 4) |
eulernpu profile | 逐算子执行时间、内存占用分析 |
eulernpu explain | PL 卸载 + 内存规划,图调度可视化 |
eulernpu board smoke | 确认 FPGA 开发板连接与基本运行 |
eulernpu calibrate | 量化校准数据采集与应用 |
eulernpu benchmark | 运行延迟/吞吐量基准测试 |
eulernpu replay | 回放已保存的执行 trace |
eulernpu compress-cache | 应用并校验 KV 缓存压缩配置 |
EulerNPU遵循的核心设计理念
YAML规格文件定义计算图——无需编写底层代码,编译器处理所有优化。
能力矩阵在编译前检查每个算子的数据类型和硬件约束,避免运行时错误。
在部署到FPGA之前,通过周期精确模拟器验证正确性和性能。
通过分步指南快速掌握EulerNPU
教程即将公开。
安装EulerNPU并编译您的第一个模型
Python 3.10+, NumPy
可选:ONNX 导入、Zynq-7000 / UltraScale+ 开发板(FPGA 目标)