AI エンジン グラフ で説明したように、グラフは異なる計算カーネル関数の接続です。カーネル関数がブロックとして Model Composer にインポートされるカーネルのインポートとは異なり、この場合はグラフ コードがブロックとしてインポートされます。グラフをブロックとして Model Composer にインポートするには、AI エンジン ライブラリから AI エンジン グラフ ブロックを選択する必要があります。
Model Composer では、AI エンジン Graph ブロックを AI エンジン カーネル ブロックと接続し、デザイン全体を Simulink 環境でシミュレーションできます。
AIE Graph ブロックでは、AI エンジン グラフを Model Composer にインポートするのに 2 つの方法がサポートされます。
- ヘッダー ファイル (*.h) を使用
- ソース ファイル (*.cpp) を使用
ヘッダー ファイルの使用
ヘッダー ファイル (.h) を使用してグラフをインポートするには、 AIE Graph ブロックをダブルクリックし、[General] タブで Header file (*.h) をオンにします。次の図に示すように、ヘッダー ファイル、クラス、検索パス、およびプリプロセッサ オプションを指定します。
次の表に、各パラメーターの名前と説明を示します。
パラメーター名 | パラメーターのデータ型 | 必要性 | 説明 |
---|---|---|---|
[Graph application file (*.h)] | 文字列 | 必須 | アプリケーション グラフ クラスが定義され、適応型データフロー (ADF) ヘッダー (adf.h)、カーネル関数のプロトタイプが含まれているファイル (.h) を指定します。 |
[Graph class] | 文字列 | 必須 | グラフ クラスの名前を指定します。 |
[Graph search paths] | 文字列のベクター | 必須 | シミュレーションに含めるヘッダー ファイル、カーネル、およびインクルード ファイルの検索パスを指定します。adf.h が定義されている検索パス $XILINX_VITIS/adf/include はデフォルトで含まれているので、指定する必要はありません。 |
[Preprocessor options] | オプション | ダウンストリームのコンパイルを特定のプリプロセッサ オプションを使用して実行する場合にプリプロセッサ引数を指定します。使用可能な形式は -Dname および -Dname=definition で、複数指定できます。引数は -D で開始する必要があり、<definition> が指定されていない場合は 1 と想定されます。 |
graph.h
#ifndef __XMC_PROJ_H__
#define __XMC_PROJ_H__
#include <adf.h>
#include "simple.h"
class Proj_base : public adf::graph {
public:
adf::kernel AIE_Kernel;
public:
adf::input_port In1, In2;
adf::output_port Out1, Out2;
Proj_base() {
// create kernel AIE_Kernel
AIE_Kernel = adf::kernel::create(simple_comp_1);
adf::source(AIE_Kernel) = "simple.cc";
// create kernel constraints AIE_Kernel
adf::runtime<ratio>( AIE_Kernel ) = 0.9;
// create nets to specify connections
adf::connect< adf::stream > net0 (In1, AIE_Kernel.in[0]);
adf::connect< adf::stream > net1 (In2, AIE_Kernel.in[1]);
adf::connect< adf::stream > net2 (AIE_Kernel.out[0], Out1);
adf::connect< adf::stream > net3 (AIE_Kernel.out[1], Out2);
}
};
class Proj : public adf::graph {
public:
Proj_base mygraph;
public:
adf::input_plio In1, In2;
adf::output_plio Out1, Out2;
Proj() {
In1 = adf::input_plio::create("In1",
adf::plio_32_bits,
"./data/input/In1.txt");
In2 = adf::input_plio::create("In2",
adf::plio_32_bits,
"./data/input/In2.txt");
Out1 = adf::output_plio::create("Out1",
adf::plio_32_bits,
"Out1.txt");
Out2 = adf::output_plio::create("Out2",
adf::plio_32_bits,
"Out2.txt");
adf::connect< > (In1.out[0], mygraph.In1);
adf::connect< > (In2.out[0], mygraph.In2);
adf::connect< > (mygraph.Out1, Out1.in[0]);
adf::connect< > (mygraph.Out2, Out2.in[0]);
}
};
#endif // __XMC_PROJ_H__
Proj_base
クラスを使用してグラフをインポートします。GUI パラメーターをアップデートしたら、Import をクリックします。[Block Parameters] ダイアログ ボックスが次に示すようにアップデートされます。[Graph Class] タブには、チェック ボックスを含む [RTP] 列が表示されます。ポートがランタイム パラメーターである場合にのみ、このチェック ボックスをオンにできます。そうでない場合は、Build を直接クリックできます。
[Block Parameters] ダイアログ ボックスは次の図に示すようになります。ポートの方向とデータ型が示されます。
[Graph Port Name]、[Data Type] などのパラメーターは、グラフ コードから自動的にアップデートされます。ユーザーが編集可能な唯一のパラメーターは、信号サイズ ([Signal size]) です。
ユーザーが編集可能なパラメーター | 必要性 | 説明 |
---|---|---|
[Signal size] | 必須 | 出力信号のサイズを示します。カーネルの起動時に生成されるサンプルの最大数以上の値に設定する必要があります。 |
次の図に、入力および出力ポートを含む AIE Graph ブロックを示します。
[General] タブの [Import] ボタンが [Update] に変わり、ブロック パラメーターをアップデートできるようになります。
ソース ファイル (*.cpp) の使用
ソース ファイル (.cpp) を使用してグラフをインポートするには、 AIE Graph ブロックをダブルクリックし、[General] タブで Source file (*.cpp) をオンにします。次の図に示すように、グラフ アプリケーション ファイル (*.cpp)、検索パス、およびプリプロセッサ オプションを指定します。
次の表に、各パラメーターの名前と説明を示します。
パラメーター名 | パラメーターのデータ型 | 必要性 | 説明 |
---|---|---|---|
[Graph application file] | 文字列 | 必須 | ADF データフローをインスタンシエートし、シミュレーション プラットフォームに接続するファイル (.cpp) を指定します。このファイルには、データフロー グラフを初期化して実行する main() 関数が含まれます。 |
[Graph search paths] | 文字列のベクター | 必須 | シミュレーションに含めるヘッダー ファイル、カーネル、およびインクルード ファイルの検索パスを指定します。adf.h が定義されている検索パス $XILINX_VITIS/adf/include はデフォルトで含まれているので、指定する必要はありません。 |
[Preprocessor options] | オプション | ダウンストリームのコンパイルを特定のプリプロセッサ オプションを使用して実行する場合にプリプロセッサ引数を指定します。使用可能な形式は -Dname および -Dname=definition で、複数指定できます。引数は -D で開始する必要があり、<definition> が指定されていない場合は 1 と想定されます。 |
次に、グラフ .cpp ファイルの例を示します。グラフは次のように接続されます。このファイルは、[Block Parameters] ダイアログ ボックスの [Graph application file] で指定する必要があります。
graph.cpp
#include "Proj.h"
// instantiate cardano dataflow graph
Proj mygraph;
// initialize and run the dataflow graph
#if defined(__AIESIM__) || defined(__X86SIM__)
int main(void) {
mygraph.init();
mygraph.run();
mygraph.end();
return 0;
}
#endif
パラメーターをアップデートしたら、Import をクリックします。ツールによりグラフ データベースが生成され、インポートが正常に完了すると、次の図に示すように、AIE Graph ブロックの入力および出力ポートがアップデートされます。
ヘッダー ファイルとソース ファイルのインポート時に生成される AIE Graph ブロックのインターフェイスは同じです。
AIE Graph ブロックの [Block Parameters] ダイアログ ボックスの [Function] タブは、ヘッダー ファイルを使用してグラフをインポートした場合と同様です。[Signal size] パラメーターをアップデートできます。OK をクリックして [Block Parameters] ダイアログ ボックスを閉じます。
-
AI エンジン グラフの
inout
ポートを AI エンジン グラフのinput
RTP ポートに接続するには、両方のポートの同期に互換性がある必要があります。互換性がない場合は、Model Composer で適切なエラーが表示されます。 - RTP ポートの動作がデフォルトの動作と異なる場合は、接続をグラフ コードで
async
またはsync
ポートとして指定する必要があります。