EulerNPU

Herramienta para poner fácilmente un NPU en FPGA — siguiente paso: ASIC

Define el NPU en YAML y hazlo funcionar en un FPGA real. Una pila NPU inference-first que con una sola hoja de spec valida, sintetiza y pone en marcha un NPU pequeño sobre Zynq-7000.

3 NPUs validados en silicio sobre una FPGA real (Zynq-7000). Con el mismo compilador, keyword spotting, diagnóstico industrial de fallos y un LLM pequeño (FFN-on-NPU) se han demostrado en silicio sobre la placa QMTECH XC7Z020 — no es simulación.

spec → compile → bitstream → FPGA real, desde una sola CLI. 138 operadores (17 grupos), cuantización INT4/INT8, 4 backends (cpu_ref · npu_sim · zynq_ps · zynq_pl_stub) y 15 subcomandos CLI cubren todo el ciclo en el mismo flujo.

3
NPUs validados en FPGA
138
Operadores (17 grupos)
4
Backends
15
Subcomandos CLI

La verificación FPGA es el paso previo a ASIC. En Zynq-7000 ya hay tres NPUs corriendo sobre silicio real — detección de palabras clave, diagnóstico de fallos industriales, inferencia LLM pequeña. El siguiente paso es la síntesis ASIC desde la misma salida del compilador EulerNPU.

Open Source · FPGA-Verified

3 NPUs corriendo en un FPGA real

Mismo compilador, misma placa (QMTECH XC7Z020, Zynq-7000): 3 NPUs distintos sintetizados y medidos en silicio

KWS (Keyword Spotting)

DS-CNN + GRU de 16 capas + FC cuantizado en INT8. IP NPU de grafo completo (kws_npu_top) sintetizado a 90 MHz @ DSP 45% / BRAM 24%.

Precision11/11 (coincidencia 100% CPU ↔ NPU)
Aceleracion8.07× vs CPU (3.17 ms/inferencia)
Streaming200 frames en 5.166 s · 38.7 inf/s

Arranque xsdb de 6 etapas + UART: precisión 11/11 · aceleración 8.07× · confianza por palabra clave.

Diagnostico de fallos en rodamientos CWRU

FFT de vibracion → 3×Conv1D + MaxPool + GAP + 2×FC en INT8. IP bearing_npu_top a 90 MHz @ DSP 86% / BRAM 12%.

Precision40/40 (coincidencia 100% CPU ↔ NPU)
Aceleracion11.13× vs CPU (≈4 ms/inferencia, 252 inf/s)
Monitor en tiempo real200 ventanas · recall 100% · falsas alarmas 0%

Demo 1 — Validación de precisión. Tabla de clasificación de 40 muestras de test (ciclos CPU/NPU por clase, aceleración 11.13×).

Demo 2 — Monitor en tiempo real. Stream de 200 ventanas (clase de fallo · confianza, recall 100% · 0 falsas alarmas).

nanoGPT LLM (FFN-on-NPU)

nanoGPT 10.77M (D=384 · 6 capas, TinyShakespeare). Solo el FFN (fc1 → gelu → fc2) se descarga al NPU; el resto corre en ARM — configuracion hibrida L2 con un LLM corriendo en la XC7Z020.

VerificacionCoincidencia bit a bit 5/5 entre CPU y NPU
RecursosDSP 9% · BRAM 2% · LUT 17% (solo FFN)
SignificadoDemuestra que es viable particionar la inferencia de un LLM en una placa Zynq-7000

Demo 1 — Identidad bit a bit. 5 prompts × 16 chars — verificación de coincidencia bit a bit 5/5 CPU↔NPU.

Demo 2 — Stream en vivo. Generación de 50 chars del prompt ROMEO — inferencia en vivo híbrida FFN-on-NPU.

※ Los tres proyectos son resultados sobre silicio real (no simulacion), sintetizados tal cual los emite el compilador de EulerNPU. Placa: QMTECH XC7Z020 CLG484-1 (Zynq-7000), reloj de PL 90–100 MHz, PS ARM Cortex-A9. El siguiente paso, con el mismo flujo, es la sintesis para ASIC.

Camino verificado

Tras probar en FPGA, el mismo flujo llega a ASIC

Completado · público
Verificación FPGA
KWS · diagnóstico de fallos · LLM
Medido en Zynq-7000
Meta a largo plazo
Sovereign NPU
Soberanía del chip de inferencia IA
Edge · on-device

Por qué empezamos en FPGA. Validar el mismo compilador y spec en un dispositivo real antes del tape-out de ASIC es el camino más razonable para reducir coste y riesgo. EulerNPU soporta todo el flujo en una cadena de herramientas CLI.

138 Operadores & 10 Tipos de Datos

138 operadores, 10 DType, desde spec.yaml hasta la inferencia en FPGA

138 operadores (17 grupos, A–Q)

Sistematización en 17 grupos de todas las operaciones necesarias para la inferencia NPU. Cobertura de arquitecturas recientes — attention eficiente (FlashAttention · GQA), vision encoder, MoE/Sparse, Diffusion, Speculative Decoding.

