出力ディレクトリ - 2022.1 日本語

Vitis Model Composer ユーザー ガイド (UG1483)

Document ID
UG1483
Release Date
2022-05-26
Version
2022.1 日本語

新しいディレクトリは、Hub ブロックで code directory に指定した名前で作成されます。code ディレクトリにはさまざまなサブディレクトリがあります。このセクションでは、次の図で赤で囲まれている src_aie/ および Makefile に注目します。その他のサブディレクトリについては、その後のセクションで説明します。

図 1. ターゲット ディレクトリ
表 1. ファイル/ディレクトリの説明
ファイル/ディレクトリ ファイル/サブディレクトリ 説明
src_aie Subsystem_Name.h AI エンジン データフロー グラフを指定するヘッダー ファイル。
注記: Subsystem_Name は、Model Composer モデルで指定された最上位サブシステムから抽出された固有の文字列です。
Subsystem_Name.cpp Subsystem_Name.h で指定されたデータフロー グラフをシミュレーションするテストベンチ。
makefile Model Composer Hub ブロックで指定した aiecompiler オプションが含まれます。
makefile  

データフロー グラフをコンパイルおよびシミュレーションするコマンドが含まれます。

コマンド ラインから Makefile を使用してシミュレーションを実行する方法の詳細は、makefile を使用したシミュレーションの実行 を詳細してください。

Vitis Model Composer で src_aie ディレクトリに生成されるファイルには、コンパイルされたサブシステムの内容と階層が反映されます。ここでは、 『Vitis Model Composer チュートリアル』 (UG1498) のデザインから作成された aie_system をサブシステムとして使用します。次の図に、サブシステムとしてまとめられた、ブロックとしてインポートされたカーネル関数の接続を示します。

図 2. ブロックの接続

サブシステム aie_system に生成されたコードは次のとおりです。

aie_system.h


      #ifndef __XMC_AIE_SYSTEM_H__
#define __XMC_AIE_SYSTEM_H__
 
#include <adf.h>
#include "kernels/inc/hb_27_2i.h"
#include "kernels/inc/polar_clip.h"
#include "kernels/inc/hb_27_2d.h"
 
class Aie_system_base : public adf::graph {
public:
   adf::kernel fir_27t_sym_hb_2i_0;
   adf::kernel polar_clip_0;
   adf::kernel fir_27taps_symm_hb_dec2_0;
 
public:
   adf::input_port In1;
   adf::output_port Out1;
 
   Aie_system_base() {
      // create kernel fir_27t_sym_hb_2i_0
      fir_27t_sym_hb_2i_0 = adf::kernel::create(fir_27t_sym_hb_2i);
      adf::source(fir_27t_sym_hb_2i_0) = "kernels/src/hb_27_2i.cpp";
 
      // create kernel polar_clip_0
      polar_clip_0 = adf::kernel::create(polar_clip);
      adf::source(polar_clip_0) = "kernels/src/polar_clip.cpp";
 
      // create kernel fir_27taps_symm_hb_dec2_0
      fir_27taps_symm_hb_dec2_0 = adf::kernel::create(fir_27taps_symm_hb_dec2);
      adf::source(fir_27taps_symm_hb_dec2_0) = "kernels/src/hb_27_2d.cpp";
 
      // create kernel constraints fir_27t_sym_hb_2i_0
      adf::runtime<ratio>( fir_27t_sym_hb_2i_0 ) = 0.9;
 
      // create kernel constraints polar_clip_0
      adf::runtime<ratio>( polar_clip_0 ) = 0.9;
 
      // create kernel constraints fir_27taps_symm_hb_dec2_0
      adf::runtime<ratio>( fir_27taps_symm_hb_dec2_0 ) = 0.9;
 
      // create nets to specify connections
      adf::connect< adf::window<512,64> > net0 (In1, fir_27t_sym_hb_2i_0.in[0]);
      adf::connect< adf::window<1024>, adf::stream > net1 (fir_27t_sym_hb_2i_0.out[0], polar_clip_0.in[0]);
      adf::connect< adf::stream, adf::window<1024,128> > net2 (polar_clip_0.out[0], fir_27taps_symm_hb_dec2_0.in[0]);
      adf::connect< adf::window<512> > net3 (fir_27taps_symm_hb_dec2_0.out[0], Out1);
   }
};
 
class Aie_system : public adf::graph {
public:
   Aie_system_base mygraph;
 
public:
   adf::input_plio In1;
   adf::output_plio Out1;
 
   Aie_system() {
      In1 = adf::input_plio::create("In1",
            adf::plio_32_bits,
            "./data/input/In1.txt");
 
      Out1 = adf::output_plio::create("Out1",
            adf::plio_32_bits,
            "Out1.txt");
 
      adf::connect< > (In1.out[0], mygraph.In1);
      adf::connect< > (mygraph.Out1, Out1.in[0]);
   }
};
 
#endif // __XMC_AIE_SYSTEM_H__

Vitis Model Composer により、Hub ブロックで指定されたサブシステム名に対応するデータフロー グラフを含むグラフ ヘッダー ファイル aie_system.h が自動的に生成されます。AI エンジン カーネルまたはグラフ間の接続と、AI エンジン カーネル ブロックで指定されたウィンドウ サイズ、ウィンドウ マージンなどの設定パラメーターは、生成されたグラフ コードに自動的に反映されます。

Vitis Model Composer では、aie_system.cpp ファイルも生成されます。これは、制御 API を使用してシミュレーションを初期化、実行、および終了する main() 関数を含む制御プログラムです。

aie_system.cpp

#include "aie_system.h"
 
// instantiate cardano dataflow graph
Aie_system mygraph;
 
// initialize and run the dataflow graph
#if defined(__AIESIM__) || defined(__X86SIM__)
int main(void) {
   mygraph.init();
   mygraph.run();
   mygraph.end();
   return 0;
}
#endif

制限

  • 最上位サブシステムの output ポートが同期ランタイム パラメーター ポートに接続されている場合、AI エンジン コードは生成できません。
  • 入力ランタイム パラメーター ポートの値は、生成されたグラフ実行の開始時に 1 回だけアップデートできます。