RZ/A1グループ シングルチップマイコンのように使用するためのMMU

アプリケーションノート
RZ/A1 グループ
シングルチップマイコンのように使用するための MMU 設定法
R01AN2161JJ0100
Rev.1.00
2014.06.24
要旨
仮想アドレスと実アドレスを一致させて Cortex-A9 をワンチップ・マイコンのように扱う方法を紹介します。
動作確認デバイス
RZ/A1 グループ
目次
1.
本書の目的 .......................................................................................................................2
2.
MMU の役割 .....................................................................................................................3
3.
MMU のしくみ .................................................................................................................4
4.
実際の MMU の設定 ......................................................................................................... 8
本書の内容についての詳細は ARM 社の下記資料を参照してください。
• ARM アーキテクチャリファレンスマニュアル ARMv7-A および ARMv7-R エディション
• Cortex™-A9 テクニカルリファレンスマニュアル
R01AN2161JJ0100
2014.06.24
Rev.1.00
Page 1 of 10
RZ/A1 グループ
1.
シングルチップマイコンのように使用するための MMU 設定法
本書の目的
Cortex-A9 の CPU がメモリにアクセスするときに、メモリ管理ユニット(以後 MMU と表記)を経由します。
仮想アドレスと実アドレスを一致させる方法として最も簡単な方法は「MMU を OFF にする」なのですが、
MMU が OFF であると、データキャッシュを利用することができなくなり、Cortex-A9 の実力を発揮できませ
ん(命令キャッシュは利用可能です)。そのため、本書では MMU に対し、仮想アドレスと実アドレスを一致さ
せる設定を行うことを目的にします。
R01AN2161JJ0100
2014.06.24
Rev.1.00
Page 2 of 10
RZ/A1 グループ
2.
シングルチップマイコンのように使用するための MMU 設定法
MMU の役割
MMU は CPU コアとアドレス上のメモリ(RAM や I/O レジスタ)間の接続をサポートする役割を持っており、
主な機能として、下記の項目を挙げることができます。イメージは図 2-1 を参照ください。
• 仮想アドレスから物理アドレスへの変換
• メモリブロックごとのキャッシュの使用可否の設定
• メモリブロックごとのメモリ属性の設定
CPU コア
MMU
アドレス
00000000H
000FFFFFH
00100000H
001FFFFFH
:
FFF00000H
FFFFFFFFH
アドレス変換
仮想→物理アドレス
キャッシュ
可/非
タイプ
ROM
アクセス
R
仮想→物理アドレス
可/非
RAM
R/W
:
仮想→物理アドレス
:
非
:
I/O
:
R/W
メモリ,I/O レジスタ
図 2-1 MMU のイメージ
MMU で実行可能領域や書き込みの可否も設定するため、MMU の設定に誤りがあると、アボートが発生し
てまともにソフトが動作しません。
R01AN2161JJ0100
2014.06.24
Rev.1.00
Page 3 of 10
RZ/A1 グループ
3.
シングルチップマイコンのように使用するための MMU 設定法
MMU のしくみ
MMU のアドレス変換はメモリセクションまたはページに基づくメモリアクセスをサポートしています。第
1 レベルテーブルは第 1 レベル記述子を、第 2 レベルテーブルは第 2 レベル記述子を、それぞれ用いて記述
されています。
• セクション……1MB のメモリブロックで構成されます。第 1 レベルテーブルのみでアドレス変換します。
• ラージページ……64KB のメモリブロックで構成されます。第 1 レベルと第 2 レベルテーブルでアドレス
変換します。
• スモールページ……4KB のメモリブロックで構成されます。第 1 レベルと第 2 レベルテーブルでアドレス
変換します。
第 1 レベルテーブル
4096 エントリ
第 2 レベルテーブル
256 エントリ
1M バイト
64K バイト
セクション
ラージページ
1024 エントリ
4K バイト
スモールページ
図 3-1 MMU のアドレス変換のイメージ
R01AN2161JJ0100
2014.06.24
Rev.1.00
Page 4 of 10
RZ/A1 グループ
シングルチップマイコンのように使用するための MMU 設定法
セクションの場合、CPU がアクセスするアドレス(修飾仮想アドレス:MVA)の上位 12 ビットをオフセット
として第 1 レベルテーブル(セクション)を参照します。参照された第 1 レベルテーブルのエントリの上位 12
ビットが対応する実アドレスの上位 12 ビットとなります。実アドレスの下位 20 ビットは MVA のアドレス
と同一です。例として、第 1 レベルテーブルが 0x20000000 番地から 16K バイト配置されているときに、CPU
が仮想アドレスの 0x58001234 番地(実アドレスは 0x18001234 番地)をアクセスしようとした時のアドレス変
換のイメージを図 3-2 に示します。
MVA
変換テーブルベースレジスタ(TTBR)
(0x58001234=01011000000000000001001000110100)
(0x20000000=00100000000000000000000000000000)
0
14 13
31
変換ベース
0
(001000000000000000)
(00000000000000)
31
変換ベース
20 19
0
Table Index
14 13
21
Table Index
(010110000000)
Section Index
(00000001001000110100)
0
0
(010110000000) (00)
(001000000000000000)
31
第 1 レベル記述子(セクション)
(0x20001600 番地)
31
第 1 レベル記述子
(セクション)のアドレス
20 19
Base Address
(000110000000)
32
0
アクセス制御フィールド 10
(00100000000000000001011000000000
=0x20001600)
31
20 19
0
Bass Address
(000110000000)
Section Index
(00000001001000110100)
アクセスする実アドレス
(00011000000000000001001000110100=0x18001234)
図 3-2 MMU のアドレス変換のイメージ(セクション)
ラージページの変換とスモールページの変換については、ARM Architecture Reference manual ARMv7-A and
ARMv7-R edition を参照してください。
このように見てみると、MVA から実アドレスを導き出すため長い過程を要することがわかります。CPU
がメモリをアクセスするたびに毎回この変換を行っていると時間がかかってしまうため、MMU には変換テー
ブルバッファというバッファがあり、上記のアクセスをバッファリングし、参照速度を向上させています。
図 3-3,図 3-4 と表 3-1~表 3-3 にレベル記述子のフォーマットを示します。
表 3-2 に「ストロングリオーダ」という言葉がありますが、これはメモリの読み込み(ロード)や書き込み(ス
トア)をプログラムに記載された順序で行う設定です。読み込み(ロード)や書き込み(ストア)は時間がかかる命
令のため、順番を入れ替えたほうがプログラムの実行が速くなることがあるのですが、I/O レジスタへのアク
セスなどの順番の入れ替えのできない処理に対して、この設定を行います。
R01AN2161JJ0100
2014.06.24
Rev.1.00
Page 5 of 10
RZ/A1 グループ
ビット
シングルチップマイコンのように使用するための MMU 設定法
31
20 19 18 17 16 15 14
セクションのベースアドレス
セクション
NS 0 nG S
PA[31:20]
AP
[2]
12 11 10 9
8
5
4
3
2
1
0
XN C
B
1
0
0 NS 0
0
1
4
I
ドメイン
TEX[2:0] AP[1:0] M
P
I
ページ
ページテーブルのベースアドレス ビット[31:10]
テーブル
ドメイン
M
P
図 3-3 第 1 レベル記述子のフォーマット
ビット
31
16 15 14
ラージ
ラージページのベースアドレス
ページ
PA[31:16]
スモール
12 11 10 9
6
I
0
P
I
nG S M
PA[31:12]
5
3
2
1
0
C
B
0
1
C
B
1 XN
AP
XN TEX[2:0] nG S M
スモールページのベースアドレス
ページ
8
[1:0]
AP
TEX[2:0]
P
[1:0]
図 3-4 第 2 レベル記述子のフォーマット(第 1 レベル記述子がページテーブルの時のみ使用)
表 3-1 第 n レベル記述子のフォーマット内の記号
ビット
TEX[2:0],C,B
XN
NS
ドメイン
IMP
AP[2:0]
S
nG
説明
メモリ領域属性ビットです。表 3-2 を参照してください。
実行不可ビットです。1 が設定されている場合は実行不可です。
非セキュアビットです。1 が設定されている場合は非セキュア物理空間がアクセスされます。
変換テーブルバッファで使用するドメインです。
このビットの意味は実装依存です。
アクセス許可ビットです。表 3-3 を参照してください。
共有可能ビットです。共有可能メモリを対象にしている場合は 1 を設定します。
非グローバルビットです。
表 3-2 メモリ領域属性ビット
TEX[2:0]
000
C
0
B
0
000
000
0
1
1
0
000
1
1
001
001
001
010
1BB
0
1
1
0
A
0
0
1
0
A
R01AN2161JJ0100
2014.06.24
説明
ストロングリオーダ
共有可能デバイス
外部および内部ライトスルー,書き込み割り当て
なし
外部および内部ライトバック,書き込み割り当て
なし
外部および内部キャッシュ不可
実装定義
外部および内部ライトバック,書き込み割り当て
共有不可デバイス
キャッシュ可能メモリ。AA;内部属性,BB:外部属
性
Rev.1.00
メモリタイプ
ストロングリ
オーダ
デバイス
ノーマル
ページ共有
共有可能
ノーマル
S ビット
ノーマル
実装定義
ノーマル
デバイス
ノーマル
S ビット
実装定義
S ビット
共有不可
S ビット
共有可能
S ビット
Page 6 of 10
RZ/A1 グループ
シングルチップマイコンのように使用するための MMU 設定法
表 3-3 アクセス許可ビット
AP[2:0]
000
001
010
特権アクセス許可
アクセス不可
読み出し/書き込み
読み出し/書き込み
ユーザアクセス許可
アクセス不可
アクセス不可
読み出し専用
011
100
101
110
111
読み出し/書き込み
読み出し専用
読み出し専用
読み出し専用
読み出し/書き込み
アクセス不可
読み出し専用
読み出し専用
R01AN2161JJ0100
2014.06.24
Rev.1.00
説明
全てのアクセスでアクセス許可。フォールトが発生
特権アクセスのみ
ユーザモードで書き込みを行うとアクセス許可
フォールトが発生
完全アクセス
予約
特権読み出し専用
特権およびユーザ読み出し専用
特権およびユーザ読み出し専用
Page 7 of 10
RZ/A1 グループ
4.
シングルチップマイコンのように使用するための MMU 設定法
実際の MMU の設定
長々と MMU の説明をしてきましたが、それでは実際に MMU の設定をしてみましょう。
MMU は 1 レベルのセクションを用います。
MVA と実アドレスを一致させるためには、4096 個の MMU テーブル(16KB)に対し、セクションのベース
アドレスが実アドレスと一致するように対応させればよいです。つまり、全セクションのベース・アドレス
(PA)をセクションのオフセットと同一にします(表 4-1)。MMU の 0-19 ビットの設定は全領域読み書き可能と
単純化すると表 4-2 のようになります。
表 4-1 ベースアドレスの設定
仮想アドレス(MVA)
00000000 – 000FFFFF
00100000 – 001FFFFF
00200000 – 002FFFFF
:
FFF00000 – FFFFFFFF
対応するセクション(オフセット)
セクション 0
セクション 1
セクション 2
:
セクション 4095
セクションのベースアドレス
(上位 12 ビット)
0x000
0x001
0x002
:
0xFFF
表 4-2 アクセスの設定例
ビット
19 18 17 16 15 14
セクションの設定
ROM/RAM(キャッシュ有効)
ROM/RAM(キャッシュ無効)
I/O レジスタ
未使用
NS 0 nG S
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
AP
[2]
0
0
0
0
12 11 10 9
8
5
4
3
2
1
0
XN C
B
1
0
1
0
0
0
1
1
1
0
0
0
0
0
I
TEX[2:0] AP[1:0] M
ドメイン
P
001
001
000
000
11
11
11
00
0
0
0
0
0000
0000
0000
0000
0
1
1
0
1
0
0
0
これで MMU テーブルができました。MMU テーブルの開始アドレスのビット 0-13 が 0 になるように配置
してください。
次に MMU テーブルを使用可能にしましょう。以後出てくるレジスタはすべてコプロセッサのレジスタの
ため、コプロセッサ命令で変更する必要があります。GCC を使用する場合、インラインアセンブラを使用す
る必要があります。
__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_TTBR0(uint32_t ttbr0)
{
/*
MCR CP*, Op1, Register, CRn, CRm, Op2 */
__ASM("mcr p15, 0, %0, c2, c0, 0" : : "r" (ttbr0));
__ISB();
}
図 4-1 変換テーブルベースレジスタ 0(TTBR0)を設定する関数の例
R01AN2161JJ0100
2014.06.24
Rev.1.00
Page 8 of 10
RZ/A1 グループ
シングルチップマイコンのように使用するための MMU 設定法
変換テーブルベースレジスタのうち、変換テーブルベースレジスタ
0(TTBR0[CP15,CRn=c2,Op1=0,CRm=c0,Op2=0])に MMU テーブルの先頭アドレスを設定してください。
ビット
31
14 13
6
5
4
3
2
1
0
M S
C
N
意味
変換テーブルベースアドレス
ALL 0
O
I
RGN
S
値
MMU テーブルの先頭アドレスの上位ビット
ALL 0
P
0
01
0
0
1
図 4-2 変換テーブルベースレジスタ 0(TTBR0)
また、変換テーブルベースレジスタは複数あるので、変換テーブルベース制御レジスタ
(TTBCR[CP15,CRn=c2,Op1=0,CRm=c0,Op2=2])の N に、使用する変換テーブルベースレジスタの番号である 0
を指定します。
ビット
31
6
5
4
3
2
1
0
意味
ALL 0
N
値
ALL 0
0
図 4-3 変換テーブルベース制御レジスタ(TTBCR)
今回はドメインを 0 しか使用しないため、ドメインアクセス制御レジスタ
(DACR[CP15,CRn=c3,Op1=0,CRm=c0,Op2=0])のドメイン 0 を 01(クライアント)に設定します。
ビット
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9
8
7
6
5
4
3
2
1
0
意味
D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
値
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
01
図 4-4 ドメインアクセス制御レジスタ(DACR)
つぎに以下の手順でキャッシュの初期化と MMU やキャッシュの有効化をします。これで MMU の設定が
完了します。有効化に使用するシステム制御レジスタの構成を図 4-5 に示します。
1.
2.
3.
4.
5.
6.
7.
8.
TLBIALL[CP15,CRn=c8,Op1=0,CRm=c7,Op2=0]に 0 を代入して TLB の初期化
ICIALLTLBIALL[CP15,CRn=c8,Op1=0,CRm=c7,Op2=0]に 0 を代入して命令キャッシュの初期化
DCISW[CP15,CRn=c7,Op1=0,CRm=c6,Op2=2]を設定してデータキャッシュの初期化
BPIALL[CP15,CRn=c7,Op1=0,CRm=c5,Op2=6] に 0 を代入して分岐予測の初期化
SCTLR[CP15,CRn=c1,Op1=0,CRm=c1,Op2=0]の M ビットを 1 にして MMU の有効化
SCTLR[CP15,CRn=c1,Op1=0,CRm=c1,Op2=0]の I ビットを 1 にして命令キャッシュの有効化
SCTLR[CP15,CRn=c1,Op1=0,CRm=c1,Op2=0]の C ビットを 1 にしてデータキャッシュの有効化
SCTLR[CP15,CRn=c1,Op1=0,CRm=c1,Op2=0]の Z ビットを 1 にして分岐予測の有効化
ビット
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9
SCTLR
IE TE 0
0
NM
0 FE VE 1
FI
1 FI 0 DZ 1 BR 1
0 RR V
I
Z SW 0
8
7
6
5
4
3
2
1
0
0
0
1
1
1
1
C
A M
図 4-5 システム制御レジスタ(SCTLR)
R01AN2161JJ0100
2014.06.24
Rev.1.00
Page 9 of 10
RZ/A1 グループ
シングルチップマイコンのように使用するための MMU 設定法
ホームページとサポート窓口
ルネサス エレクトロニクスホームページ
http://japan.renesas.com/
お問合せ先
http://japan.renesas.com/contact/
すべての商標および登録商標は,それぞれの所有者に帰属します。
R01AN2161JJ0100
2014.06.24
Rev.1.00
Page 10 of 10
改訂記録
Rev.
1.00
発行日
2014.06.24
ページ
-
改訂内容
ポイント
新規作成
A-1
製品ご使用上の注意事項
ここでは、マイコン製品全体に適用する「使用上の注意事項」について説明します。個別の使用上の注意
事項については、本ドキュメントおよびテクニカルアップデートを参照してください。
1.
未使用端子の処理
【注意】未使用端子は、本文の「未使用端子の処理」に従って処理してください。
CMOS製品の入力端子のインピーダンスは、一般に、ハイインピーダンスとなっています。未使用
端子を開放状態で動作させると、誘導現象により、LSI周辺のノイズが印加され、LSI内部で貫通電
流が流れたり、入力信号と認識されて誤動作を起こす恐れがあります。未使用端子は、本文「未使用
端子の処理」で説明する指示に従い処理してください。
2.
電源投入時の処置
【注意】電源投入時は,製品の状態は不定です。
電源投入時には、LSIの内部回路の状態は不確定であり、レジスタの設定や各端子の状態は不定で
す。
外部リセット端子でリセットする製品の場合、電源投入からリセットが有効になるまでの期間、端子
の状態は保証できません。
同様に、内蔵パワーオンリセット機能を使用してリセットする製品の場合、電源投入からリセットの
かかる一定電圧に達するまでの期間、端子の状態は保証できません。
3.
リザーブアドレス(予約領域)のアクセス禁止
【注意】リザーブアドレス(予約領域)のアクセスを禁止します。
アドレス領域には、将来の機能拡張用に割り付けられているリザーブアドレス(予約領域)がありま
す。これらのアドレスをアクセスしたときの動作については、保証できませんので、アクセスしない
ようにしてください。
4.
クロックについて
【注意】リセット時は、クロックが安定した後、リセットを解除してください。
プログラム実行中のクロック切り替え時は、切り替え先クロックが安定した後に切り替えてくださ
い。
リセット時、外部発振子(または外部発振回路)を用いたクロックで動作を開始するシステムでは、
クロックが十分安定した後、リセットを解除してください。また、プログラムの途中で外部発振子
(または外部発振回路)を用いたクロックに切り替える場合は、切り替え先のクロックが十分安定し
てから切り替えてください。
5.
製品間の相違について
【注意】型名の異なる製品に変更する場合は、製品型名ごとにシステム評価試験を実施してくださ
い。
同じグループのマイコンでも型名が違うと、内部ROM、レイアウトパターンの相違などにより、電
気的特性の範囲で、特性値、動作マージン、ノイズ耐量、ノイズ輻射量などが異なる場合がありま
す。型名が違う製品に変更する場合は、個々の製品ごとにシステム評価試験を実施してください。
ご注意書き
1. 本資料に記載された回路、ソフトウェアおよびこれらに関連する情報は、半導体製品の動作例、応用例を説明するものです。お客様の機器・システムの設計におい
て、回路、ソフトウェアおよびこれらに関連する情報を使用する場合には、お客様の責任において行ってください。これらの使用に起因して、お客様または第三
者に生じた損害に関し、当社は、一切その責任を負いません。
2. 本資料に記載されている情報は、正確を期すため慎重に作成したものですが、誤りがないことを保証するものではありません。万一、本資料に記載されている情報
の誤りに起因する損害がお客様に生じた場合においても、当社は、一切その責任を負いません。
3. 本資料に記載された製品デ-タ、図、表、プログラム、アルゴリズム、応用回路例等の情報の使用に起因して発生した第三者の特許権、著作権その他の知的財産権
に対する侵害に関し、当社は、何らの責任を負うものではありません。当社は、本資料に基づき当社または第三者の特許権、著作権その他の知的財産権を何ら許
諾するものではありません。
4. 当社製品を改造、改変、複製等しないでください。かかる改造、改変、複製等により生じた損害に関し、当社は、一切その責任を負いません。
5. 当社は、当社製品の品質水準を「標準水準」および「高品質水準」に分類しており、
各品質水準は、以下に示す用途に製品が使用されることを意図しております。
標準水準:
コンピュータ、OA機器、通信機器、計測機器、AV機器、
家電、工作機械、パーソナル機器、産業用ロボット等
高品質水準:輸送機器(自動車、電車、船舶等)、交通用信号機器、
防災・防犯装置、各種安全装置等
当社製品は、直接生命・身体に危害を及ぼす可能性のある機器・システム(生命維持装置、人体に埋め込み使用するもの等) 、もしくは多大な物的損害を発生さ
せるおそれのある機器・システム(原子力制御システム、軍事機器等)に使用されることを意図しておらず、使用することはできません。 たとえ、意図しない用
途に当社製品を使用したことによりお客様または第三者に損害が生じても、当社は一切その責任を負いません。 なお、ご不明点がある場合は、当社営業にお問い
合わせください。
6. 当社製品をご使用の際は、当社が指定する最大定格、動作電源電圧範囲、放熱特性、実装条件その他の保証範囲内でご使用ください。当社保証範囲を超えて当社製
品をご使用された場合の故障および事故につきましては、当社は、一切その責任を負いません。
7. 当社は、当社製品の品質および信頼性の向上に努めていますが、半導体製品はある確率で故障が発生したり、使用条件によっては誤動作したりする場合がありま
す。また、当社製品は耐放射線設計については行っておりません。当社製品の故障または誤動作が生じた場合も、人身事故、火災事故、社会的損害等を生じさせ
ないよう、お客様の責任において、冗長設計、延焼対策設計、誤動作防止設計等の安全設計およびエージング処理等、お客様の機器・システムとしての出荷保証
を行ってください。特に、マイコンソフトウェアは、単独での検証は困難なため、お客様の機器・システムとしての安全検証をお客様の責任で行ってください。
8. 当社製品の環境適合性等の詳細につきましては、製品個別に必ず当社営業窓口までお問合せください。ご使用に際しては、特定の物質の含有・使用を規制する
RoHS指令等、適用される環境関連法令を十分調査のうえ、かかる法令に適合するようご使用ください。お客様がかかる法令を遵守しないことにより生じた損害に
関して、当社は、一切その責任を負いません。
9. 本資料に記載されている当社製品および技術を国内外の法令および規則により製造・使用・販売を禁止されている機器・システムに使用することはできません。ま
た、当社製品および技術を大量破壊兵器の開発等の目的、軍事利用の目的その他軍事用途に使用しないでください。当社製品または技術を輸出する場合は、「外
国為替及び外国貿易法」その他輸出関連法令を遵守し、かかる法令の定めるところにより必要な手続を行ってください。
10. お客様の転売等により、本ご注意書き記載の諸条件に抵触して当社製品が使用され、その使用から損害が生じた場合、当社は何らの責任も負わず、お客様にてご負
担して頂きますのでご了承ください。
11. 本資料の全部または一部を当社の文書による事前の承諾を得ることなく転載または複製することを禁じます。
注1. 本資料において使用されている「当社」とは、ルネサス エレクトロニクス株式会社およびルネサス エレクトロニクス株式会社がその総株主の議決権の過半数
を直接または間接に保有する会社をいいます。
注2. 本資料において使用されている「当社製品」とは、注1において定義された当社の開発、製造製品をいいます。
http://www.renesas.com
■営業お問合せ窓口
※営業お問合せ窓口の住所は変更になることがあります。最新情報につきましては、弊社ホームページをご覧ください。
ルネサス エレクトロニクス株式会社 〒100-0004 千代田区大手町2-6-2 (日本ビル)
■技術的なお問合せおよび資料のご請求は下記へどうぞ。
総合お問合せ窓口: http://japan.renesas.com/contact/
© 2014 Renesas Electronics Corporation. All rights reserved.
Colophon 3.0