前回のブログではintelHLSでコンパイルするプロセスを勉強しました
プログラムの内容は何もしないので、生成物以外に確認するものはありませんでした。
今回は、実際にプログラムがFPGA上ででおの様に動作するかを勉強して行きます
動作結果がでるプログラムを書いてみます、このプログラムは呼ばれる度にインクリメントした値を返し、配列変数に入れて行きます
このプログラムはintelFPGAのサンプルで格納されていたものをちょこっと改造しただけのものです
#include "HLS/hls.h"
#include "HLS/hls.h"
#include <stdio.h>
using namespace ihc;
component unsigned int count() {static unsigned int cnt = 0;
return cnt++;
}
int main() {const int SIZE = 100;
unsigned int result[SIZE];
for(unsigned int i=0; i<SIZE; ++i)
{
result[i] = count();
}
bool pass = true;for(unsigned int i=0; i < SIZE; ++i)
{
if (result[i] != i)
{
printf("ERROR: Expected %u, found %u\n", i, result[i]);
pass = false;
}
}
if (pass) {printf("PASSED\n");
} else {
printf("FAILED\n");
}
return 0;
}
ビルドして、実行してみます
.build.bat test-fpga
.¥test-fpga.exe
PASSED
ビルドにそれほど時間がかからないうちはx86のテストは飛ばします
結果にPASSEDと出ているので計算結果は一致した様です
-ghdlオプションを付けているので、シミュレーション結果を見てみます
何やらカウントアップしています
ひとまずC(++)で書かれたプログラムが動作した様です
もうちょっとみてみます
リソースは次の通りです
ALUTsが47、FFsが38が消費されています
消費割合が0%なのでこの時点ではなんとも言えないです
もう少し複雑なロジックを試す段で確認してみます
QuartusPrimeのロジックもコンパイルしてみます
ALMsが46なので、HLSの事前の予想に近いと思います
FFsはRegistersに当たるのかと思いますが、この辺は勉強不足なので
比較の仕方が分かりません
今度勉強しておこうと思います