サンプルについているcounterを使って、C言語で記述されたソースコードが
どの様にコンパイルされて、どの様なリソースに置き換えられるのかを勉強する
【オリジナルソース】
元々存在しているのはcounter.cppとbuild.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と言うファイルがあるので
ブラウザで見せてくれるのだと思います
コンパイルした場合のリソース(Estimated Resourceなので予想かな?)が表示されます、このプログラムは何もしないので全て0%でした。
【test-fpga.prj/quartus】
ここにはQuartusPrimeのプロジェクトが作成されています
quartus_compile.qpfと言うファイルをコンパイルすると生成されたプロジェクトをビルドしてくれました。
既にデバイスが選択されていて5CEFA9F23I7が選択されています
この辺は後で変更すれば良いので、あまり気にしない
【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)に必要なリソースの様です
本当に必要なものは全部作ってくれるようだ