■0式CPU
○略式説明
命令がなくアドレス指定だけですみます。
基本が簡単なので簡単にCPUの設計がすみます。
(学生のころ簡単なCPUを考えようとして基本設計しました。)
並列処理が簡単に出来ます。
説明を見たほうが良いでしょう。
○説明
基本的に32ビットです。8ビットでも動きますが、32ビット、64ビット以上でも良いです。
レジスターとメモリーは同じです。
リセットされると0000に実効命令のプログラムのアドレス(H10000)が書き込まれます。
(ここではH000000000を0000とします。)
実行系、メモリー操作(アドレス指定)(命令)
書き込みアドレス 書き込みデータ
H00000000 H00000000
32ビットの場合、この64ビットが一命令になります。
(並列処理とキャッシュとでスピードを補います。また、演算待ちがありません。)
(基本的にマイクロプログラムが入りません。ワイヤーで出来ます。)
実行されると自動的に実行命令アドレスが2加算され、次が実行されます。
メモリー体系
アドレス レジスター 説明
0000 □□□□ 実行命令アドレスが入ります。ここを書き込めば固定ジャンプします。
0001 □□□□ 間接ジャンプします。
0002 □□□□ ここに書き込みがあると0003に間接書き込みします。
0003 □□□□ 0002に書き込みがあると、間接アドレスに書き込みします。
0004 □□□□ 分岐、演算指定レジスターです。ここに書き込みがあると演算します。
0005 □□□□ 第1項が入ります。
0006 □□□□ 第2項が入ります。
0007 □□□□ 答えが入ります。0004の内容によってはジャンプします。
0008 □□□□ 次のプロセスと実効命令アドレスが入ります。
0009 □□□□ 繰り返しです。このため最大32つのプロセスが同時に動かせます。
000A □□□□
0100 □□□□ これ以上は、設計者が自由にできます。実行系を創っても良いし。
0101 □□□□ 演算系3DやHSV→RGB等にも使えます。
0102 □□□□ 間接アドレス系や64ビットにも簡単に拡張出来ます。
0103 □□□□
演算中に「答え」にはアクセスできません。その間、他の演算ができます。(平行処理が可能。)
こんな事も出来ます。
0200 □□□□ 3DのXYZの回転データがあるアドレスを指定
0201 □□□□ 書き込み側の指定。これは0200と同じでも良い
0202 □□□□ 0200と同じ事、待ち時間、こちらにアクセスする。
0203 □□□□
この場合、1回アクセスするだけで計算してくれます。
どんどん次にアクセスすれば演算が行われて行く。
平行処理が上手くいくようにするのはコンパイラでコントロールする。
64ビット命令形にも簡単に移行できます。
32ビット系のメモリーアドレスの後に直接メモリーアドレスが続きます。
0400 □□□□ 64ビット実行アドレス上位。ここにアクセスする事によって動き始める。
0401 □□□□ 64ビット実行アドレス下位。
0402 □□□□ 64ビット間接ジャンプアドレス上位。ここにアクセスよって実行される。
0403 □□□□ 64ビット間接ジャンプアドレス下位。ここにアクセスしても実行はない。
0404 □□□□ 64ビット上位書き込みアドレス。
0405 □□□□ 64ビット下位書き込みアドレス。
0406 □□□□ 64ビット上位データ
0407 □□□□ 64ビット下位データ
0408 □□□□ 64ビット系読み込みアドレス指定、64ビット上位
0409 □□□□ 64ビット系読み込みアドレス指定、64ビット下位
040A □□□□ 64ビット系書き込みアドレス指定、64ビット上位
040B □□□□ 64ビット系書き込みアドレス指定、64ビット下位
以下同じ
いったん動き出すと割り込みがあるまで動きつづけます。
○16ビットCPUの場合のメモリーマップ
0000 0000 実行アドレス。
0001 0000 常に0。
0002 0000 間接アドレス。
0003 0000 間接アドレス内容
0004 0000 ブロック転送量
0005 0000 転送アドレス
0006 0000 転送アドレス先
0007 0000 内容を1足す
0008 0000 内容を2足す
0009 0000 内容を1引く
000A 0000 内容を2引く
000B 0000 OUT アドレス
000C 0000 OUT データ
000D 0000 IN アドレス
000E 0000 IN データ
000F 0000 0内容のときのアトレスジャンプ
0000 0000 アドレスジャンプ先
0011 0000 ゼロ以上の場合のアドレスジャンプ
0012 0000 アドレスジャンプ先
0013 0000 ゼロ以下の場合のアドレスジャンプ
0014 0000 1のときアドレスジャンプ
0015 0000 アドレスジャンプ先
0016 0000 シフトビット数、ここへアドレスジャンプするとシフトする。
0017 0000 シフト内容1 移動されるビット
0018 0000 シフト内容2
0019 0000 シフト内容3 移動する残りのビット
001A 0000 足し算 左辺
001B 0000 足し算 右辺
001C 0000 足し算 答え
001D 0000 足し算 答え上
001E 0000 引き算 左辺下位
001F 0000 引き算 左辺上位
0020 0000 引き算 右辺
0021 0000 引き算 答え
0022 0000 掛け算 左辺
0023 0000 掛け算 右辺
0024 0000 掛け算 答え下位
0025 0000 掛け算 答え上位
0026 0000 割り算 左辺
0027 0000 割り算 右辺
0028 0000 割り算 答え
0029 0000 割り算 余り
002A 0000 AND
002B 0000 AND入力、答え
002C 0000 OR
002D 0000 OR入力、答え
002E 0000 XOR
002F 0000 XOR入力、答え
0030 0000 NOT 入力答え
0031 0000 ビット取り出しビット位置
0032 0000 ビット取り出しビット数
0033 0000 ビット取り出し入力答え
8000 0000 E000 実行アドレス、この場合、E000から命令を実行する。
詳しく知りたいひとはメールください。
taisuke2000@do7.enjoy.ne.jp