intel HLS コンパイラの動作を勉強する1

サンプルについているcounterを使って、C言語で記述されたソースコード

どの様にコンパイルされて、どの様なリソースに置き換えられるのかを勉強する

【オリジナルソース】

元々存在しているのはcounter.cppbuild.batの2つのみです

build.batの中身は41行目の

set "CXXFLAGS=%HLS_CXX_FLAGS% -march=Arria10

 set "CXXFLAGS=%HLS_CXX_FLAGS% -march=CycloneV -ghdl

 と変更しました

 

大体、体当たり的に覚えていく私としては、counter.cppのソースコードを削ってどのくらいシンプルにしてもコンパイルが通るのかを、いつも試しています

#include "HLS/hls.h"
#include <stdio.h>


component unsigned int count() {
return 0;
}

int main() {
const int SIZE = 100;
for(unsigned int i=0; i<SIZE; ++i) {
count();
}

 

return 0;

}

このくらいならコンパイルが通る様です

もうちょっと踏み込んでmainだけにしてみます

#include "HLS/hls.h"
#include <stdio.h>

 

int main() {


return 0;

}

そうするとエラーでした

Error: no components specified
HLS System Integration FAILED.

componentsが無いとコンパイルする意味がないって事ですね

それではまあ、コンポーネントありでコンパイルしてみます

 .\build.bat test-fpga

を実行し

.\test-fpga.exe

を実行

ロジックは全て削除してしまったので、何も表示されませんが

-ghdlオプションを付けてあるので、シミュレーションログは残ります

 

どういうものが作成されたか見てみます

【test-fpga.exe】

test-fpga.exeと言う実行ファイルが作成されています

これがfpgaのシミュレーションを行うファイルです

 

【test-fpga.prj】

test-fpga.prjと言うプロジェクトが作成されています

ここに生成過程・生成結果が格納されている様です

 

【test-fpga.prj/reports】

ここにレポートが作成されている様です

色々なファイルがありますが、report.htmlと言うファイルがあるので

ブラウザで見せてくれるのだと思います

f:id:info-akiron-com:20180830142603p:plain

 コンパイルした場合のリソース(Estimated Resourceなので予想かな?)が表示されます、このプログラムは何もしないので全て0%でした。

 

【test-fpga.prj/quartus】

ここにはQuartusPrimeのプロジェクトが作成されています

quartus_compile.qpfと言うファイルをコンパイルすると生成されたプロジェクトをビルドしてくれました。 

既にデバイスが選択されていて5CEFA9F23I7が選択されています

この辺は後で変更すれば良いので、あまり気にしない

f:id:info-akiron-com:20180830143225p:plain

 

【test-fpga.prj/components】

このディレクトリの中にはcountと言うディレクトリがあり、その中にはHDLファイルやQsysファイルがありました。

どうやらこのディレクトリはC言語で指定したコンポーネント宣言分だけ作られる様です、ここがC->HDLに変換されたロジックそのものでしょう

component unsigned int count() {
return 0;
}

【test-fpga.prj/verification】

 この中には次の様なファイルが出来ていました

compile.cmd

modelsim.ini

tb

tb.qsys

tb.sopcinfo

transcript.log vsim.wlf ←これはtest-fpga.exeの実行で出来た

 どうやらシミュレーション(modelsim)に必要なリソースの様です

 

本当に必要なものは全部作ってくれるようだ