Tool/Vivado

FPGA와 PL,PS 그리고 Vitis에 대한 이해 정리 (25.02.05)

마농농 2025. 2. 5. 02:49

1. FPGA란 무엇인가?

 FPGA란 사용자가 원하는대로 설계한 회로를 올릴 수 있는(구울 수 있는,,) 특별한 회로. CPU와 다르게 고정되지 않은 회로이며 사용자가 원하는대로 설계할 수 있음

 

2. FPGA의 구성 요소

FPGA는 크게 PS, PL로 구성되어 있다.

1) PS

 PS는 processor이며 FPGA에 물리적으로 배치되어 있다. 따라서 사용자가 변화시킬 수 없지만, 합성시킨 회로와의 연결은 가능하다. (ex. zynq는 axi interface를 통해 PL, PS가 통신 가능) 

 

2) PL

 PL은 Verilog로 덧셈기/곱셈기/인코더.. 등등 사용자가 설계한 회로를 구성할 수 있는 회로이다. 마치 백지 상태이며 이를 청사진(bitstream) 기반으로 재구성해주는 것. 

 

2-1) PL은 어떤 과정을 통해 회로를 구성할 수 있는 것인가?

Vivado에서 사용자가 설계한 block diagram과 경우에 따라 FPGA에서 제공된 PS를 연결하여 하나의 청사진인 bitstream을 만든다. (단, PS는 사용자 변경이 불가하며 Block diagram상에서 PS와 PL은 서로 연결시킴) 생성된 bitstream 파일은 JTAG를 통해 FPGA로 전송이 되며 사용자가 설계한 회로는 FPGA에 업로드 된다. (=물리적으로 구현됨)

 

*JTAG :PL을 설정, 하드웨어 내부 구성을 설정해주는 디버깅 인터페이스 (PC -> FPGA로 Bitstream 전송)

**UART : PC와 FPGA 사이의 단순 데이터 통신이며 UART를 통해 FPGA내부 변경은 되지 않는다. 비동기이며 1bit씩 순차 전송하고 보통 9600, 11520 bps speed 사용한다고 알려져 있다. 예로, FPGA에서 printfNexys를 이용해서 내 컴퓨터의 터미널에 hello world가 나오도록 통신해주는 연결.

 

2. PL only

 Verilog 파일을 작성 -> xdc 파일 작성 (ex. pin 연결) -> Vivado에서 .bit 생성 (여기까지의 의미 : 내가 설계한 물리적인 회로와 보드 상의 핀을 물리적으로 연결해주는 지시) -> .bit를 FPGA(PL) 다운로드 후 FPGA 회로 동작 (ex. LED 깜빡거리기)

 

3. PL + PS

 Vivado에서 block design 생성(PL + PS를 block diagram을 보면서 연결, AXI Interconnect) -> .bit 생성 -> FPGA에 Bitstream 다운로드 (JTAG 사용, 아직까지는 PS는 동작하지 않음, PL 회로가 FPGA에 구현만 된 상태) -> Vitis에서 C/C++ 프로그램 작성하여 실행(PS에서 실행할 소프트웨어 C/C++ 작성 후 elf 파일로 변환 그리고 elf를 PS에 실행) -> PS는 elf 파일을 실행하며 사용자가 지시한 C파일을 동작하게 됨, 이로써 PS가 PL과 데이터 교환을 시작할 수 있게 됨.

 

4. Vivado 와 Vitis

Bitstream은 PL을 설정하는 역할, PS는 Vitis에서 소프트웨어를 실행해야 동작 시작, 

Vitis는 PS의 동작을 C/C++ 로 생성된 elf로 컨트롤 됨.

 

5. Appendix

 Block design에서 FPGA 개발사(Xilinx)에서 제공하는 IP들을 사용하여 추가적인 PL을 넣을 수 있음. 이 PL들은 용도에 따라 다양함. (EX. ILA-FPGA내부 회로 캡처 IP)

 

-25.02.04 교육 기반으로 작성됨