フリーランニング カーネルのコーディング ガイドライン - 2019.2 Japanese

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

Document ID
UG1393
Release Date
2020-02-28
Version
2019.2 Japanese

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

  • ポートがカーネルからの別のストリーミング ポートと接続される場合は、hls::stream<ap_axiu<D,0,0,0> > を使用。
  • ポートがホストと接続される場合は、hls::stream<qdma_axis<D,0,0,0> > を使用。

プラグマを使用するガイドラインは次のとおりです。

  • カーネル インターフェイスには #pragma HLS interface s_axilite または #pragma HLS interface m_axi を含めないようにします (メモリまたは制御ポートにはできないので)。
  • カーネル インターフェイスには、次の特殊なプラグマを含める必要があります。
    #pragma HLS interface ap_ctrl_none port=return

次のコード例は、入力 1 つと出力 1 つを含むフリーラニング カーネルが別のカーネルと通信するところを示しています。while(1) ループ構造には、カーネル コードの内容が含まれ、カーネルが実行される限り繰り返されます。

void kernel_top(hls::stream<ap_axiu<32, 0, 0, 0> >& input, 
   hls::stream<ap_axiu<32, 0, 0, 0> >& output) {
#pragma HLS interface axis port=input
#pragma HLS interface axis port=output
#pragma HLS interface ap_ctrl_none port=return  // Special pragma for free-running kernel
 
#pragma HLS DATAFLOW // The kernel is using DATAFLOW optimization
	while(1) {
		...
	}
}
ヒント: この例には、フリーラニング カーネルのストリーミング入力/出力ポートの定義が表示されていますが、フリーランニング カーネルと別のカーネル間のストリーミング接続は、計算ユニット間のストリーミング接続の指定 で説明するように、カーネル リンク プロセス中に定義する必要があります。