Published on

Zynq-7000 FPGA Overview

Authors
  • avatar
    Name
    JaeHyeok CHOI
    Twitter
    none

Overview

Zynq 계열의 가장 큰 특징은 ARM Procssing Subsystem (PS) 가 포함되어 있다는 점이다. 각 Zynq 계열의 프로세서들은 Cortex-A9 프로세서가 포함되며 processor-centric and processed 하다.

또한, 메모리 컨트롤러 등의 주변 장치가 서브 시스템에 통합되어 있어 Cortex-A9 코어가 Zynq-7000 의 Programmable Logic Unit (PL)과 완전히 독립적이므로 PL 가 일시적으로 사용되지 않으면 ARM 프로세서의 서브시스템도 독립적으로 작동할 수 있으며, 프로세서 중심인 이전 FPGA 와 본질적으로 다르다. Zynq는 PS 부분과 PL 부분의 두 가지 주요 기능을 블록으로 ARM의 SoC 부분이자 FPGA의 일부이다. 그 중 PS 는 두 개의 ARM CortexTM-A9 프로세서, AMBA 상호 연결, 내부 외부 메모리 인터페이스 및 주변 장치를 통합한다. 이러한 주변 기기에는 주로 USB 버스 인터페이스, 이더넷, SD/SDIO, I2C, CAN, UART, GPIO 등이 포함된다.

image.png

Zynq 칩 전체 블록 다이어그램

PS: Processing System - FPGA 독립적 ARM의 SoC 부분

PL: Programmable Logic - FPGA 부분

PS & PL 상호 연결 기술

ARM 프로세서와 FPGA간의 고속 통신 및 데이터 상호 작용을 달성하고 ARM 프로세서와 FPGA 간의 효율적인 온칩 상호 연결을 설계해야 한다. 따라서 효율적인 PL, PS 데이터 상호 작용 채널을 설계하는 방법은 ZYNQ 칩 설계의 최우선 순위이며 제품 설계의 성공에 중요한 요소 중 하나이다. 이 섹션에서는 PS, PL 간의 연결에 초점을 맞추어 설명한다.

IP 코어를 결합한 후 시스템은 자동으로 AXI 인터페이스를 사용하여 IP 코어를 프로세서에 연결한다.

Advanced eXtensible Interface (AXI)

Xilinx가 6 시리즈 FPGA에서 도입한 인터페이스 프로토콜로 주로 마스터 디바이스와 슬레이브 디바이스 간의 데이터 전송을 설명한다. Zynq 에서 계속 사용되며 버전은 AXI4를 주로 사용, 내부 디바이스에는 AXI 인터페이스가 있다. 사실 AXI는 ARM에서 제안한 AMBA (Advanced Microcontroller Bus Architecture)의 일부이다. 이는 고성능, 고대역폭, 저지연 온-칩 버스로, 이전의 AHB, APB 버스를 대체한다.

AXI 프로토콜은 주로 마스터와 슬레이브 장치 간의 데이터 전송 모드를 의미하며, 두 장치는 핸드셰이크 신호를 통해 연결을 설정한다. 슬레이브가 데이터를 수신할 준비가 되면 READY 신호를 발생하며, 마스터 장치의 데이터가 준비되면 VALID 신호가 Assert 되고 유지되어 데이터가 유효함을 나타낸다. VALID 및 READY 신호가 모두 활성화된 경우에만 데이터가 전송된다.

이 두 신호가 활성화된 상태로 유지되면 마스터는 다음 데이터를 계속 전송한다. 마스터는 VALID 신호를 취소하거나 장치에서 READY 신호를 비활성화하여 전송을 종료할 수 있다.

image.png

Zynq에서는 AXI-lite, AXI4 그리고 AXI-Stream이 지원된다.

image.png

AXI4-Lite

가볍고 구조가 단순, 소규모 배치 데이터와 간단한 제어 상황에 적합하다. 대량 전송은 지원되지 않으며, 한 번에 한 Word (32bit)만 읽고 쓸 수 있다. 주로 일부 저속 주변 장치에 액세스하고 제어하는데 사용된다.

AXI4

인터페이스는 Lite와 유사하나, 대량 전송을 위한 기능이 하나 추가되어 주소에 대한 일회성 읽기 및 쓰기가 허용된다. → 데이터 읽기 및 쓰기를 위한 버스트 기능이 있다.

