SoC FPGA ブートローダー・デベロッパー・センター
SoC FPGA ブートローダー・デベロッパー・センターは、利用可能な SoC ブートローダー、主な特性、開始方法、およびその他のリソースを提供します。
インテル® SoC FPGA は、ブートローダーを使用して、ハード・プロセッサー・システム (HPS) 上にエンドユーザー・アプリケーションを読み込み、実行します。エンドユーザー・アプリケーションは、シンプルなベアメタル・アプリケーションでも、Linux* オペレーション・システムのような複雑なオペレーティング・システムでも構いません。
このページでは、ブートローダーとは何かを説明し、利用可能なブートローダーおよびそれらの主な特性を掲載し、ブートローダーによる開始方法を説明、またその他のリソースを掲載しています。
1.ブートローダーとは
ブートローダーの定義
SoC デバイスが起動する際、まず BootROM と呼ばれるソフトウェアが動作します。いくつかの理由で、BootROM には次のような制限された機能があります。
- オンチップ ROM に収まる必要があるため、小型でなければならない
- 変更するコストが非常に高いため、非常に堅牢でなければならず、その分機能が少なくなる
- システムがどのように構成されたかが分からないため、すべてを立ち上げることができない
一方でエンドユーザー・アプリケーションは、一般的に大型で、実行する前に、システムをエンドユーザーの必要に応じて構成する必要があります。
ブートローダーの仕事は、BootROM とエンドユーザー・アプリケーションの間のギャップを埋めることです。
シングルステージ・ブートローダー
通常のブートローダーのタスク
- スルーレート、電圧、プルアップ / プルダウンなどのピンの多重化とピンの設定を構成する
- クロックツリーでクロックを構成する
- SDRAM を立ち上げ、キャリブレーションする
- フラッシュメモリーを初期化する
- FPGA ファブリックの構成
- フラッシュメモリーからエンド・アプリケーションを読み込む
- エンド・アプリケーションに制御を渡す
上記に記載される機能のほか、ブートローダーは次のような高度な機能を提供し、より複雑な導入や、より簡単な開発を可能にします。
- クラウドからエンドユーザー・アプリケーションを取り込むネットワーク・アクセス。
- より簡単な問題診断を可能にするデバッグツール。
- インタラクティブ・コマンド向けコマンドライン・インターフェイス。
- エンドユーザー・アプリケーションのシンプルな読み込みとブートローダーによる実行を可能にするフレームワークを実行するアプリケーション。アプリケーションが終了した後、制御はブートローダーに戻されます。
マルチステージのブートローダー
ブートローダーのプロセスは、複数のステージ、通常は 2 つのステージに分割することができることがあります。
Cyclone® V SoC については、そのステージに SDRAM が立ち上げられていないため、BootROM は最大 64KB のブートローダーしか読み込むことができません。同様に、インテル® Arria® 10 SoC の場合、BootROM は最大 256KB のブートローダーしか読み込むことができません。このようなサイズ制限のため、ネットワークや複雑なファイルシステムへのアクセスなどの高度な機能を実現することができません。そのような機能を希望する場合は、ブートローダーの第 1 ステージが SDRAM を立ち上げ、第 2 ステージでより多くの機能を読み込みます。2 ステージ・ブートローダーは、Cyclone V SoC、Arria® V SoC、Arria® 10 SoC のデフォルトオプションです。
SDM ベース・デバイス向けブートローダー
インテル® Stratix® 10 SoC、インテル®® Agilex™ 7 SoC、インテル®® Agilex®®™ 5 SoC には、通常、2 ステージ・ブートローダーが使用されます。最初の小さなブートローダーのステージは、FPGA コンフィグレーション・ビットストリームの一部であり、セキュア・デバイス・マネージャー (SDM) によって HPS オンチップ RAM に読み込まれ、2 つ目のより大きなブートローダーのステージは、HPS がアクセスできる場所に格納する必要があります。
2.ハードウェア・ハンドオフ
ハンドオフの概要
すべてのインテル® SoC FPGA プロジェクトは、HPS に影響を与える様々なシステム設定がユーザーによって入力されるような、ハードウェア・プロジェクトから開始します。例えば、以下のものがあります。
- ピン・マルチプレクサー
- ピン設定
- SDRAM 設定
- クロック設定
これらの設定を適用することが、ブートローダーの仕事であり、これらの設定を受け取るブートローダーのプロセスは、ハードウェアからソフトウェアへのハンドオフと呼ばれます。
具体的なブートローダーと SoC デバイスファミリーによって、ハンドオフは異なる形式をとります。通常次のようなものがあります。
- Cyclone V および Arria V SoC については、ハンドオフは XML ファイル、バイナリーファイル、ソースコード・ファイルの組み合わせです。これらのファイルはソースコードに変換され、その後ブートローダーへコンパイルされます
- インテル® Arria® 10 SoC については、ハンドオフは、デバイスツリー・ファイルに変換され、ブートローダーによって使用される単一の XML ファイルに含まれています
- インテル Stratix 10 SoC、Intel Agilex 7 SoC、Intel Agilex 5 SoC については、ハンドオフ情報は FPGA コンフィグレーション・ビットストリームの一部です
ハンドオフ情報を入力または変更する主な方法は、Quartus® プラットフォーム・デザイナーで編集することです。
ハンドオフ情報に加えて、ブートローダーには、次の方法を介して、ユーザーが選択できる様々な設定があります。
- ブートローダー・ソースコードの編集
- デバイスツリー使用時のブートローダー・デバイスツリーの編集
Cyclone® V Soc と Arria® V SoC ハンドオフ
インテル® Arria® 10 SoC ハンドオフ
インテル Stratix 10 SoC、Intel Agilex 7 SoC、Intel Agilex 5 SoC ハンドオフ
3.利用可能なブートローダー
利用可能なブートローダーの概要
次の表では、利用可能なブートローダー、ライセンスのタイプ、サポートされる SoC、および 2 ステージサポートの提供状況を掲載しています。
U-Boot
U-Boot は、業界で広く使用され、多くの機能を提供するブートローダーです。
- U-Boot は限定されたオンチップ RAMを搭載するシステム (インテル® Cyclone® V SoC やインテル® Arria® V SoCなど) 向けに「SPL」と呼ばれる、オプションの第 1 ステージです。
- ネットワーク機能
- フラッシュメモリーのサポート
- コマンドライン・インターフェイス
- スクリプティング
- U-Boot カスタム・アプリケーション
U-Boot は、General Public License (GPL) に基づいて開発されているため、一般に提供される製品へのいかなる貢献も公開される必要があります。
U-Boot ソースコードは、GitHub ウェブサイトの U-Boot SoC FPGA ページで利用できます。
主な一般用 U-Boot ホームページは、Das U-Boot -- the Universal Boot Loader ウェブページにあります。
ATF
ARM Trusted Firmware (ATF) は、ARMv8-a 向けのセキュア・ワールド・ソフトウェアのリファレンス実装であり、トラステッド・ボード・ブート要件 (TBBR) やセキュア・モニター・コール (SMC) などのさまざまな ARM インターフェイス規格を実装しています。
ATF は、BSD ライセンスに基づいて共同で開発され、簡単な開発と導入を可能にします。
ATF のインテル SoC FPGAポートのソースコードは https://github.com/altera-opensource/arm-trusted-firmware からアクセスできます。
ソースコード
ソースコードは、次のウェブサイトから入手できます。