デフォルト コンストラクターを含む C++ クラス カーネルをインポートする例として、デフォルト コンストラクターを含むカーネル クラス simple_class
を定義する次の simple.h
ヘッダー ファイルがあるとします。
simple.h:
#include "adf.h"
using namespace adf;
class simple_class
{
private:
int16 val;
int16 numSamples;
public:
simple_class();
void mulBytwo(input_buffer<int16> & in, output_buffer<int16> & out);
static void registerKernelClass()
{
REGISTER_FUNCTION(simple_class::mulBytwo);
}
};
.cpp
ファイルで定義することを強く勧めします。
registerKernelClass()
メソッドを使用して、カーネル関数を登録する必要があります。ヘッダー ファイルでは複数のクラス カーネルを宣言でき、各クラスには個別に registerKernelClass()
メソッドを含める必要があります。クラスごとに登録できる関数は 1 つのみです。Vitis Model Composer では、REGISTER_FUNCTION() を使用して登録した関数のみをインポートできます。
カーネル関数は、simple.cpp
で次のように定義されます。
simple.cpp:
#include "simple.h"
simple_class::Simple_class()
{
val = 24;
numSamples = 8;
}
void simple_class::mulBytwo(input_buffer<int16> & in, output_buffer<int16> & out)
{
auto pIn = aie::begin(in);
auto pOut = aie::begin(out);
for (int i=0; i<numSamples; i++)
{
*pOut++ = 2*(*pIn++) + val;
}
}
Vitis Model Composer デザインに mulBytwo
関数をブロックとしてインポートするには、AIE Class Kernel ブロックをダブルクリックし、パラメーターを次のようにアップデートします。
- Kernel header file
- simple.h:
- Kernel class
-
simple_class
- Kernel function
-
mulBytwo
- Kernel source file
- simple.cpp:
- Kernel search path
- 空のまま
- Preprocessor options
- 空のまま
Block Parameters ダイアログ ボックスで Import ボタンをクリックします。正しくインポートされると、Function タブが表示されます。次の図に示すように、ユーザーが編集可能な設定パラメーターが表示されます。
Function タブに適切な値を入力したら、Apply をクリックします。AIE Class Kernel ブロックが次の図に示すようにアップデートされます。
Function タブで、インポートされたカーネル関数の関数宣言と、ポート名および方向をすばやく確認できます。
Kernel Class タブをクリックして、クラス宣言を確認します。