アーキテクチャ
概要
アーキテクチャとは、部品の組み合わせ方・使い方のことである。このページではアーキテクチャやコンピュータの設計方法を説明する。
バス・アーキテクチャ
コンピュータは、演算装置とメモリを繋ぐ配線(バス)の作り方で2種類に分けられる。
ノイマン・アーキテクチャ
命令を格納するメモリとデータを格納するメモリが同じで、命令とデータを区別しない方式のこと。命令とデータは同じバスで授受される。パソコンのCPUなど大半のコンピュータはこれにあたる。
ハーバード・アーキテクチャ
命令を格納するメモリとデータを格納するメモリが異なり、命令とデータが全く区別されている方式のこと。命令とデータは違うバスで授受される。マイコンと呼ばれる小さなコンピュータはこれで作られている。
オペランドによる分類
オペランドとは、機械語の命令中で指定されるデータのことである。オペランドの数によって3つに分類される。
スタックマシン(0オペランド)
スタックにデータを記憶しておき、計算に使う値はプッシュして格納し、計算結果はポップして取り出す。
アキュムレータマシン(1オペランド)
C言語で言えば、左辺値の決まった複合代入演算子が命令セットになっている。JOINT2進カウンタと相性が良い。
レジスタマシン(2、3オペランド)
c = a + bは3オペランドなので、よくある感じの命令セットが作れる。ただし複雑になる。
理論計算機科学では以下の4つに分類されるらしい。
カウンタマシン
カウンタマシンの命令セットは1~7種類の命令しかもたない。この命令セットは算術演算命令と最低1つの条件分岐命令からなる。
- CLR(r): rに0を代入
- INC(r): rをインクリメント
- DEC(r): rをデクリメント
- CPY(rj, rk): rjにrkを代入
- JZ(r, z): rが0ならzに飛ぶ
- JE(rj, rk, z): rj = rkならzに飛ぶ
議論されたカウンタマシンの命令セット例
- INC, DEC, JZ
- CLR, INC, JE
- INC, CPY, JE
どれでもチューリングマシンと同じ計算能力らしいよ。
ポインタマシン
(私には理解できない…。)
ランダムアクセスマシン(RAM)
カウンタマシンに間接アドレス指定方式とアキュムレータを付け加えたもの。
ランダムアクセス・プログラム内蔵機械モデル(RASP)
ランダムアクセスマシン上で動く万能チューリングマシン(UTM)。
命令セットアーキテクチャ
プログラムは命令の集まりである。行いたい計算に合わせて計算機が使える命令を決め、それをもとに計算機をつくる。計算機の使える命令の種類のことを「命令セット」という。以下、命令セットの分類をまとめる。
OISC
OISCとは、命令が1種類しかないコンピュータのこと。One Instruction Set Computerの略。OISCは大きく3つに分けられる。
転送誘引アーキテクチャマシン(TTA)
データ転送の副作用として計算を行う設計方式。
- move:単なる代入命令
move a to b | Mem[b] = Mem[a]; |
算術演算はメモリマッピングされた算術演算装置、ジャンプ命令はメモリマッピングされたプログラムカウンタで行う。
ビット操作型マシン
- BitBitJump:あるビットをコピーして、オペランドで指定されたアドレスの命令を次に実行する。
- Toga:あるビットを反転して、反転結果によって次に行う命令を変える。
算術型チューリング完全マシン
算術演算をして条件分岐をする方式。
- subleq:引いて0なら飛ぶ。
subleq a, b, c | Mem[b] -= Mem[a]; |
if (Mem[b] == 0) goto c; |
- subneg:引いて負なら飛ぶ。
subneg a, b, c | Mem[b] -= Mem[a]; |
if (Mem[b] < 0) goto c; |
- RSSB
RSSB a | acc = Mem[a] - acc; |
Mem[a] = acc; | |
if(acc < 0) 次の命令をスキップ; |
MISC
MISCとは、命令の種類が非常に少ないコンピュータのこと。Minimal Instruction Set Computerの略。命令数は16~64種類らしい。
RISC
RISCとは、命令の種類を少なくしたコンピュータのこと。Reduced Instruction Set Computerの略。
CISC
CISCとは、命令の種類が多いコンピュータのこと。Complex Instruction Set Computerの略。
CPU制御アーキテクチャ
制御装置の作り方は2種類ある。
ワイヤードロジック方式
制御装置を論理回路で全て組む方式。RISCで使われる。
マイクロプログラム方式
機械語の命令をさらに小さな命令(マイクロプログラム)に分割して、この命令を実行する方式。CISCで使われる。
難解プログラミング言語例
難解プログラミング言語の中で命令が非常に少ないものを取り上げる。
Brainf*ck
8種類の命令しかないプログラミング言語である。BFと略される。8ビットを単位として、加算(インクリメント)と減算(デクリメント)命令をもつ。複雑なことにはむかない言語だが、実行するCPU自体は比較的簡単な仕組みになる。
Lazy K
3種類の命令しかない関数型言語。機械語は命令型言語であるので、これは使えないが面白い。
命令セット例
実際に使われている命令セットを挙げる。実際のパソコンに使われている命令セットは、命令の種類が多すぎるので、ここではマイコンの命令セットを挙げる。
PIC
ホビーで最もよく使われているマイコン。命令は35種類しかない。
AVR
ホビーでPICの次によく使われているマイコン。ATtiny2313の場合、命令は123種類あるが、分類すると同じ意味の命令が多い。
命令セット例2
ここで挙げる2つはCPUの原理を理解するための入門書に載っている命令セットであり、実際に使われているコンピュータではない。
TD4
「CPUの創りかた」という本に載っていた4ビットCPUである。この本を読めば、TD4が論理素子で作れるようになっている。
GMC-4
「大人の科学マガジン」という雑誌で付録についていた4ビットCPUである。付録を少し組み立てれば、すぐに遊べるようになっていた。サブルーチンもついたりして複雑なので、粉遊び2向けに改良するときは命令セットを簡略化する必要がある。
粉遊びへの応用
バス・アーキテクチャ
ROMはRAMより集積度が高いので、ROMを多く使えるハーバード・アーキテクチャが良いだろう。
オペランド
JOINT2進カウンタを使ったALUなら、カウンタの性質からアキュムレータマシンに限られる。
JOINT論理回路によるALUでも、命令数を少なくしようとすればオペランドを多くすることはできない。
命令セットアーキテクチャ
命令数は8種類以下、多くても16種類に抑えたい。
命令の種類が増えるとデコーダの規模やALUの規模が大きくなり、実装やデバッグにかかる時間が増える。時間がかかるとモチベーションの維持が難しくなるため、手堅く完成させるなら命令数は減らすのが得策である。
CPU制御アーキテクチャ
ワイヤードロジック方式しか出来ない。
命令セットの設計
これがその計算機の得手不得手を決定づける。一概に言えないが、よく使いそうなコードは短く記述でき、あまり使わなさそうなコードは長くなるような命令セットが良い。例えば、乗算をプログラムとして載せるなら、加算命令は1語で書けたほうが良いかもしれない。
メモリがRAMなら、命令の種類は大きく3つに分けられる。
- 移動・演算(加減算・シフト)
- 即値代入・即値演算
- 条件分岐・無条件分岐
メモリがSAMなら、命令の種類は4つぐらいに分けられるだろう。
- 移動・演算(加減算・シフト)
- 即値代入
- RWMのポインタ
- 条件分岐・無条件分岐
このうちどの種類の命令を多くするかが考えどころである。
メモリ
ROM・RWMともにRAMが使いやすいだろう。RWMをD-FF型にするかT-FF型にするかが問題である。
参考文献
- 最終更新:2013-09-11 22:14:21