Implementing a One Address CPU in LogisimのCPU実装を調べる1ALU

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加算器

いかに4bitの加減算回路を作成し、計算結果の3bit目と4bit目のXORを取得しオーバーフローフラグを確認してみました。

+7(0111) + +1(0001) = +8(1000) 桁あふれ

 

-8(1000) – +1(0001) = -9(0111) 桁あふれ
-8(1000) + +7(0111) = -1(1111) 桁あふれ無し

ALUは16bit幅なので、ワイヤーが多く戸惑いますが、実際には上記のような4bit幅で作れる回路を16bit幅にしただけです。


コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA