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

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

1.4.2.2. board_spec.xml ファイルの作成

board_spec.xmlXML ファイルには、ハードウェア・システムを インテル® FPGA SDK for OpenCL™ に記述するために必要なメタデータが含まれています。
board_spec.xmlファイルに含む必要のある型について詳しくは、board_spec.xml ファイルの XML エレメント、属性、およびパラメーターの項を参照してください。board_spec.xmlテンプレートは、カスタム・プラットフォーム・ツールキットの ALTERAOCLSDKROOT/board/custom_platform_toolkit/board_package/hardware/template ディレクトリーで使用可能です。
  1. 次の XML エレメントと属性を含めるためにboard_spec.xmlファイルを構造化します。
    表 3.   board_spec.xml ファイルで指定した XML エレメントと属性
    エレメント 属性
    board versionname
    device device_modelused_resources
    global_mem namemax_bandwidthinterleaved_bytesconfig_addr、[default]、interface
    host kernel_config
    [channels] interface
    interfaces interfacekernel_clk_reset
    compile projectrevisionqsys_filegeneric_kernelgenerate_cmdsynthesize_cmdauto_migrate

  2. boardエレメントでは、ボードのバージョンとアクセラレーター・ボードの名前を指定します。ボード名は、board_spec.xmlファイルが存在するディレクトリー名と一致している必要があります。
    重要: ボードバージョンは、カスタム・プラットフォームの開発に使用するSDKのバージョンと一致している必要があります。
    重要: ボード名は、文字、数字、アンダースコア ( _ )、ハイフン ( - )、もしくはピリオド (.) のみでの組み合わせ ( 例 : a10_ref ) でなければなりません。
  3. deviceエレメントでは、次の手順を実行してデバイス・モデル・ファイル名を指定します。
    1. ALTERAOCLSDKROOTSDKインストーレーションへのパスを参照する ALTERAOCLSDKROOT/share/models/dmディレクトリーに移動します。ディレクトリーは、アクセラレーター・ボード上で使用可能な FPGA リソースを記述するデバイス・モデル・ファイルのリストを含んでいます。
    2. デバイスがdmディレクトリーにリストされている場合、device_model属性にデバイス・モデル・ファイルの名前を指定します。手順 4 に進みます。
      例 : device_model="10ax115s2f45i2sges_dm.xml"
    3. デバイスがdmディレクトリーにリストされていない場合、またはボードにデバイスモデルがない FPGA を使用している場合は、手順 d~g を実行して新しいデバイスモデルを作成します。
    4. ALTERAOCLSDKROOT/share/models/dmディレクトリー ( 例 :10ax115s2f45e2lg_dm.xml) からデバイスモデルをコピーします。
    5. board_spec.xmlファイルが存在するファイルが存在するカスタム・プラットフォーム・サブディレクトリーにデバイスモデルのコピーを保存します。
    6. ファイル名を変更し、ボードが使用するパーツを記述するために値を変更します。
    7. board_spec.xmlファイルで、ファイル名とともにdeviceエレメントのdevice_model属性を更新します。
  4. deviceエレメントでは、used_resources属性でパラメーターを指定して、OpenCL カーネルが存在しないボードデザインが消費する FPGA リソースを記述します。
    デザインにすべてのボードロジック周辺に定義されたパーティションが含まれている場合、Fitter レポートの Partition Statistics セクションからデータを抽出することができます。
  5. 各グローバルメモリーのタイプで、次の情報を指定します。
    1. メモリータイプの名前。
    2. 結合された最大グローバルメモリーの帯域幅。
      メモリーのデータシートから帯域幅の値が算出できます。
    3. インテル® FPGA SDK for OpenCL™オフライン・コンパイラーがメモリーバンクをまたいでインターリーブするデータのサイズ。
      注: interleaved_bytes = burst_size x width_bytes
    4. ホモジニアス・メモリー・システムを使用している場合は手順 e に進みます。ヘテロジニアス・メモリー・システムを使用している場合は、グローバルメモリー・タイプごとに ACL Mem Organization Control Qsys コンポーネント (mem_org_mode) のベースアドレスでconfig_addr属性を指定します。
    5. グローバル・メモリー・タイプをデフォルト設定に選択する場合は、オプションのdefault属性に値 1 を割り当てます。
      この属性を含まない場合は、board_spec.xmlファイルで定義されている最初のメモリーがデフォルトメモリーになります。
    6. interface属性にパラメーターを指定し、各メモリー・インターフェイスの特性を記述します。
  6. hostエレメントでは、kernel_config属性にパラメーターを指定し、カーネルが存在する場所でオフセットを記述します。OpenCL Kernel Interface Qsys コンポーネントで、kernel_craマスターの観点からオフセットの開始を決定します。
  7. ボードが直接 OpenCL カーネルから I/O へのアクセスのためのチャネルを提供している場合は、すべてのチャネル・インターフェイスでchannelsエレメントを含めます。interface属性にパラメーターを指定して各チャネル・インターフェイスの特性を記述します。
  8. OpenCL カーネルに接続し OpenCL カーネルを制御するカーネル・インターフェイスを記述するinterfacesエレメントを含めます。各インターフェイス型 ( つまり、masterirq、およびstreamsource) の 1 つを含めます。
    1. interface属性にパラメーターを指定して各カーネル・インターフェイスの特性を記述します。
      streamsourceインターフェイス型では、スヌーブストリームが使用するクロック名で clock属性も指定します。通常、このクロックはカーネルクロックです。
      重要: streamsourceカーネル・インターフェイスで指定されたスヌープ・インターフェイス (acl_internal_snoop) の幅を更新します。幅の更新は、board_spec.xmlglobal_memインターフェイス・エントリーが、デフォルトメモリーで対応する OpenCL Memory Bank Divider コンポーネントからのbank<N> Avalon®メモリーマップド (Avalon-MM) マスターの特性と一致していることを確認します。
    2. kernel_clk_reset属性でパラメーターを指定し、抽出したカーネルクロックを含めてインターフェイスをカーネル・インターフェイスとしてリセットします。
  9. compileエレメントを含んで Quartus® Primeコンパイル、レジストレーション、および自動移行を制御するためにその属性を指定します。
