カーネルでは、データを別のカーネル ストリーミング インターフェイスと直接送信または受信するカーネル ストリーミング インターフェイスは、ap_axiu<D,0,0,0>
型の hls::stream
で定義されます。ap_axiu<D,0,0,0>
データ型には、ap_axi_sdata.h ヘッダー ファイルを使用する必要があります。
重要: ホストからカーネルおよびカーネルからホストへのストリーミング (ホストとカーネル間 (H2K) のストリーミング データ転送 を参照) には、
qdma_axis
型を使用する必要があります。ap_axiu
および qdma_axis
データ型はどちらも Vitis ソフトウェア プラットフォームのインストールに含まれる ap_axi_sdata.h ファイル内で定義されます。次の例は、プロデューサーおよびコンシューマー カーネルのストリーミング インターフェイスを示しています。
// Producer kernel - provides output as a data stream
// The example kernel code does not show any other inputs or outputs.
void kernel1 (.... , hls::stream<ap_axiu<32, 0, 0, 0> >& stream_out) {
for(int i = 0; i < ...; i++) {
int a = ...... ; // Internally generated data
ap_axiu<32, 0, 0, 0> v; // temporary storage for ap_axiu
v.data = a; // Writing the data
stream_out.write(v); // Writing to the output stream.
}
}
// Consumer kernel - reads data stream as input
// The example kernel code does not show any other inputs or outputs.
void kernel2 (hls::stream<ap_axiu<32, 0, 0, 0> >& stream_in, .... ) {
for(int i = 0; i < ....; i++) {
ap_axiu<32, 0, 0, 0> v = stream_in.read(); // Reading the input stream
int a = v.data; // Extract the data
// Do further processing
}
}
hls::stream
型が定義されているので、Vitis HLS ツールで axis
インターフェイスが推論されます。次の INTERFACE プラグマは例として示しており、コードには追加されません。
#pragma HLS INTERFACE axis port=stream_out
#pragma HLS INTERFACE axis port=stream_in
ヒント: これらのサンプル カーネルは、カーネル シグネチャのストリーミング入力/出力ポートの定義と、カーネル コード内の入力/出力ストリームの処理方法を示しています。
kernel1
から kernel2
への接続は、計算ユニット間のストリーミング接続の指定 で説明するように、カーネル リンク プロセス中に定義する必要があります。ストリーミング接続の詳細は、アプリケーションのビルドおよび実行 を参照してください。