インテルのみ表示可能 — GUID: xfy1508937381235
Ixiasoft
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コンパイラー プロ・エディションでは、ロード/ストア命令を結合して、ローカルメモリー a と b にマージします。これは、次に示すとおり、ロード/ストア命令のアクセス先は、同じアドレスだからです。
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 のローカルメモリーの幅方向のマージ