MNIST CNN 가속기 설계 - FPGA 보드 설계


MNIST CNN 가속기 설계

타겟 모델 구조
본 프로젝트에서 사용된 CNN 모델은 MNIST 숫자 분류에 최적화되어 있으며,
Convolution 레이어, ReLU, MaxPooling, Fully Connected (FC) 레이어로 구성되어 있습니다.
정확도와 하드웨어 구현 효율성 사이의 균형을 고려하여 설계되었으며,
FPGA 및 ASIC 구현에 적합한 구조를 가지고 있습니다.


개발 툴 및 플랫폼

  • 개발 툴: Xilinx Vivado Design Suite
  • 타겟 보드: Zynq-7000 SoC (Zynq Z7-20)
  • 시뮬레이션 및 공동 검증: Vivado Simulator, MATLAB
  • 호스트 통신: Xilinx SDK (UART 터미널 테스트용)
  • 프로그래밍 언어: Verilog HDL

본 프로젝트는 Vivado를 활용하여 Zynq Z7-20 보드를 대상으로 설계, 합성, 검증되었으며,
MATLAB을 통해 고수준 시뮬레이션 및 호스트-디바이스 간 데이터 흐름 검증을 수행하였습니다.

 


개요

본 프로젝트는 MNIST 데이터셋에 최적화된 저전력 CNN 가속기를 설계하는 것을 목표로 합니다.
효율적인 메모리 접근 방식과 자원 관리 기법을 도입하여, 전력 소모를 최소화하면서도 높은 추론 성능을 달성합니다.


시스템 블록 다이어그램

아래는 전체 시스템의 간략한 블록 다이어그램입니다.

주요 설계 특징

  1. PE Array에서 메모리 접근 최소화
    온칩 버퍼와 PE 배열을 효과적으로 활용하여 외부 메모리 접근을 줄여 전력 소모를 감소시켰습니다.
  2. FIFO, MaxPooling, ReLU 모듈 통합
    FIFO, MaxPooling, ReLU 연산 모듈을 하나의 경량 블록으로 결합하여 처리 속도와 유연성을 높였습니다.
  3. Shift Buffer 활용
    입력 데이터를 효율적으로 관리하기 위해 Shift Buffer를 활용하여 불필요한 메모리 접근을 줄이고 연산 효율을 개선하였습니다.
  4. Fully Connected Layer 최적화 구현
    FC Layer는 전용 연산 블록으로 구현되어 자원을 효율적으로 배분하며 병렬성을 극대화하였습니다.

성능 결과

단일 이미지 추론

1장의 MNIST 이미지를 매우 짧은 지연 시간으로 추론할 수 있습니다.

1000장 이미지 추론

ASIC 설계 기반 시뮬레이션에서 1000장의 이미지를 안정적으로 처리하며 확장성을 입증했습니다.


설계 차별점

  1. 저전력 설계
    • PE Array 및 Shift Buffer를 통한 메모리 접근 최적화
    • Idle-cycle 최소화를 위한 제어 로직 설계
  2. 자원 활용 최적화
    • FIFO, PE Array 재활용 구조
    • 데이터 지역성 활용으로 외부 메모리 대역폭 절감
  3. 확장 가능한 구조
    • 모듈화된 구조로 다른 모델이나 데이터셋에 쉽게 확장 가능
    • 저자원 환경에서도 구동 가능한 경량 아키텍처
  4. 하드웨어-소프트웨어 협업 설계
    • AXI4 기반 소프트웨어 제어 인터페이스
    • CNN 모델 구성을 유연하게 조정 가능

FPGA 구현

CNN 가속기의 실시간 동작 성능을 검증하기 위해 Vivado를 사용하여 FPGA 보드에 구현하였습니다.
ASIC 시뮬레이션이 1000장 이미지 기준이었다면, FPGA에서는 10장의 연속된 이미지를 사용해 온보드 테스트를 진행했습니다.

슬라이딩 윈도우 최적화

FPGA에서는 BRAM의 대역폭 한계를 극복하기 위해 Sliding_Window 모듈을 추가로 설계하였습니다.
듀얼포트 BRAM은 한 사이클에 2픽셀만 읽을 수 있기 때문에, 성능 병목이 발생할 수 있습니다.
이를 해결하기 위해 6×28 크기의 버퍼에 미리 데이터를 저장하고, 2행씩 슬라이드되며 연산에 활용되도록 했습니다.

핵심 개념

  • 한 사이클에 BRAM으로부터 2픽셀을 읽음
  • 6행의 BUF_Slide 버퍼에 데이터를 저장
  • 슬라이딩 트리거 발생 시 2행씩 위로 슬라이드
  • 버퍼에서 바로 6행 데이터를 추출하여 convolution에 사용
// Sliding_Window 모듈은 convolution 연산에 필요한 6x1 column을 제공
BUF_Slide[ROWS - 2][col] <= BUF_SHIFT[0][col];
BUF_Slide[ROWS - 1][col] <= BUF_SHIFT[1][col];

이 구조는 연산 지연 없이 실시간 CNN 추론을 가능하게 해줍니다.


MATLAB 연동

MATLAB을 활용하여 FPGA와의 통신을 테스트하고,
이미지를 MATLAB에서 송신한 후 UART를 통해 추론 결과를 수신하였습니다.


검증 및 결과

행위 시뮬레이션

RTL 시뮬레이션을 통해 논리적 동작을 먼저 검증하였습니다.

FPGA 합성 및 구현

  • 구현 결과 블록 다이어그램
  • 타이밍 요약
  • 전력 분석
  • 자원 활용률

온보드 터미널 출력

Xilinx SDK를 사용하여 10장의 MNIST 이미지에 대한 추론 결과를 UART를 통해 확인하였습니다.


결론

이 프로젝트는 MNIST CNN 추론을 위한 고효율, 저전력 하드웨어 가속기 구현 사례입니다.
FPGA와 ASIC 양쪽 환경에서의 설계와 검증을 통해 실용 가능성을 입증했으며,
더 복잡한 모델로 확장하여 활용할 수 있는 설계 기반을 제공합니다.

 

'Verilog-Intermediate' 카테고리의 다른 글

MNIST MLP Hardware Accelerator - Streamline  (1) 2025.05.23