中央処理装置(CPU)の設計。
Design of central processing unit.
64bit CPUとします。
RISCの考え方を参考に、できるだけレジスタ間で計算を実行するために64bit長のパラレルレジスタを64個用意します。名称はR00~R63(バス幅:64bit)とし、6bitの操作対象番号(オペランドコード)で区別します。演算命令は3アドレス命令とし、最大4命令コードまでの可変長命令形式にします。
レジスタは、8bit, 16bit, 32bit, 64bitパラレルデータを入出力できるようにします。メモリーとレジスタ間のデータ移動は、アドレスをデータサイズの倍数間隔に限定します。任意のアドレスからレジスタにデータを読み書きできる設計より、アドレス回路を簡易なものにできるからです。
フォン・ノイマン・アーキテクチャーでは、プログラムの自己書換えが前提なのでプログラムとデータが同一のメモリー上に混在するアーキテクチャーですが、セキュリティ対策、高速化、組み込み開発等の理由からハーバード・アーキテクチャーを採用し、プログラムとデータを完全に分離する方式とします。
簡易なプロセスの管理器機能を実装し、管理用プロセスとユーザ用のプロセスを分離します。割り込み処理機能、セグメント方式のメモリー保護機能を実装します。アドレスサイズは64bitにします。実装できる物理メモリーの大きさではなく、アドレス指定方法をフラットな構造のリニアにするためです。バイトオーダーはビックエンディアンにします。
主なレジスタ
・プログラムカウンタ:名称はPC
64bit長のカウンタ機能付きパラレルレジスタ、レジスタ値の取得と任意のアドレスの設定ができるようにします。初期化、JUMP命令や実行制御に必要なためです。プログラムのデコードの結果がアドレスを変更するようなものでなければ、レジスタの値をインクリメント(+1)します。PCの値が論理アドレスとしてセグメント管理回路に渡されます。
・プログラムメモリー用スタックポインタ:名称はPSP
サブルーチンや関数コールの実装用に64bit長のパラレルレジスタとします。レジスタ値の取得と任意のアドレスの設定ができるようにします。プログラム用スタック領域の設定に必要なためです。このレジスタの値はCALL命令で8byte(64bit)分マイナスされます。また、RET命令で8byte(64bit)分プラスされます。PSPの値が論理アドレスとしてセグメント管理回路に渡されます。
・データメモリー用スタックポインタ:名称はDSP
サブルーチンや関数コールの実装用に64bit長のパラレルレジスタとします。レジスタ値の取得と任意のアドレスの設定ができるようにします。データ用スタック領域の設定に必要なためです。このレジスタの値はPUSHREG命令で8byte(64bit)分マイナスされます。また、POPREG命令で8byte(64bit)分プラスされます。DSPの値が論理アドレスとしてセグメント管理回路に渡されます。
・ステータスレジスタ:名称はSR
1byte(8bit)長のレジスタとします。1bitパラレルで任意の値を取得できるようにします。このレジスタは初期化によって、全ビットがリセット(’0)されます。演算回路が演算の結果に応じて必要なビットをセット(’1)します。演算結果のフラグのセット/リセットは制御命令の条件分岐のデコード時にその結果が反映されます。
・割り込みアドレス管理テーブル:名称はINTADRTBL
割り込み制御回路用に64bit長のアドレス・レジスタを5個、12bit長のセグメント管理番号と64bit長のアドレス・レジスタを10個用意します。レジスタ値の取得と任意のアドレスの設定ができるようにします。割り込み処理アドレスの設定に必要なためです。INTADRTBLの値が論理アドレスとしてセグメント管理回路に渡されます。
・例外情報レジスタ:名称はEXCINFREG
1byte(8bit)長のレジスタとします。1bitパラレルで任意の値を取得できるようにします。このレジスタは初期化によって、全ビットがリセット(’0)されます。例外が発生した場合、例外処理アドレス・レジスタ(EXCEPTION)に設定されているスーパバイザモードセグメントの例外処理ルーチンが実行されます。例外処理ルーチンは、例外処理回路がセット(’1)したフラグを参照して適切な処理を行います。
メモリー間のデータ移動・複写用に直接メモリーアクセス回路を実装します。セグメント方式のメモリー管理回路を実装します。コードとデータを別々に4個のセグメントに分離して管理するようにします。ただし、入手可能な主記憶に使えるメモリー規格のインターフェースに合わせて、メモリーアクセスの外部インターフェースについてはデータバスとアドレスバスをコードとデータで共用します。他にCPUのタイミング制御用の入出力インターフェースを実装します。
データをバイナリーのビット列と見なしてビット列に対する論理演算処理を実行する機能を実装します。また、加算と補数を使った減算を実行する固定小数点形式演算回路と固定小数点数形式乗算回路を実装します。また、加算と補数を使った減算を実行する浮動小数点形式演算回路と浮動小数点形式乗算回路を実装します。汎用レジスタにあらかじめ属性を持たせて、レジスタの属性によってどの演算形式を選択するかを自動的に決められるようにします。
CPUは命令を読み込んでそれに従って処理を実行します。CPUコア制御回路は命令の解析を行う解析部と、解析した結果にもとづいて処理の実行に必要な各種機能モジュールを制御する制御部とから構成されます。制御回路の実装方法にはステートマシンなどを利用して、命令の解析と制御を行う機能モジュールをハードウェアで実現する方法、すなわち、ハードワイヤ(回線が固定されているの意味)方式とMicro CPUのような機能モジュールを用意して、プログラムで制御を実行するマイクロプログラミング方式の大きく分けて2種類があります。後者のマイクロプログラミング方式で実装することにします。
これらの設計を元に「エイトリーフCPUの命令セット・アーキテクチャ仕様書の基本構成版の第1.0.2版」を公開しました。旧Webサイトで公開していた0.2版とは大幅に変更されています。
タイマー割り込みなどの手段でマルチタスク処理を実現できる可能性があるはずですが、外部ディスクを想定した仮想記憶やページング方式のメモリー管理に対応していないため、本格的なOS(例:Linux)の実行は難しいと思われます。
以上
コメント ( 0 )
トラックバックは利用できません。
この記事へのコメントはありません。