You are on page 1of 33

#02 論理回路の基礎

ブール代数と論理ゲート
ハードウェア記述言語(HDL)
注意:2値と2進数
ブール代数 はまったく別物

• 2値(binary value)を入力として2値を出力とす
る関数をブール関数(Boolean Function)と呼ぶ
– 2値とは、0と1、オンとオフ、trueとfalse、yesとno、
白と黒、…(2つの区別できる値なら何でもよい)
• 2値のことをブール値、バイナリ(binary)値ともいう
– 関数とは何かと何かの関係や、何かから何かへ
の写像を表わす概念
• y = f(x)とか{(x, f(x)); x ∈ X}のように表すことがある
• 誕生月を入力として運勢(lucky, normal, bad)を出力する
占いは12値を入力として3値を出力する関数といえる
• 誕生月と血液型を入力として運勢を出力する場合は?
– 12値と4値の2つを入力として3値を出力する関数といえる
真理値表
• ブール関数は真理値表(truth table)で表現できる
– 例えば右の真理値表では、
3入力で1出力のブール関数 f の一例
を表現している
• 2値は0/1を用いる x y z f(x, y, z)
0 0 0 0
• x, y, z が入力(3つ)
0 0 1 0
• f(x, y, z) が出力(1つ)
0 1 0 1
• 全種類の入力を網羅する 0 1 1 0
– 入力はいくつあってもよい 1 0 0 1
• 右は3つの2値入力の例 1 0 1 0
• 入力値は2種類(2値) 1 1 0 1
• 入力数は1つでもよい 1 1 1 0
問題:1入力の真理値表をすべて書け
問題:1入力の真理値表をすべて書け
• 右の4通りですべて 入力 x 出力 f(x)
• 入力は1つ、つまりxのみ 0 0

– xの値は0か1のみ
1 0

– つまり入力は2パターン
• 出力は、それぞれで可能なすべての 入力 x 出力 f(x)
パターン
0 0
– 常に0を出力
– 入力をそのまま出力 1 1
– 入力を反転して出力
入力 x 出力 f(x)
– 常に1を出力
• 2パターンの入力に対して出力(下の? 0 1
の部分)は22通り、すなわち4通りあり 1 0
える.つまり4通りで全て
– ?は0か1であり、それが2箇所あるので 入力 x 出力 f(x)
入力 x 出力 f(x) 0 1
0 ? 1 1
1 ?
ブール式
• ブール関数は真理値表以外にブール式(Boolean
Expression)でも表現できる
• ブール式の基本はAND, OR, NOTの3つの演算子
– それぞれを以下のような式で表現(右辺は略記法)
– x AND y = x・y (もしくは xy) 加算や積算と同じ
演算子だが、計算方法は
– x OR y = x+y 異なる。あくまでも
真理値表で計算する
– NOT x = x (次ページ)

– NOTが優先、 NOT x AND y は(NOT x) AND y の意味


• 例えば、前スライドの真理値表で表現されたブー
ル関数をブール式で書くにはどうしたらよいか?
NOT, AND, ORの真理値表
この3つの真
• ブール式は、真(truth/1)か偽 入力 x NOT x
理値表は覚
(false/0)のどちらかを値とし、AND、
0 1 えて下さい
OR、NOTの演算子で構成する
– 以下では便宜上、値を0と1で記す 1 0
• NOTは単項演算子(1入力)
– NOT x (値を右側に1つもらって計算) 入力 x 入力 y x AND y
• ANDとORは二項演算子(2入力) 0 0 0
– x AND y, x OR y (値を左右に2つも 0 1 0
らって計算)
• すべての値と3つの演算子の組合せ 1 0 0
は右の真理値表で尽くされる 1 1 1
– x AND yはxyと、 x OR yはx+yと数字の積
や和の式のように記述するが、数字の加 入力 x 入力 y x OR y
算や積算をしているわけではない
– あくまでも、「真 AND 偽」、「白 OR 黒」な 0 0 0
どを2値の計算をするのであって、
「1×0」や「0+0」という数値の算術演算を 0 1 1
しているわけではない
• 現に「1+1」は2になるわけではない
1 0 1
– 真理値表の0/1はあくまで2値を便宜上表 1 1 1
記するためのみに使用している
x+yやx・yは算術計算(和・積)ではない
数字以外にも使える
こちらはブール代数のテツANDトモではない、正しくは

NOT(テツANDトモ) NOT(テツOR トモ)


ブール関数とブール式の違いは?
• ブール関数は入力と出力の関係を抽象的に f で表現
し、ブール式は具体的に「式」を表現
– 関数は関係、写像を意味し、それに名前をつける
– 抽象的なものの内容は具体的なもので表現する
• ブール関数はブール式でも表現できるし、真理値表
でも表現できる
• 「式」は一般に「演算」して「値」を計算できる
– ブール式はブール演算子を含んで記述し、演算した結果は
ブール値になる
f: x AND (y OR z)

