これまでの作業で「Implementing a One Address CPU in Logisim」のアセンブリ言語と回路図がすべてわかりました。最後に同じ回路を作ってみます。
各ソフトウェア
このドキュメントで使っている各ソフトウェアは、Charles Kannさんのサイトhttp://chuckkann.com/joomlaMain/index.php/2016-05-09-22-19-35/one-address-cpu からダウンロードできます。
自分でCPUを作ってみる
ただ教科書を読むだけでなく、実際に全部作ってみると、どこを理解していないか確認できるので、実装してみます。
CPU全体
ALU
ALUは、加算、減算のみです。Overflowフラグを用意するため15bitの桁上がり(Carry Out)と16bitの桁上がりのどちらかがある場合をOverflowにします。Logisimに付属している加算器ICは、ビット数は変更できますが、Overflowフラグの出力ピンはありません。そのため15bit加算器と、1bit加算器をそれぞれ計算して、あとで繋げることで16bitの加算にしています。
なぜ15bitと1bitに分けるかですが、最上位ビットは正負のビットなので、正の数の場合は15bitで表し16bitになる場合は桁上がりです。また負の数は最上位ビットを1にして、17bitになったら桁上がりです。そのため、Overflowフラグは、15bitと16bitの桁上がりを確認する必要があります。
16bitの演算となると、ワイヤーがとても面倒なのが分かりました。
Control Unit
制御装置は、入力のInstructionで、各装置(=各IC)をOn/Offする信号を送るだけなので単純な回路です。
Sign Extend
8bitを16bitに拡張する回路図です。
ダウンロード
https://hajimete-program.com/logisim/one.circ
まとめ
今回、回路シミュレーターLogisimと「Implementing a One Address CPU in Logisim」でCPUを作ってみました。気付いただけでも回路図は抵抗やコンデンサーなどもないし、順序回路FlipFlop回路も動作しないし、出来たCPUは加算器と減算器しかないし、実物で動作できないし…と課題は沢山あります。
ですが、今回CPUを作成するまで多くの発見がありました。
- 回路シミュレータは、トライアンドエラーがやりやすい
- 初心者でも失敗を恐れずに試せる
- 論理回路を小さく作ってみて、そこから大きくしていくプログラミングと同等な感覚が分かった
- アセンブリ言語(仕様)を作るという事はCPUを作る事
- よく図解されているCPUの基本構成の制御装置、ALU、レジスター、PC、メモリーなどが理解できた。
- アセンブリ言語の分岐は、if文でありfor文である。
また、50ページ教材で、CPUの論理回路とアセンブリ言語の実装を学べたのは非常に有意義であるとともに、複雑なものを複雑なまま学習していることが多いと感じさせられました。
- 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を斜め読み