半加算器(Half adder)というのはは、2つの1桁2進数に対する足し算を行い、和(Sum)と繰り上げ(Carry)を求める回路です。
今回は、半加算器の論理回路をNANDとNORだけで構成する方法について説明します。
まず、半加算器の振る舞いを押さえる為に、”NANDとNORだけ”という話は一旦おいといて、真理値表を確認します。
–半加算器の真理値表–
in | out X Y | C S -----+----- 0 0 | 0 0 0 1 | 0 1 1 0 | 0 1 1 1 | 1 0 |
二入力のいづれか片方が1の場合は和(S)が1で、両方が1の場合は桁上げになるので繰り上げ(C)が1になります。
出力であるSとCのパターンに着目すると、一目瞭然でS(和)はXOR、キャリーはANDになっていることが分かります。
なので、もし任意の論理回路をを使ってもよければ、半加算器は以下の2素子で回路構成できます。
次に、上記の回路ををNANDとNORだけで作ってみます。
※なぜNANDとNORだけの回路に組み替えたいかというと、NAND,NORだと回路製造上で必要なトランジスタ数が少なくなり、コストメリットがある為です。
まず繰り上げ側(C)であるAND処理は簡単で、NANDを2つ用意すればOKです。
まず普通に2入力をNANDに入れて、その出力の否定を取ればANDが作れます。
NANDからNOTを作るには、二つの入力値を同一にすればOKです。
次にCのXOR(0,1,1,0の出力)はちょっと考え方に工夫が必要で、これはゴールから逆算したほうが分かりやすいです。
NAND,NORだけで作るという前提なので、Cの直前の素子がNAND,NORのどちらであったとしても、最後はNOTになります。
なのでNOTが入る直前の真理値は(1,0,0,1)です。
out C notC -------- 0 1 1 0 1 0 0 1 |
仮に、Cの手前の素子がNORだったと仮定した場合、(1,0,0,1)をorで作る事になるので、2つの入力は必ず(1,0,0,0)と(0,0,0,1)となります。
※OR回路だったら、他に(1,0,0,1)の入力も有りうるのでは? と思われえるかもしれませんが、もし(1,0,0,1)を入力できるのであれば、それ自身が既に求めたい答えなので、後続のNOR回路はそもそも必要ありません。故に2つの入力は(1,0,0,0)と(0,0,0,1)の2つになります。
この内、(0,0,0,1)は先ほどCの出力と同じなので、こっちから引っ張ってこれます。
また、もう一方の入力である(1,0,0,0)は、よく見るとXとYのNORで作り出すことが出来ます。
なので、半加算器をNAND,NORだけで構成させようとすると、以下の4素子で組み立てることが出来ます。
関連記事
コメントを残す