ブール関数 ブール演算子 ブール式


ブール代数の基本的な性質
• x + 1 = 1, x·1=x ・・・(1) 単位元
• x + 0 = x, x·0=0 ・・・(2) 零元
• x+x=1 x·x=0 ・・・(3) 補元
• x+y=y+x
x·y=y·x ・・・(4) 交換律
• x+(y·z)=(x+y)·(x+z)
x · ( y + z ) = ( x · y ) + ( x · z ) ・・・(5) 分配律
• x+(y+z)=(x+y)+z
x·(y·z) = (x·y)·z ・・・(6) 結合律
• x+(x·y) = x
x·(x+y) = x ・・・(7) 吸収律
• x+y=x · y
x·y=x+y ・・・(8) ド・モルガンの法則
• x=x ・・・(9) 対合(二重否定)
• x + x = x, x·x=x ・・・(10) べき等
ブール代数の基本的な性質
これらの性質がなぜ
• x + 1 = 1, x·1=x ・・・(1) 単位元 成立するかは、
• x + 0 = x, x·0=0 ・・・(2) 零元 あくまでも真理値表
で計算して確かめる
• x+x=1 x·x=0 ・・・(3) 補元 (右辺と左辺の計算
結果が一致する)
• x+y=y+x 算術演算では
x·y=y·x 成立しないことに注目 ・・・(4) 交換律
入力 x 出力 x+1
• x+(y·z)=(x+y)·(x+z) 0 1
x · ( y + z ) = ( x · y ) + ( x · z ) ・・・(5) 分配律1 1
• x+(y+z)=(x+y)+z
x·(y·z) = (x·y)·z ・・・(6)
AND 結合律
と OR の変換に使えるので重要.
• x+(x·y) = x ANDと OR を交換し,各変数の否定をとって,
x·(x+y) = x 式全体の否定をとると,元の式と等価である
・・・(7) 吸収律 .
(x+yは NOR, x・yは NANDと呼ばれる)
• x+y=x · y
x·y=x+y ・・・(8) ド・モルガンの法則
• x=x ・・・(9) 対合(二重否定)
• x + x = x, x·x=x ・・・(10) べき等
正準表現/canonical representation
• 以下の手順で、どのようなブール関数も1つ以上の
ブール式で必ず表現でき、それを正準表現という
• 出力が1の行のみに注目する
• 真理値表でのそれらの行のx, y, zの各入力が、1な
らそのまま、0ならNOTにしてANDをとる式を記述
– 先掲の3入力の真理値表の例では、
(x, y, z) = (0, 1, 0), (1, 0, 0), (1, 1, 0)で、f(x, y, z) = 1
なので、
xyz, xyz, xyz
• よって以下のように完成
f(x, y, z) = xyz + xyz + xyz
• つまり、すべてのブール関数は必ずAND, OR, NOT
のみで記述できることを意味する
x y z f(x, y, z)
0 0 0 0

正準表現/canonical representation 0
0
0
1
1
0
0
1
0 1 1 0

• 以下の手順で、どのようなブール関数も1つ以上の
1
1
0
0
0
1
1
0
ブール式で必ず表現でき、それを正準表現という
1 1 0 1
• 出力が1の行のみに注目する 1 1 1 0

• 真理値表でのそれらの行のx, y, zの各入力が、1な
らそのまま、0ならNOTにしてANDをとる式を記述
– 先掲の3入力の真理値表の例では、
(x, y, z) = (0, 1, 0), (1, 0, 0), (1, 1, 0)で、f(x, y, z) = 1
なので、
xyz, xyz, xyz
• よって以下のように完成
f(x, y, z) = xyz + xyz + xyz
• つまり、すべてのブール関数は必ずAND, OR, NOT
のみで記述できることを意味する
ブール式を簡単にする
• 前スライドで得られたブール式を例に考える
(5)分配則(の逆)
– 以下のように簡単にできる
f(x, y, z) = xyz + xyz + xyz = (xy + xy + xy)z
= (xy + x(y + y))z = (xy + x)z = (x+x)(x+y) z = (x + y)z
(5)分配則
(3)補元 (B · C)+A =
(A+B) · (A+C)

別解)
= (xy + xy + xy + xy)z = (x(y+y) + y(x+x))z = (x + y)z
(10)べき等
A+A =A
宿題:自分でやってみよう
• 3入力の真理値表をランダムに自作し、前述の
方法で対応するブール関数のブール式を記述
しなさい
– ランダムに表を作っても正準表現で必ず式化でき
ることを理解しよう

