竹下世界塔の計算機よもやま話

アクセスカウンタ

zoom RSS リセット直後の開始番地が不明なCPU

<<   作成日時 : 2012/02/11 02:58   >>

ブログ気持玉 0 / トラックバック 0 / コメント 2

 プロセッサがリセットされると内部が初期化され特定の番地から命令を取り出して実行するのだが、これがはっきりしないものがある。

 AlphaもIA-64(Itanium)もリセット後の開始番地が明記されていない。AlphaはパワーオンリセットでPALの初期化と自己診断が走る。IA-64は4GB-64の番地より下のある番地がリセット後のエントリポイントだが、どこかは明記されていない。
 当然、ロジアナなどでバスを観測すればわかるのだが、公開資料に書いていないということは一般のユーザには見せたくない/見せる必要がないということだろう。AlphaもItaniumもチップ単体では販売されず、必ずシステムまたはマザーボード単位で扱われている。つまり初期化/ブートを行うPALとチップはセットで扱われている。
 ファームウェアがセットということは、マイクロコード相当の部分(ページテーブルウォーク等)をチップに焼かずに提供できるということだ。修正や改版が簡単にできる。
 なお、AlphaのPALコードはOpenVMS/Tru64Unix/AlphaLinux/WindowsNTとOSごとに分けられて提供されているようだ。

◆◆ここから先はぼくのかんがえたさいきょうCPUの話になります◆◆

 CPUとファームウェアをセットで考えた場合、きょうびのプロセッサはメモリバス上にROMを置くのは都合が悪い。なぜなら、計算機のバス周りが高機能になり初期化をしないとアクセスできないが、初期化するためにはプロセッサが動かなければならないためだ。特に主記憶として使う大容量のDRAMはアクセスタイミングやリフレッシュレートなどを設定しないといけない。メモリコントローラが行なってもよいがDRAM品種が多くなった場合の対応など柔軟性がなくなる。私が知っているシステムではROMアクセスに関しては初期化の不要な経路があった。
 ではどうするか。FPGAのコンフィギュレーションなどで使用するSerialROMをCPUに直結する。CPUはパワーオンリセット後にSerialROMの内容を順に命令キャッシュに転送する。パワーオン後の命令キャッシュのタグはSharedにして、外部に出ないようにしておく。これは初期化以前のメモリにアクセスするとハングアップしてしまうためだ。
 命令キャッシュに転送が終わったらプログラムカウンタ(PC)を0にして命令キャッシュ内にあるバイナリを実行する。いちおうPCは0だが、外部のメモリにはアクセスが出ないため命令のアドレスは観測できない。この命令列で外部メモリ等の初期化と診断、外部メモリへの命令列転送、キャッシュのタグ設定しなおし(フラッシュ)、外部メモリへ展開したモニタプログラムへと制御を移す。

昔はこの程度しか考えていなかった:
ぼくのかんがえたさいきょうCPU ブートROM


◆◆話は戻ります◆◆

 この方式は突然思いついたものではなく、チップの診断で使われた手法を真似たもの。
 マイクロプロセッサなどの半導体を製造した後は半導体テスタでテストパターンを流して正しく1/0が変化するかテストをするが、半導体テスタは実際にプロセッサの動く速度(GHzのオーダー)では動いてくれない。そのため、半導体テスタをパスしても装置に組み込むと不良が発生してしまう。
 完全にテストを行うためには実際の動作周波数で動かさないといけない。そこでJTAGなどを使用してマイクロプロセッサのキャッシュメモリ上に命令列を転送してそこから開始できるように騙す。チップ外には当然メモリや周辺装置はつながれていないのでチップ内のみで完結するテストを行う。

参考:
インテル Itanium アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル第2巻:システム・アーキテクチャ Revision 2.1 2002 年 10 月[PDF]
Alpha Architecture Reference Manual Fourth Edition[PDF]

追記:
V850やSHでSerialROMブートし$で実行はあるらしい Thanks @Maneco1227

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(2件)

内 容 ニックネーム/日時
DEC Alphaは、OpenVMS/Tru64Unix/AlphaLinuxは同じPALコードだと思いますよ。OpenVMSは試していませんが、OSF/1(DEC純正UNIX),NetBSD, Linuxは、同じPAL code(同じBIOS ROM(SRM))で動きました。

WindowsNTは、BIOS ROMをARCに焼き直して、違うPAL Codeです。
たけおか
2012/02/11 06:10
たけおか様、情報ありがとうございます。仕様書では区別してありましたが、Unix系で1つにまとめてあるみたいですね。
houmei
2012/02/11 14:09

コメントする help

ニックネーム
本 文




リセット直後の開始番地が不明なCPU 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる