AI エンジン グラフ で説明したように、グラフは異なる計算カーネル関数の接続です。カーネル関数がブロックとして Vitis Model Composer にインポートされるカーネルのインポートとは異なり、この場合はグラフ コードがブロックとしてインポートされます。グラフをブロックとして Vitis Model Composer にインポートするには、AI Engine ライブラリから AIE Graph ブロックを選択する必要があります。
Vitis Model Composer では、AIE Graph ブロックと AIE Kernel ブロックを接続して、デザイン全体を Simulink 環境でシミュレーションできます。
AIE Graph ブロックでは、ヘッダー ファイル (*.h) を使用して AI エンジン グラフを Vitis Model Composer にインポートする方法がサポートされます。
ヘッダー ファイルの使用
ヘッダー ファイル (.h) を使用してグラフをインポートするには、AIE Graph ブロックをダブルクリックします。次の図に示すように、ヘッダー ファイル、クラス、検索パス、およびプリプロセッサ オプションを指定します。
次の表に、各パラメーターの名前と説明を示します。
パラメーター名 | パラメーターのデータ型 | 必要性 | 説明 |
---|---|---|---|
Graph application file (*.h) | 文字列 | 必須 | アプリケーション グラフ クラスが定義され、適応型データフロー (ADF) ヘッダー (adf.h)、カーネル関数のプロトタイプが含まれているファイル (.h) を指定します。 |
Graph class | 文字列 | 必須 | グラフ クラスの名前を指定します。 |
Graph Search paths | 文字列のベクター | 必須 | シミュレーションに含めるヘッダー ファイル、カーネル、およびインクルード ファイルの検索パスを指定します。adf.h が定義されている検索パス $XILINX_VITIS/adf/include はデフォルトで含まれているので、指定する必要はありません。 |
Preprocessor options | オプション | ダウンストリームのコンパイルを特定のプリプロセッサ オプションを使用して実行する場合にプリプロセッサ引数を指定します。使用可能な形式は -D<name> および -D<name>=<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 Port Name、Data Type などのパラメーターは、グラフ コードから自動的にアップデートされます。
次の図に、入力および出力ポートを含む AIE Graph ブロックを示します。
General タブの Import ボタンが Update に変わり、ブロック パラメーターをアップデートできるようになります。