ALTIMA Company, MACNICA, Inc. SoC はじめてガイド HPS-FPGA 間のアクセス方法 (Arria V SoC / Cyclone V SoC 編 ) Ver.17 2017 年 7 月 Rev.1 ELSENA,Inc.
SoC はじめてガイド HPS-FPGA 間のアクセス方法 (Arria V SoC / Cyclone V SoC 編 ) 目次 はじめに...3 HPS-FPGA 間のインタフェース...4 アドレス マップ...6 ハードウェアの設定...8 HPS コンポーネントの設定 (AXI Bridges / FPGA-to-HPS SDRAM Interface)... 8 4-1-1. FPGA-to-HPS インタフェース (F2H)... 9 4-1-2. HPS-to-FPGA インタフェース (H2F)... 10 4-1-3. Lightweight HPS-to-FPGA インタフェース (LWH2F)... 11 4-1-4. FPGA-to-HPS SDRAM インタフェース (F2S)... 12 4-1-5. F2S のポート数... 13 4-1-6. SDRAM コントローラの優先度... 14 他のコンポーネントとの接続... 15 インタフェースの初期化... 16 4-3-1. F2H, H2F, LWH2F の初期化... 16 4-3-2. F2S の初期化... 17 ソフトウェアからのアクセス... 18 アドレスの考え方... 18 システム ヘッダ ファイル... 20 参考情報... 21 改版履歴... 22 Ver.17 / Rev. 1 2017 年 7 月 2/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
はじめに この SoC はじめてガイド シリーズは インテル SoC FPGA を使用する初心者ユーザ向けの技術コンテンツです インテル SoC FPGA は ARM Cortex -A9 MPCore プロセッサと FPGA とがデバイス内でバス接続されています デバイス内で接続されているため プロセッサと FPGA 間の転送レート不足の解消や 基板上の実装面積の縮小が期待されます この資料では インテル Arria V SoC FPGA や Cyclone V SoC FPGA における Hard Processor System (HPS) と FPGA 間のアクセス方法を説明します なお この資料内では特に断りが無い場合 Arria SoC FPGA や Cyclone V SoC のことをインテル SoC FPGA と呼ぶことにします Ver.17 / Rev. 1 2017 年 7 月 3/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
HPS-FPGA 間のインタフェース インテル SoC FPGA の内部構造は 下図の通りです 図の上方の緑色部分が FPGA ファブリックで その下方の水色部分を含む破線部分内が HPS です インテル SoC FPGA には FPGA と HPS との間に 4 つのインタフェースがあります HPS 側がバス マスタとなって FPGA 側にアクセスするインタフェースとしては 最大 128bit 幅の高帯域な HPS-to-FPGA (H2F) インタフェースと 32bit 幅の Lightweight HPS-to-FPGA (LWH2F) インタフェースがあります H2F は HPS と FPGA 間の比較的大容量のデータを転送するインタフェースです LWH2F は 制御信号など比較的低速でのアクセスに適しています HPS からは これらのインタフェースは 後述するアドレス マップ上でメモリ マップト I/O としてアクセスできます FPGA 側がバス マスタとなって HPS 側にアクセスするインタフェースとしては 最大 128bit の FPGA-to-HPS (F2H) インタフェースがあります また FPGA 側から HPS 側にある SDRAM コントローラに直接アクセスするインタフェースとしては FPGA-to-SDRAM (F2S) があります 各インタフェースの概要を次ページの表に示します Ver.17 / Rev. 1 2017 年 7 月 4/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
名称 HPS to FPGA Bridge Lightweight HPS to FPGA Bridge FPGA to HPS Bridge FPGA to HPS SDRAM Interface 略称 H2F LWH2F F2H F2S 機能概要 FPGA がバス マ HPS がバス マス HPS がバス マスタ FPGA がバス マスタとなり HPS タとなり FPGA 側となり FPGA 側にアスタとなり HPS 側の SDRAM へにアクセスするインクセスするインタフェ側にアクセスする直接アクセスするタフェースースインタフェースインタフェース バス幅 32/64/128bit 32bit 32/64/128bit 32/64/128/256 bit 空間サイズ 960MB 2MB 4GB 4GB I/F タイプ AXI3 AXI3 AXI3 AXI3 / Avalon MM 最大ポート数 1 1 1 AXI3 :3 Avalon -MM:6 主な使用方法 FPGA 側とのデータ転送 ( 広帯域を必要とする大きなサイズのデータを扱う場合 ) FPGA 側のコントロール ステータス レジスタ (CSR) の読み書き (H2F のデータ トラフィックに影響されずに低遅延でアクセスしたい場合 ) HPS 側とのデータ転送および CSR 読み書き HPS 側の SDRAM に対する高速アクセス (HPS 内のメイン スイッチを介さずに SDRAM へアクセスしたい場合 ) インテル Qsys システム統合ツールがバス プロトコルの相互変換を行うためのインタコネクト回路を自動生成するため Avalon インタフェースのコンポーネントを I/F タイプが AXI3 の Bridge/Interface へ接続することも可能です このため 今までの設計資産を流用することが可能です Ver.17 / Rev. 1 2017 年 7 月 5/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
アドレス マップ ARM プロセッサから見た FPGA は メモリ マップト デバイスとしてアクセスすることができます アドレス マップは どこからアクセスをするか によって 以下の 3 種類の概念に分かれます ARM プロセッサからアクセスする場合に使用する MPU ビュー L3 インタコネクトに接続されたマスタから使用する L3 ビュー もしくは non-mpu ビュー (F2H に接続された FPGA 側のマスタ デバイスも L3(non-MPU) ビューの概念が適用されます ) F2S に接続されたマスタから使用する SDRAM ビュー 各ビューの概念を下図に示します Ver.17 / Rev. 1 2017 年 7 月 6/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
上図が 3 種類の各ビューに対するアドレス マップとなります MPU ビューと L3(non-MPU) ビューには H2F LWH2F アクセス用に固定の領域が割り当てられます HPS 側から H2F ブリッジを介して FPGA にアクセスする際は 0xC000_0000~ 番地にアクセスします HPS 側から LWH2F ブリッジを介して FPGA にアクセスする際は 0xFF20_0000~ 番地にアクセスします ARM プロセッサのソフトウェアから FPGA にアクセスする方法は 5 ソフトウェアからのアクセス をご参照ください L3 ビュー (non-mpu ビュー ) の 0x8000_0000~ にマッピングされているのは ACP (Accelerator Coherency Port) です このポートを介してアクセスをすると L3 に接続されたマスタからとプロセッサとの間でコヒーレントなアクセスを行うことができます ACP を介したアクセスは インテル FPGA の Web ページにあるテクニカル リファレンス マニュアル ( 使用するデバイス ファミリ (Arria V / Cyclone V) 用の Hard Processor System Technical Reference Manual) の ACP に関する記述をご参照ください Ver.17 / Rev. 1 2017 年 7 月 7/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
ハードウェアの設定 ハードウェアの設定は Qsys によって行います 設定は HPS コンポーネントの設定 HPS と他のコンポーネントとの接続 および インタフェースの初期化 の 3 つが必要です HPS コンポーネントの設定 (AXI Bridges / FPGA-to-HPS SDRAM Interface) HPS コンポーネントの設定を Qsys の GUI にて行います FPGA Interfaces タブの AXI Bridges( 下図赤枠 ) および FPGA-to-HPS SDRAM Interface( 下図青枠 ) が 該当のオプションとなります 次に AXI Bridges の設定では F2H, H2F, LWH2F の各インタフェースに対して データ バス幅および使用の有無を選択します そして FPGA-to-HPS SDRAM Interface の設定では F2S インタフェースで利用するポートを 0 個 ( 未使用 ) から条件により最大 6 個まで複数のポートを登録できます 各ポートには バスの種類 およびデータ バス幅を選択します F2S に登録可能なポート数の詳細は 4-1-5. F2S のポート数 をご参照ください Ver.17 / Rev. 1 2017 年 7 月 8/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
4-1-1. FPGA-to-HPS インタフェース (F2H) FPGA-to-HPS インタフェースは FPGA 内にあるバス マスタが HPS 内のペリフェラルやメモリにアクセスするために使用します 4GB のアドレス空間を有しています 32bit アドレスをサポートできないバス マスタは Qsys の IP カタログにある Address Span Extender( ウィンドウ ブリッジ ) を使用してアドレス拡張することにより 接続できます データ バス幅は 32bit / 64bit / 128bit から選択することが可能です Ver.17 / Rev. 1 2017 年 7 月 9/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
4-1-2. HPS-to-FPGA インタフェース (H2F) HPS-to-FPGA インタフェースは HPS 内にある ARM プロセッサや DMA コントローラ等のバス マスタが FPGA 内のペリフェラルにアクセスするために使用します 最大 128bit のデータ バス幅を選択できるため 大容量のデータ転送に適します 960MB(0xC000_0000 ~ 0xFBFF_FFFF) のアドレス空間を有しています 960MB より大きい空間にアクセスする場合 Qsys の IP カタログにある Address Span Extender( ウィンドウ ブリッジ ) を使用してアドレス拡張することにより アクセスできます データ バス幅は 32bit / 64bit / 128bit から選択することが可能です Ver.17 / Rev. 1 2017 年 7 月 10/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
4-1-3. Lightweight HPS-to-FPGA インタフェース (LWH2F) Lightweight HPS-to-FPGA インタフェースは HPS 内にある ARM プロセッサや DMA コントローラ等のバス マスタが FPGA 内のペリフェラルにアクセスするために使用します データ バス幅が 32bit 固定のため LED 等の各種レジスタ制御用や 状態の確認のためのレジスタアクセスに適します 2MB(0xFF20_0000 ~ 0xFF3F_FFFF) のアドレス空間を有しています 2MB 以上の空間にアクセスする場合 Qsys の IP カタログにある Address Span Extender( ウィンドウ ブリッジ ) を使用してアドレス拡張することにより アクセスできます データ バス幅は 32bit 幅のみとなります Ver.17 / Rev. 1 2017 年 7 月 11/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
4-1-4. FPGA-to-HPS SDRAM インタフェース (F2S) FPGA-to-HPS SDRAM インタフェース (F2S) は FPGA 内のバス マスタが HPS 内の L3 インタコネクトを介すことなく HPS 内の SDRAM にアクセスができるインタフェースです このポートは 最大 6 ポートまで持つことが可能です 4GB のアドレス空間を有します アドレス空間は 4GB 存在しますが メモリの実体がない空間へのアクセスは行わないでください インタフェースの種類は 4 種類選択できます AXI-3 Avalon-MM Bidirectional Avalon-MM Write-Only Avalon-MM Read-Only データ バス幅は 32bit / 64bit / 128bit /256bit から選択できます Ver.17 / Rev. 1 2017 年 7 月 12/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
4-1-5. F2S のポート数 FPGA-to-HPS SDRAM インタフェース (F2S) は 複数のポートを持てることは紹介しました ここでは ポート数の考え方について紹介します F2S は コマンド ポート (6 ポート ) 64bit read data ポート (4 ポート ) 64bit の write data ポート (4 ポート ) にて実装されます 以下の表に示す通り AXI バスの場合 コマンド ポートを 2 本 Avalon -MM バスの場合 コマンド ポートを 1 ポート使用します このため AXI バスの場合 最大 3 ポート Avalon -MM バスの場合 最大 6 ポート実装できます データ バス幅で考えると 256bit のバスは最大 1 ポート 128bit のバスは最大 2 ポート 64bit もしくは 32bit のバスの場合は最大 4 ポート実装できます Avalon -MM の read only ポートおよび write only ポートを組み合わせることにより 最大 6 ポート実装できることになります Ver.17 / Rev. 1 2017 年 7 月 13/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
4-1-6. SDRAM コントローラの優先度 HPS に実装されている SDRAM コントローラは 複数ポートからのアクセスを可能にするため アービトレーション ロジックを実装しています 重みづけのできるラウンド ロビン方式で実装されています 下表に示すコマンド ポート単位で重みづけできます 詳細は リファレンス マニュアルマニュアル ( 使用するデバイス ファミリ (Arria V / Cyclone V) 用の Hard Processor System Technical Reference Manual) の SDRAM Controller Subsystem の項をご参照ください Ver.17 / Rev. 1 2017 年 7 月 14/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
他のコンポーネントとの接続 HPS と他のコンポーネントとを接続するには Qsys の GUI 上での設定を行います HPS の各インタフェースは Qsys 上でポートとして見ることができます このポートと接続先のポートを結線することにより 接続できます HPS のインタフェースは AXI インタフェースですが Qsys が自動的に変換するため Avalon -MM インタフェースも AXI インタフェースもどちらも接続可能です Qsys 内のコンポーネントのアドレスも GUI にて設定可能です ここで設定したアドレスを元に ソフトウェアからアクセスを行います Ver.17 / Rev. 1 2017 年 7 月 15/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
インタフェースの初期化 HPS - FPGA 間のインタフェースを使用するためには HPS 内にあるレジスタを設定する必要があります 次の条件を満たす場合には Preloader と呼ばれるインテル提供のブートローダを使用することにより設定されるので ユーザはあまり気にする必要はありません Preloader 実行前に FPGA のコンフィギュレーションが完了している Preloader 実行中に FPGA のコンフィギュレーションを行う 4-3-1. F2H, H2F, LWH2F の初期化 HPS2FPGA (H2F) / LWHPS2FPGA (LWH2F) / FPGA2HPS (F2H) ブリッジを利用するには 2 ステップ必要です 1 ブリッジリセットの解除 0xFFD0_501C に 0x0 をライト (bit0: H2F / bit1: LWH2F / bit2: F2H の各ビットに 0:Reset 解除をセット ) 詳細は 以下を参照ください brgmodrst レジスタの詳細 : Arria V HPS Memory Map Cyclone V HPS Memory Map 2 L3 インタコネクトの設定 0xFF80_0000 に 0x18 をライト (bit3: H2F / bit4: LWH2F の各ビットに 1: Visible to L3 Master をセット ) 詳細は 以下をご参照ください remap レジスタの詳細 : Arria V HPS Memory Map Cyclone V HPS Memory Map 書き込む値は デザイン依存になりますので 各レジスタの詳細をご確認の上設定ください これらの初期化は 後程ご紹介する bridge_enable_handoff コマンドで設定することが可能です Ver.17 / Rev. 1 2017 年 7 月 16/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
4-3-2. F2S の初期化 Preloader により SDRAM の初期化が行われていない場合 Bridge へのアクセスができません また F2S の設定を変更する場合は SDRAM が Idle 状態である必要があります このため U-Boot に実装されている bridge_enable_handoff コマンドを実行することをお勧めします run bridge_enable_handoff このコマンドでは ブリッジのパラメータは Preloader からの情報を使用します run bridge_enable_handoff に関する詳細情報は Preloader/U-Boot のソース ツリーに含まれるドキュメントに記載がありますので こちらをご参照ください ファイル名 :uboot-socfpga/doc/readme.socfpga Ver.17 / Rev. 1 2017 年 7 月 17/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
ソフトウェアからのアクセス ARM Cortex -A9 MPCore プロセッサと FPGA とが デバイス内でバス接続されています ARM から FPGA 内部のペリフェラルは メモリ マップト I/O として見ることができます アドレスの考え方 メモリ マップより HPS-to-FPGA(H2F) インタフェースのベース アドレスは 0xC000_0000 Light Weight HPS-to FPGA (LWH2F) インタフェースのベース アドレスは 0xFF20_0000 であることが分かります ARM から見た FPGA コンポーネントのアドレスは 以下のように計算できます FPGA コンポーネントのアドレス = HPS-FPGA ブリッジのベース アドレス + Qsys 上のオフセット アドレス 例えば Qsys 上で LWH2F の 0x00020040 に接続された LED に対してアクセスするには 以下のアドレスにアクセスします ARM から PIO_LED にアクセスする際のアドレス = 0xFF20_0000(LWH2F base) + 0x0002_0040(Qsys 上のオフセット ) = 0xFF22_0040 Ver.17 / Rev. 1 2017 年 7 月 18/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
#include <stdio.h> #include "socal.h" #define LED_BASE_ADDR (0xFF220040) int main(int argc, char** argv) { int i; printf("hello from Sodia. n"); while(1) { for(i=0; i < 16; i++){ alt_write_word(led_base_addr,i); printf("led [%x] n",i); } } } return 0; Ver.17 / Rev. 1 2017 年 7 月 19/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
システム ヘッダ ファイル 先ほどの例では ソース コード上に LED_PIO のアドレスを定義し アクセスを行いました この方法では ハードウェアの情報が変更される毎に ソース コードの変更が必要になる場合があります インテル FPGA では ハードウェアの情報をソフトウェア担当者に引く次ぐための仕組みを提供しております その仕組みが システム ヘッダ ファイル生成ツールです SoC EDS 17.0 Command Shell 上で <qsys system>.sopcinfo ファイルのあるディレクトリまで移動して sopc-create-header-files コマンドを実行します $ sopc-create-header-files <qsys subsystem>.sopcinfo どのマスタから見るか という観点で いくつかヘッダ ファイルが生成されるので ご利用ください ヘッダ ファイルの例を 以下に示します Ver.17 / Rev. 1 2017 年 7 月 20/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
参考情報 この資料では Arria V SoC FPGA / Cyclone V SoC FPGA における HPS と FPGA 間のアクセス方法を紹介しました この資料を参考に インテル SoC FPGA をお使いいただければと思います インテル SoC FPGA には サンプル デザインも用意されているので 初めて SoC FPGA を使用される場合は開発キット等でサンプル デザインをベースに動かしてみると 理解への近道になると思います サンプル デザインは マクニカオンラインサービスや インテル FPGA のページ および RocketBoards.org で紹介されているので ぜひご覧ください マクニカオンラインサービス SoC 関連情報 マクニカオンラインサービス SoC 関連 FAQ HPS-to-FPGA Bridges Design Example SoC Design Examples RocketBoards.org Ver.17 / Rev. 1 2017 年 7 月 21/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.
改版履歴 Revision 年月概要 1 2017 年 7 月初版 免責およびご利用上の注意 弊社より資料を入手されましたお客様におかれましては 下記の使用上の注意を一読いただいた上でご使用ください 1. 本資料は非売品です 許可無く転売することや無断複製することを禁じます 2. 本資料は予告なく変更することがあります 3. 本資料の作成には万全を期していますが 万一ご不明な点や誤り 記載漏れなどお気づきの点がありましたら 本資料を入手されました下記代理店までご一報いただければ幸いです 株式会社マクニカアルティマカンパニー https://www.alt.macnica.co.jp/ 技術情報サイトアルティマ技術データベース http://www.altima.jp/members/ 株式会社エルセナ http://www.elsena.co.jp 技術情報サイト ETS https://www.elsena.co.jp/elspear/members/index.cfm 4. 本資料で取り扱っている回路 技術 プログラムに関して運用した結果の影響については 責任を負いかねますのであらかじめご了承ください 5. 本資料は製品を利用する際の補助的な資料です 製品をご使用になる際は 各メーカ発行の英語版の資料もあわせてご利用ください Ver.17 / Rev. 1 2017 年 7 月 22/22 ALTIMA Company, MACNICA, Inc. / ELSENA,Inc.