「Implementing a One Address CPU in Logisim」は最後の5ページで、Logisimで作成したCPU実装の解説をしているので実際にこのCPUを動かしてみながら、回路図を調べていきます。
各ソフトウェア
このドキュメントで使っている各ソフトウェアは、Charles Kannさんのサイトhttp://chuckkann.com/joomlaMain/index.php/2016-05-09-22-19-35/one-address-cpu からダウンロードできます。
5.2 The ALU
ALU(Arithmetic Logic Unit)は、加算減算をサポートします。またOverflowフラグも持っています。16bitのIntegersのサイズは、-32768から32767なので、27000+25000=52000や、-27000+-25000=-52000の場合、桁あふれが発生します。
このCPU作成とは別に、「論理回路シミュレータlogisimで加算回路」で詳しく加減算回路を書きました。これで加算回路に減算を追加する方法が分かります。
オーバーフローフラグの注意点
http://www.c-jump.com/CIS77/CPU/Overflow/lecture.html
桁あふれの場合に何故、15bit目のCarryOutと16bit目のCarryOutをとってXORで桁あふれフラグを用意するかですが、最上位ビットは正負のフラグなので、正数の場合、16bitは0で、15bitどおしの計算になります。この時、桁あふれを起こしたら15bitの演算結果でCarrayOutが出力されます。一方負の数の場合は、16bitを使って表現するので、16bit目のCarryOutが出力されます。
符号付き計算の場合は、16bitのCarryOutだけではなく、15bit目も見る必要があります。
いかに4bitの加減算回路を作成し、計算結果の3bit目と4bit目のXORを取得しオーバーフローフラグを確認してみました。
ALUは16bit幅なので、ワイヤーが多く戸惑いますが、実際には上記のような4bit幅で作れる回路を16bit幅にしただけです。
- 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を斜め読み