본문 바로가기

FPGA 공부

Xilinx FPGA - PS, PL 영역

FPGA에서 PS와 PL로 영역이 구분된다는 말은 많이 들었을 것이다.
Vitis와 Vivado가 무엇을 위해 있는지까지 한번 써볼 예정이다.
물론 이제 공부를 하는 단계이니 틀린 곳은 많을 수 있다.

 

 

아래의 그림처럼 zynq 보드의 영역은 이렇게 나뉜다.

PL : Programable Logic

PL은 FPGA 에서 필요한 요소들을 사용해 하나의 원하는 함수?를 만드는 것이다.

회로를 소프트웨어처럼 바꿀 수 있으며 특정 기능을 수행하도록 PL을 설계하고 필요시 바꿀수도 있다.

 

쉽게 설명하자면

레고블록을 사서 원하는 레고 파츠를 골라 원하는 모양을 탄생시키는 것

 

조금더 내부로 들어가 보자면,

사용자가 직접 설계한 논리 회로를 하드웨어로 구현하는 영역이다. 기본적인 디지털 회로 요소들로 구성되어 있으며, 이들을 연결하는 프로그램 가능한 라우팅 네트워크가 포함된다.

 

 

아래의 것들로 구성이 되어있다.

 

  • LUT (Look-Up Table)
    • LUT는 기본적인 논리 게이트 역할을 하며, FPGA의 논리 연산을 수행하는 핵심 구성 요소다. 다양한 논리 함수를 구현할 수 있으며, 4-input, 6-input LUT 등이 일반적이다.
  • 플립플롭 (Flip-Flop)
    • 플립플롭은 상태를 저장하는 요소로, 클럭 신호에 따라 데이터를 저장하고 출력한다. FPGA에서의 동작은 이 플립플롭을 통해 순차적으로 진행된다.
  • DSP 블록
    • DSP 블록은 고속 곱셈 및 누적 연산을 수행하는 데 최적화된 하드웨어 모듈이다. 신호 처리, 이미지 처리, 필터링 등 고속 연산이 필요한 애플리케이션에서 주로 사용된다.
  • BRAM (Block RAM)
    • BRAM은 FPGA 내의 고속 메모리 블록으로, 데이터를 저장하고 빠르게 접근할 수 있다. 주로 버퍼링, FIFO, 데이터 캐시 등 다양한 임베디드 메모리 용도로 사용된다.
  • 프로그램 가능한 라우팅 네트워크
    • PL의 구성 요소들을 연결하는 라우팅 네트워크는 사용자가 원하는 논리 설계에 따라 재구성할 수 있다. 이 네트워크는 수많은 배선과 스위치로 구성되어 있으며, 설계된 회로를 물리적으로 구현하는 데 사용된다.

 

 

PS : Processing System

PS는 FPGA 내에서 소프트웨어를 실행하는 중심 역할을 한다.

 

쉽게 설명하자면

CPU라고 생각할 수 있다.

CPU, memory, 다양한 입출력 장치와의 송수신 역할을 한다.

PL이 복잡한 계산이나 빠른 처리를 담당한다면 PS는 계산 결과를 받아 적어 처리하고 외부와 연결하는 것이다.

 

조금더 내부로 들어가 보자면,

