フリーランニング カーネル - 2023.2 日本語

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 日本語

Vitis コア開発キットは、PL カーネル上のストリーミング インターフェイスをサポートしていますが、フリーランニング カーネルと呼ばれる特殊なデータ駆動型カーネルもサポートしています。フリーランニング カーネルには制御信号ポートがないので、ソフトウェア アプリケーションとの相互作用メカニズムがなく、開始または停止できません。フリーランニング カーネルには、次のような特徴があります。

  • デバイスがバイナリ コンテナー (xclbin) によりプログラムされると、フリーランニング カーネルが自動的に開始するので、ソフトウェア アプリケーションから開始する必要は必要ありません。
  • メモリ入力または出力ポートを持たないため、入力または出力ストリームを介してのみほかのカーネルと相互作用します。
  • カーネルはデータを受信するとすぐにストリーム データを操作し、データがない場合はストールします。

フリーランニング カーネルの主な利点は、すべての関数が同じ回数実行される必要があるという C セマンティクスに従わないことです。このモデリング形式は、次の例に示すように RTL デザインに類似しています。コンパイラは、前の関数呼び出しが終了した後に自動的に再起動するようにカーネルをモデリングします。この機能は、ソフトウェア コードの while(1) ループに類似しており、カーネル コードでループを指定する必要がありません。

フリーラニング カーネルには hls::stream 入力と出力しか含まれません。推奨されるガイドラインは次のとおりです。

  • カーネル インターフェイスには、hls::stream<ap_axiu<D,0,0,0> > を使用します。
  • 関数パラメーターに hls::stream 型を使用すると、Vitis HLS でインターフェイスに AXI4-Stream ポート (axis) が推論されます。
  • カーネルは、ストリーミング インターフェイス (axis) のみをサポートします。次の例に示すように、m_axi または s_axilite インターフェイスを使用しないでください。
  • フリーランニング カーネルは、INTERFACE プラグマを使用して次のブロック制御プロトコルを指定する必要もあります。
    #pragma HLS interface ap_ctrl_none port=return
    ヒント: これにより、AXI4-Lite インタフェースまたは制御信号のないカーネルが作成されます。このモデリング方法は、制御ハンドシェイクがなく、自動的に起動して継続的に実行されることから、フリーランニング カーネルと呼ばれます。ソフトウェア アプリケーションとの相互作用が必要なカーネルの場合、 『Vitis 高位合成ユーザー ガイド』 (UG1399) で説明されるように、自動再起動カーネルの使用を検討してください。

次のコード例は、入力 1 つと出力 1 つを含むフリーラニング カーネルが別のカーネルと通信するところを示しています。

void increment(hls::stream<ap_axiu<32, 0, 0, 0> >& input, 
   hls::stream<ap_axiu<32, 0, 0, 0> >& output){
#pragma HLS interface ap_ctrl_none port = return
   ap_axiu<32, 0, 0, 0> v = input.read();
   v.data = v.data + 1;
   output.write(v);
   if (v.last){
      break;
   }
}
重要: ソフトウェア エミュレーションは、フリーランニング カーネルではサポートされません。