※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

生きた証。( -_-)

自分が作ったCPUの仕様についての話。


はじめに


パタヘネとMIPS R3000仕様書の本があれば
センスある人なら一カ月もかからないはず。

自分はセンスないからかなりかかった・・・・。

あとは動作確認での時間がかなりかかるのでシミュレーション用プログラムを
つくっておくとかなり楽。というか手書きだと死ぬ。

実機で動作確認できてこそ初めて「実装完了」ですので
ISEで大丈夫だったから動くなんて甘いです。('A')

興味があればつくってみよー。


スペック


CPU MIPS R3000 51.336MHz
メモリ 128MB
その他 キャッシュ無し、浮動小数演算非サポート


MIPSとは?


MIPS Technologies Incが開発したRISCマイクロプロセッサのアーキテクチャ

Microprocessor without interlocked pipeline stages(パイ
プラインステージがインターロックされないマイクロプロセッサ)の略

命令セットが非常にきれいなので、コンピュータ・アーキテ
クチャを学校で教えるときに教材としてMIPSアーキテクチャを使うことが多い

ゲーム機分野でもよく使われており、NINTENDO64、ソニーの
PlayStation、PlayStation2、PSPでもMIPSアーキテクチャのプロセッサが使われた。

などなど

ちなみに
NINTENDO64(MIPS 64ビットRISC R4300カスタム),
PS(MIPS 32bit コア R3000カスタム),
PS2(Emotion Engine(MIPSベース)),
PSP(MIPS 32bit コア R4000×2)で、

今回はR3000を実装しております。

がんばればプレステレベルのCPUをつくれるのでしょうか‥‥‥?

実行可能な命令


後で命令の種類によって整理します。
命令 意味 命令形式 例外
ADD 加算 ADD rd,rs,rt オーバフロー例外
ADDI イミディエイト(即値)の加算 ADDI,rt,rs,immediate オーバフロー例外
ADDIU イミディエイト(即値)の加算(無符合) ADDIU,rt,rs,immediate
ADDU 加算(無符合) ADDU rd,rs,rt
AND 論理積 AND rs,rs,rt
ANDI イミディエイト(即値)の論理積 ANDI rt,rs,immediate
BEQ 等号での分岐 BEQ rs,rt,offset
BGEZ ゼロ以上の分岐 BGEZ rs,offset
BGEZAL ゼロ以上の分岐とリンク BGEZAL rs,offset
BGTZ ゼロ以上での分岐 BGTZ rs,offset
BLEZ ゼロ以下の分岐 BLEZ rs,offset
BLTZ ゼロ未満の分岐 BLTZ rs,offset
BLTZAL ゼロ未満の分岐とリンク BLTZAL rs,offset
BNE 不等号での分岐 BNE rs,rt,offset
DIV 除算 DIV rs,rt
DIVU 除算(無符合) DIVU rs,rt
J ジャンプ J target
JAL ジャンプとリンク JAL target
JALR ジャンプとリンクのレジスタ JAL rs または JALR rd,rs
JR ジャンプレジスタ JR rs
LB バイトのロード LB rt,offset(base) *1
LBU バイトのロード(無符合) LBU rt,offset(base) *1
LH ハーフワードのロード LH rt,offset(base) *1
LHU ハーフワードのロード(無符合) LHU rt,offset(base) *1
LUI 上位イミディエイトのロード LUI rt,immediate
LW ワードのロード LW rt,offset(base) *1
LWL ワードの左ロード LWL rt,offset(base) *1
LWR ワードの右ロード LWR rt,offset(base) *1
MFHI HIからの転送 MFHI rd
MFLO LOからの転送 MFLO rd
MTHI HIへの転送 MTHI rs
MTLO LOへの転送 MTLO rs
MULT 乗算 MULT rs,rt
MULTU 乗算(無符合) MULTU rs,rt
NOR 否定論理和 NOR rd,rs,rt
OR 論理和 OR rd,rs,rt
ORI イミディエイト(即値)の論理和 ORI rt,rs,immediate
SB バイトの格納 SB rt,offset(base) *1
SH ハーフワードの格納 SH rt,offset(base) *1
SLL 論理左シフト SLL rd,rt,shamt
SLLV 論理変数左シフト SLLV rd,rt,rs
SLT 未満へのセット SLT rd,rs,rt
SLTI イミディエイト未満へのセット SLTI rd,rs,rt
SLTIU イミディエイト未満へのセット(無符合) SLTIU rd,rs,rt
SLTU 未満へのセット(無符合) SLTU rd,rs,rt
SRA 算術右シフト SRA rd,rt,shamt
SRAV 算術変数右シフト SRAV rd,rt,rs
SRL 論理右シフト SRL rd,rt,shamt
SRLV 論理変数右シフト SRLV rd,rt,shamt
SUB 減算 SUB rd,rs,rt オーバフロー例外
SUBU 減算(無符合) SUBU rd,rs,rt
SW ワード格納 SW rt,offset(base) *1
SWL ワードの左格納 SWL rt,offset(base) *1
SWR ワードの右格納 SWR rt,offset(base) *1
XOR 排他的論理和 XOR rd,rs,rt
XORI 排他的論理和 XORI rt,rs,immediate


*1:この命令には
UTLB不一致例外
TLB不一致例外
TLB変更例外
バスエラー例外
アドレスエラー例外
があるが、まだ未サポートである。


実装予定の命令


後々必要になるかもしれない命令
命令 意味 命令形式 例外
BREAK ブレーク BREAK ブレークポイント・トラップ
SYSCALL システムコール SYSCALL システムコール例外


メモ


例外発生時において処理を委託する番地は今の所適当。
つーかサポート処理を実装してない。

質問でもなんでも


  • テスト -- モリ (2006-06-23 16:55:55)
  • lwl,lwr,swl,swr はlw,swとどう違うのでしょうか? -- loe (2009-02-06 23:04:58)
  • 2つのワードにまたがっているデータ(4byte)を読み出すのに使うのがlwl,lwr。lwは1ワードを読み出す命令。swl,swrはレジスタの値を2つのワードにまたがっている領域に書き込むために使う。swは1ワードに書き込む命令。(時間あったら図のっけときます) -- mori (2009-02-07 21:47:43)
名前:
コメント:




| 新しいページ | 編集 | 差分 | 編集履歴 | ページ名変更 | アップロード | 検索 | ページ一覧 | タグ | RSS | ご利用ガイド | 管理者に問合せ |
@wiki - 無料レンタルウィキサービス | プライバシーポリシー