インテル® HLS コンパイラー: リファレンス・マニュアル

ID 683349
日付 6/23/2017
Public
ドキュメント目次

1.4.2.3.1. 暗黙的および明示的なメモリー・インターフェイスの記述例

明示的なmm_masterクラスを指定することで、メモリー・インターフェイスを記述するコンポーネント・コードを最適化します。

暗黙的な例

次のコード例は、両方のポインター逆参照からのロード / ストアー命令をコンポーネントのトップレベル・モジュールの単一インターフェイスに調停します。このインターフェイスは、64 ビットのデータバス幅と 64 ビットアドレス幅、および固定レイテンシー 1 を有します。 

#include "HLS/hls.h"
component void dut(int *ptr1, int *ptr2) {
 *ptr1 += *ptr2;
 *ptr2 += ptr1[1];
}

int main(void) {
  int x[2] = {0, 1};
  int y = 2;

  dut(x, &y);

  return 0;
}

明示的な例

この例は、明示的なmm_masterクラスを使用して、特定のメモリー・インターフェイスに対して前のコードスニペットを最適化する方法を示します。mm_masterクラスは定義されたテンプレートであり、次の特性があります。

  • 各インターフェイスには、2 つの独立したインターフェイスを推測してコンポーネント内の調停量を減らす一意の ID が与えられる。
  • デフォルトの 64 ビット幅より大きいデータバス幅
  • デフォルトの 64 ビット幅より小さいアドレスビット幅
  • 2 の固定レイテンシーを有するインターフェイス

これらの特性を定義することで、システムが正確に 2 クロックサイクル後に有効な読み込みデータを返し、読み込みと書き込みの両方でインターフェイスがストールしないことが保証されますが、システムは 2 つの異なるメモリーが提供できなければなりません。

#include "HLS/hls.h"
component void dut(ihc::mm_master<int, ihc::dwidth<256>,
                                     ihc::awidth<32>,
                                     ihc::aspace<1>, 
                                     ihc::latency<2> > &mm1,
                   ihc::mm_master<int, ihc::dwidth<256>,
                                     ihc::awidth<32>,
                                     ihc::aspace<4>,
                                     ihc::latency<2> > &mm2) {
  *mm1 += *mm2;
  *mm2 += mm1[1];
}
int main(void) {
  int x[2] = {0, 1};
  int y = 2;

  ihc::mm_master<int, ihc::dwidth<256>, ihc::awidth<32>, ihc::aspace<1>,
                    ihc::latency<2> > mm_x(x,2*sizeof(int),false);
  ihc::mm_master<int, ihc::dwidth<256>, ihc::awidth<32>, ihc::aspace<1>,
                    ihc::latency<2> > mm_y(&y,sizeof(int),false);

  dut(mm_x, mm_y);

  return 0;
}