ARMベース・システムLSI開発の事例研究 ――CPUの選択,バス構成,グラフィックス処理やビデオ表示制御の取り扱い
●○● Column ●○●
ARM926コアの動作設定
ARM926コアには,TCMやキャッシュ・メモリ,MMUが内蔵されており,システムの立ち上げ時にはそれらの設定が必要です.この設定は,コア内のシステム制御コプロセッサ(CP15)レジスタを介して行います.CP15レジスタは16本あり,非常に多くの動作設定を行えます(図A-1).
リセット立ち上げ時の手順(スタートアップ・ルーチン処理)の例を以下に示します.
- 処理モードごとのスタック・ポインタの設定
- ベクタ・エリアやエンディアンなどのCPU基本設定(c1レジスタ).このとき,命令キャッシュ,データ・キャッシュ,MMUは無効にしておく
- 基本ハードウェア初期化設定 (クロックてい倍,外部バス制御の設定など)
- ITCM/DTCMの設定(c9レジスタ)
- MMUの変換テーブル(セクション記述子)をメモリ上に作成
- MMUの設定(c2レジスタ,c3レジスタ)
- 命令キャッシュ,データ・キャッシュ,MMUを有効化(c1レジスタ)
- データ・キャッシュ,ライト・バッファのクリーンアップ(c7レジスタ)
- 必要があれば(Cコンパイラ関係),RAM上のbssセクション(初期値なし変数エリア)のクリア
- 必要があれば(Cコンパイラ関係),RAM上のdataセクション(初期値付き変数エリア)へのROMからのコピー
- メイン・プログラム(main( ))へのジャンプ
CPU内蔵LSIの機能検証の際には,上記に示したような立ち上げ動作もチェックするので,LSI設計者や検証エンジニアもスタートアップ・ルーチンを作成する必要があります.ARMコアのLSIを設計する場合,CPUそのものの検証は終わっており,個々の命令動作の検証は不要なので,LSIの機能検証用プログラムはC言語を用いて簡単に作成できますが,スタートアップ・ルーチンはアセンブラで記述するので,その習得も必要です.
レジスタ名 |
リード動作 |
リード動作 |
c0 |
IDコード |
禁止 |
キャッシュ・タイプ |
禁止 |
|
TCMステータス |
禁止 |
|
c1 |
CPU制御 |
|
c2 |
変換テーブル・ベース・アドレス |
|
c3 |
ドメイン・アクセス制御 |
|
c4 |
(リザーブ) |
|
c5 |
データ・フォルト・ステータス |
|
命令フォルト・ステータス |
||
c6 |
フォルト・アドレス |
|
c7 |
キャッシュ動作 |
|
c8 |
禁止 |
TLB動作 |
c9 |
キャッシュ・ロックダウン |
|
c10 |
TCM領域 |
|
c11 |
TLBロックダウン |
|
c12 |
(リザーブ) |
|
c13 |
(リザーブ) |
|
高速コンテキスト・スイッチ拡張プロセスID |
||
c14 |
コンテキストID |
|
c15 |
テスト用 |
(a)CP15レジスタ
(b)アクセス命令
図A-1 システム制御コプロセッサ(CP15)レジスタ
CP15レジスタはmcr命令とmrc命令でアクセスする.各フィールドの指定方法は,アクセス対象とアクセス方法によって個別に定められている.詳細は英国ARM社の「ARM926EJ-S Technical Reference Manual」を参照のこと.