AXI4-Stream インターフェイス - 2023.2 日本語

Vitis 高位合成ユーザー ガイド (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語
重要: hls::axis (および ap_axiu/ap_axis) は、AXI4-Stream プロトコルが最上位関数のインターフェイスでのみサポートされているため、内部関数または変数には使用できません。内部関数または変数については、HLS ストリーム ライブラリ で説明されているとおり hls::stream オブジェクトを使用する必要があります。

AXI4-Stream インターフェイスは、入力引数、配列またはポインター出力引数に使用できます。AXI4-Stream インターフェイスはデータをシーケンシャル ストリーミングで送信するので、読み込みと書き出しの両方を実行する引数に使用できません。データのレイアウトに関しては、AXI4-Stream のデータ型は次のバイトに揃えられます。たとえばデータ型のサイズが 12 ビットの場合、16 ビットに拡張されます。符号付きまたは符号なしのどちらのインターフェイスが選択されているかによって、拡張ビットは符号拡張またはゼロ拡張になります。

ストリーム データ型がユーザー定義の構造体の場合、デフォルト プロシージャーでは、構造体を集約したまま、その構造体を最大のデータ要素のサイズに最も近いバイトに揃えます。この規則の唯一の例外は、構造体に hls::stream オブジェクトが含まれる場合です。この特殊なケースでは、構造体は分割され、構造体の各メンバー要素に対して AXI ストリームが作成されます。

ヒント: サポートされる最大ポート幅は、集約された構造体や形状変更された配列の場合でも 4096 ビットです。

次のコード例に、構造体のタイプによって、どのようにパックおよびアライメントされるかを示します。次の例に示すように構造体に char 型のみが含まれる場合は、1 バイトのアライメントでパックされ、構造体の合計サイズは 2 ビットになります。

struct A {
  char foo;
  char bar;
};

次の例に示すように構造体に異なるデータ型の要素が含まれる場合は、最大のデータ要素のサイズに揃えられ、パックされます。要素 bar は 3 バイトにパディングされ、構造体の合計サイズは 8 バイトになります。

struct A {
  int foo;
  char bar;
};
重要: AXI4-Stream インターフェイス (axis) に含まれる構造体はデフォルトで集約され、ストリーム自体の集約は解除できません。構造体のメンバー要素に別々のストリームが必要な場合は、個別の要素として手動でコード化する必要があります。その結果、各要素に別々の axis インタフェースが作成されます。例は、GitHub の Vitis-HLS-Introductory-Examples/Interface/Aggregation_Disaggregation/disaggregation_of_axis_port を参照してください。