半加算器で全加算器を作る

論理回路 ブール代数
半加算器で全加算器を作る

全加算器はサムネイルのように半加算器二つで実装できます。ですが図のシンプルさに対して、その導出過程がなかなかムズイので、メモしておきます。

なにを導出するねんって感じですが、カルノー図から求めた全加算器の入出力関係を、半加算器の入出力関係で表せるように変形するということです。

論理式から導出

まずは半加算器の定義を確認します。半加算器は入力 A, B に対して、出力 S (和), C (桁上げ) を出力します。なお \oplus は XOR です。

半加算器(A,B)=(SHA,CHA)SHA=ABCHA=AB\begin{align*} \text{半加算器}(A, B) & = (S_{HA}, C_{HA}) \\ S_{HA} & = A \oplus B \\ C_{HA} & = A B \end{align*}

全加算器は 入力 X, Y, C’ (下位加算器からの桁上げ) に対して、S, C を出力します。次の式は真理値表をもとに、カルノー図を使って簡略化したものです。

全加算器(X,Y,C)=(SFA,CFA)SFA=XˉYˉC+XˉYCˉ+XYC+XYˉCˉCFA=XY+XC+YC\begin{align*} \text{全加算器}(X, Y, C') & = (S_{FA}, C_{FA}) \\ S_{FA} & = \bar{X} \bar{Y} C' + \bar{X} Y \bar{C'} + X Y C' + X \bar{Y} \bar{C'} \\ C_{FA} & = X Y + X C' + Y C' \\ \end{align*}

SFAS_{FA} , CFAC_{FA}SHAS_{HA}, CHAC_{HA} で表すことができれば、全加算器を半加算器で実装できることになります。

まずは SFAS_{FA} から。

SFA=XˉYˉC+XˉYCˉ+XYC+XYˉCˉ=C(XˉYˉ+XY)+Cˉ(XˉY+XYˉ)=C(XY)+Cˉ(XY)=CXY=SHA(SHA(X,Y),C)\begin{align*} S_{FA} & = \bar{X} \bar{Y} C' + \bar{X} Y \bar{C'} + X Y C' + X \bar{Y} \bar{C'} \\ & = C' (\bar{X} \bar{Y} + X Y) + \bar{C'} (\bar{X} Y + X \bar{Y}) \\ & = C' (\overline{ X \oplus Y}) + \bar{C'} (X \oplus Y) \\ & = C' \oplus X \oplus Y \\ & = S_{HA} (S_{HA}(X, Y), C') \end{align*}

この式は次のように解釈できます。

alt text

次に CFAC_{FA} です。これがムズイというか、恣意的な変形が必要です。

CFA=XY+XC+YC=XY+XC+XY+YC=X(Y+C)+Y(X+C)=X(Y+YˉC)+Y(X+XˉC)=XY+XYˉC+YXˉC=XY+C(XYˉ+YXˉ)=XY+C(XY)=CHA(X,Y)+CHA(SHA(X,Y),C)\begin{align*} C_{FA} & = X Y + X C' + Y C' \\ & = X Y + X C' + X Y + Y C' \\ & = X (Y + C') + Y (X + C') \\ & = X (Y + \bar{Y} C') + Y (X + \bar{X} C') \\ & = XY + X \bar{Y} C' + Y \bar{X} C' \\ & = XY + C' (X \bar{Y} + Y \bar{X}) \\ & = XY + C' (X \oplus Y) \\ & = C_{HA}(X, Y) + C_{HA}(S_{HA}(X, Y), C') \\ \end{align*}

この式は次のように解釈できます。

alt text

直感的理解

式変形してカチカチにやってもいいですが、テスト以外で導出するのは流石にやりたくないですし、導出結果をあらかじめイメージできると見直しやすいと思ったので、直感的に理解できるような説明をしておきます。

全加算器は言い換えると 3bit 加算器です。3bit の和は、2bit を加算した結果を残りの 1bit と加算することで求められるので、和の信号は次のようなイメージになります。

alt text

桁上げが発生する条件は、3bit のうち 2bit 以上が 1 の場合です (011, 101, 111 とか)。2bit 以上が 1 になるときには、必ずどちらかの半加算器が桁上げするので、半加算器の桁上げ信号の論理和をとってあげればよいです。次のようなイメージになります。

alt text