今回は、「Implementing a One Address CPU in Logisim」CPU-MainというCPU全体が書かれている回路図の作りを見ていきます。
各ソフトウェア
このドキュメントで使っている各ソフトウェアは、Charles Kannさんのサイトhttp://chuckkann.com/joomlaMain/index.php/2016-05-09-22-19-35/one-address-cpu からダウンロードできます。
今回は、Execution Path Subsectionを見ていきます。
はじめてこの回路図を見たときは、こんなの分からないと思ったものですが、毎回小さな回路を自分で作り直しているうちに、単純な回路だとわかりました。ポイントは、画像中央のPCが何をしているかです。
PC=Program Counter(プログラムカウンター)とは、現在プログラムの実行している場所を示しています。言い換えると、現在実行しているプログラムメモリーのアドレスを指しています。
回路が起動したときは、PC=0000 0000 にして、クロックが動き続ける間、1を足していきます。つまりプログラムメモリーのアドレスを0001、0002と増やしていくだけです。
加算回路とレジスター
まずは、1を加算するカウンター回路です。加算器(Adder)とレジスターのみです。加算器は、レジスターから受け取った値0と1を足して、結果1を出力します。その出力1は、レジスターの入力なので、レジスターに保持され、さらにレジスターから1が出力されます。
次は、
加算器は、レジスターから受け取った値1と1を足して、結果2を出力します。その出力2は、レジスターの入力なので、レジスターに保持され、さらにレジスターから2が出力されます。
というように加算が続きます。
このカウンターにRAMを付けると?
先ほどの加算器とレジスターを使った、1を足しているカウンター回路の出力先に、RAM回路の入力A(Address)を付けると、メモリーの位置を移動している事になります。下記のがどうだと、Clearボタンを押したときに、レジスターが0にリセットされて、それが出力されるので、RAMのアドレス0番地を指すようになります。
現在、RAMに00だけしか書かれていませんが、ここにマシン語を入れておけば、その指示したアドレスの値をRAMは出力ピンDから出力します。
また、アドレスを0,1,2,3,4と動かすほかに、任意のアドレスに移動したい場合は、上記のようにマルチプレクサーと、切り替え信号を用意して、レジスターの入力を切り替えればよいです。
任意のアドレスの移動
RAMはカウンター回路が動いている間、1,2,3…と移動アドレスを指示していきます。このCPUで任意のアドレスに移動する場合は、ALUの値と0を比較して同じで、かつ、マシン語でbeqz命令が送られてきた場合に、両方を満たしているので、AND回路から1が出力されます。マルチプレクサーは、これを分配の信号として使います。
RAMが出力したデータと分配
RAMから出力されたデータはマシン語で以下のフォーマットです。
16-bit machine instruction formatとなっています。
- 4-bit Op Code
- 4-bit ALU Opt
- 8-bit Immediate or Address
よって、上位8bitのOpCodeとALUOptは、制御回路(Control Unit)の入力になり、下位8bitの即値またはアドレスは、データメモリーとALUに渡されます。
まとめ
このCPUのほとんどの回路図を見てきただけでなく理解できました。あとは制御装置(Control Unit)だけです。制御回路も簡単な回路で、この回路がどのような命令があって何をしたいのかを理解すれば、問題ありません。
次回は、制御装置の回路図を見ていきます。
- Implementing a One Address CPU in LogisimのCPU実装を調べる5 複製してみる
- Implementing a One Address CPU in LogisimのCPU実装を調べる4 ControlUnit
- Implementing a One Address CPU in LogisimのCPU実装を調べる3 Execution Path Subsection
- LogisimのPlexersの使い方とInclude Enables?属性
- Implementing a One Address CPU in LogisimのCPU実装を調べる2 Arithmetic Subsection
- Implementing a One Address CPU in LogisimのCPU実装を調べる1ALU
- Implementing a One Address CPU in LogisimのCPU実装を調べる1符号拡張
- Implementing a One Address CPU in Logisimのアセンブリ言語仕様
- コンピューター・アーキテクチャを調べる
- Implementing a One Address CPU in Logisimを斜め読み