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

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

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 日本語

Vitis コア開発キットでは、1 つまたは複数のフリーランニング カーネルがサポートされます。フリーランニング カーネルには制御信号ポートがないので、開始または停止できません。このフリーランニング カーネルの制御信号ではない信号には、次のような特徴があります。

  • フリーランニング カーネルにはメモリ入力または出力ポートがないので、ホストまたはその他のカーネル (標準カーネルまたは別のフリーランニング カーネル) とはストリームを介してしか通信できません。
  • FPGA がバイナリ コンテナー (xclbin) によりプログラムされると、FPGA でフリーランニング カーネルが開始するので、ホスト コードから開始する必要は必要ありません。
  • カーネルがプラットフォーム I/O またはその他のカーネルからストリーム データを受信開始するとすぐに処理し、使用可能なデータがなくなると停止するからです。

フリーランニング カーネルの主な利点は、すべての関数が同じ回数実行される必要があるという C セマンティクスに従わないことです。このモデリング形式は、次の例に示すように RTL デザインに類似しています。コンパイラは、前の関数呼び出しが終了した後に自動的に再起動するようにカーネルをモデリングします。この機能は、ソフトウェア コードの while(1) ループに類似しており、カーネル コードでループを指定する必要がありません。これは、カーネルが INTERFACE プラグマで mode=ap_ctrl_none モードを使用する場合に達成できます。これにより、AXI4-Lite インタフェース上に制御信号のないカーネルが作成されます。このモデリング方法は、制御ハンドシェイクがないので、フリーランニング カーネルと呼ばれます。カーネルは自動的に起動し、継続的に実行されます。

重要: フリーランニング カーネルは、カーネルの周りに while(1) ループがあるような動作になります。このため、非確定的な動作が発生しないよう、ソース コードで while(1) ループを明示的に定義しないでください。

また、カーネルがサポートするには、ストリーミング インターフェイス (axis) のみです。次の例に示すように、m_axi または s_axilite インターフェイスを使用しないでください。

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;
   }
}
ヒント: ソフトウェア エミュレーションは、フリーランニング カーネルではサポートされません。