インテルのみ表示可能 — GUID: zoi1566394507337
Ixiasoft
5.1. 例 : 結合メモリー・アーキテクチャーのオーバーライド
メモリー属性をさまざまな組み合わせでコードに使用すると、メモリー・アーキテクチャーのオーバーライドができます。 インテル®HLSコンパイラー プロ・エディションでは、コンポーネントのメモリー・アーキテクチャーを推測します。
次のコード例で示しているのは、次のメモリー属性を使用して結合メモリーをオーバーライドし、FPGAのメモリーブロックを節約する方法です。
- hls_bankwidth(N)
- hls_numbanks(N)
- hls_singlepump
- hls_max_replicates(N)
元のコードによって2つのメモリーアクセスが結合し、結果として、深さ256の位置、64ビット幅 (256x64ビット) のメモリーシステム (2つのオンチップ・メモリー・ブロック) になります。
component unsigned int mem_coalesce_default(unsigned int raddr, unsigned int waddr, unsigned int wdata){ unsigned int data[512]; data[2*waddr] = wdata; data[2*waddr + 1] = wdata + 1; unsigned int rdata = data[2*raddr] + data[2*raddr + 1]; return rdata; }
次の画像で示すのは、このコードサンプルの256x64ビットメモリーの構造と、ハイレベルのデザインレポート ( report.html ) でのコンポーネント・メモリー構造の表示方法です。
変更されたコードによって実装されるのは、512のワード深さ、32ビット幅で、ストール可能なアービトレーションを備えたオンチップ・メモリー・ブロックです。
component unsigned int mem_coalesce_override(unsigned int raddr, unsigned int waddr, unsigned int wdata){ //Attributes that stop memory coalescing hls_bankwidth(4) hls_numbanks(1) //Attributes that specify a single-pumped single-replicate memory hls_singlepump hls_max_replicates(1) unsigned int data[512]; data[2*waddr] = wdata; data[2*waddr + 1] = wdata + 1; unsigned int rdata = data[2*raddr] + data[2*raddr + 1]; return rdata; }
次の画像で示すのは、このコードサンプルのストール可能なアービトレーションを備えた512x32ビットメモリーの構造と、ハイレベルのデザインレポート ( report.html ) でのコンポーネント・メモリー構造の表示方法です。
ハードウェア領域の節約は、コンポーネントに必要なRAMブロック数の削減によってできるように見えますが、ストール可能なアービトレーションの導入により、コンポーネントの実装に必要なハードウェアの量が増えます。次の表では、コンポーネントに必要なALMとFFの数の比較ができます。