デザインにストリーミング インターフェイスが必要な場合は、まず Vitis HLS で hls::stream
などのストリーミング データ構造を定義して使用します。この単純なオブジェクトにより、ストリーミングの要件とそのストリーミング インターフェイスがカプセル化され、RTL で FIFO インターフェイス (ap_fifo) としてインプリメントされますが、ハンドシェイク インターフェイス (ap_hs) または AXI-Stream インターフェイス (axis) としてもインプリメントすることもできます。ストリーミング インターフェイスの別の例は、GitHub の Vitis-HLS-Introductory-Examples/Interface/Streaming を参照してください。
AXI4-Stream インターフェイス (axis) がインターフェイス プラグマ モード オプションで指定される場合、インターフェイス インプリメンテーションは TDATA、TVALID、および TREADY 信号を定義することで、AXIS インターフェイスの形式を模倣します。
より正式な AXIS インプリメンテーションが必要な場合、Vitis HLS で AXI4-Stream プロトコルの要件をカプセル化し、特殊なデータ型 (ap_axi_sdata.h
で定義された hls::axis
) を使用して、このインターフェイスに必要な特別な RTL 信号をインプリメントする必要があります。
Vitis HLS では、AXI4-Stream インターフェイスは構造体としてインプリメントされ、次のシグネチャ (ap_axi_sdata.h で定義) を持ちます。
template <typename T, size_t WUser, size_t WId, size_t WDest> struct axis { .. };
説明:
-
T
- ストリーミングされるデータ型。 ヒント: これは、
ap_fixed
を含むすべてのデータ型をサポートできます。 -
WUser
- TUSER 信号の幅
-
WId
- TID 信号の幅
-
WDest
- TDest 信号の幅
ストリーム データ型 (T
) が単純な整数型の場合、次の 2 つの定義済みタイプの AXI4-Stream インプリメンテーションを使用できます。
-
AXI4-Stream クラスの符号付きインプリメンテーション (
ap_axis<Wdata, WUser, WId, WDest>
)hls::axis<ap_int<WData>, WUser, WId, WDest>
-
AXI4-Stream クラスの符号なしインプリメンテーション (
ap_axiu<WData, WUser, WId, WDest>
)hls::axis<ap_uint<WData>, WUser, WId, WDest>
WUser
、WId
、および WDest
テンプレート パラメーターに指定された値は、AXI4-Stream インターフェイスのサイドチャネル信号の使用を制御します。
hls::axis
クラスを使用すると、生成された RTL に実際のデータ信号 TDATA
と、追加の信号 (TVALID
、TREADY
、TKEEP
、TSTRB
、TLAST
、TUSER
、TID
、および TDEST
) が含まれるのが一般的です。
TVALID
、TREADY
、および TLAST
は、AXI4-Stream プロトコルに必要な制御信号です。TKEEP
、TSTRB
、TUSER
、TID
、および TDEST
信号は、追加のブックキーピング データを渡すために使用可能なオプションの特別な信号です。
WUser
、WId
、および WDest
を 0 に設定すると、生成される RTL のインターフェイスにオプションで TUSER
、TID
、および TDEST
信号が含まれます。