• 可能であれば得られたブール式を簡単にしな
さい
2入力のブール関数
• 2入力のブール関数はすべての基本であり、下にその真
理値表を示している
– 2入力のパターンは以下のように4パターンしかない
• この4パターンの入力に対して出力(下の?の部分)は24と
おり、すなわち16通りありえる
– ?は0か1であり、それが4箇所あるので
• つまり、2入力のブール関数は16種類しか存在しない
– そのうちの2つがANDとORである
• そのどれもが重要なのでそれぞれを見てみよう
入力 x 入力 y 出力f(x, y)
0 0 ?
0 1 ?
1 0 ?
1 1 ?
入力

2入力のブール関数
出力

ブール関数 x の入力値 0 0 1 1
y の入力値 0 1 0 1
• 右の表に2入力のブール
常に0 0 0 0 0 0
関数のすべての組合せ
(16種類)を示す AND
x AND NOT y
xy
xy
0
0
0
0
0
1
1
0
– 真理値表とは見方が異 x x 0 0 1 1
るので注意
NOT x AND y xy 0 1 0 0
– 1行が1関数である y y 0 1 0 1
– 例として、常に0、常に1、 XOR xy + xy 0 1 1 0
ANDの3つの関数のみを OR x+y 0 1 1 1
記載している
NOR x+y 1 0 0 0
x = y? xy + xy 1 0 0 1
• 中列の残りの空欄に右 NOT y y 1 0 1 0
列のようなパターンを結 If y then x x+y 1 0 1 1
果とするブール式をx, y, NOT x x 1 1 0 0
AND, OR, NOT を用いて If x then y x+y 1 1 0 1
記述してみよう NAND xy 1 1 1 0
– 正準表現から始める 常に1 1 1 1 1 1
2入力のブール関数
ブール関数 x の入力値 0 0 1 1
• この表の読み方は、 y の入力値 0 1 0 1

– (x, y)が(1, 0)のとき 常に0 0 0 0 0 0


AND xy 0 0 0 1
– xyの結果は x AND NOT y xy 0 0 1 0
– 0となると読む x x 0 0 1 1

• この表は、 NOT x AND y


y
xy
y
0
0
1
1
0
0
0
1
– あらゆる(x, y)の組合せ XOR xy + xy 0 1 1 0
に対して OR x+y 0 1 1 1

– あらゆる結果のパター NOR x+y 1 0 0 0

ンを右列に列挙し x = y? xy + xy 1 0 0 1
NOT y y 1 0 1 0
– その結果を出すブール If y then x x+y 1 0 1 1
式を中列に記す NOT x x 1 1 0 0
– 左列はわかりやすさの If x then y x+y 1 1 0 1
ため右列のブール値 NAND xy 1 1 1 0
パターンの意味を示す 常に1 1 1 1 1 1
2入力のブール関数
• 左列で、以下は中列と同じ ブール関数 x の入力値 0 0 1 1
y の入力値 0 1 0 1
– 常に0, 常に1, x, y, AND, OR,
常に0 0 0 0 0 0
NOT x, NOT y, x AND NOT y,
AND xy 0 0 0 1
NOT x AND y
x AND NOT y xy 0 0 1 0
• 以下が初出 XOR,NOR,NANDは覚えること
x x 0 0 1 1
– XORはeXclusiveなOR NOT x AND y xy 0 1 0 0

• 排他的な論理和 y y 0 1 0 1

• ORと比べるとここのみ違う XOR xy + xy 0 1 1 0
OR x+y 0 1 1 1
– NORはORの結果の否定
NOR x+y 1 0 0 0
– NANDはANDの結果の否定 x = y? xy + xy 1 0 0 1
– x=y?はxとyが等しいとき1 NOT y y 1 0 1 0
– If x then yはx⇒y(xならばy)を意 If y then x x+y 1 0 1 1
味し(含意という)、 NOT x x 1 1 0 0
xが真なのにyが偽のときのみ偽 If x then y x+y 1 1 0 1
(つまりこの含意が偽) NAND xy 1 1 1 0
常に1 1 1 1 1 1
2入力のブール関数
ブール関数 x の入力値 0 0 1 1

• 2入力のブール関数は 常に0
y の入力値
0
0
0
1
0
0
0
1
0
すべての基本であり、 AND xy 0 0 0 1
右に示すとおりそのす x AND NOT y xy 0 0 1 0
べてをAND, OR, NOT x x 0 0 1 1
により記述できる NOT x AND y xy 0 1 0 0
y y 0 1 0 1
XOR xy+xy 0 1 1 0
しかし、実は… OR x+y 0 1 1 1
• NAND(もしくはNOR)の NOR x+y 1 0 0 0
みの組合せで、すべて x = y? xy + x y 1 0 0 1
を記述できる NOT y y 1 0 1 0

– 例えばORは以下のと If y then x x+y 1 0 1 1

