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

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

5.2. 例 : バンク・メモリー・アーキテクチャーのオーバーライド

メモリー属性をさまざまな組み合わせでコードに使用すると、メモリー・アーキテクチャーのオーバーライドができます。 インテル®HLSコンパイラー プロ・エディションでは、コンポーネントのメモリー・アーキテクチャーを推測します。

次のコード例で示しているのは、次のメモリー属性を使用してバンクメモリーをオーバーライドし、FPGA上のメモリーブロックを節約する方法です。

  • hls_bankwidth(N)
  • hls_numbanks(N)
  • hls_singlepump
  • hls_doublepump

元のコードでは、16ビット幅のシングル・ポンプ・オンチップ・メモリー・ブロックのバンクを2つ作成します。

component unsigned short mem_banked(unsigned short raddr,
                                    unsigned short waddr,
                                    unsigned short wdata){
    unsigned short data[1024];
    
    data[2*waddr] = wdata;
    data[2*waddr + 9] = wdata +1;

    unsigned short rdata = data[2*raddr] + data[2*raddr + 9];

    return rdata;
}

バンクメモリーの節約のために、ダブルパンプ32ビット幅オンチップ・メモリー・ブロックのバンクを1つ実装します。このためには、次の属性の追加を data[1024] の宣言前に行います。この属性によって、半分使用したメモリーバンク2つを折りたたんで、完全に使用したメモリーバンク (ダブルパンプ済み) 1つにします。これにより、半分使用したメモリーバンク2つと同じ速さでのアクセスが可能になります。

hls_bankwidth(2) hls_numbanks(1)hls_doublepump
unsigned short data[1024];

あるいは、ダブルパンプされたメモリーのダブルクロック要件を回避するために、シングルパンプ・オンチップ・メモリー・ブロックのバンクを1つ実装します。このためには、次の属性の追加を data[1024] の宣言前に行います。ただし、この例では、この属性によってストール可能なアービトレーションがコンポーネント・メモリーに追加され、コンポーネントのパフォーマンスが低下します。

hls_bankwidth(2) hls_numbanks(1)hls_singlepump
unsigned short data[1024];