> EulerNPU > 튜토리얼 > 07. FPGA / Zynq 개요

07. FPGA / Zynq 개요

cpu_ref / npu_sim에서 검증된 그래프를 실제 FPGA silicon으로 옮기는 일반 흐름을 다룹니다. 이 페이지에서 정한 패턴이 08. kws_silicon에서 구체적으로 실행됩니다.

왜 FPGA / Zynq 인가

GPU/CPU 대비 FPGA의 의미:

eulernpu의 1차 타깃 보드는 QMTECH XC7Z020 CLG484-1 (Zynq-7000):

자원의미
LUT53 K작은 IP는 여유
DSP slices220float MAC unit 50개 정도 가능
BRAM 36k280 (~140 KB usable)작은 모델 가중치는 온칩 캐싱 가능
DDR3512 MB큰 가중치는 DDR streaming 필요
ARM Cortex-A9666 MHz × 2 (PS)embedding/sample 등 PL 외 작업
EMIO UARTMIO 48/49bare-metal printf 채널
PL Fmax~90–115 MHz 실측float MAC 배치 기준

Zynq 아키텍처 한 컷

┌─────────────────────────────────────────┐
│ PS (Processing System)                   │
│  ┌──────────────┐    ┌──────────────┐   │
│  │ ARM A9 #0    │    │ ARM A9 #1    │   │
│  │ 666 MHz      │    │ 666 MHz      │   │
│  └──────┬───────┘    └──────┬───────┘   │
│         │   L1 32K + L2 512K            │
│         │   DDR3 controller             │
└─────────┼─────────────────────────────────┘
          │   GP0 (32-bit AXI, control)
          │   HP0–3 (64-bit AXI, data)
          │   EMIO (GPIO/UART routing)
┌─────────┼─────────────────────────────────┐
│ PL (Programmable Logic)                  │
│  ┌──────▼───────────────────────────┐    │
│  │ NPU IP                            │    │
│  │  s_axilite (control reg)          │    │
│  │  m_axi    (data via HP slave)     │    │
│  └───────────────────────────────────┘    │
└─────────────────────────────────────────┘

표준 흐름 — 7 단계

1. Train + INT8 quantize  →  weights.npz / weights.h
2. Host CPU smoke         →  같은 C 코드로 host gcc 컴파일, 정확도 확인
3. HLS C-synth            →  C++ → RTL IP, Fmax / DSP / BRAM 보고서
4. Vivado BD + impl       →  IP + PS + AXI 연결 → bitstream
5. Vitis platform + ELF   →  SDT 플랫폼 + BSP + bare-metal C ELF
6. xsdb silicon run       →  JTAG 비트스트림 load + ELF download + UART 캡처
7. 측정 + 회귀             →  cycle count / 정확도 / 재현성 자동 검증

이 7 단계 모두 자동화 가능한 스크립트로 짜는 게 핵심입니다 — silicon 재현성을 매번 cliff edge에서 다투지 않으려면.

PL offload 후보 (Spec → Hardware)

어떤 op가 PL fabric에 올릴 가치가 있나?

PL에 올리지 않는 게 좋은 것:

[18. PL offload analysis (deprecated)] 는 더 이상 별도 페이지가 아니지만, 같은 분석은 eulernpu profile --roofline 로 자동입니다.

보드 셋업 체크리스트

XC7Z020 보드를 처음 받았다면:

  1. 전원 + USB-JTAG 연결 (QMTECH는 USB-C 한 개로 둘 다)
  2. /dev/ttyUSBn 확인 — 보통 ttyUSB0/1 두 개 (JTAG + UART)
  3. Vivado 2025.1 + Vitis 2025.1 설치
  4. USB Blaster cable driverlsusb 로 Xilinx 인식 확인
  5. 115200-8N1 UART 터미널picocom, tio, pyserial

자세한 보드 셋업은 P05 sanity check가 가장 짧습니다: the FPGA sanity-check demo tutorial (shipped with the internal bring-up repo). 이 데모가 통과하면 P06 로 갈 수 있습니다.

보드별 자원 한계 (capability matrix)

eulernpu profile --all-boards /tmp/sim.profile.json

같은 그래프가 보드별로 fit 되는지 한 표로:

보드LUTDSPBRAM 36kDDR비고
XC7Z02053 K220280DDR3 512 MBP06/07/08 silicon 검증 보드
XC7Z045218 K900545DDR3 1 GB중급
XCZU7EV230 K1728312DDR4 4 GBZU+ 진입
XCZU9EG274 K2520912DDR4 4 GB큰 모델
XCK26(Kria)1248varies4 GB모듈형

다음 단계

실제 P06 KWS 데모로 silicon에 올리는 전체 흐름08. kws_silicon.