インテル® HLS コンパイラー: リファレンス・マニュアル

ID 683349
日付 6/23/2017
Public
ドキュメント目次

1.9.1. メモリー属性の使用例

コードにさまざまな組み合わせのメモリー属性を組み込むことで、HLSコンパイラーがコンポーネントに実装するメモリー・アーキテクチャーをオーバーライドすることができます。

オンチップ・メモリーブロックを節約するための統合メモリーのオーバーライド例

次のコード例は、次のメモリー属性を使用して結合メモリーをオーバーライドする方法を示しています。

  • hls_bankwidth(n)
  • hls_numbanks(n)
  • hls_singlepump
  • hls_numports_readonly_writeonly(m,n)

オリジナルコードは、64 ビット幅の 256 の深さ ( 256x64 ビット ) のメモリー、つまり、2 つのオンチップ・メモリーブロックを統合します。

component unsigned int mem_coalesce(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;
}

変更されたコードは、32 ビット幅の 512 の深さ ( 512×32 ビット ) で、ストール可能な調停を備えたシンプル・デュアルポート・オンチップ・メモリーブロックを実装しています。

component unsigned int mem_coalesce(unsigned int raddr,
                                    unsigned int waddr,
                                    unsigned int wdata){
    //Attributes that stop memory coalescing
    hls_bankwidth(4) hls_numbanks(1)
    //Attributes that specify a simple dual port
    hls_singlepump hls_numports_readonly_writeonly(1,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;
} 
注: hls_singlepumphls_numports_readonly_writeonly(1,1)属性の指定の代わりに、hls_simple_dual_port_memory属性でこのコンフィグレーションを指定することができます。

オンチップ・メモリーブロックを節約するバンクメモリー・オーバーライドの例

次のコード例は、下のメモリー属性を使用してバンクメモリーをオーバーライドする方法を示しています。

  • hls_bankwidth(n)
  • hls_numbanks(n)
  • hls_singlepump
  • hls_doublepump

オリジナルコードは、シングルポンプ・オンチップ・メモリーブロックのバンクを 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;
}

バンクメモリーの節約のために、data[1024] の宣言前に次の属性を追加することで、ダブルポンプ・オンチップ・バンクメモリーのバンクを 1 つ実装するオプションがあります。

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

あるいは、次の属性をdata[1024] の宣言前に追加することでストール可能な調停のシングルポンプ・オンチップ・メモリーブロックのバンクを 1 つ実装することもできます。

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