おり NOT x x 1 1 0 0
(x NAND x) NAND (y NAND y) If x then y x+y 1 1 0 1
NAND xy 1 1 1 0
常に1 1 1 1 1 1
問題:NANDだけで表してみよう
• NOT をNANDのみを用いたブール式で記述し
なさい

• AND をNANDのみを用いたブール式で記述
しなさい

• XOR をNANDのみを用いたブール式で記述し
なさい
NOT を NAND のみを用いたブール式
で記述しなさい
• そもそも、NANDとは何か?
– NANDは NOT AND、つまり
– x NAND y = NOT (x AND y) … (1)
• NOTが見つかった!
• x AND yがxだったらいいのに
– x AND x = xなので式(1)のyをxにしてみる
– x NAND x = NOT (x AND x) = NOT x
• よって 入力 x 入力 y x NAND y
– xの否定(NOT x)を得るには 0 0 1
– x NAND x とすればよい 0 1 1
1 0 1
1 1 0
NOT ができたので前述の OR を
NANDのみで記述しよう!
まずは二重否定を
• x OR y = NOT (NOT (x OR y)) 適用

もう一つの定石が
ド・モルガンの法則
• = NOT ((NOT x) AND (NOT y)) A+B=A · B

• = NOT ((NOT x) AND (NOT y))


NANDが見つかる
• = (NOT x) NAND (NOT y)
NOTを消すと
• = (x NAND x) NAND (y NAND y)
完成!
AND をNANDのみを用いたブール式
で記述しなさい
AND をNANDのみを用いたブール式
で記述しなさい
• x AND y = NOT (NOT (x AND y))
– 二重否定は定石
• = NOT (NOT (x AND y))
– 否定を増やすとNANDが見つかる
• = NOT (x NAND y)
– NOTを消せば完了
• = (x NAND y) NAND (x NAND y)
XOR をNANDのみを用いたブール式
で記述しなさい
XOR をNANDのみを用いたブール式
で記述しなさい
• x XOR y = xy + xy まずは二重否定を適
用してNANDを探す

もう一つの定石が
• = xy + xy ド・モルガンの法則
A+B=A · B

• = xy ・ xy = (x・y) ・ (x・y) 2箇所でNAND


が見つかる
もう一つNAND
• = (x NAND y)・(x NAND y) が見つかる

• = (x NAND y) NAND (x NAND y) 2つのNOTを


消して完成!

• = (x NAND (y NAND y)) NAND ((x NAND x) NAND y)


– 5つのNAND回路が必要だが4つで構成してさらに最適化できる
• 回路が減れば、高速化し、製造コストも下げられる!
– 是非、後期開講の「論理回路」で勉強してください!
論理ゲート
• ブール代数を回路として実現したものを論理回路とい

• 論理回路を設計するための基本となる部品を「論理
ゲート」という
• 論理ゲートはどんな技術によって実現されてもよい
– 電気でも磁気でも光もバイオでも気圧でも量子でも
– 「正しく振舞いさえすれば」何でも構わない
• AND, OR, NOTの論理ゲートは以下のように記述する
a a
AND out OR out in NOT out
b b

• コンピュータ設計者は論理ゲートが(物理学者やエン
ジニアによって)実現されているとして、その後の設計
のみを考えるだけでよくなった
回路のパッケージ化
• 希望の回路を与えられた部品から作る
– 希望は回路はどのように動いてほしいか?
• これを「インタフェース」という
– どのように与えられた部品で作るか?
• これを「実装」という

a
AND
a b
b AND out
c AND out
c

ゲートのインタフェース ゲートの実装
練習問題
• XORのゲートをAND, OR, NOTのゲートのみか
ら作成せよ
XORゲートのインタフェース XORゲートの実装

a
XOR out
b
a
? out
b
a b out
0 0 0
0 1 1
ヒント:真理値
1 0 1
表があったら正
1 1 0 準表現を使う
XORゲートの実装例
• a XOR b = a・b + a・b
= (a AND (NOT b)) OR ((NOT a) AND b)

a
AND
NOT
OR out
b
AND
NOT
HDL(ハードウェア記述言語)
• 部品ゲートのつながりを記述する言語
• これを用いて回路設計を実施する
• 記述された回路設計を入力として動作するソ
フトウェア(回路シミュレータ)を用いて
– 設計の正確性 (希望どおりの結果がでるか)
– 設計の効率 (処理速度、回路数/製造コスト、消
費エネルギーコスト、熱の発生など)
を事前に徹底的に検証する
まとめ
• ブール代数では2値のブール関数を扱う
– 真理値表とブール式を正準表現で変換
• ブール式(AND, OR, NOT)はNAND(もしくは
NOR)だけで表せる
• ブール式に相当する論理ゲートを実装できれ
ば回路設計のみを考えればよい
• ハードウェア記述言語による回路設計

You might also like