디질런트 제네시스 ZU-3EG 징크 울트라스케일 + MPSoC 플랫폼 환경에 있을 경우

[테크월드=김경한 기자] 결정성, 상응성, 운영성능은 자동운전, 로보틱스, 컴퓨터 비전 시스템 등 광범위한 애플리케이션의 일부를 구성하는 거의 모든 임베디드 애플리케이션에 필요한 아키텍처 운영의 필수 요건이라 할 수 있다. 

자일링스 징크 울트라스케일(Xilinx Zynq UltraScale)+ EG MPSoC로 구성된 디바이스에는 고성능 ARM 기반의 멀티코어, 멀티 프로세싱 시스템과 ASIC 기반의 프로그래밍 가능한 로직이 공존하고 있다. 또한 이 프로세싱 시스템(PS)은 64비트 쿼드코어 ARM Cortex-A53, 32비트 듀얼코어 Cortex-R5F 리얼타임 프로세서, Mali-400 MP2 GPU로 구성돼 있다. ASIC 기반의 프로그래밍 가능한 로직은 범용성이 높고 자일링스 울트라스케일 아키텍처 위에 구현할 수 있으며, 프로세싱 시스템과 6000레벨의 인터커넥터로 연결된다. 이러한 아키텍처가 엔지니어들에게 결정성, 상응성, 운영성능을 목적으로 한 솔루션 실천을 가능케 한다. 

