前述したように、フリーラニング カーネルには 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) {
...
}
}
ヒント: この例には、フリーラニング カーネルのストリーミング入力/出力ポートの定義が表示されていますが、フリーランニング カーネルと別のカーネル間のストリーミング接続は、計算ユニット間のストリーミング接続の指定 で説明するように、カーネル リンク プロセス中に定義する必要があります。