next up previous
: ALU: おわりに : ALU : [問題] 加算器

[問題] ALU の構成

以上の準備のもと、ALU を構成をする。

加算器のときと同様に「1 ビットの ALU」を構成し、 それを組み合わせることで「$n$ ビットの ALU」が実現できる。

[AND、OR、加算を行なう ALU]

まず、AND、OR、加算を行なう 1 ビットの ALU は図 3 のように 構成される。

図 3: AND、OR、(全)加算を含む 1 ビット ALU。入力 $X_n$$Y_n$、出力 $Z_n$ の他に、全加算器のためのキャリーイン $C_{n-1}$ および キャリーアウト $C_n$、結果選択のための操作入力 $d$ を含む。
\begin{figure}\begin{center}\epsfxsize =7cm \epsfbox{alu1.eps}\end{center}\end{figure}

操作入力 $d$ の値によって、出力 $Z_n$ の値が AND、OR、加算のいずれかに 選択される。全加算器のためにキャリーイン $C_{n-1}$ および キャリーアウト $C_{n}$ が存在することにも注意しよう。

この 1 ビット ALU を 32 個組み合わせれば、32 ビット ALU が構成される (図 4)。

図 4: 32 ビット ALU。
\begin{figure}\begin{center}\epsfxsize =5cm \epsfbox{alu32.eps}\end{center}\end{figure}

加算器の時には、最下位ビット (図 4 では $X_0$$Y_0$) の計算にはキャリーインを考慮する必要はなかったが、 ここではキャリーイン $C$ が存在する。それは減算を 行なう ALU を構成したいためである。 それを次節でみよう。

[減算のための ALU の拡張]

32 ビットの符号付き数 $X=X_{31} X_{30} \cdots X_1 X_0$ $Y=Y_{31} Y_{30} \cdots Y_1 Y_0$ の減算 $X-Y$ は、 $X+ (-Y)$ とすることで加算にすることができた。 ただし、$(-Y)$$Y$ の符号を反転することで得られる。 符号反転は「ビット反転をして 1 を加える」ことで実現される (付録 A.2 参照)。

$Y_n$ のビット反転を行なえるようにした 1 ビット ALU は 図 5である。

図 5: $Y_n$ のビット反転を行なえるようにした 1 ビット ALU。ビット反転を行なうかどうかを決める操作入力も加わっている。
\begin{figure}\begin{center}\epsfxsize =7cm \epsfbox{alu2-1.eps}\end{center}\end{figure}

図 6: ビット反転を考慮した 32 ビットの ALU。
\begin{figure}\begin{center}\epsfxsize =5cm \epsfbox{alu2-32.eps}\end{center}\end{figure}

また、この ALU を 32 個繋げたのが図 6 である。

[問題]

  1. 6 の 32 ビットALU において、 ビット反転入力 (bit transform) が 0、1 のとき、 それぞれ加算、減算を行なわせるようにしたい。そのためには、最下位ビットへの キャリーイン ($C$) に何を入力したらよいか。 「加算のとき $C=\cdots$、減算のとき $C=\cdots$」のように答えよ。 また、何故それで減算が実現できるか。


平成16年12月13日