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

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

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 ) でのコンポーネント・メモリー構造の表示方法です。

図 10.  mem_coalesce_default 用に生成されたメモリー構造

変更されたコードによって実装されるのは、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 ) でのコンポーネント・メモリー構造の表示方法です。

図 11.  mem_coalesce_default 用に生成されたメモリー構造

ハードウェア領域の節約は、コンポーネントに必要なRAMブロック数の削減によってできるように見えますが、ストール可能なアービトレーションの導入により、コンポーネントの実装に必要なハードウェアの量が増えます。次の表では、コンポーネントに必要なALMとFFの数の比較ができます。