징크 울트라스케일+ MPSoC EG 디바이스 블록 다이아그램 (자료=https://www.xilinx.com/content/dam/xilinx/imgs/products/zynq/zynq-eg-block.PNG)

프로세싱 시스템과 프로그래밍이 가능한 로직의 공존은 적용 가능성이 가장 높은 기술에 사용되는 알고리즘과 로직 기능을 실현할 수 있게 한다.  프로그래밍 가능한 로직은 그 성격상 병렬 처리를 대폭 허용하기 때문에 프로세싱 시스템에 의해 실행되는 네트워크 커뮤니케이션도 신경 네트워크가 가속화된 상태로 진행된다. 또한 자일링스의 이종 SoC 디바이스 환경에서 엔지니어와 개발자들은 고급 프로그래밍 언어를 사용해 프로세서에서 프로그래밍 가능한 로직에 이르기까지 알고리즘을 가속화할 수 있다. 

최신 자일링스 바이티스(Xilinx Vitis) 통합 소프트웨어 플랫폼은 FPGA, SoC, 버설ACAP를 포함한 이종 자일링스 플랫폼에서 작동하는 임베디드 소프트웨어와 가속화된 애플리케이션의 개발을 가능케 해, 엣지 컴퓨팅, 클라우드 컴퓨팅, 하이브리드 컴퓨팅 기반의 애플리케이션을 가속화시키는 통합 프로그래밍 모델을 제공한다. 실행 시에 더 정밀한 제어를 가능케 하는 하이레벨의 프레임워크에 통합된 레버리지, C/C++, OpenCL 혹은 파이썬(Python)언어에 의한 개발, 그리고 가속화된 라이브러리나 RTL기반의 액셀러레이터와 로우레벨의 런타임을 사용함으로써 엔지니어와 개발자들이 원하는 대로 추상화의 레벨을 선택할 수 있다. 이로 인해 개발자는 하드웨어 기술 언어(HDL)를 사용할 필요 없이 프로그래밍 가능한 로직을 운영할 수도 있다. 

디질런트 제네시스 ZU-3EG는 최적화된 스펙과 멀티미디어, 네트워크 연결 인터페이스 등을 구비한 자립형 징크 울트라스케일+ 징크 MPSoC 보드를 탑재해 방대한 문서 라이브러리를 가지고 있으며, AI, 연구, 항공/방위, 클라우드 컴퓨팅과 임베디드 비전 애플리케이션 등의 분야에서 신속하게 작업을 시작할 수 있다.  보드에 장착된 페리페럴은 업그레이드하기 쉬운 DDR4, 미니PCIe, microSD 슬롯, 멀티 카메라, USB 3.0, 하이스피드 익스팬션 등 뛰어난 구성으로 돼 있다. 

디질런트 제네시스 ZU-3EG 징크 울트라스케일+ MPSoC 플랫폼

임베디드의 설계 전문가인 애덤 테일러는 디질런트 제네시스 ZU-3EG 징크 울트라스케일+ MPSoC 플랫폼과 자일링스 바이티스 기반의 튜토리얼인 ‘Getting Started with Xilinx Vitis OpenCL acceleration flow”(자일링스 바이티스로 시작하는 OpenCL을 이용한 가속화의 실행 흐름)’을 작성했다. 이번 튜토리얼에서 애덤은 액셀러레이션 플랫폼의 유효성을 제시하는 간단한 시행 애플리케이션을 작성하기 전에 액셀러레이션 플랫폼 작성에 요구되는 각종 요소에 대한 설명부터 시작한다. 

 

OpenCL 애플리케이션 

OpenCL은 이종 시스템들 간의 오픈소스 프레임워크다. 커널에 대해서는CPU, GPU, FPGA 혹은 ASIC를 포함한 다양한 할당이 가능하지만, 호스트는 주로 x86 기반의 시스템으로 작동한다. OpenCL의 주요 목적은 소스 코드의 변경 없이 플랫폼 간의 이식을 가능케 하는 것이다.  그래서 호스트 애플리케이션은 주로 C언어 혹은 C++ 언어를 사용해 OpenCL 애플리케이션 프로그래밍 인터페이스(API)에서 작성된다. 커널은 OpenCL을 사용하여 개발되고, ISO C99 스튜디오에 대해 필요한 제한과 변경을 더한 C 언어가 사용된다. 예를 들면, stdlib.h, stdio.h 등의 표준 헤더는 사용할 수 없으며, 스칼라 데이터 형식은C/C++와 달리 컴파일러나 아키텍처와 상관없이 단일하게 정의된다. 이러한 이유로 개발자는 OpenCL을 GCC와 같은 표준 컴파일러와 함께 사용할 수 있으며, 한편으로 커널은 커널 제조사에 의해 제공되는 커스텀 컴파일러를 사용한다.  

OpenCL 모듈은 Xilinx Zynq Ultrascale+ MPSoC에서 프로세싱 시스템(호스트)과 프로그래밍 가능한 로직(커널) 개발에 사용된다. 자일링스의 통합 소프트웨어 개발 툴인 Vitis가 이러한 접근을 지원한다. 

Digilent Genesys ZU-3EG에서 바이티스 OpenCL액셀러레이션 실행에 필요한 자일링스 툴이란?  
-    Xilinx Vivado (비바도) - 바이티스 컴파일러에서 필요한 리소스를 포함한 하드웨어의 환경설정을 위해 베이스 플랫폼을 작성한다. 
-    Xilinx PetaLinux(페타리눅스) – 연속 메모리 할당 및 DMA 드라이버를 지원해, OpenCL API를 포함한 페타리눅스 OS를 작성한다. 페타리눅스는 또한 바이티스 액셀러레이션 플랫폼을 지원하는 시스템 루트 작성에 사용된다.
-    Xilinx Vitis(바이티스) – 바이티스 액셀러레이션 플랫폼을 작성해 애플리케이션 가속화를 초래한다.

 

베이스 플랫폼 작성하기 

기반의 비바도 플랫폼은 인터페이스와 프로세싱 요소를 포함해, 바이티스 컴파일러에서 리소스를 이용 가능하게 만든다. 이 플랫폼을 정의하는 데 필요한 최소한의 요소는 다음과 같다. 

-    프로세서 환경설정 – 프로세싱 시스템, 클럭, 이용가능한 DDR의 설정 등의 환경설정, 또한 PS의 인터페이싱 페리페럴을 위한 멀티플렉싱 IO의 설정
-    클럭 - 클럭 위자드로 제공되며 바이티스 컴파일러에서 사용되는 몇 가지 다른 클럭
-    인터럽트 처리: 단일 인터럽트는 AXI 인터럽트 컨트롤러에서 프로세싱 시스템에 제공된다.  또한 AXI인터럽트 컨트롤러에서 바이티스 컴파일러에 대한 인터럽트 처리를 실행할 수 있다.
-    프로세서 리셋 블록: 바이티스 컴파일러에서 이용 가능한 모든 클럭에 대해 프로세서 리셋 블록이 1개씩 요구된다.
-    PS/PL 인터페이스: 환경설정을 가능케 하여 필요시에 PL에서 PS 로 고속DMA 전송이 가능한 액셀러레이션 코어의 생성과 관리를 허용하기 위해 최저 1개의 PS AXI 마스터 인터페이스와 1개 이상의 PS AXI 슬레이브 인터페이스가 정의돼야 한다.

제네시스 ZU-3EG 하드웨어 플랫폼

한번 디자인에 추가되면, 비바도의 플랫폼 인터페이스 뷰를 사용해 리소스를 바이티스 컴파일러에서 사용할 수 있다. 

또한 애덤이 제네시스 ZU-3EG를 위해 제작한 비바도 플랫폼은 MIPI 카메라 인터페이스를 지원하고 있다. 동영상이나 이미지는 페타리눅스 애플리케이션 소프트웨어를 이용해 제네시스 ZU-3EG의 미니 디스플레이포트에서 출력할 수 있다. 

이 디자인의 바이티스 컴파일러에서 이용 가능한 인터페이스는 2개의 클럭(150 MHz, 300 MHz), 마스터 AXI 인터페이스 1개, 슬레이브 AXI 인터페이스 3개로 구성돼 있다. 

이러한 디자인의 베이스 하드웨어와 다운스트림 툴을 사용하기 위해 하드웨어 환경설정을 정의하는 XSA파일이 비트 파일이 생성되기 전에 내보내어야 된다. 그러므로 바이티스 컴파일러가 애플리케이션에 필요한 비트 파일을 생성할 수 있다. 

 

페타리눅스 환경설정 

내보낸 XSA는 제네시스 ZU-3EG에서 작동하는 신규 페타리눅스 프로젝트의 작성과 구성에 사용된다. 한번 프로젝트가 작성되고 환경설정이 완료되면, 몇 가지 커스터마이징 설정으로 바이티스를 지원, 가속화할 수 있게 된다. 이 변경 내용엔 다음과 같은 것이 포함된다:
-    OpenCL와 자일링스 런타임을 페타리눅스 메타 유저 레이어에 추가한다.
-    연속 메모리 할당과 DMA 드라이버를 지원하는 커널을 설정한다. 
-    페타리눅스 OS과 필요한 부트파일을 모두 구축한다. 
-    바이티스를 사용 가능한 시스템 루트를 작성·설치한다.

바이티스 플랫폼은 시스템 루트와 페타리눅스로 작성된 다음과 같은 요소를 요구한다. 
-    FSBL.elf – 스테이지 1 부트로더
-    Image.ub – 커널 이미지 자체
-    PMUFW.elf – 플랫폼 관리 유니트 펌웨어
-    Bl31.elf – ARM TrustZone 펌웨어
-    U-Boot.elf – 커널 이미지 로딩을 위한 스테이지 2 부트로더  
-    빌드 시퀀스의 마지막으로 이러한 요소들이 이용할 수 있게 되면, 바이티스에서 액셀러레이션 플랫폼 구축 작업을 시작할 수 있다. 

 

바이티스 플랫폼 작성하기 

바이티스는 플랫폼 작성을 지원하기 위해 몇 가지 단계로 구성된 위자드를 제공한다. 위자드는 바이티스의 최초 방문 페이지에 표시돼 있다. 플랫폼을 작성할 때는 ‘플랫폼 프로젝트 작성하기’를 선택하면 된다. 

자일링스 바이티스 IDE Wizard

액셀러레이션 플랫폼 하드웨어 구성엔 각종 하드웨어와 소프트웨어 요소가 필요하게 된다. 하드웨어 요소는 미리 비바도에서 내보낸 XSA로 정의된다. 이러한 소프트웨어 요소는 페타리눅스 운영 중에 생성되고 위자드로 정의 가능한 것이다. 한번 실행이 완료되면, 플랫폼을 신규 액셀러레이션 프로젝트로 사용할 수 있다.

 

첫 번째 바이티스 액셀러레이션 프로젝트 작성하기  

액셀러레이션 플랫폼 운영 테스트를 가장 쉽게 실행하는 방법은 실존하는 애플리케이션을 일례로 구축해보는 것이다. 제네시스 ZU-3EG 플랫폼에서 작동하는 새로운 시스템 애플리케이션을 작성해보자. 단, 임베디드를 개발하고 액셀러레이션을 모두 지원하는 플랫폼을 사용해야 한다. 

제네시스 ZU-3EG 바이티스 플랫폼

신규 프로젝트 작성 위자드를 실행해보시면, 한 가지 예로 벡터 더하기 애플리케이션을 작성하게 될 것이다.  벡터 더하기는 프로그래밍 가능한 로직으로 가속화되는 OpenCL 커널의 일례로 될 수 있다. 

또한 커널에서 프로그래밍 가능한 로직의 실행에 최적화된 운영을 가능하게 만들기 위해 루프 언롤링과 인터페이싱 관리에 사용되는 몇 가지 프라그마가 적용된다. 이렇게 가속화된 블록은 실행하는 데 비바도 플랫폼에서 이용 가능한AXI 인터페이스에 연결돼 있어야 한다. 

프로젝트 구축엔 시간이 소요된다. 한번 프로젝트 구축이 완료되면, 바이티스는 필요한 것을 모두 SD 카드 상에 복사한다. SD 카드가 제네시스 ZU-3EG에 삽입되면, 애플리케이션을 커맨드 라인 상에서 시행할 수 있다. 애플리케이션을 실행해 보면, 커널에 프로그래밍 가능한 로직이 로딩되고 프로그램 실행과 관련된 각 단계를 확인할 수 있다. 

애플리케이션 테스트

프로젝트 세부사항과 원본 파일은 디질런트 위키인 디질런트 프로젝트(Digilent Project, https://projects.digilentinc.com/adam-taylor/genesys-zu-vitis-accleration-platform-2e86d4)에서 확인할 수 있으며, 제네시스 ZU-3EG 에코시스템은 디질런트가 공인한 판매사인 이니프로(Inipro)에서 구매할 수 있다.

 

글: 애덤 테일러(Adam Taylor)
자료제공: 디질런트(www.digilent.com)

회원가입 후 이용바랍니다.
개의 댓글
0 / 400
댓글 정렬
BEST댓글
BEST 댓글 답글과 추천수를 합산하여 자동으로 노출됩니다.
댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글수정
댓글 수정은 작성 후 1분내에만 가능합니다.
/ 400
내 댓글 모음
저작권자 © 테크월드뉴스 무단전재 및 재배포 금지
이 기사와 관련된 기사