配列インターフェイス - 2023.2 日本語

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

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語

INTERFACE プラグマまたは指示子を使用すると、storage_type=<value> オプションで使用される RAM または ROM のタイプを明示的に指定できます。これにより、シングル ポートまたはデュアル ポートのどちらを作成するかを定義できます。storage_type を指定しない場合に、ツールで次が使用されます。

  • シングル ポート RAM (デフォルト)。
  • 開始間隔やレイテンシが削減される場合はデュアル ポート RAM。

ARRAY_PARTITION および ARRAY_RESHAPE プラグマを使用すると、インターフェイスの配列をリコンフィギュレーションできます。配列は複数の小型の配列に分割でき、それぞれに別のインターフェイスを使用できます。これには、配列を完全にスカラーのセットに分割する機能も含まれます。関数インターフェイスの場合は、配列のすべての要素に対してそれぞれ別のポートが作成されます。これにより並列アクセスは最大になりますが、さらにポートが作成されるため、ハードウェア インプリメンテーション中に配線問題が発生することがあります。

次のコード例に示す関数の配列引数は、デフォルトでシングル ポート RAM インターフェイスに合成されます。


#include "array_RAM.h"

void array_RAM (dout_t d_o[4], din_t d_i[4], didx_t idx[4]) {
 int i;

 For_Loop: for (i=0;i<4;i++) {
 d_o[i] = d_i[idx[i]];
 }

}

シングル ポート RAM インターフェイスが使用されるのは、for-loop により各クロック サイクルで読み出しおよび書き込みできるのは 1 要素のみであるため、デュアル ポート RAM インターフェイスを使用する利点がないからです。for ループが展開されると、Vitis HLS でデュアル ポート RAM が使用されます。これにより、同時に複数の要素を読み出すことができ、開始間隔を改善できます。RAM インターフェイスのタイプは、INTERFACE プラグマまたは指示子を適用し、storage_type を指定すると明示的に設定できます。

インターフェイスで配列に関する問題がある場合は、通常スループットに関係しており、たとえば、上記の例の配列が個々の要素に分割され、for-loop が展開されていれば、各配列の 4 つの要素すべてが同時にアクセスされます。

また、INTERFACE プラグマまたは指示子で latency=<value> オプションを使用すると、RAM のレイテンシを指定できます。これにより、インターフェイスで 1 を超えるレイテンシの外部 SPRAM をモデリングできます。