簡単なHLSのプロジェクトを作成する
Vitis HLSプロジェクト作成
vitisを起動して、Project nameとWorkspaceを設定する。
Project nameはadd、Workspaceは任意の場所に設定する。Nextをクリックする
Add/Remove Design Filesは、何も設定せずに、Nextをクリックする
Add/Remove Testbench Filesも何も設定せずに、Nextをクリックする
Solution Configurationは、Part Selectionで、Partsをクリックして、Searchに、xck26と入力して、 xck26-sfvc784-2LV-cを選択して、OKをクリックする。このPartsがKRIAのPartsだ。
本当は、BoardでKriaのBoardを指定したが、ビルドでエラーになったので、Partsで指定することとする。
FPGAの部屋に対処方法が記載されている
https://marsee101.blog.fc2.com/blog-entry-5387.html
Flow Targetは、Vitis Kernel Flow Targetを選択する。これで基板上で動作させたい。Finishをクリックする。
Projectが生成できた。
ソースコードの追加
add->sourceで、New Source Fileを選択して、ファイルを追加する。名前はkernel_add.cとする
kernel_add.cの中身は、加算を行う。
#include <stdio.h>
#include "kernel_add.h"
void kernel(int a[NUM], int b[NUM], int c[NUM]) {
int i;
for (i=0;i<NUM;i++) {
c[i] = a[i] + b[i];
}
return;
}
ヘッダファイルも追加する
ヘッダファイルの中身は、Kernel関数定義だ。
#define NUM (4)
void kernel(int *a, int *b, int* c);
add->Test Benchで、New Test Bench Fileを選択して、ファイルを追加する。名前は、kernel_add_tb.cとする
テストベンチは、kernel関数を呼び出す部分だ。
#include <stdio.h>
#include "kernel_add.h"
int main(int argc, char** argv)
{
int a[NUM];
int b[NUM];
int c[NUM];
int i;
for (i=0;i<NUM;i++) {
a[i] = i;
b[i] = NUM -i;
}
kernel(a, b, c);
for(i=0;i<NUM;i++) {
if(c[i] != a[i] + b[i]) {
printf("error %d %d %d %d",i, a[i],b[i],c[i]);
return -1;
}
}
printf(" test ok");
}
プロジェクトの設定とビルド
Project->Project Settingsをクリックします。
Synthesis- Top Functionに、kernelと入力します。合成する関数(Hardware化する関数)を選択します。OKをクリックします。
Run C Simulationを実行します。C言語レベルで実行されていると思う。
ログをみると、test okになっていることがわかります。
Run C synthesisを実行します。これでHardware化していると思う。
実行すると、Synthesisのレポートが表示される
最後に、Run Cosimulationを実行する。C言語とHardware化されたモジュールでシミュレーションしてくれていると思う。
成功するとCosimulationのレポートが表示される
これで、ビルドOKで、単体テストもOKだと思うので安心。
Export
最後に、生成されたKernel関数をExportする。たぶん、Exportしたバイナリを他のものと合わせて、リンクしてバイナリを作成して、KV260に転送するんじゃないかなぁと思う。
Export Formatで、Vitis Kernelを指定します。OKをクリックします。
add/solution1/impl/export.xoというファイルが生成されました。たぶん、このファイルを使用するのだと思います。
基板でうごくだろうか。
使用したファイルをアップしておく