1. はじめに
この記事では、Agilex™ 7 FPGA 向けにベアメタル・アプリケーションの提供及び実行手順を紹介します。OS が起動していない環境下で、アプリケーションを動作させたい際の参考にしていただければ幸いです。
2. ベアメタル・アプリケーションのサンプル提供/内容
この記事ではベアメタル・アプリケーションのサンプルを提供しています。
添付ファイル名 : Baremetal_HelloWorld_v0.tar.gz
実行手順については、3 章で説明しておりますので参考にしてください。
本サンプルのは "Hello World!" を出力するだけの、シンプルな構成になっています。
"Hellow World!" を表示しているソースファイル名は hwlib.c ファイルです。
3. 実行方法
デバッガーと SD カードからの実行方法について、それぞれ説明します。
注記:
両実行方法ともに、ブートローダー起動後のコンソールまで起動する必要があります。
環境の作製方法については、下記 Web ページを参考にしてください。
Building Bootloader for Stratix 10 and Agilex
【補足】
Flush の種類によって、"Agilex - Boot from SD Card" か "Agilex - Boot from QSPI" のどちらかをご確認ください。尚、本コンテンツでは、SD カードからの起動を行っています。
HPS のブートを開始するためには、SDM (Secure Device Manager) に対して JTAG 経由で .sof ファイルを書き込むか、事前にコンフィグ用の QSPI Flash に .jic ファイルを書き込んでおく必要があります。
Agilex のブートフローについては以下の記事も確認ください。
Stratix® 10 FPGA/Agilex™ 7 FPGA のブート方式と設定
3-1. デバッガーから実行
構成としては下図の通りです(図 1)。
予めブートローダーを起動しておき、デバッガー(例. Arm DS)から実行します。
デバッガーで実行する手順については 3-1-1 以降で説明します。
【図 1】 デバッガーから実行する際の構成
3-1-1. ベアメタル・アプリケーションをビルド
この記事に添付されているベアメタル・アプリケーションをインポートしビルドを行います。
インポートとビルドは、図 2 と 図 3 を参考にしていただければ幸いです。
【図 2】インポート手順
【図 3】ベアメタル・アプリケーションのビルド
3-1-2. ベアメタル・アプリケーションを実行
下図のようにプロジェクトを右クリックし、[Debug As]⇒[Debug Configuration]でデバッグを実行します(図 3)
【図 4】ベアメタル・アプリケーションのデバッグ実行
3-1-3. ログを確認
正常にビルドが完了すると、下記のようなログが出力されます。
U-Boot SPL 2022.01 (Sep 08 2022 - 22:48:40 +0900)
Reset state: Cold
MPU 1200000 kHz
L4 Main 400000 kHz
L4 sys free 100000 kHz
L4 MP 200000 kHz
L4 SP 100000 kHz
SDMMC 50000 kHz
DDR: 8192 MiB
SDRAM-ECC: Initialized success with 1728 ms
QSPI: Reference clock at 400000 kHz
WDT: Started watchdog@ffd00200 with servicing (10s timeout)
Trying to boot from MMC1
## Checking hash(es) for config board-0 ... OK
## Checking hash(es) for Image atf ... crc32+ OK
## Checking hash(es) for Image uboot ... crc32+ OK
## Checking hash(es) for Image fdt-0 ... crc32+ OK
NOTICE: BL31: v2.6.1(release):
NOTICE: BL31: Built : 00:44:55, Jul 28 2022
NOTICE: BL31 CLK freq = 400 MHz
U-Boot 2022.01 (Jul 28 2022 - 00:46:38 +0900)socfpga_agilex
CPU: Intel FPGA SoCFPGA Platform (ARMv8 64bit Cortex-A53)
Model: SoCFPGA Agilex SoCDK
DRAM: 8 GiB
WDT: Started watchdog@ffd00200 with servicing (10s timeout)
MMC: dwmmc0@ff808000: 0
Loading Environment from FAT... Unable to read "uboot.env" from mmc0:1... In: serial0@ffc02000
Out: serial0@ffc02000
Err: serial0@ffc02000
Net:
Warning: ethernet@ff800000 (eth0) using random MAC address - 12:98:a6:74:4c:bc
eth0: ethernet@ff800000
Hit any key to stop autoboot: 0
SOCFPGA_AGILEX # ←(ブートローダーを起動し、この状態でデバッガーでアプリを実行)
SOCFPGA_AGILEX # Hello World! ←(デバッガーでベアメタルアプリを実行した結果の出力表示)
3-2. SD カードからのスタンドアロン実行
構成としては下図の通りです(図 5)。
予めブートローダーを起動しておき、SD カードから実行します。
デバッガーで実行する手順については 3-2-1 以降で説明します。
【図 5】SD カードから実行する際の構成
3-2-1. ベアメタル・アプリケーションをビルド
『3-1-1. ベアメタル・アプリケーションをビルド』をご覧ください。
3-2-2. ビルドで生成された .bin ファイルを SD カードの FAT 領域に格納
ビルドを行うと、プロジェクトに sample_app.bin ファイルが生成されます(図 5)。
このファイルを SD カードの FAT 領域に格納します。
【図 6】SD カードに格納するバイナリーファイル
3-2-3. SD カードからベアメタル・アプリケーションを実行
ブートローダーを起動し、SD カードから DDR へベアメタル・アプリケーションのバイナリーを展開し実行します。以下にコマンド例を記載します。
SOCFPGA_AGILEX # fatload mmc 0:1 0x2000000 sample_app.bin
⇒ SD カードの FAT 領域内に格納されている sample_app.bin を DDR のアドレス 0x2000000 へ格納
SOCFPGA_AGILEX # go 0x2000000
⇒ DDR のアドレス 0x2000000 へプログラムカウンタを移動
注記:
最近の u-boot はキャッシュが有効になっています。
もし上記コマンドで起動しなければ、"dcache off" 及び "icache off" コマンドでキャッシュを無効化し、再度試してください。
3-2-4. ログを確認
正常にビルドが完了すると、下記のようなログが出力されます。
U-Boot SPL 2022.01 (Sep 08 2022 - 22:48:40 +0900)
Reset state: Cold
MPU 1200000 kHz
L4 Main 400000 kHz
L4 sys free 100000 kHz
L4 MP 200000 kHz
L4 SP 100000 kHz
SDMMC 50000 kHz
DDR: 8192 MiB
SDRAM-ECC: Initialized success with 1728 ms
QSPI: Reference clock at 400000 kHz
WDT: Started watchdog@ffd00200 with servicing (10s timeout)
Trying to boot from MMC1
## Checking hash(es) for config board-0 ... OK
## Checking hash(es) for Image atf ... crc32+ OK
## Checking hash(es) for Image uboot ... crc32+ OK
## Checking hash(es) for Image fdt-0 ... crc32+ OK
NOTICE: BL31: v2.6.1(release):
NOTICE: BL31: Built : 00:44:55, Jul 28 2022
NOTICE: BL31 CLK freq = 400 MHz
U-Boot 2022.01 (Jul 28 2022 - 00:46:38 +0900)socfpga_agilex
CPU: Intel FPGA SoCFPGA Platform (ARMv8 64bit Cortex-A53)
Model: SoCFPGA Agilex SoCDK
DRAM: 8 GiB
WDT: Started watchdog@ffd00200 with servicing (10s timeout)
MMC: dwmmc0@ff808000: 0
Loading Environment from FAT... Unable to read "uboot.env" from mmc0:1... In: serial0@ffc02000
Out: serial0@ffc02000
Err: serial0@ffc02000
Net:
Warning: ethernet@ff800000 (eth0) using random MAC address - 8a:b9:da:d7:65:e8
eth0: ethernet@ff800000
Hit any key to stop autoboot: 0
SOCFPGA_AGILEX #
SOCFPGA_AGILEX #
SOCFPGA_AGILEX # fatload mmc 0:1 0x2000000 sample_app.bin ←(SD カードから DDR へアプリを展開)
4856 bytes read in 5 ms (948.2 KiB/s)
SOCFPGA_AGILEX # go 0x2000000 ←(アプリのアドレスへ移動)
## Starting application at 0x02000000 ...
Hello World! ←(アプリの実行結果が表示される)
4. おわりに
この記事では、Agilex™ 7 FPGA 向けにベアメタル・アプリケーションの提供及び、実行手順を紹介しました。デバッガーと SD カードでは、実行手順が異なりますのでご注意ください。