▶ Ver los 17 grupos completos
Core MathMatMul, Add, Mul, Div, Sqrt y otras operaciones matematicas basicas
ActivationReLU, GELU, SiLU, Sigmoid, Softmax, etc.
NormalizationLayerNorm, RMSNorm, BatchNorm, GroupNorm
Conv/VisionConv2D, DepthwiseConv, Pool, Resize, Patch
Sequence/AttentionScaledDotProduct, MultiHeadAttention, RoPE, ALiBi
Efficient Attention NEWFlashAttention, SlidingWindowAttention, MultiQueryAttention(GQA)
MoE/SparseTopKRouter, ExpertDispatch, LoadBalanceLoss
RecurrentLSTM, GRU, SRU
GraphConcat, Split, Reshape, Transpose, Gather, Scatter
MultimodalCrossAttention, VisionProjection, AudioMel
Vision Encoder NEWPatchEmbed, ClsTokenPrepend, ImageNorm
Diffusion NEWTimestepEmbed, NoiseSample, DDIMStep, CFGScale, FlowMatchStep
Speculative Decoding NEWTokenAcceptance, DraftVerify, PrefixCacheLookup/Store
QuantizationQuantize, Dequantize, FakeQuantize, PackInt4/UnpackInt4
Mamba/SSMSelectiveScan, Discretize, SSMConv
Cache CompressKVCacheCompress, SlidingWindow, H2O
AutonomyPointCloud, BEVProject, TrajectoryPredict

Sistema de 10 DType

Se clasifican en 3 niveles segun los requisitos de precision y rendimiento.

Tier 0 (obligatorio) fp32, int32 — soportados en todos los operadores
Tier 1 (recomendado) fp16, bf16, int8, uint8 — soportados en la mayoria de operadores
Tier 2 (extendido) int16, int4, fp8_e4m3, fp8_e5m2 — operadores especificos

Backends de ejecucion (4)

cpu_ref Referencia NumPy del host (ejecucion inmediata sin dependencias)
npu_sim Simulacion funcional + traza de ejecucion + estimacion de ciclos/MAC/latencia por operador
zynq_ps Ejecucion en el ARM PS de Zynq
zynq_pl_stub Analisis/emulacion del offload a la PL del FPGA

Perfiles de placa FPGA

Zynq-7000 XC7Z020, transporte AXI-Lite MMIO
Zynq UltraScale+ ZU3EG, ZU9EG (target INT4 / alto rendimiento)

Pipeline de Compilacion

Desde la especificacion YAML hasta el archivo .npuart desplegable

spec.yaml → IR → .npuart

El archivo de especificacion YAML declarativo se valida, transforma a IR y optimiza antes de compilarse al formato .npuart (NPU Archive).

Entrada spec.yaml — definicion declarativa del grafo computacional
Validacion Compatibilidad de operadores, tipos de datos, inferencia de formas
IR Representacion intermedia — optimizacion de grafos, fusion de operadores
Salida Binario .npuart — cargable directamente en el runtime

Runtime

Los archivos .npuart compilados se pueden ejecutar en el simulador o en hardware FPGA Zynq-7020.

Simulador Simulacion con precision de ciclo, soporte de analisis de rendimiento
FPGA Runtime Zynq-7020 AXI-Lite MMIO
Perfilado Latencia por capa, ancho de banda de memoria, reporte de utilizacion

Referencia CLI

Unico punto de entrada eulernpu — 15 subcomandos cubren todo el flujo de trabajo (con soporte --lang ko|en|zh|ja|es)

Comando Descripcion
eulernpu infoMuestra la plataforma, los operadores soportados y la informacion de dtype
eulernpu validateValida el grafo de operadores de spec.yaml (JSON-Schema + 23 reglas semanticas)
eulernpu migrate-spec NEWMigracion automatica de specs 0.4 → 0.5
eulernpu compileCompila spec.yaml a un artefacto .npuart
eulernpu runEjecuta el artefacto .npuart en los backends cpu_ref/npu_sim/zynq
eulernpu simSimulacion funcional + estimacion de ciclos/MAC/latencia
eulernpu generate NEWGeneracion autorregresiva de tokens (KV cache)
eulernpu quantize NEWCuantizacion de pesos INT8/INT4 (--weight-bits 4)
eulernpu profilePerfilado del tiempo de ejecucion y uso de memoria por operador
eulernpu explainOffload a PL + plan de memoria, visualizacion del schedule del grafo
eulernpu board smokeVerifica la conexion de la placa FPGA y el funcionamiento basico
eulernpu calibrateRecoleccion y aplicacion de datos de calibracion para cuantizacion
eulernpu benchmarkEjecuta benchmarks de latencia/throughput
eulernpu replayReproduce una traza de ejecucion guardada
eulernpu compress-cacheAplica y valida la configuracion de compresion de KV cache

Principios de Diseno

Filosofia central de diseno de EulerNPU

Declarativo Primero

Archivos de especificacion YAML definen el grafo computacional — sin necesidad de codigo de bajo nivel, el compilador maneja todas las optimizaciones.

Validacion Pre-Compilacion

La matriz de capacidades verifica tipos de datos y restricciones de hardware de cada operador antes de compilar, previniendo errores en tiempo de ejecucion.

Simulacion Primero

Verifique la correctitud y el rendimiento con el simulador de precision de ciclo antes de desplegar en FPGA.

Tutoriales

Aprenda EulerNPU rapidamente con guias paso a paso

Tutoriales proximamente.

Instalacion y Primeros Pasos

Instale EulerNPU y compile su primer modelo

Instalacion

pip install -e ".[dev]"

# Validar y compilar
eulernpu validate spec.yaml
eulernpu compile spec.yaml -o model.npuart

Requisitos

Python 3.10+, NumPy

Opcional: importacion ONNX, placas Zynq-7000 / UltraScale+ (target FPGA)

Comience el desarrollo de inferencia NPU con EulerNPU

Desde especificacion YAML hasta despliegue FPGA, con una sola CLI.

Comenzar en GitHub Contactenos