インテル® FPGA SDK for OpenCL: カスタム・プラットフォーム・ツールキット・ユーザーガイド

ID 683085
日付 10/31/2016
Public
ドキュメント目次

2.2.3. global_mem

board_spec.xmlファイルのglobal_meminterfaceエレメントは、カーネルに接続するメモリー・インターフェイスの情報を提供します。
XML コード例 :
<!-- DDR3-1600 -->
<global_mem name="DDR" max_bandwidth="25600" interleaved_bytes="1024"
 config_addr="0x018">
  <interface name="board" port="kernel_mem0" type="slave" width="512" maxburst="16"
   address="0x00000000" size="0x100000000" latency="240"/>
  <interface name="board" port="kernel_mem1" type="slave" width="512" maxburst="16"
   address="0x100000000" size="0x100000000" latency="240"/>
</global_mem>

<!-- QDRII -->
  <global_mem name="QDR" max_bandwidth="17600" interleaved_bytes="8"
   config_addr="0x100">
    <interface name="board" type="slave" width="64" maxburst="1"
     address="0x200000000" size="0x1000000" latency="150" addpipe="1">
      <port name="kernel_qdr0_r" direction="r"/>
      <port name="kernel_qdr0_w" direction="w"/>
    </interface>
    <interface name="board" type="slave" width="64" maxburst="1"
     address="0x201000000" size="0x1000000" latency="150" addpipe="1">
      <port name="kernel_qdr1_r" direction="r"/>
      <port name="kernel_qdr1_w" direction="w"/>
    </interface>
    <interface name="board" type="slave" width="64" maxburst="1"
     address="0x202000000" size="0x1000000" latency="150" addpipe="1">
      <port name="kernel_qdr2_r" direction="r"/>
      <port name="kernel_qdr2_w" direction="w"/>
    </interface>
    <interface name="board" type="slave" width="64" maxburst="1"
     address="0x203000000" size="0x1000000" latency="150" addpipe="1">
      <port name="kernel_qdr3_r" direction="r"/>
      <port name="kernel_qdr3_w" direction="w"/>
    </interface>
  </global_mem>
注: カーネルがアクセスする各グローバルメモリー内には、特性を記述するinterfaceエレメントを 1 つ含める必要があります。
表 13.  global_mem エレメントでの属性
属性 説明
name インテル® FPGA SDK for OpenCL™ ユーザーがメモリータイプの識別に使用する名前です。それぞれの名前は一意、かつ 32 文字未満でなければなりません。
max_bandwidth 現在のコンフィグレーションに結合されたすべてのグローバルメモリー・インターフェイスの単位 Mb/s ( メガバイト / 秒 ) での最大帯域幅です。 インテル® FPGA SDK for OpenCL™オフライン・コンパイラーは、max_bandwidthを使用し、アプリケーションとボードに適したアーキテクチャーを選択します。

メモリーのデータシートから帯域幅の値を計算します。

800 MHz で動作中の 64 ビット DDR3 インターフェイスでのmax_bandwidthの計算例は次のとおりです。

max_bandwidth = 800 MHz x 2 x 64 ビット ÷ 8 ビット = 12800 MB/s

ブロック RAM は、グローバルメモリーとして外部メモリーの代わり、もしくは外部メモリーと結合して、使用することができます。ブロック RAM のmax_bandwidth計算式は、max_bandwidth = ブロック RAM スピード x ( ブロック RAM インターフェイスのサイズ ÷ 8 ビット ) です。

100 MHz で動作中の 512 ビット・ブロック RAM でのmax_bandwidthの計算例は次のとおりです。

max_bandwidth = 100 MHz x 512 ビット ÷ 8 ビット = 6400 MB/s

interleaved_bytes

特定のグローバルメモリー・システムで複数のインターフェイスをインスタンス化する際、board_spec.xmlファイル内のinterleaved_bytes属性を含めます。この属性は、オフライン・コンパイラーがインターフェイス間で分配するデータのサイズを制御します。

オフライン・コンパイラーは、現在、1 つのフルバーストのサイズより細かくないバンク間でデータをインターリーブすることができます。この属性は、バイト単位でこのサイズを指定し、通常、burst_size x width_bytesで計算されます。interleaved_bytesの値は、ホスト・インターフェイスとカーネルにおいて等しくなければなりません。したがって、この観点から、OpenCL Memory Bank Divider のコンフィグレーションは、エクスポートされたカーネル・スレーブ・インターフェイスと一致していなければなりません。

ブロック RAM の場合、interleaved_bytesはインターフェイスの幅 ( 単位バイト ) と等しくなります。

config_addr ホスト・ソフトウェアがメモリーの設定に使用する ACL Mem Organization Control Qsys コンポーネント (mem_org_mode) のアドレスです。ボードにホモジニアス・メモリーがある場合、この属性を省略することができます。ソフトウェアは、このコンポーネントのためにデフォルトアドレス (0x18) を使用します。ボードにヘテロジニアス・メモリーがある場合、各メモリータイプのボードシステムに mem_org_mode コンポーネントがあります。

config_addr属性を mem_org_mode コンポーネントのベースアドレス値に入力して設定します。

default デフォルトのメモリー・インターフェイスとして、このオプションの属性を含めて値 1 をグローバルメモリーに割り当てて設定します。

この属性を実装しない場合、board_spec.xmlファイルで定義されている最初のメモリータイプがデフォルトのメモリー・インターフェイスになります。

interface 各インターフェイスで指定すべきパラメーターについては、interfaceの項を参照してください。