'가속기(Accelerator)'라고 부르려면, CPU(PS)가 일일이 비트 컨트롤을 하지 않고, 데이터만 던져주면 FPGA(PL)가 알아서 프로토콜을 처리하고 인터럽트를 발생시키는 구조로 가야 합니다.
먼저 전체적인 프로젝트의 큰 그림(Architecture)과 진행 로드맵을 잡아드리겠습니다.
1. 전체 시스템 아키텍처 (Big Picture)
이 프로젝트는 Zynq(또는 MicroBlaze) 프로세서가 AXI Bus를 통해 Custom IP를 제어하는 구조가 됩니다.
[시스템 블록 다이어그램 구상]
1. PS (Processing System / SW)
- Role: Vitis에서 C 코드로 동작.
- Action: 통신할 데이터와 설정을 AXI Bus로 전송, 완료 인터럽트 처리.
2. AXI Interconnect
- PS와 우리가 만들 IP를 연결해주는 다리.
- Advanced eXtensible Interface
3. PL (Programmable Logic / HW) - "Multi-Protocol Engine"
- Top Module: AXI4-Lite Slave Interface (레지스터 제어용).
- Internal Common: TX/RX FIFO (데이터 버퍼링), Interrupt Controller.
-Sub-Cores (SystemVerilog):
UART_Core: Baud rate 생성, Start/Stop bit 처리.
SPI_Core: Master/Slave 모드, CPOL/CPHA 처리.
I2C_Core: Open-drain 제어, ACK/NACK 처리, Start/Stop condition.
2. 단계별 프로젝트 로드맵 (Step-by-Step)
우리는 Bottom-Up 방식으로 설계를 진행할 것입니다. 가장 기초적인 RTL부터 시작해서 시스템 통합으로 갑니다.
Phase 1: RTL 설계 (SystemVerilog) & 시뮬레이션
Vivado 시뮬레이터로 파형을 보며 로직을 검증합니다.
- Step 1: UART 모듈 구현 (가장 쉬움, 기본기 다지기)
- Step 2: SPI 모듈 구현 (Shift Register 개념 확립)
- Step 3: I2C 모듈 구현 (Tri-state buffer 및 FSM 복잡도 증가)
- Step 4: Integration Wrapper (세 모듈을 하나로 묶고 FIFO 붙이기)
Phase 2: AXI 인터페이스 연동 (IP Packaging)
-
Step 5: AXI4-Lite Slave 인터페이스 설계
Control Register (시작/정지, 모드 설정)
Status Register (Busy, Done, Error)
Data Register (TX/RX FIFO 접근)
-
Step 6: Vivado IP Packager를 통해 Custom IP로 생성.
Phase 3: 시스템 통합 (Vivado Block Design)
- Step 7: Zynq(또는 MicroBlaze) + AXI Interconnect + 만든 IP 연결.
- Step 8: Synthesis, Implementation, Bitstream 생성.
Phase 4: 소프트웨어 드라이버 개발 (Vitis)
- Step 9: XSA(하드웨어 플랫폼) export.
- Step 10: C언어로 각 프로토콜 제어 드라이버 작성 (Register Read/Write).
- Step 11: 실제 보드(또는 ILA)에서 통신 테스트.
3. 가장 먼저 해야 할 일: 스펙 정의 (Specification)
코딩을 시작하기 전에 각 모듈이 지원할 최소 기능을 정해야 합니다. 너무 복잡하게 시작하면 완주하기 힘드니 Basic Feature부터 잡겠습니다.
