インテル®高位合成 (HLS) コンパイラー プロ・エディション: ベスト・プラクティス・ガイド

ID 683152
日付 12/16/2019
Public
ドキュメント目次

5.3.2. 例 : メモリーの幅方向のマージ

hls_merge("<mem_name>","width") 属性を使用し、 インテル®HLSコンパイラー プロ・エディションに強制して、同じメモリーシステム内に変数を実装させ、そのメモリーを幅ごとにマージします。

変数は、hls_merge 属性の <mem_name> ラベルセットが同じ場合はすべてマージされます。

次のコンポーネント・コードを検討します。

component short width_manual (int raddr, int waddr, short wdata) {

  short a[256];
  short b[256];

  short rdata = 0;
  
  // Lock step write
  a[waddr] = wdata;
  b[waddr] = wdata;

  // Lock step read 
  rdata += a[raddr];
  rdata += b[raddr];

  return rdata;
}
図 16. コンポーネント width_manual でのローカルメモリーの実装

この場合、 インテル®HLSコンパイラー プロ・エディションでは、ロード/ストア命令を結合して、ローカルメモリー ab にマージします。これは、次に示すとおり、ロード/ストア命令のアクセス先は、同じアドレスだからです。

component short width_manual (int raddr, int waddr, short wdata) {

  short a[256] hls_merge("mem","width");
  short b[256] hls_merge("mem","width");

  short rdata = 0;
  
  // Lock step write
  a[waddr] = wdata;
  b[waddr] = wdata;

  // Lock step read 
  rdata += a[raddr];
  rdata += b[raddr];

  return rdata;
}
図 17. コンポーネント width_manual のローカルメモリーの幅方向のマージ