→ 여러 Verilog를 묶어서 재사용 가능한 하드웨어 블록으로 만든다.
→ FPGA 전체 시스템을 구축하는 하드웨어 통합 환경이다.
→ Zynq PS + Custom IP + AXI 연결을 한 눈에 보여주는 시스템 회로도이다.
→ Vivado에서 만든 하드웨어를 FPGA가 실제로 동작하도록 구성하는 파일.
→ PS(ARM)가 PL 하드웨어 IP를 제어하는 소프트웨어 실행 코드.
FPGA 내부에 넣을 ‘하드웨어 블록’을 하나의 모듈로 만들기 위해
예를 들어,
이런 것들이 각각 따로 Verilog 파일이야.
하지만 Zynq PS가 읽고 쓰려면 "하나의 IP" 형태여야 함.
여러개의 Verilog(.v) → 하나의 Custom IP (AXI interface 포함)
이게 “하드웨어 드라이버” 역할을 하는 블록이 되는 거야.
IP package의 목적
즉, 이 단계는 하드웨어 모듈화 과정이다.
FPGA 전체 하드웨어 시스템을 구성하는 작업 공간
여기서 하는 일:
즉, 하드웨어 전체를 통합하는 상위 프로젝트가 Vivado HW Project.
Zynq 시스템의 전체 ‘회로도(SOC 구조)’를 만드는 것
Block Diagram은 Zynq 개발의 핵심.
여기에
BD의 역할
✔ PS ↔ PL 연결 구조 정의
✔ AXI address map 자동 생성
✔ 인터럽트 연결
✔ 클록/리셋 자동 전달
✔ 최종 SoC 구조 완성
결국
BD = FPGA 안에 들어갈 최종 하드웨어 시스템의 회로도
Vivado에서 만든 하드웨어 회로들을 실제 FPGA 구성 파일로 변환
Zynq에서는 비트스트림이 PL logic만 구성하고
PS는 부팅 후 FSBL이 초기화함.
PS(ARM Cortex-A9)에서 PL(IP)를 제어하는 소프트웨어
Vitis에서는
이런 걸 C로 작성해서 ARM에 올린다.
그래서 main.c는 하드웨어 위에서 실행되는 소프트웨어 layer.
Zybo Z7-20 같은 Zynq 보드는 PS(Processor System, ARM Cortex-A9) 와 PL(Programmable Logic, FPGA fabric) 로 구성돼.
따라서 Vitis의 main.c는 PS에서 실행되는 C 프로그램이고,
Vivado에서 만든 IP(PL 하드웨어) 를 AXI 레지스터로 제어하는 역할을 한다.
하드웨어 구조(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 수정만? |
|---|---|
| UART TX/RX 테스트 코드만 바꾸기 | ✅ OK |
| SPI 전송 길이 변경 | ✅ OK |
| I2C 읽기 순서만 변경 | ✅ OK |
| AXI 레지스터 값만 다르게 쓰고 싶을 때 | ✅ OK |
| 루프 횟수 변경, 딜레이 변경 | ✅ OK |