関数引数 ap_axis
または ap_axiu
型に AXI4 サイドチャネル エレメントが含まれない場合 (WUser
、WId
、および WDest
パラメーターが 0)、AXI4-Stream はサイドチャネルなしで使用されます。次の例では、両方のインターフェイスが AXI4-Stream を使用してインプリメントされます。
#include "ap_axi_sdata.h"
#include "hls_stream.h"
typedef ap_axiu<32, 0, 0, 0> trans_pkt;
void example(hls::stream< trans_pkt > &A, hls::stream< trans_pkt > &B)
{
#pragma HLS INTERFACE mode=axis port=A
#pragma HLS INTERFACE mode=axis port=B
trans_pkt tmp;
A.read(tmp);
tmp.data += 5;
B.write(tmp);
}
合成後は、次の図に示すように、どちらの引数もデータ ポート (TDATA
) と標準 AXI4-Stream プロトコル ポート (TVALID
、TREADY
、TKEEP
、TLAST
、および TSTRB
) を使用してインプリメントされます。
図 1. サイドチャネルなしの AXI4-Stream インターフェイス
ヒント:
hls::stream
オブジェクトを ap_axis
または ap_axiu
以外のデータ型で指定すると、AXI4-Stream インターフェイスは TLAST
信号またはサイドチャネル信号なしで推論されます。AXI4-Stream インターフェイスのこのインプリメンテーションでは使用されるデバイス リソースは少なくなりますが、ストリームがいつ終了するかは示されません。構造体を使用して複数の変数を 1 つの AXI4-Stream インターフェイスにまとめることができます。Vitis HLS では、デフォルトで集約されます。構造体の要素を 1 つの幅の広いベクターに統合すると、構造体のすべての要素を同じ AXI4-Stream インターフェイスにインプリメントできます。