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

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU ステータスレジスタ検討

<<   作成日時 : 2011/09/28 17:44   >>

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

 ある程度まとまってきたのでステータスレジスタ(SR)について再整理。
一般的なCPUはコンディションコードなどある命令の動作結果が反映されるものがあるが、OutofOrder動作の場合は依存関係が複雑になってしまう。
SRへのアクセスは、直前の命令まで完了してから実行される。また、SRのアクセスが完了後、後続の命令が実行される。
一部のレジスタはリードアクセス時にもパイプラインは乱れない(SR.randや比較命令によるSR.testの暗黙的なアクセスなど)

・SRは64本 SR0〜SR63
・SRは32bit幅で、汎用レジスタ(GR)間との転送命令でやりとりする。
・SRリード時はは汎用レジスタの32bitより大きいフィールドは"0"、SR書き込み時は汎用レジスタの下位32bitのみ有効。
・特権モードではすべてアクセスできる(仮想マシンサポートの影響は別途検討)
・ユーザモードでの書き込み可/不可(割込み発生)
・ユーザモードでの読み出し可/不可(割込み発生、または0リード)
・コンテキスト切り替えで保存が必要なものを明確にしておく。(例:testフラグ)
・CPUコア特有のもの、チップ共通のもの、システムボード共通のものに分類する。
・アドレスを指示するSRは32bit幅なので0〜4GBの範囲内。つまりアドレス空間のうち4GBまではトラップベクタやページテーブルなどシステムも使用。

具体的なSRの番号割り当ては整理してから。
関連するトラップ:
・未定義SRに対するアクセス
・Read Onlyレジスタに対する書き込み
・特権違反

※読み出しのみ、としている箇所は将来仮想マシンサポートで書き換え可能になるかもしれない。仮想マシンでのコンテキスト保存対象にもなりうる。

SR.cpuid - 自CPU ID (読み出しのみ)
SR.cpuid.board システム全体でのボード番号。
SR.cpuid.chip チップの番号
SR.cpuid.core コアの番号
SR.cpuid.thread スレッドの番号
8bitずつの割り当てにするか?

SR.reg - レジスタ定義(読み出しのみ)
SR.reg.gr.n - GR本数 00|01|10|11 = 64/128/256/512本
SR.reg.mr.n - MR本数 00|01|10|11 = 8/16/32/64本
SR.reg.fr.n - FR本数 00|01|10|11 = 64/128/256/512本
SR.reg.gr.w - GRビット幅 00|01|10|11 = 32/64/128/256bit
SR.reg.mr.w - MRビット幅 00|01|10|11 = 32/64/128/256bit
SR.reg.fr.w - FRビット幅 00|01|10|11 = 単精度|倍精度|四倍精度|四倍精度×2

SR.arch - アーキテクチャ定義(読み出しのみ)

SR.mmu - アドレス変換に関する設定(特権モードによる書き込み可)
SR.pte - アドレス変換に関する設定 ページテーブルエントリの開始番地(特権モードによる書き込み可)

SR.tvect - トラップベクタ(特権モードによる書き込み可)
SR.ivect - インタラプトベクタ(特権モードによる書き込み可)
SR.trap - トラップのマスクなど設定(特権モードによる書き込み可)
インタラプトベクタのマスクする番号など

SR.psw
現在のモード(特権、ユーザ)、現在の割込みのレベル

SR.tick - CPUクロックのカウンタ。ラップアラウンドする。(読み出しのみ)
SR.presc - SR.tick用の分周器設定。32bit幅では簡単に溢れてしまうため、1/1,1/2,1/4...に分周した値をSR.tickに与える。(特権モードによる書き込み可)

SR.stick - システムボードの32768Hzカウンタ。(読み出しのみ)
SR.wdt - ウォッチドッグタイマの値。SR.stickと同じサイクルでデクリメントし、WDTトラップ発生。パイプラインが動いていると初期化。(特権モードによる書き込み可)

以下の3つは実行時のヒントとなる(読み出しのみ)
SR.bra - BHTなど分岐機構に関する情報 投機実行サポート、BHTサイズなど
SR.alu - 演算器に関する情報。演算器数、パイプライン情報など
SR.ldst - ロード/ストアに関する情報。メモリーオーダリングやアウトスタンディング数、キャッシュサイズなど

SR.asi - ASI空間の定義(読み書き可、コンテキスト保存対象)

SR.rand - 乱数発生器(読み出しのみ)
SR.prand - 擬似乱数発生器(読み書き可、コンテキスト保存対象)

SR.fpu - 浮動小数点に関する設定 - (特権モードによる書き込み可、丸めなど一部ユーザモードによる書き込み可、コンテキスト保存対象)
丸めモード、トラップの発生条件、浮動小数点演算器の種類、超越関数の実装など
別途検討

リンク:
テスト・レジスタによる分岐命令の改変/LOOP命令
浮動小数点命令の仕分け
割り込み、トラップ、例外、インタラプト…
ステータスレジスタ
ステータスレ
ジスタとロード・ストア命令


テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(1件)

タイトル (本文) ブログ名/日時
ぼくのかんがえたさいきょうCPU レジスタセット
 ようやく大和をお迎えできました。現在Lv55。 ...続きを見る
竹下世界塔の計算機よもやま話
2015/03/17 01:44

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




ぼくのかんがえたさいきょうCPU ステータスレジスタ検討 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる