簡易CPU仕様案
by K.I
2000/12/13
Index
シーケンサとしての利用を想定した、簡易的なCPUの仕様案。
- 1bit ALU データバス1bitの8bitシリアル演算処理
- メモリ - 8bit×16word×16bank
- I/O - 8bit×16port(シフトレジスタ?)
- サブルーチン用スタック4段
- 割り込みは0番地へのジャンプ後、フラグにより分岐
- 1cycle = 20clock 完全同期型
- シリアル演算で完全同期のオリジナルアーキテクチャ
- 8bitインストラクションRISCコマンドセット
- シーケンサとして、bit操作命令を重視
- 条件ジャンプが無い代わりに、豊富な条件スキップ命令を持つ
- ±8の相対ジャンプ、任意のshift,rotateが可能(rightのみ)
- JSRはスタック方式のため、メモリを消費しない(4段まで)
- シリアル演算のため速度はかなり遅いが、シーケンスコントロールの自由度は大きい
[top]
[top]
1cycle = 20clock
[top]
5bitジョンソンカウンタによるステートマシンでクロックを生成する。1
Fetch/Executeの切替えは1bitのバイナリカウンタによって保持。
F | 43210 | | |
1 | 00000 | F0 | pre-fetch |
1 | 00001 | F1 | fetch |
1 | 00011 | F2 | |
1 | 00111 | F3 | |
1 | 01111 | F4 | |
1 | 11111 | F5 | |
1 | 11110 | F6 | |
1 | 11100 | F7 | |
1 | 11000 | F8 | |
1 | 10000 | F9 | post-fetch |
| | | |
0 | 00000 | E0 | pre-execute |
0 | 00001 | E1 | execute |
0 | 00011 | E2 | |
0 | 00111 | E3 | |
0 | 01111 | E4 | |
0 | 11111 | E5 | |
0 | 11110 | E6 | |
0 | 11100 | E7 | |
0 | 11000 | E8 | |
0 | 10000 | E9 | post-execute |
1クロック生成の容易さから、ジョンソンカウンタを採用した。
[top]
8bitインストラクションのRISC形式のコマンドセット2。
hex | binary | mnemonic | operation | cz |
00 | 0000 0000 | nop | No Operation | xx |
01 | 0000 0001 | inv | Invert | 01 |
02 | 0000 0010 | inc | Increment | ** |
03 | 0000 0011 | dec | Decrement | ** |
04 | 0000 0100 | ret | Return Subroutine | xx |
05 | 0000 0101 | inp | Input | xx |
06 | 0000 0110 | out | Output | xx |
07 | 0000 0111 | --- | | |
08 | 0000 1000 | skp z | Skip if Zero | xx |
09 | 0000 1001 | skp nz | Skip if not Zero | xx |
0A | 0000 1010 | skp c | Skip if Carry | xx |
0B | 0000 1011 | skp nc | Skip if not Carry | xx |
0C | 0000 1100 | ret i | Return Interrupt | xx |
0D | 0000 1101 | set z | Set Zero | 01 |
0E | 0000 1110 | set c | Set Carry | 1* |
0F | 0000 1111 | hlt | CPU Halt | xx |
| | | | |
1x | 0001 aaaa | ld aaaa | Load | 01 |
2x | 0010 aaaa | st aaaa | Store | 01 |
3x | 0011 0bbb | sft bbb | Shift right | 0* |
3x | 0011 1bbb | rot bbb | Rotate right | 0* |
4x | 0100 kkkk | bnk kkkk | Change Bank | xx |
5x | 0101 aaaa | jps aaaa | Jump Subroutine | xx |
6x | 0110 aaaa | --- | jps reserve | |
7x | 0111 aaaa | jp aaaa | Jump | xx |
8x | 1000 iiii | swap iiii | swap I/O & set I/O bank | xx |
9x | 1001 0rrr | jr rrr | Jump Relative Forword | xx |
9x | 1001 1rrr | jr -rrr | Jump Relative Back | xx |
Ax | 1010 aaaa | add aaaa | Add | ** |
Bx | 1011 aaaa | sub aaaa | Sub | ** |
Cx | 1100 aaaa | and aaaa | And | 0* |
Dx | 1101 aaaa | or aaaa | OR | 0* |
Ex | 1110 0bbb | clr bbb | Clear bit | 01 |
Ex | 1110 1bbb | set bbb | Set bit | 01 |
Fx | 1111 0bbb | skp0 bbb | Skip if bit=0 | 0* |
Fx | 1111 1bbb | skp1 bbb | Skip if bit=1 | 0* |
aaaa: 4bit address
kkkk: 4bit bank address
iiii: 4bit I/O bank
bbb: bit location or shift count
rrr: ±8 relative value
flag x: no change, *: change, 0: low, 1: high
2確定ではない。特にI/O関係は未定。
[top]
以下は未定。
- パワーオンリセット
- カウンタースタートアップリセット
- ブラウンアウトリセット
- ウォッチドックタイマーリセット
- 割り込み用のレジスタが必要(アキュームレータを使う?)
- 割り込み許可フラグ
- 割り込みによる起動を示すフラグ
- ウォッチドックタイマーによる起動を示すフラグ
- 割り込み時のアキュームレータ、フラグの保存方法
- 割り込み時にバンクは保護されない。
- データメモリを分離して、データエリアのみにアクセスするようなコマンドセットにする。→ハーバードアーキテクチャ
- jp,jpsはジャンプテーブル(16 or 32程度)を使うコマンドにすることで、バンク切替えのオーバーヘッドを無くす。
[top]
[電子工作関連に戻る]