Zynq 개발 전체 구조

Seungyun Lee·2025년 12월 3일

요약

① IP package

→ 여러 Verilog를 묶어서 재사용 가능한 하드웨어 블록으로 만든다.

② Vivado Project

→ FPGA 전체 시스템을 구축하는 하드웨어 통합 환경이다.

③ Block Diagram

→ Zynq PS + Custom IP + AXI 연결을 한 눈에 보여주는 시스템 회로도이다.

④ Bitstream

→ Vivado에서 만든 하드웨어를 FPGA가 실제로 동작하도록 구성하는 파일.

⑤ Vitis main.c

→ PS(ARM)가 PL 하드웨어 IP를 제어하는 소프트웨어 실행 코드.

1) 여러 코드 합쳐서 IP Package 하는 이유

FPGA 내부에 넣을 ‘하드웨어 블록’을 하나의 모듈로 만들기 위해

예를 들어,

  • UART 송신기
  • UART 수신기
  • Oversampling module
  • FIFO
  • AXI4-Lite Slave Interface

이런 것들이 각각 따로 Verilog 파일이야.
하지만 Zynq PS가 읽고 쓰려면 "하나의 IP" 형태여야 함.

여러개의 Verilog(.v) → 하나의 Custom IP (AXI interface 포함)

이게 “하드웨어 드라이버” 역할을 하는 블록이 되는 거야.

IP package의 목적

  • 여러 RTL 파일을 하나의 논리적 블록으로 묶기
  • Vivado BD에 배치 가능한 IP 형태로 만들기
  • 주소 매핑(AXI address map) 가능하게 만들기
  • PS가 접근할 수 있는 레지스터를 제공

즉, 이 단계는 하드웨어 모듈화 과정이다.

2) Vivado에서 Hardware Project 생성하는 이유 (Workspace)

FPGA 전체 하드웨어 시스템을 구성하는 작업 공간

여기서 하는 일:

  • Zynq Processing System 설정
  • Clock 설정
  • Reset 설정
  • AXI Interconnect 자동 생성
  • I/O 핀 매핑
  • 각종 Xilinx IP 추가 (BRAM, FIFO, AXI Timer 등)
  • Custom IP 연결

즉, 하드웨어 전체를 통합하는 상위 프로젝트가 Vivado HW Project.

3) Block Design (BD) 의 의미

Zynq 시스템의 전체 ‘회로도(SOC 구조)’를 만드는 것

Block Diagram은 Zynq 개발의 핵심.

여기에

  • Zynq7 Processing System (PS)
  • AXI Interconnect
  • Custom IP (UART/SPI/I2C IP)
  • Clock Wizard
  • Interrupt Controller
    이런 걸 전부 블록 형태로 배치하고 연결한다.

BD의 역할
✔ PS ↔ PL 연결 구조 정의
✔ AXI address map 자동 생성
✔ 인터럽트 연결
✔ 클록/리셋 자동 전달
✔ 최종 SoC 구조 완성

결국
BD = FPGA 안에 들어갈 최종 하드웨어 시스템의 회로도

4) Bitstream 생성의 의미

Vivado에서 만든 하드웨어 회로들을 실제 FPGA 구성 파일로 변환

  • Custom IP 포함
  • PS-PL 연결
  • All RTL synthesis & implementation 완료
  • FPGA fabric을 어떻게 구성할지 최종 파일 (.bit) 생성

Zynq에서는 비트스트림이 PL logic만 구성하고
PS는 부팅 후 FSBL이 초기화함.

5) Vitis에서 main.c 의 의미

PS(ARM Cortex-A9)에서 PL(IP)를 제어하는 소프트웨어

Vitis에서는

  • AXI 레지스터 read/write
  • UART/SPI/I2C 테스트 코드
  • Polling/interrupt 코드
  • 데이터 처리 루틴

이런 걸 C로 작성해서 ARM에 올린다.
그래서 main.c는 하드웨어 위에서 실행되는 소프트웨어 layer.


언제 vitis or vivado를 수정하나

Vitis main.c 의 역할 = PS(ARM 코어)에서 PL(IP)를 제어하는 소프트웨어

Zybo Z7-20 같은 Zynq 보드는 PS(Processor System, ARM Cortex-A9) 와 PL(Programmable Logic, FPGA fabric) 로 구성돼.

따라서 Vitis의 main.c는 PS에서 실행되는 C 프로그램이고,
Vivado에서 만든 IP(PL 하드웨어) 를 AXI 레지스터로 제어하는 역할을 한다.

Vivado를 다시 만들어야 하는 경우

하드웨어 구조(PL)를 바꿨을 때 → 반드시 Vivado에서 다시 synthesis → bitstream → export → Vitis platform regenerate 해야 함.

상황Vivado 수정?
UART/SPI/I2C 모듈에 레지스터 추가/삭제✅ 해야 함
Verilog 내부에서 FSM, logic 수정✅ 해야 함
AXI4-Lite 레지스터 주소 변경✅ 해야 함
새로운 IP block 추가✅ 해야 함
IP clock frequency 변경✅ 해야 함
PS-PL 연결 (AXI interconnect, IRQ) 변경✅ 해야 함

반면, main.c만 수정하면 되는 경우

하드웨어는 그대로 두고, 소프트웨어 동작만 바꾸고 싶을 때는 main.c만 수정하면 된다.

작업main.c 수정만?
UART TX/RX 테스트 코드만 바꾸기✅ OK
SPI 전송 길이 변경✅ OK
I2C 읽기 순서만 변경✅ OK
AXI 레지스터 값만 다르게 쓰고 싶을 때✅ OK
루프 횟수 변경, 딜레이 변경✅ OK
profile
RTL, FPGA Engineer

0개의 댓글