Professional Documents
Culture Documents
ブール代数と論理ゲート
ハードウェア記述言語(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 (次ページ)
正準表現/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? 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
おり 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
もう一つの定石が
• = xy + xy ド・モルガンの法則
A+B=A · 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)だけで表せる
• ブール式に相当する論理ゲートを実装できれ
ば回路設計のみを考えればよい
• ハードウェア記述言語による回路設計