Vitis and Vitis HLS Flows-6장

tennfin1·2023년 9월 5일
0

Research

목록 보기
7/12
post-custom-banner

※ 본 포스트는 인하대학교 지능형반도체 연구실의 최영규 교수님의 허가 하에 작성되었습니다.

※ 교수님의 설명에 해당하는 내용을 제외하고, 제 의견은 노란색 글씨로 작성 하겠습니다.

※ solution에 대한 코드는 절대 제공되지 않으며, 수업진행에 필요한 모든 도움은 최영규 교수님의 자료 및 이메일을 참고하길 바랍니다.

6장에 대한 강의영상 링크입니다.

요약 + 간단한 의견으로 구성됩니다.

자세한 내용은 반드시 강의를 참고해주시길 바랍니다.


Vitis와 Vitis HLS는 명확하게 다른 개발 도구입니다.


가장 근본적인 차이점은 binary의 생성여부입니다.

Vitis HLS에서는 Simulation 영역에서 코드를 다룹니다.
그에 반해, Vitis는 simulation을 넘어 실제로 board에서 동작하기 위한 binary를 컴파일 해낼 수 있습니다.

3장 - Vitis
4~5장 - Vitis HLS

Vitis에도 GUI 모드가 존재하고, HLS에도 CMD 모드가 존재합니다.


Vitis HLS(GUI)의 CMD모드로 사용


Vitis 의 GUI모드로 사용


그럼 실제 개발은 어떻게 하는가?

보편적으로 HLS레벨에서는 simulation만 지원하기 때문에, HLS레벨에서 kernel development를 선행한 후,
이 kernel을 바탕으로 on-board에서 동작을 위해서만 필요한 description를 추가해서 on-board binary를 생성해줍니다.

그 description이란?

작성자의 개인적인 견해가 담긴 설명입니다.
Vitis HLS(이하 HLS)로 작성한 Simultion만을 위한 코드를 1대1 대응으로 Vitis코드로 변환하는 것은 불가능합니다.
HLS 레벨에서 작성한 코드는 PCIE 슬롯을 이용한 데이터전달과, 외부 메모리(RAM)에 대한 고려를 하지 않았기 때문입니다. HLS에서 Vitis로 변환할 때 이 점을 고려한 코드 또한 추가로 작성해주어야 합니다.
]

직전의 강의인 5강에서 FIR 주제를 Vitis HLS로 다루었는데, 이를 Vitis project로 재구성해봅시다.

  1. 파일 이동 후, Vitis를 사용했던 프로젝트인 hello_world(Vadd 프로젝트)를 그대로 복사해오고, 이름은 fir_onboard로 합니다.
    그리고 그 폴더 내로 이동(hello_world 프로젝트의 사본)

  2. vim textEditor를 켜서 Makefile내에 있는 코드 중 directory 이름을 수정해줍니다.

  1. host.cpp파일을 vim으로 열어주고, test benchData를 가져오는 부분을 전부 제거하고 대체해줍니다.

  1. 메모리 object를 생성하는 부분에서, 기존 vadd 함수에서는 3개의 버퍼(입력 2개, 출력 1개)를 할당했는데, 이를 하나의 입력과 하나의 출력 버퍼로 줄여줍니다.

  1. 위에서 언급했듯이, HLS로 변경을 하기 위해서는 필연적으로 PCIE 슬롯 통신을 이용해 메모리간 데이터 송수신을 위한 코드를 추가해주어야 한다고 했는데, 그 부분이 이 부분입니다.
    host memory [인스턴스 (= 컴퓨터) 본체에 꽃힌 메모리]로부터 PCIE 슬롯을 통해서, FPGA에 연결되어있는 외부메모리로 buffer_x를 보내고, kernal(FPGA의 onboard kernel)를 실행한 후 메모리 결과를 다시 host memory로 가져오는 작업
    잘 보면, 가운데 kernel을 실행하는 부분에서 실행하는 변수가 krnl_vector_add인 이유는, 이전에 사용한 커널명을 그대로 사용했기 때문입니다.

  1. 호스트 파일에서는 마지막으로, 출력결과가 제대로 나왔는지 확인을 해줍니다.

  1. 여태 host 파일에 대해서 다뤘는데, 커널 파일도 수정이 필요합니다.
    첫번째로 vadd로 커널 이름 맞추고,
    두번째로 extern C를 메인함수 위에 적어주고,
    세번째로 #pragma HLS INTERFACE를 통해서 fpga에 꽂힌 외부 메모리와의 연결인데, 자세한 내용은 추후 강의에서 배우고, 일단은 넘어갈 것.

compile flag, host file name, excutable name, kernel file name 등 뭐 하나라도 변경된 사항이 있다면,
Makefile에 있는 사진 속 변수들을 수정해줘야만 합니다.
지금으로서는 바꾼게 없으니 선택적이지만, 나중에 바꾸게 된다면 반드시 확인할 부분입니다.


하고나면 HLS에서는 불가능하고 Vitis에서만 가능한 2종의 시뮬레이션과, bitstream의 생성이 가능합니다.


인스턴스 내부 저장소는 ssd이며, 기본적으로 큰 크기가 할당되어있지 않기 때문에, disk관리를 잘해야 합니다.
사진 속 해당 파일을 제외하고는 전부 날려줍니다.
필자는 숨겨진 폴더에 있는 파일을 제거하지 못해서 원인불명의 용량부족에 시달린 기억이 있습니다. 숨겨진 폴더에 용량이 계속 쌓일 수 있으니 해당 부분 유의해서 파일관리 하도록 합시다.

profile
심도깊은개발
post-custom-banner

0개의 댓글