FPGA에 NPU를 쉽게 올리는 툴 — 다음 단계는 ASIC
YAML로 NPU를 정의해 실제 FPGA에서 동작. 스펙 한 장으로 작은 NPU를 검증·합성하고 Zynq-7000에서 동작시키는 추론 우선(inference-first) NPU 풀스택입니다.
실 FPGA(Zynq-7000)에서 검증된 NPU 3종. 같은 컴파일러로 키워드 스포팅 · 산업 결함 진단 · 소형 LLM(FFN-on-NPU)이 QMTECH XC7Z020 보드에서 silicon으로 동작 — 시뮬레이션이 아닙니다.
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 3개를 합성·실측 검증
DS-CNN + 16-layer GRU + FC를 INT8로 양자화. 풀그래프 NPU IP(kws_npu_top) 합성, 90 MHz @ DSP 45% / BRAM 24%.
| 정확도 | 11/11 (CPU↔NPU 100% 일치) |
|---|---|
| 가속 | 8.07× vs CPU (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% 일치) |
|---|---|
| 가속 | 11.13× vs CPU (≈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 layer, 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개 프롬프트 × 16자 생성 — CPU↔NPU 텍스트 5/5 일치 검증.
Demo 2 — 라이브 스트림. 50자 ROMEO 프롬프트 생성 — 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 | 기능 시뮬레이션 + 실행 트레이스 + 연산자별 사이클/MAC/지연 추정 |
| zynq_ps | Zynq ARM PS 실행 |
| zynq_pl_stub | FPGA PL 오프로드 분석/에뮬레이션 |
| Zynq-7000 | XC7Z020, AXI-Lite MMIO 트랜스포트 |
|---|---|
| Zynq UltraScale+ | ZU3EG, ZU9EG (INT4 / 고성능 타겟) |
spec.yaml에서 FPGA 추론까지 4단계 파이프라인
| 1단계 | spec.yaml 작성 및 eulernpu validate로 검증 |
|---|---|
| 2단계 | eulernpu compile로 .npuart 아티팩트 생성 |
| 3단계 | eulernpu sim으로 호스트에서 사이클 정확도 시뮬레이션 |
| 4단계 | eulernpu board smoke로 FPGA 보드 연결 확인 후 eulernpu run으로 실행 |
| calibrate | 양자화 캘리브레이션 데이터 수집 |
|---|---|
| compress-cache | KV 캐시 압축 설정 적용 |
| benchmark | 레이턴시/처리량 벤치마크 |
단일 진입점 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 | .npuart 아티팩트를 cpu_ref/npu_sim/zynq 백엔드에서 실행 |
eulernpu sim | 기능 시뮬레이션 + 사이클/MAC/레이턴시 추정 |
eulernpu generate NEW | 오토리그레시브 토큰 생성 (KV 캐시) |
eulernpu quantize NEW | INT8/INT4 가중치 양자화 (--weight-bits 4) |
eulernpu profile | 연산자별 실행 시간, 메모리 사용량 프로파일링 |
eulernpu explain | PL 오프로드 + 메모리 플랜, 그래프 스케줄 시각화 |
eulernpu board smoke | FPGA 보드 연결 및 기본 동작 확인 |
eulernpu calibrate | 양자화 캘리브레이션 데이터 수집 및 적용 |
eulernpu benchmark | 레이턴시/처리량 벤치마크 실행 |
eulernpu replay | 저장된 실행 트레이스를 재생 |
eulernpu compress-cache | KV 캐시 압축 설정 적용 및 검증 |
EulerNPU의 8가지 핵심 설계 철학
| Inference-first | 학습이 아닌 추론 실행에 최적화된 연산자 세트 |
|---|---|
| Operator-first | 연산자가 1급 시민 — 모든 기능이 연산자 중심 |
| Spec-driven | YAML 선언형 스펙으로 그래프를 정의, 코드가 아닌 데이터 |
| Compile-once | 한 번 컴파일, 여러 타겟(CPU/FPGA)에서 실행 |
| Artifact-centric | .npuart 단일 파일로 재현 가능한 배포 |
|---|---|
| Simulation-first | 실제 하드웨어 전에 호스트에서 완전 검증 |
| DType-aware | 티어 기반 dtype 시스템으로 정밀도/성능 트레이드오프 명시 |
| CLI-native | 모든 워크플로우가 CLI 서브커맨드로 자동화 가능 |
단계별 가이드로 EulerNPU를 빠르게 익히세요
튜토리얼은 공개 예정입니다.
EulerNPU를 설치하고 첫 번째 연산자 그래프를 실행하세요
Python 3.10+, NumPy
선택: ONNX 임포트, Zynq-7000 / UltraScale+ 보드 (FPGA 타겟)