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

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU 16bit命令長実装

<<   作成日時 : 2012/09/21 07:35   >>

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

 全体を考えているとなかなかまとまらず幾星霜、頭の中だけではなかなかひとつの形にまとまらない。思い切ってMIPS16eのような命令をを考えてみた。上位には特権モードの4バイト命令長本格派CPUが存在する、との仮定の元、組み込み系などでコード量を減らしたいための16ビット固定長縮小命令セットでユーザモードを実行できるだろうか?これをベースにエミュレータを作ったり肉付けしたりと検討していく。


・ぼくのかんがえたさいきょうCPUの16bit長短縮命令セット
・ユーザモードのみ
・レジスタは8本(ゼロレジスタ含む)
・整数演算レジスタのみ参照
・アドレッシングモードは[B+X]と[B+imm]
・エンディアンは呼び出し側と同じ(固定)
・マルチプロセッササポートはない
・プリフィックス命令で拡張可能

命令フォーマット:16bit固定長
[15:14] 命令大分類
[13:9] 命令種別 5bit
[8:6] Rs1
[5:3] Rs2
[2:0] Rd


□演算命令 [15:14]="00"

[13:10]命令
0000 AND
0001 OR
0010 NOR
0011 XOR
0100 ANDN
0101 ORN
0110 NORN
0111 XORN
1000 ADD
1001 SUB
1010 MUL
1011 MULH
1100 SLL Rs1,val,Rd
1101 SRL Rs1,val,Rd
1110 SRA Rs1,val,Rd
1111 BIT Rs1,imm,Rd (BIT命令は2オペランドなのでimm値に動作を記述)
imm[2:0] ...MOV,INV,NRZ,POP,NTZ,ABS,...
[9] Imm Rs2即値指定

[8:6] Rs2/Imm
[6:4] Rs1
[2:0] Rd

※0000-0111はレジスタ全体に作用、1000-1111はSIMD対応可能


□メモリ参照命令 [15:14]="01"

[13] LD=0/ST=1 1bit
[12:10]3bit 8/16/32/64/128/256/512/1024 Sign Extended
[9] Imm Rs2即値指定
[8:6] Rs2(indeX)/Imm
[5:3] Rs1(Base)
[2:0] Rd/Rs


□分岐命令 [15:14]="10"

[13:12]
00 Branch(相対値)
01 Jump&Link(LD/STと同じアドレッシングモード)
10 cmov 条件転送
11 次命令Skip

[11:10]
00 対象レジスタの内容が0
01 対象レジスタの内容が1
10 CONDS 直前の演算結果のステータスと対象レジスタとのand
符号付き<≦>≧、符号なし<≦>≧、=≠
11 CONDV 直前の演算結果のOverflow位置 8/16/24/32/40/48/56/64,,,8++

[9] Imm Rs2即値指定

・Branchの時
[8:6] 条件判断対象レジスタ
[5:0] 符号付き6bit即値 J&L用+1bitのオフセット(2バイト境界にしか飛ばない)

・Jump&Linkの時
[8:6] Rs2(indeX)/Imm
[6:4] Rs1(Base)
[3:0] Rdリンクアドレス保存用

・cmovの時
不成立:[8:6]Rs1を[3:0]に転送
成立:[8:3]Rs2を[3:0]に転送

プリフィックス/拡張命令 [15:14]="11"
[13]=0 [12:0] 13bit即値拡張 後続命令が即値指定ありの場合、上位側に追加
後続命令が即値を要求する命令でなかった場合はクリアされる。

[13:12]=10 [11:10]拡張追加命令2bit [9]Imm [8:6]Rs2/Imm [5:3]Rs1 [2:0]Rd/Rs
[13:11]=110 [10:6]拡張追加命令5bit Rs1[5:3] Rd[2:0]
[13:10]=1110 [9:3]拡張追加命令7bit Rd[2:0]
[13:10]=1111 [9:3]拡張追加命令10bit

これらはスーパーバイザコール時やALU拡張ののプリフィックスとして使う。
例:
SVRCALL [15:14]=11,[13:12]=10,[11]=0,[10]=0,[9]=Imm、残りはJump&Linkのフォーマット
RETURN [15:14]=11,[13:12]=10,[11]=0,[10]=1,[9]=Imm、上位モニタへのリターン


トラップ:演算命令では発生しない。
分岐命令:飛び先アドレスが存在しない場合発生。上位モニタに移る
ロードストア命令:ロードまたはストアが失敗した場合発生。上位モニタに移る
特殊命令:RETURN命令で上位モニタへの復帰、SVRCALLはスーパバイザコール

 なお、実際のレジスタの幅については何bitでもよいように隠したつもりだ。
 これだけあれば、CASLII程度の動作環境は作れるだろうか。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(1件)

タイトル (本文) ブログ名/日時
ぼくのかんがえたさいきょうCPU 16bit単位半可変長命令形式
 機械語をデコードしやすい形でどう押し込めたらよいか。 RISCの固定長命令では大きな定数が扱いにくい。定数は書き込まれることはないので、ソースレジスタの指定とひとくくりにしてしまう。以前から考えていたプリフィックス命令に入れてしまおう。ここでは命令長を短くするのではなくデコードを楽にする方法を優先して考えている。  前回考えたのは16bit命令長のサブセットだった。  ぼくのかんがえたさいきょうCPU 16bit命令長実装  が、16bit長単位でフルセットの機能を押し込められそ... ...続きを見る
竹下世界塔の計算機よもやま話
2013/05/22 01:42

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




ぼくのかんがえたさいきょうCPU 16bit命令長実装 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる