jinyux’s diary

IT業界初心者です。勉強したことをまとめています。

ALUの基本 その1

ALUとはArithmetic Logic Unit(算術論理演算装置)の頭文字で論理積論理和、加算、減算を行う装置である。まず1bitの論理積論理和と加算のみを行うALUを考えてみる。それは以下の図のようになる。入力をa, bとする。

構造としては単純でAND, ORゲートと全加算器の出力をMuxで選択して出力しているだけである。入力はa, bのほかにCarry in(下位桁からの繰り上がり)とMuxの選択信号Sが必要になる。出力はoutputとCarry out(上位桁への繰り上がり)となる。

このALUを組み合わせて32bitの演算を行うALUを作る。それは以下のようになる。

32bitの入力A, Bのそれぞれの桁をA_i, B_i  (i = 0, 1, 2, \cdots 31)とし、それぞれのALUのCarry outを次の桁のCarry inに入力することで実現する。

さて、先程の1bit ALUに減算機能を追加する。a-bとはa+(-1)\cdot bという意味である。つまり引く方の正負を反転すれば良い。2進数において、正負を反転することには2の補数表現が利用できる。つまり、各桁のbitを反転させて1を加えればよい。まず、入力bを反転させるには最初の入力と反転させた信号を選択するMuxを追加する。

bitを反転させたあとは1を加えなければならない。これは1bit ALUであるが、実際は先程みたように複数個組み合わせて使う。そのとき、最下位bitに入力されるCarry inは本質的には意味がないものなので通常は0が入力される。しかし、補数表現をとるときに(Invert Bでbit反転を選択するとき)、1を入力するようにするとa+b+1となり、1加えることができる。これによって負の補数表現を実現することができ、減算が可能になる。

参考:コンピュータの構成と設計 第6版 下