もくじ
- 1. はじめに
- 2. Boot ROM 時と Preloader 実行後の SDRAM 領域の変化
- 3. Address Filtering レジスターの仕様
- 4. Preloader で行われる設定と設定結果
- 5. まとめ
1. はじめに
この記事では、Intel® SoC FPGA の HPS (Arm プロセッサー)から見たアドレス空間(MPU ビュー)の Boot Region 領域に SDRAM をマッピングするための設定レジスターについて説明します。
ブート完了後、この領域にどのメモリーが見える状態になっているのか?という質問を多く頂きますが、この記事をご覧頂くことにより、このような疑問の解決に役立てば幸いです。
尚、以下の【図 1】の赤枠が Boot Region 領域に該当します。この記事では Cyclone® V SoC をターゲットに記載していますが、Arria® V SoC、Arria® 10 SoC でも考え方は同様です。
[Cyclone V Hard Processor System Technical Reference Manual より引用]
【図 1】HPS Address Space
2. Boot ROM 時と Preloader 実行後の SDRAM 領域の変化
結論から記載しますが、リセット解除直後(Boot ROM のプログラム実行中)には、0 番地から始まる Boot Region 領域には Boot ROM がマッピングされた状態から開始し、ブート完了後(Preloader 実行後)には SDRAM がマッピングされた状態となります。
図でまとめると以下の【図 2】ようになります。
【図 2】SDRAM 領域の変化
Boot Region 領域に見せるメモリの選択は、以下の 2 種類のレジスターで行います。
- l3regs.remap レジスター(Address: 0xFF800000)
- MPUL2.Address Filtering レジスター(Address: 0xFFFEFC00, 0xFFFEFC04)
Boot Region 領域に見せるメモリの種類は、l3regs.remap レジスターの bit0: mpuzero フィールドの設定にて、0: ROM(Boot ROM)もしくは 1: RAM(On-Chip RAM)から選択しますが、このレジスター設定の選択肢には SDRAM は存在しません。この領域に SDRAM を見せる場合には、L2 Cache Controller(MPUL2)の Address Filtering というレジスター設定を変更する必要があります。
以下、Address Filtering レジスターの詳細と、実際に Preloader が行う設定内容について紹介していきます。
3. Address Filtering レジスターの仕様
Address Filtering レジスターは以下の 2 つで構成され、SDRAM を見せる領域の Start Address と End Address を指定する仕組みになっています。
- Address Filtering Start Register(Address: 0xFFFEFC00)
- Address Filtering End Register(Address: 0xFFFEFC04)
この章では Start Address と End Address の設定内容について説明します。
3-1. Address Filtering Start Register
Address Filtering Start Register は 0xFFFEFC00 で設定でき、設定内容は下記のようになっています。
[CoreLink Level 2 Cache Controller L2C-310 Technical Reference Manual より引用]
【図 3】Address Filtering Start Register
【図 3】の内容としては下記となります。
Bit [31:20] - SDRAM の Start Address を設定する箇所となります。
尚、12 bit 分しか確保されていないので、Start Address の上位 12 bit を設定し、
残りの下位 20 bit は 0x00000 となります。
例えば、0x001 と設定すると、SDRAM の Start Address は 0x00100000 です。
Bit [19:1] - Reserved
Bit [0] - address filtering の有効/無効の設定です。
有効にする場合は 0x1 を設定します。
3-2. Address Filtering End Register
Address Filtering End Register は 0xFFFEFC04 で設定でき、設定内容は下記のようになっています。
[CoreLink Level 2 Cache Controller L2C-310 Technical Reference Manual より引用]
【図 4】Address Filtering End Register
【図 4】の内容としては下記となります。
Bit [31:20] - SDRAM の End Address を設定する箇所となります。
Start Address を設定した場合と同様に、End Address の上位 12 bit 分のみの設定となり、 下位 20 bit は 0x00000 となります。
Bit [19:0] - Reserved
4. Preloader で行われる設定と設定結果
SoC FPGA におけるブートフローは【図 5】のようになっており、どのフローにおいても Boot ROM → Preloader は実行されています。
[HPS SoC Boot Guide - Cyclone V SoC Development Kit より引用]
【図 5】ブートフロー
この章では、Preloader 実行前の Boot ROM 時点と、Preloader 実行後の Address Filtering の設定を確認したいと思います(U-Boot SPL 2013.01.01 で確認)。
4-1. Boot ROM 時の Address Filtering
Boot ROM 時の Address Filtering の設定は、下記のようになっています。
【図 6】Boot ROM 時の Address Filtering
・ Address Filtering Start Register の内容
Start Address は 0x00100001 となっています。
よって、設定内容としては下記の通りとなります。
Bit [31:20] - 0x001 ⇒ SDRAM の Start Address は 0x00100000
Bit [0] - 0x1 ⇒ Address Filtering が Enable
・Address Filtering End Register の設定
End Address は 0xC0000000 となっています。
よって、設定内容としては下記の通りとなります。
Bit [31:20] - 0xC00 ⇒ SDRAM の End Address は 0xC0000000
・Boot ROM 時の SDRAM の領域
Start Address が 0x00100000、End Address が 0xC0000000 となっているので、
Boot ROM 時の SDRAM の領域は、0x00100000 ~ 0xC0000000 となります。
4-2. Preloader 実行後の Address Filtering
Preloader 実行後の Address Filtering の設定は、下記のようになっています。
【図 7】Preloader 終了後の Address Filtering
・ Address Filtering Start Register の内容
Start Address は 0x00000001 となっています。
よって、設定内容としては下記の通りとなります。
Bit [31:20] - 0x000 ⇒ SDRAM の Start Address は 0x00000000
Bit [0] - 0x1 ⇒ Address Filtering が Enable
・Address Filtering End Register の設定
End Address は 0xC0000000 となっています。
よって、設定内容としては下記の通りとなります。
Bit [31:20] - 0xC00 ⇒ SDRAM の End Address は 0xC0000000
・Preloader 実⾏後の SDRAM の領域
Start Address が 0x00000000、End Address が 0xC0000000 となっているので、
Preloader 実⾏後の SDRAM の領域は、0x00000000 ~ 0xC0000000 となります。
5. まとめ
「4-1. Boot ROM 時の Address Filtering」と「4-2. Preloader 実行後の Address Filtering」に示した通り、Boot Region 領域に見えるメモリの種類は Boot ROM 時と Preloader 実行後で異なります。
ブート完了後(Preloader 実行後)には、Boot Region(0x00000000 ~ 0x00100000)が SDRAM 領域の一部として割り当てられることがご理解頂けたと思います。
コメント
0件のコメント
記事コメントは受け付けていません。