前述のように、フリーラニング カーネルには hls::stream
入力と出力しか含まれません。推奨されるガイドラインは次のとおりです。
- ポートがカーネルからの別のストリーミング ポートと通信する場合は、
hls::stream<ap_axiu<D,0,0,0> >
を使用します。 - ポートがホストと通信する場合は、
hls::stream<qdma_axis<D,0,0,0> >
を使用します。 - 関数パラメーターに
hls::stream
型を使用すると、Vitis HLS でインターフェイスに AXI4-Stream port (axis
) が推論されます。 - フリーランニング カーネルには、次の特別な INTERFACE プラグマも指定する必要があります。
#pragma HLS interface ap_ctrl_none port=return
重要: カーネル インターフェイスには
#pragma HLS interface s_axilite
または #pragma HLS interface m_axi
を含めないようにします (メモリまたは制御ポートにはできないので)。次のコード例は、入力 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 ap_ctrl_none port=return // Special pragma for free-running kernel
#pragma HLS DATAFLOW // The kernel is using DATAFLOW optimization
while(1) {
...
}
}
ヒント: この例にはフリーラニング カーネルのストリーミング入力/出力ポートの定義が示されていますが、フリーランニング カーネルと別のカーネル間のストリーミング接続は、計算ユニット間のストリーミング接続の指定 で説明するように、カーネル リンク プロセス中に定義する必要があります。