AMD Vivado™ HLS と AMD Vitis™ HLS の主な違いの 1 つは、内部メモリ モデルのインプリメント方法です。メモリ モデルは、コンピューター メモリ内でのデータの配置およびアクセス方法を定義します。これらは、データ アライメントとデータ構造のパディングという別々の問題ですが、関連しています。Vitis HLS では Vivado HLS とは異なるメモリ モデルが使用され、主な相違点は次のとおりです。
- Vitis HLS では、GCC コンパイラ規格に従ってデータ アライメントが実行されます。
-
Vitis HLS と Vivado HLS では、インターフェイスの構造体/クラスの集約と分割の方法が大きく異なります。
-
Vivado HLS では、デフォルトでインターフェイス内の構造体が集約解除されていましたが、Vitis HLS では、構造体は集約したままにします。この場合、AGGREGATE/pragma HLS disaggregate プラグマ/指示子を使用すると、Vivado HLS の動作と同じようにできます。
- 例外は、構造体の中に hls::stream オブジェクトがある場合、または構造体内部の配列がパーティションされている場合で、いずれの場合も Vitis HLS によって構造体が分割されます。
- 内部変数やグローバル変数などのコード内の構造体は、デフォルトで分割され、構造体に示すようにメンバー要素に分解されます。作成される要素の数とタイプは、その構造体の内容によって決まります。構造体の配列は、複数の配列 (構造体の各メンバーに別々の配列) としてインプリメントされます。
-
Vivado HLS では、デフォルトでインターフェイス内の構造体が集約解除されていましたが、Vitis HLS では、構造体は集約したままにします。この場合、AGGREGATE/pragma HLS disaggregate プラグマ/指示子を使用すると、Vivado HLS の動作と同じようにできます。
- Vitis HLS では、AXI などのインターフェイス プロトコルについてデータ アライメントの方法も異なります。
- また、DATA_PACK のような廃止予定のプラグマも変更されています。
これらの変更の詳細は、ユーザー ガイド (UG1399) のVitis HLS のメモリ レイアウト モデルを参照してください。先に進む前に、このセクションを確認する必要があります。