インテルのみ表示可能 — GUID: eaq1478884423046
Ixiasoft
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; }