-
input_window_<Type>
-
output_window_<Type>
<Type> | 実数/複素数 | 符号の有無 |
---|---|---|
int8 | 実数 | 符号付き |
int16 | 実数 | 符号付き |
int32 | 実数 | 符号付き |
int64 | 実数 | 符号付き |
uint8 | 実数 | 符号なし |
uint16 | 実数 | 符号なし |
uint32 | 実数 | 符号なし |
uint64 | 実数 | 符号なし |
cint16 | 複素数 | 符号付き |
cint32 | 複素数 | 符号付き |
float | 実数 | なし |
cfloat | 複素数 | なし |
たとえば、ウィンドウ ベースのインターフェイスを含む単純なカーネルをインポートする場合、次の simple.h ヘッダー ファイルに示すように、int16
型の 2 つの入力ウィンドウと 1 つの出力ウィンドウを含む add_kernel
関数を定義します。
Simple.h
#ifndef __ADD_KERNEL_H__
#define __ADD_KERNEL_H__
#include <adf.h>
#define NUM_SAMPLES 4
void add_kernel(input_window_int16 * in1,input_window_int16 * in2, output_window_int16 * outw);
#endif
このカーネル (simple.cc) は、次のように定義されます。in1
および in2
の sum
演算を処理し、outw
に出力を生成します。
#include "simple.h"
void add_kernel(input_window_int16 * in1,input_window_int16 * in2, output_window_int16 * outw)
{
int16 temp1,temp2,temp_out;
for (unsigned i=0; i<NUM_SAMPLES; i++) {
window_readincr(in1,temp1);
window_readincr(in2,temp2);
temp_out = temp1 + temp2;
window_writeincr(outw,temp_out);
}
}
- 各カーネルを個別のソース ファイルで定義します。
- カーネルのヘッダー ファイルとソース ファイル用の個別のディレクトリを作成します。
- 個別にコンパイルできるように、カーネル ソース ファイルに関連のヘッダー ファイルをすべて含める必要があります。
add_kernel
関数をブロックとしてインポートするには、AIE Kernel ブロックをダブルクリックし、パラメーターを次のようにアップデートします。- Kernel header file
- kernels/include/simple.h
- Kernel function
-
add_kernel
- Kernel Init function
- 空のまま
- Kernel source file
- kernels/source/simple.cc
- Kernel search path
- 空のまま
- Preprocessor options
- 空のまま
Block Parameters ダイアログ ボックスで Import をクリックすると、ツールによりヘッダー ファイルの関数シグネチャが解析され、AI エンジン カーネルのインターフェイスが次の図に示すようにアップデートされます。
AIE Kernel ブロックを Simulink エディターに追加した後には、入力ポートと出力ポートは存在しません。Block Parameters ダイアログ ボックスでカーネル パラメーターを追加すると、ブロックが 2 つの入力ポートと 1 つの出力ポートでアップデートされ、インポートされたカーネル関数に一致するブロック名が付けられます。
正しくインポートされると、Function タブにユーザーが編集可能なパラメーターが表示されます。インポートされたカーネル関数の関数定義と、ポート名および方向をすばやく確認できます。
Function タブの Window size と Window margin に適切な値入力する必要があります。
ウィンドウ マージン値の設定
データ アクセスのメカニズム で説明したように、ウィンドウ マージンは入力データ サンプルのオーバーラップです。Model Composer では、Window margin 値はサンプル数で指定します。Window margin に入力する値は、32 バイトの倍数である必要があります。
たとえば、入力のデータ型が int16
(2 バイト) に場合、Window margin の指定可能な最小値は 16 サンプル (16 × 2) で、ほかに 32、48、64 などの値を指定できます。
別の例として、入力のデータ型が cint32
(8 バイト: 実数部 4 バイト、仮想部 4 バイト) である場合、指定可能な最小ウィンドウ マージンは 4 です。これは、4 × 8 バイトは 32 バイトだからです。ほかに 8、12、16 などの値を指定できます。
次の表に、各パラメーターの説明を示します。
パラメーター名 | 必要性 | 説明 |
---|---|---|
Window size | 必須 |
|
Window margin | 必須 |
|
Synchronicity | 必須 |
|
カーネル関数が正常にインポートされると、General タブ Import ボタンが Update に変わり、ブロック パラメーターをアップデートできるようになります。ブロックをインポートした後、再インポートせずにカーネル関数のソース コードを変更できます。ただし、関数シグネチャまたは関数へのパラメーターを変更した場合は、General タブの Update ボタンをクリックする必要があります。