1.2.2. 第1ステージ:ブートROM
ブートROMコードのサイズは64 kBで、アドレス0xFFFD0000から0xFFFDFFFFのオンチップROMに位置しています。ブートROMコードの役割は、ブート・ソースの決定、リセット後のHPSの初期化、プリローダへのジャンプです。第2ステージ・ブートローダ・イメージが既にフラッシュ・メモリからオンチップRAMへロードされている場合、ブートROMはオンチップRAMロケーションへジャンプします。ブートROMはHPSを初期化する際、以下の動作を実行します。
- CPU0のNEONベクタ・ユニット、命令キャッシュ、分岐予測、浮動小数点をイネーブルします。
- level 4(L4)watchdog 0タイマを設定します。
- Boot Select(BSEL)設置をもとに専用ピンをコンフィギュレーションします。
- フラッシュ・コントローラをデフォルト設定に初期化します。
ブート・プロセスは、CPU0がリセット状態を終了すると開始します。ブートROMコードはCPU0でのみ実行されます。CPU1はユーザ・ソフトウェアによってリリースされるまでリセット状態を維持します。CPU0がリセットを完了すると、リセット例外アドレスでコードの実行を開始します。
ブートROM実行中、クロック・コントロール・ヒューズの情報はクロック・マネージャに、そしてメモリ・コントロール・ヒューズの情報はリセット・マネージャにそれぞれ自動で送信され、その他のヒューズ機能(認証、暗号化、プライベートおよびパブリック・キー・ソース、ハッシュ関数) は、ブート・コードがリードできるようにメモリ・マップされた箇所に格納されます。通常の動作では、ブートROMはリセット例外アドレスにマップされるため、コードはブートROM内で実行を開始します。
CPU0がブートROMコードを完了し、ユーザ・ソフトウェアの実行を開始する際、ブートROMアクセスはディセーブルされます。CPU0で実行するユーザ・ソフトウェアは、ユーザ・ソフトウェア例外ベクタを0x0(これは以前ブートROM例外ベクタにマップされたものです)にマッピングする必要があり、また必要であればCPU1をリセットからリリースします。CPU1がリセットからリリースされる際、CPU1はブートROMではなくユーザ・ソフトウェア例外を実行します。