ARM 코어와 메모리, 다양한 I/O 인터페이스를 통해 PS는 FPGA 시스템에서의 메인 컨트롤러 역할을 하며, PL과의 협력을 통해 강력한 임베디드 시스템을 구축할 수 있다.

 

  • ARM Cortex-A 프로세서 코어
    • PS는 보통 ARM Cortex-A9 또는 Cortex-A53과 같은 듀얼 또는 쿼드코어 프로세서를 포함한다. 
    • 각 코어는 캐시 메모리와 메모리 관리 유닛(MMU)을 가지고 있어, 고속 데이터 접근과 가상 메모리 기능을 지원한다.
  • On-Chip Memory (OCM)
    • PS에는 작은 크기의 고속 온칩 메모리가 있어, 초기 부팅 로더, 핵심 데이터, 또는 코드의 캐시로 사용한다.
  • DDR 메모리 인터페이스
    • PS는 외부 DDR 메모리에 접근할 수 있는 인터페이스를 제공한다. 이를 통해 큰 데이터를 저장하고 접근할 수 있다.
    • FPGA에서 SoC가 실행하는 운영 체제나 복잡한 애플리케이션들이 DDR 메모리에서 실행된다.
  • 인터럽트 컨트롤러
    • PS는 인터럽트 처리를 위해 Generic Interrupt Controller(GIC)를 포함한다. 이는 CPU 코어들이 하드웨어 인터럽트를 효율적으로 처리할 수 있게 해준다.
  • 인터커넥트 (Interconnect)
    • PS 내부의 여러 구성 요소 간의 데이터 흐름을 관리하는 고성능 인터커넥트가 있다. AXI 인터페이스를 통해 PL(Programmable Logic)과도 통신할 수 있다.
  • I/O 인터페이스
    • PS에는 다양한 I/O 인터페이스가 포함되어 있다. 예를 들어, GPIO, UART, SPI, I2C, Ethernet, USB 등이 있으며, 이를 통해 외부 장치와 통신할 수 있다.
    • 이를 통해 FPGA가 다양한 주변 장치들과 직접적으로 통신할 수 있다.
  • 부팅 로더 및 보안 기능
    • PS는 부팅 로더를 통해 FPGA를 부팅하며, 보안 기능(예: 암호화 및 신뢰할 수 있는 부팅)을 제공한다. 이를 통해 시스템의 신뢰성을 높일 수 있다.
  • DMA 컨트롤러
    • PS는 Direct Memory Access (DMA) 컨트롤러를 통해, CPU의 개입 없이 메모리 간 데이터 전송을 고속으로 처리할 수 있다.

 

Vivado

vivado는 FPGA 하드웨어 설계를 위한 도구로 PL 영역을 주로 다룬다.

Verilog로 짠 코드(RTL 코드)는 Vivado에서 돌리고 XSA파일과 Bitstream을 꺼낸다.

 

Block Design을 통해 PS를 설정할 수도 있다. - Hello World 찍을 때 사용한 것 처럼!

 

Vitis

Vitis는 Vivado와 다르게, 하드웨어 설계뿐 아니라 소프트웨어 개발과 하드웨어 가속을 통합하는 개발 환경이다. Vitis를 통해 PS에서 실행되는 소프트웨어를 개발하고, PL을 하드웨어 가속기로 활용할 수 있다.

 

주로  PS에서 실행되는 소프트웨어를 개발한다.

그리고 소위 우리는 코드를 짜면 찍어봐야 하는데 vivado의 simulation이나 버튼으로 하나씩 찍기는 힘드며 Vitis를 통해 우리는 결과값을 확인할 수 있다.

 

요약

  • Vivado는 주로 PL을 설계하는 데 사용되며, PS를 포함한 시스템을 설정할 수도 있다. Vivado에서 PL을 설계하고 PS와 PL 간의 연결을 설정할 수 있다.
  • Vitis는 PS에서 실행되는 소프트웨어를 개발하고, PL을 하드웨어 가속기로 활용하는 데 사용된다. Vitis를 통해 PS와 PL이 협력하는 통합된 시스템을 설계할 수 있다.

 

'FPGA 공부' 카테고리의 다른 글

# FPGA IP와 Verilog 활용 수업 요약  (0) 2024.09.09
FPGA TestBench 및 기초 지식  (3) 2024.09.08
Verilog file 단독 simultaion 해보기  (5) 2024.09.06
FPGA 구성 기본 요소  (0) 2024.09.03
Xilinx FPGA시작 - Hello World!  (0) 2024.08.27