메모리 매핑 제어를 사용한다. 즉, ARM은 사용자 정의 IP를 액세스할 주소로 인코딩한다. 읽고 쓸 때는 자체 온칩 RAM을 읽고 쓰는 것과 같다. 프로그래밍도 매우 편리하고 개발이 덜 어렵다. 비용은 리소스가 너무 많고 읽기 주소, 쓰기 주소, 읽기 데이터, 쓰기 데이터 라인 과 같은 추가 신호 라인이 필요하다는 것이다.

AXI4-Stream

주소 라인이 필요없는 연속 스트림 인터페이스이다. (항상 읽히거나 쓰여지는 FIFO와 매우 유사) 이러한 유형의 IP의 경우 ARM은 위의 메모리 매핑 방법으로 제어할 수 없으며 (FIFO에는 주소 개념이 전혀 없으므로) 메모리-스트리밍 변환을 구현하기 위해 AXI-DMA 모듈과 같은 변환 장치가 있어야 한다. AXI-Stream 에는 비디오 스트림 처리, 통신 프로토콜 변환, 디지털 신호 처리, 무선 통신 등 많은 응용 프로그램이 있다. 본질은 소스 (ARM 메모리, DMA, 무선 수신 프론트 엔드) 에서 싱크 (HDMI, 고속 AD 오디오 출력 등)로의 수치 흐름을 위해 구축된 데이터 path로 데이터의 연속적인 스트림을 구축한다. → 실시간 신호 처리에 적합하다.

AXI4, AXI4-Lite의 5가지 채널

  • Read Address Channel
  • Write Address Channel
  • Read Data Channel
  • Write Data Channel
  • Write Response Channel

각 채널은 개별적인 AXI 핸드셰이크 프로토콜은 가지고 있다.

image.png

AXI 버스 프로토콜은 AXI-GP0AXI-GP3, AXI-HP0AXI HP3, AXI-ACP 인터페이스 등 9개의 물리적 인터페이스를 포함하여 ZYNQ 칩 내부의 하드웨어로 구현됩니다.

AXI_ACP 인터페이스는 ARM 멀티코어 아키텍처에서 정의한 인터페이스이며, DMA와 같은 버퍼없이 AXI 주변 장치를 관리하기 위한 가속 코히런트(coherent) 포트이다.

AXI_HP 인터페이스는 총 4개가 있는 고성능/고대역폭 AXI3.0 표준 인터페이스이며, PL 모듈은 마스터로 연결된다. 주로 PS(DDR, On-Chip RAM) 의 메모리에 대한 PL 액세스에 사용된다.

AXI_GP 인터페이스느 2개의 32비트 마스터 인터페이스와 2개의 32비트 슬레이브 인터페이스를 포함하여 총 4개가 있는 일반 AXI 인터페이스이다.

AXI_GP는 마스터 포트, 즉 호스트 인터페이스 이고 나머지 7개 포트는 슬레이브 포트인 것을 알 수 있다.

image.png

호스트 인터페이스는 읽기 및 쓰기를 시작할 권한이 있으며, ARM은 두 개의 AXI-GP 호스트 인터페이스를 사용, PL 로직에 적극적으로 액세스할 수 있다. 사실, PL을 주소에 매핑하고 PL레지스터를 마치 자체 메모리를 읽고 쓰는 것처럼 읽고 쓴다. 나머지 슬레이브 인터페이스는 수동 인터페이스로 PL에서 읽기 및 쓰기를 수락한다.

또한, 이 9개 AXI 인터페이스의 성능도 다르다. GP 인터페이스는 이론적으로 대역폭이 600MB/s 인 32비트 저성능 인터페이스인 반면 HP및 ACP 인터페이스는 이론적으로 대역폭이 1200MB/s 인 64비트 고성능 인터페이스이다.

고성능 인터페이스가 호스트 인터페이스가 아닌 이유

인터페이스가 데이터 이동을 담당하기 위해서 ARM CPU를 전혀 필요로 하지 않기 때문이다. 실제로 데이터를 전송하는 것은 PL의 DMA 컨트롤러이다. PS 측의 ARM은 AXI 인터페이스를 직접 지원하는 하드웨어를 가지고 있는 반면, PL은 해당 AXI 프로토콜을 구현하기 위한 로직이 필요하다. Xilinx는 Vivado 개발 환경에서 AXI-DMA, AXI-GPIO, AXI-Dataover, AXI-Stream 과 같은 기성품 IP를 제공하며, 해당 인터페이스는 Vivado 의 IP 목록에서 직접 구현되고 추가되어 해당 기능을 달성한다.