データに順番にアクセスする場合は、ストリーミング インターフェイスを使用してターゲット プラットフォーム上のデバイス I/O との間でデータを転送できます。その際、データを中間段階としてグローバル メモリを介して移行する必要はありません。この転送も、グローバル メモリを使用せずに直接実行されます。
ストリーミング パラダイムを使用するデザインは C で記述するのが困難な場合があります。複数の読み出しおよび書き込みを実行するためにポインターを使用すると、型修飾子が記述されるので、問題が発生する可能性があります。Vitis HLS には、ストリーミング データ構造を記述するための C++ テンプレート クラスの hls::stream<ap_axis<N>>
が含まれます。ハードウェアでは、ストリーミング インターフェイスが AXI4-Stream インターフェイス (axis
) としてインプリメントされます。Vitis コンパイラは、hls::stream
データ型の AXI4-Stream インターフェイスを推論します。
hls::stream<ap_axis<N>>
として定義し、次に INTERFACE プラグマを使用してこのデータ型を AXI4-Stream インターフェイスにマップする必要があります。AXI4-Stream および Vitis HLS には、次のシグネチャがあります (ap_axi_sdata.h で定義)。
template <typename T, size_t WUser, size_t WId, size_t WDest> struct axis { .. };
interface is implemented
as a struct type in
説明:
-
T
はストリーム データ型です。 -
WUser
インターフェイスが TUSER 信号の幅でインプリメントされます。 -
WId
: TID 信号の幅 -
WDest
: TDest 信号の幅
ストリーム データ型 (T
) が単純な整数型の場合、次の 2 つの定義済みタイプの AXI4-Stream インプリメンテーションを使用できます。
-
AXI4-Stream クラスの符号付きインプリメンテーション:
hls::axis<ap_int<WData>, WUser, WId, WDest>
-
AXI4-Stream クラスの符号なしのインプリメンテーション:
hls::axis<ap_uint<WData>, WUser, WId, WDest>
WUser
、WId
、および WDest
テンプレート パラメーターに指定された値は、AXI4-Stream インターフェイスのサイドチャネル信号の使用を制御します。TVALID、TREADY、および TLAST は、AXI4-Stream プロトコルに必要な制御信号です。TKEEP、TSTRB、TUSER、TID、および TDEST 信号は、追加のブックキーピング データを渡すために使用可能な特別信号です。詳細は、
『Vitis HLS ユーザー ガイド』 (UG1399) の HLS ストリーム インターフェイス
を参照してください。