下は、board_spec.xmlファイルの XML コード例です。
<?xml version="1.0"?> <board version="16.1" name="a10gx"> <compile project="top" revision="top" qsys_file="none" generic_kernel="1"> <generate cmd="quartus_sh -t scripts/pre_flow_pr.tcl"/> <synthesize cmd="quartus_cdb -t import_compile.tcl"/> <auto_migrate platform_type="a10_ref" > <include fixes=""/> <exclude fixes=""/> </auto_migrate> </compile> <device device_model="10ax115s2f45i2sges_dm.xml"> <used_resources> <alms num="33120"/> <!-- Total ALMs - ALMs available to kernel_system_inst --> <ffs num="132480"/> <dsps num="0"/> <rams num="333"/> </used_resources> </device> <!-- DDR4-2400 --> <global_mem name="DDR" max_bandwidth="19200" interleaved_bytes="1024" config_addr="0x018"> <interface name="board" port="kernel_mem0" type="slave" width="512" maxburst="16" address="0x00000000" size="0x80000000" latency="240" addpipe="1"/> </global_mem> <host> <kernel_config start="0x00000000" size="0x0100000"/> </host> <interfaces> <interface name="board" port="kernel_cra" type="master" width="64" misc="0"/> <interface name="board" port="kernel_irq" type="irq" width="1"/> <interface name="board" port="acl_internal_snoop" type="streamsource" enable="SNOOPENABLE" width="31" clock="board.kernel_clk"/> <kernel_clk_reset clk="board.kernel_clk" clk2x="board.kernel_clk2x" reset="board.kernel_reset"/> </interfaces> </board>