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

アクセスカウンタ

zoom RSS マイクロ命令

<<   作成日時 : 2009/08/08 23:00   >>

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

 マイクロ命令はRISC以前のプロセッサにはよく採用されていた。だがパイプラインとは共存できる技術である。実行は単純なものはハードワイヤード、複雑な命令はマイクロ命令にまかせる。
マイクロ命令はプロセッサのマイクロアーキテクチャ実装ごとに変わる。内部資源に直接アクセスするためだ。マイクロ命令は垂直マイクロ命令と水平マイクロ命令に分類できる。マイクロ命令を置くメモリ領域はプロセッサ内部なので非常に限られている。

 垂直マイクロ命令は複数の命令を使って別の命令セットをエミュレートするような感じだ。同時にアクセスできる資源は限られ、複数のステップで実行するので時間がかかるが、マイクロ命令は短くできる。(これは、書いたことがない)

 水平マイクロ命令ではすべての内部資源に同時にアクセスできる。ただし、資源の排他制御は自前でやらなければならない。矛盾すると予想外の動作をする。水平というくらいなので、命令ビット長が長い。私が知っている例では1命令が100bitを越えていた。
命令の種類によって水平マイクロ命令がスタートする番地が決まっている。プログラムカウンタに相当するものはあっても自動的にインクリメントはしない。水平マイクロコードの中に明示的に次に実行するアドレスを書く。このおかげてパッチは自由にできるが解読も難しい。条件分岐は、明示的に成立したときに飛ぶアドレスと成立しなかったときに飛ぶアドレスを書かなければならない。複数の条件を付けて三ヶ所ぐらいに分岐することもできる。
水平マイクロコードはデバックでちょっとだけいじったことはあるが普通のアセンブラを書けるくらいの能力では難しい。そのプロセッサのマイクロアーキテクチャをよく理解していないと最適なコードは書けない。しかも作るプロセッサごとに異なる一回限りのプログラムだ。ただ、プロセッサによってはROMにして焼き付けるわけではないので、スキャンなどで書き換えは可能だ。デバックの時はそうした。

 現在はRISC化によりハードワイヤードで実行するためマイクロ命令の出番はほぼなくなった。少々複雑なクロック数のかかる命令でも、ステートマシンを使いハードで実装してしまう。その代わりファームウェアと称して自分自身の命令セットで複雑な命令や動作をエミュレートする例がある。これならエラッタの修正もファームの改版でできそうだ。

内部でなく外部にマイクロ命令を出した例:(ほぼ推測)
・AlphaのPALコード。一般の命令ではできない内部資源にアクセスできる。高速化のため内部にはマイクロ命令を持たないと思われる。
・Crusoeはマイクロ命令を外に出したVLIWプロセッサ。これでx86命令をエミュレートしている。原理的にはx86命令セット以外もエミュレートできる。
・ItaniumのPAL/SALコード。MMUのテーブルウォークをハードでやっているが、内部にマイクロ命令を持っていないとできないはず。おそらくPAL/SAL内のサブルーチンでやっている。※Itaniumではパワーオンリセットのアドレスがわからない。PAL/SAL内にジャンプして初期化するのではないだろうか。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(0件)

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

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
URL(任意)
本 文




マイクロ命令 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる