Vitis HLS

A Zynq Accelerator for Floating PointMatrix Multiplication Designed withVivado HLS, XAPP1170 (1/#)

xilinx 2020. 1. 3. 14:40

자일링스에서 매니저 일을 하다보니 아쉬운 점이 하나둘이 아닙니다. 그래서 예전부터 알려드리고 싶었던 몇가지 기술적인 내용들을 시간나는대로 정리해서 올리겠습니다. 많은 도움 받으시기 바랍니다.

 

먼저 자일링스 어플리케이션 노트 XAPP1170 살펴볼께요.  먼저 제목을 보면

A Zynq Accelerator for Floating Point Matrix Multiplication Designed with Vivado HLS, XAPP1170.

비바도 HLS 이용해 징크에서 플로팅 포인트 행렬연산을 엑셀레이션 시키는 방법에 대한 어플리케이션 노트 입니다.

 

먼저 Summary 살펴볼께요 (간단 간단 해석을 붙여볼께요)

Summary

This application note describes how to use Vivado® High Level Synthesis (HLS) to develop a floating-point matrix multiplication accelerator connected via an AXI4-Stream interface to the Accelerator Coherency Port (ACP) of the ARM CPU in the Zynq®-7000 All Programmable SoC (AP SoC) device.

== “HLS 개발된 부동소숫점 행렬가속기를 AXI4 Stream 이용해서 징크 ARM 프로세서의 ACP 연결하는 방법”… 해석하기가 힘드네요.

== 하여간 ACP AXI4 Stream 뭔지 정확히 알아야 같습니다.

The floating-point matrix multiplication accelerator modeled in C/C++ code can be quickly implemented and optimized into a Register Transfer Level (RTL) design using Vivado HLS.

== 그렇다 치고

The solution is then exported as an IP core connected with an automatically-created AXI4-Stream interface to the ACP on AP SoC Processing Subsystem (PS).

== 이렇게 HLS 만든 IP PS (위에서 Zynq ARM이라고 표현했는데 좀더 정확한 표현은 PS 맞습니다) ACP AXI4 Stream으로 연결하네요

The connection is made through a Direct Memory Access (DMA) core in the AP SoC Programmable Logic (PL) subsystem.

== DMA 사용하고

Vivado IP Integrator (IPI) is used to design the AP SoC PL hardware, including the matrix multiplier peripheral, the DMA engine, and an AXI timer.

== 비바도 IPI 이용해 IP 만들고 DMA 쓰고 Timer 쓰고

The Software Development Kit (SDK) is used to design the AP SoC PS software to manage the peripherals.

== SDK 소프트웨어도 짜고

The reference design files for this application note can be downloaded from the Xilinx website. For detailed information about the design files, see Reference Design.

== 레퍼런스 설계 파일도 받으시고

 

 

<< 결론 >>

앞으로 HLS 사용해 행렬연산자라를 설계해서 IP 만들어 놓고 프로세서가 소프트웨어로 계산하는 보다 얼마나 빠른지 살펴보자, ~ 이런 내용이겠네요

HLS 사용하는 것은 어떤 의미인지?

얼마나 빨라지는지?

빨라진다는 것은 어떤 의미인지?

댓가는 뭔지?

ACP?

AXI4 Stream?

DMA 필요하지?

Timer 필요하지?

프로세서는 무슨 일을 하는 거지?

~ 이런 내용을 되는대로 풀어가보겠습니다.

 

 

Introduction

Matrix multiplication is used in nearly every branch of applied mathematics.  For example, matrix multiplication is used by beam-forming, which is the process of phasing a receiving antenna digitally by computer calculation in modern radar systems.

The Xilinx Vivado HLS tool allows floating-point algorithms to be quickly specified in C/C++ code, and optimized and implemented on the Zynq-7000 AP SoC [Ref 1].

== 아는내용이고

 

This delivers cost, performance, and power benefits for designers relying on traditional micro-processors to implement floating-point algorithms [Ref 2] [Ref 3].

== HLS 설계하면 전통적인 프로세서 처리하는 것보다 가격, 성능, 파워 면에서 좋다고 하네요.  (여기서 가격은 무슨 의미인지 모르겠어요. 성능은 당근 몇배 올라갈 것이라 예상하고, 파워도 장단점이 있는데 반드시 잇점만 있다고 보기엔 무리수가 있다고 생각합니다. 여기서 관심은 당근 빨리 연산하는지에 있습니다)

 

Starting from the application of floating point multiplication on 32x32 matrices, this document explains these Xilinx PL design flow aspects:

 

1.      Compiling and optimizing the C/C++ floating-point design into a high-performance hardware accelerator using Vivado HLS.

== HLS 행열연산자 만들고

 

2.      Specifying and generating an AXI4-Stream interface for the hardware accelerator using C++ templates in Vivado HLS.

== HLS AXI4-Stream 인터페이스 만들고

 

3.      Using Vivado IP Integrator [Ref 4] to connect the hardware accelerator to an AXI DMA peripheral in the AP SoC PL and to the ACP in the AP SoC PS.

== AXI DMA HLS 만든 IP ACP연결하고

 

4.      Writing the software running on the ARM CPU with function calls to the hardware accelerator and measuring system level performance.

== 소프트웨어 짠다

 

다음 그림을 보면 앞에서 말한 ACP, DMA, AXI4 Stream, Timer 관련된 정보를 있습니다.

 

6번이 HLS 만든 행렬연산자네요. 이놈은 AXI4-Stream 인터페이스만 가지고 있어서 10 DMA 행렬연산에 필요한 데이터를 메모리에서 가져와서 던져주고, 계산된 결과를 다시 메모리에 다시 기록해야 합니다.

 

DMA 동작하려면 프로세서가 적당히 가르쳐야 하니까 7 GP0 포트에다 AXI-Lite 버스 연결해서 DMA 8 Timer 연결 합니다. (프로세서가 레지스터 억세스하는 거니까 AXI-Lite버스를 사용했습니다.)

 

10번과 6 인터페이스는 AXI4 Stream이고 10번과 2번은 AXI-Full 방식으로 억세스 합니다.  (당근 행렬계산 데이터는 메모리에 있는 어드레스가 필요하고 어드레스를 사용하는 프로토콜은 AXI4 FULL 이니까, 하지만 HLS IP Stream 방식으로 데이터를 받기로 하드웨어를 만들어버렸어요.. 나중에 살펴보겠지만)

 

(앞으로 2 ACP 3, 4, 5번에 대해선 차분히 살펴보기로 하겠습니다)