当サイトの一部ページには、アフィリエイト・アドセンス・アソシエイト・プロモーション広告を掲載しています。

Amazonのアソシエイトとして、Security Akademeiaは適格販売により収入を得ています。

広告配信等の詳細については、プライバシーポリシーページに掲載しています。

消費者庁が、2023年10月1日から施行する景品表示法の規制対象(通称:ステマ規制)にならないよう、配慮して記事を作成しています。もし問題のある表現がありましたら、問い合わせページよりご連絡ください。

参考:令和5年10月1日からステルスマーケティングは景品表示法違反となります。 | 消費者庁

Half AdderとFull Adder【Turing Complete編】

2023年9月12日

加算器は全加算器で

加算器は次の3つに大別されます。

半加算器2つのビットの和を求める回路。
・入力:A, B・・・計2ビット
・出力:S, CO(キャリーアウト)・・・計2ビット
S=A+Bの最下位ビット
CO=A+Bの最上位ビット
全加算器3つのビットの和を求める回路。
・入力:A, B, CI(キャリーイン)・・・計3ビット
CI・・・前段からの桁上げ用
・出力:S, CO・・・計2ビット
S=A+B+CIの最下位ビット
CO=A+B+CIの最上位ビット
多ビット加算器
(単に加算器といったらこれ)
2つのnビットの和を求める回路。
・入力:A[n], B[n]・・・計2nビット
・出力:Out[n]・・・nビット
※2の補数による加算。
※オーバーフローは検出しない。

2進数の加算を考える

2進数の加算を表にすると次のようになります。

0b1b
0b00b01b
1b01b11b
1ビットの加算表

加算した結果は(最大)2ビットになります。

この2ビットはサムアウトとキャリーアウトから成るものと考えます。それぞれは1ビットを強調して、次のように呼ぶこともあります。

  • サムアウト=サムビット=和ビット
  • キャリーアウト=キャリービット=繰り上げビット=桁上げビット

半加算器

半加算器(ハーフアダー)は、下の桁からの桁上がりを考慮しない加算を実現する回路です。

ブロック図

真理値表

ABSCO
0000
0110
1010
1101
半加算器の真理値表

論理式

真理値表から論理式が論理式が得られます。

$S= \bar{A} \cdot B + A \cdot \bar{B}$

$CO = A \cdot B$

Half Adderステージ

半加算器を作る問題です。

Half Adderステージを解く

それでは問題を解いていきましょう。

1:サムアウトとキャリーアウトだけに注目した加算表を作る

1ビットの加算表のままだと内部回路を考えにくいので、サムアウトとキャリーアウトそれぞれに注目した加算表を書き出します。

+ サムアウト01
001
110
サムアウトの加算表
+ キャリーアウト01
000
101
キャリーアウトの加算表

2:サムアウトの加算表はXOR回路そのもの

サムアウトの加算表をよく見ると、XOR回路の真理値表と同一です。

XORコンポーネントを配置します。

そして、2入力をXORコンポーネントの入力につなげて、XORコンポーネントの出力をSUMにつなげます。

全パターンをテストして、Desired Sum(Half Adderの満たすべきサムビット値)とCurrent Sumが一致することを確認します。

※[Run]ボタンを押すと、最後のパターンだけエラーになりますが、これはキャリーアウト値で不一致が発生しているからです。キャリーアウトについてはまだ未配線なので失敗するのは当たり前です。

3:キャリーアウトの加算表はAND回路そのもの

キャリーアウトの加算表をよく見ると、AND回路の真理値表と同一です。

ANDコンポーネントを配置します。

そして、2入力をANDコンポーネントの入力につなげて、ANDコンポーネントの出力をCARにつなげます。

4:テストします。

全加算器

全加算器(フルアダー)とは、下の桁からの桁上がりを考慮に入れた加算を実現する回路です。

ブロック図

真理値表

入力:A、B、C

出力:S、CO

ABCISCO
00000
00110
01010
01101
10010
10101
11001
11111
全加算器の真理値表

キャリーインで場合分けする

キャリーインが0か1かで場合分けしたうえで、加算表を作るのです。

(a)キャリーインが0のとき

+ サムアウト01
001
110
サムアウトの加算表【キャリーインが0のとき】
+ キャリーアウト01
000
101
キャリーアウトの加算表【キャリーインが0のとき】

※キャリーインが0の場合は、キャリーインが存在しない半加算器と同等になります。

(b)キャリーインが1のとき

+ サムアウト01
010
101
サムアウトの加算表【キャリーインが1のとき】
+ キャリーアウト01
001
111
キャリーアウトの加算表【キャリーインが1のとき】

※半加算器の加算表において、すべての欄で+1した結果になります。

Full Adderステージ

全加算器を作る問題です。

Full Adderステージを解く

半加算器のブロック図を使って、全加算器を構成すると次のようになります。

現時点のTuring Completeで半加算器コンポーネントが使えれば簡単なのですが、残念ながら使えません。

※前の問題で半加算器を解いても、半加算器はアンロックされません。

半加算器の中身の回路をそのまま基本ゲートで実現したバージョンは次の通りです。

Turing CompleteのInput 1~3がA, B, CIのどれに対応するかは本質的ではありません。なぜならどれも1ビットであり、加算時は同等に扱えるためです。

ここでは、ブロック図に比較して見やすくするために、Turing CompleteのInput 1はCI、Input 2はA、Input 3はBに対応させました。

クリアすると、Full Adderコンポーネントがアンロックされます。