計算機学 - 東北大学大学院工学研究科...

Preview:

Citation preview

1

計算機学計算機学伊藤彰則

aito@spcom.ecei.tohoku.ac.jp

@akinori_ito

2

このスライドは以下のURLからダウンロード可能です

http://www.spcom.ecei.tohoku.ac.jp/~aito/comp/

3

参考書の紹介

● 計算機学入門 デジタル世界の原理を学ぶ阿曽弘具著 共立出版 ¥2,900以前教科書だった本の改訂版。講義の内容と一致しており、説明は詳しい。

● CPUの創りかた 渡波郁著 毎日コミュニケーションズ¥2,940個人的おすすめだが講義の前半部分しかカバーしていない。

● ソフトウェアの20世紀 長谷川裕行著翔泳社 ¥2,400コンピュータとソフトウェアの歴史。講義と直接の関連はないが面白い。

● コンピュータはなぜ動くのか 矢沢久雄著 日経BP社¥2400一般向け。内容は浅く広く。わかりやすい。

4

講義の流れ(1)

● イントロダクション(今回)– コンピュータの歴史

– 2進法・8進法・16進法● ハードウェアの原理

– 論理関数と論理回路– 論理関数の簡単化

● 論理関数の数学– ブール代数と代数系– 論理関数の様々な性質

5

講義の流れ(2)

● ソフトウェアの原理– CPUと機械語– アセンブリ言語と高級言語– データ構造とその操作– 計算のモデルと計算量

● 試験

6

計算機(コンピュータ)とは何か

● 誰が何のために作ったのか。● 計算機とは(原理的に)何なのか。● 現在どのように使われているのか。● それはどのように実現されているのか。

7

誰が:計算機をめぐる年表

● 17世紀– ブレース・パスカル

(1623-1662)● 考える葦の人● 世界で初めて「計算機」

(calculator)を試作

名前は「パスカリーヌ」♥

8

誰が:計算機をめぐる年表

● 17世紀– ゴットフリート・ウィルヘルム・フォン・ライプニッツ(1646-1716)

● 2進法の発明者● 「自動的に真なる概念を導くための計算方法」を研究

● 計算機も試作● ニュートンとは永遠のライバル

9

誰が:計算機をめぐる年表

● 19世紀– チャールズ・バッベジ

(1791-1871)● 2つの自動計算機械を設計

– 階差機関(Difference Engine)– 解析機関(Analytical Engine)

● でも完成しなかった…

10

Babbageの解析機関

● 世界初の機械式計算機– 加減乗除算– あらかじめ決められた順序で計算する

– 結果の印字

11

誰が:計算機をめぐる年表

● 世界初のプログラマ(Translator)– エイダ・オーガスタ・ラブレス公爵夫人(1815-1852)

● 詩人バイロンの娘● ド・モルガンに師事● チャールズ・バッベジを支援した● 不遇な晩年

12

誰が:計算機をめぐる年表

● 20世紀– アラン・チューリング(1912-1954)

● 自動機械による証明についての理論的考察● 実際に計算をする「機械」を想定(チューリン

グマシン)● 計算の可能性についての理論を構築● 暗号解読器「コロッサス」の開発に参加● 不遇な晩年

13

誰が:計算機をめぐる年表

● 20世紀– エッカート&モークリー

(UPENN)● 世界初の(実用化された)電子式コンピュータENIACを開発

● 弾道計算に特化した計算機

モークリー氏

14

これがENIACだ

● 真空管17468本● コンデンサ10000個

● スイッチ6000個● ケーブルの接続で実行を制御

15

何のために?

● 正しい推論のため(ライプニッツ)● 数表を作るため(バッベジ)● 「計算」とは何かを考えるため(チューリング)● 弾道計算のため(エッカート&モークリー)

16

原理的に何なのか?

● 計算モデル:原理的に何が計算できるかを考えるための数学モデル– コンピュータを抽象化したもの– 速度やメモリ容量などの制約を考えない

● さまざまな計算モデル– チューリングマシン(TM)– ランダムアクセスマシン(RAM)– 帰納的関数

どれも「計算可能」なものは同じ。(すなわち、どれか1つで別な1つのエミュレータを書くことができる)

17

チューリングマシン

● 仮想的な計算機械 by Alan Turing

0 ; BA = 1 2 ; F= A +

状態

ヘッド

テープ

18

ランダムアクセスマシン

● 現在のコンピュータに近い– 計算部とメモリがある– メモリは必要に応じていくらでも大きい– どのメモリにアクセス(読み書き)するときにもかかる時

間は同じ(ランダムアクセス)

無限に大きいメモリ

計算部

12312番目のメモリの値と13293番目のメモリの値を足す

基本的な計算はどれも一定時間で計算される

19

現在どのように使われているのか?

● 汎用の何でも機械として。– 電話。– ごはんの炊け具合を監視する。– お部屋の温度をいい具合に調節する。– 大きいお友達のゲーム。– テレビを録画する。あるいはテレビそのもの。

20

どのようにして実現されるのか?

コンピュータの実現のための階層

ソフトウェア アプリケーション MS-Wordとか

プログラミング言語 C, C++, Java, Ruby, Python, ...

OS Windows, MacOS, iOS, Linux, Android, ...

ハードウェア CPU IA32, x86-64, ARM, MIPS, PowerPC, PIC, ...

論理回路 機能ブロック レジスタ、ALU、メモリ、...

論理ゲート AND, OR, NOT, ...

電子回路 トランジスタ、真空管、リレー、...

階層間は(ほぼ)独立。論理回路の階層には、(現在のところ)alternativeはない。

21

この講義では何をするのか

1.計算機の動作原理を理解するための論理回路の理解(主に組み合わせ論理回路)。(進んだ内容は「ディジタルコンピューティング」の範疇)

2.それに伴う論理演算・論理関数の理解。

3.計算機のネイティブな動作(機械語)の理解。

4.抽象的な計算機としての計算モデルの理解と、計算量についての初歩的な理解。

22

あらゆる計算が1と0で実現できる

● 10進法の数字⇔2進法の数字(1と0)

● 文字⇔数字● 文字列⇔数字列=数字● 画像⇔数字● 音声⇔数字● その他のデータ⇔数字

計算機が行うすべての処理は1と0の列に対する処理である。

23

10進法、2進法、8進法、16進法

10進 2進 8進 16進 10進 2進 8進 16進

0 0 0 0 8 1000 10 8

1 1 1 1 9 1001 11 9

2 10 2 2 10 1010 12 A

3 11 3 3 11 1011 13 B

4 100 4 4 12 1100 14 C

5 101 5 5 13 1101 15 D

6 110 6 6 14 1110 16 E

7 111 7 7 15 1111 17 F

24

10進・2進・16進数の変換

● 例題

– 108(10)を2進法で表せ。

● 解答– ある数xを2進数で表したとき、それが偶数ならば下1桁は0、奇数ならば1になる。したがって2で割った余りを計算すれば、2進数の最下桁が求まる。以下同様。

) 2 108 ...02 54 ...02 27 ...12 13 ...12 6 ...02 3 ...1 1

) ) ) ) )

1101100(2)

25

10進・2進・16進数の変換

● 例題

– 110010(2)を10進法で表せ。

● 解答– 2進数のn桁目だけが1である数は2n-1である。したがって・・・

110010= 10 + 10000 +100000

21 = 224 = 1625 = 32

2+16+32=50(10)

26

10進・2進・16進数の変換

● 例題

– 10110110010(2)を16進法で表せ。

● 解答– 16進数の1桁は2進数の4桁にそのまま対応する。ただし下から割り当てていく。

10110110010

2B5 5B2(16)

ちなみに8進数1桁は2進数3桁に対応する。

27

演習

● 次の2進数を8進数と16進数で表せ。

  0010 0100 0010 0110

● 次の10進数を2進数と16進数で表せ。

   123 3442

28

2進数の演算

● 加算 0+0=0, 0+1=1+0=1, 1+1=10

● 減算 0-0=0, 0-1=-1, 1-0=1, 1-1=0

● 乗算 0×0=0×1=1×0=0, 1×1=1, 1×10=10×1=10, 10×10=100, 10×11=11×10=110,...

これらは「算術演算」と呼ばれる

29

2進数の演算

● どんなデータも0と1で表せる→すべての計算は01の列に対する関数で表現できる

● 例

f (0101. ..)=001011. ...

f (00)=0f (01)=1f (10)=1f (11)=1

入力の桁数が有限ならば入力のパターンも有限

すべての入力に対して出力を決めれば関数が定義できる

30

基本的な論理関数(論理演算)

● AND演算(論理積)

● OR演算(論理和)

0⋅0=00⋅1=01⋅0=01⋅1=1

x⋅y , x y , x∧ y

2つの引数の両方が1の場合だけ1

x+ y , x∨ y0+ 0=00+ 1=11+ 0=11+ 1=1

2つの引数の両方が0の場合だけ0

31

基本的な論理関数(論理演算)

● NOT演算(否定)

● XOR演算(排他的論理和)

0=11=0

x , ¬x

x⊕ y , x∨ y0⊕0=00⊕1=11⊕0=11⊕1=0

~

2つの引数が異なる場合だけ1実はAND,OR,NOTで作れる

x⊕ y= x y+ x y

32

組み合わせて作れる論理演算

● NAND演算

● NOR演算

x y

x+ y0+ 0=10+ 1=01+ 0=01+ 1=0

0⋅0=10⋅1=11⋅0=11⋅1=0

33

論理演算の基本的性質

● 交換則(交換律)

● 結合則(結合律)

● 分配則(分配律)

● ド・モルガン則(ド・モルガン律)

x⋅y= y⋅x x+ y= y+x

x⋅( y⋅z)=(x⋅y)⋅zx+ ( y+ z)=(x+ y)+ z

x⋅( y+ z )=(x⋅y)+ ( x⋅z)x+ ( y⋅z)=( x+ y)⋅(x+ z )

x⋅y=x+ yx+ y=x⋅y

34

論理演算の記述の優先順位

● 通常はAND演算をOR演算より優先して書く(算術演算の記述法と同じ)

● 紛らわしい場合はカッコを使う

a b+ c d=(a b)+ (c d )

35

論理関数(論理演算)は何種類あるか

● 論理関数の引数の数を固定する→入力、出力ともに有限のパターンしかないので、  論理関数は有限個しかない

● 例:1変数論理関数は4種類

f 0(0)=0f 0(1)=0

f 0(x)=0

f 1(0)=0f 1(1)=1

f 1(x)=x

f 2(0)=1f 2(1)=0

f 2(x)= x

f 3(0)=1f 3(1)=1

f 3( x)=1

36

論理関数(論理演算)は何種類あるか

● n変数関数の場合、入力のパターンは2n通り

● それぞれに対して、出力のパターンは0か1

入出力のパターン数= 22n

37

真理値表

● すべての入力パターンに対して出力を定義すれば論理関数が定義できる→表にするとわかりやすい

真理値表 (truth table)

x y x+y0 0 00 1 11 0 11 1 1

x y x·y0 0 00 1 01 0 01 1 1

x x0 11 0

AND OR NOT

38

真理値表

● 注意事項– 引数(入力)のパターンは、その並びを2進数と見たときに「だんだん増えていく」順番に記述するのが普通

– 対応関係が同じでも、思いついた順番に並べるのはよくない!

x y x·y0 0 01 1 11 0 00 1 0

x y x·y0 0 00 1 01 0 01 1 1

GOOD

BAD

39

真理値表による証明

● 真理値表によってド・モルガン則を確かめてみよう。

x y x y x·y x+y x·y x+y x·y x+y0 0 1 1 0 0 1 1 1 10 1 1 0 0 1 1 0 0 11 0 0 1 0 1 1 0 0 11 1 0 0 1 1 0 0 0 0

40

基本論理演算と論理関数

● AND, OR, NOT演算の組み合わせだけでどんな論理関数でも作ることができる。

● 証明:引数の数に関する数学的帰納法– 引数1つの時

● 引数1つの論理関数は前述の通り4種類しかない。

f 0( x)=0=x⋅xf 1(x)=xf 2( x)= x

f 3( x)=1=x+ x

成立

41

基本論理演算と論理関数

– 引数n個のとき、引数n-1個では成立を仮定● 任意のn変数論理関数

– 次のn-1変数論理関数を考える

– ここで次の式を考える:「x=0ならa、x=1ならb」

f (x1 , x2 ,… , xn)

g 0( x1 , x2 ,… , xn−1)= f (x1 ,… , xn−1 ,0)g1( x1 , x2 ,… , xn−1)= f ( x1 ,… , xn−1 ,1)

x a+ x b

x a b xa xb xa+ab

1 0 0 0 0 0

1 0 1 0 1 1

1 1 0 0 0 0

1 1 1 0 1 1

x a b xa xb xa+ab

0 0 0 0 0 0

0 0 1 0 0 0

0 1 0 1 0 1

0 1 1 1 0 1

42

基本論理演算と論理関数

● xnの値によって関数を切り替える

– xn=0 ⇒– xn=1 ⇒

● 前ページの考察により、

● 仮定よりg0とg

1はAND,OR,NOTのみで表せるの

で、f もAND,OR,NOTのみで表せる。

f ( x1 ,… , xn−1 , xn)=g0( x1 ,… , xn−1)

f ( x1 ,… , xn−1 , xn)=g1( x1 ,… , xn−1)

f ( x1 ,… , xn−1 , xn)=xn g 0( x1 ,… , xn−1)+xn g1( x1 ,… , xn−1)

43

演習

● 分配律が成立していることを真理値表で確かめよ。

x⋅( y+ z)=( x⋅y)+ ( x⋅z )x+ ( y⋅z )=(x+ y)⋅(x+ z)

x y z xy xz y+z x(y+z) xy+xz

0 0 0 0 0 0 0 0

0 0 1 0 0 1 0 0

44

論理演算と論理素子● ある論理演算を実現するための電子回路(論理ゲート)

ANDゲート

ORゲート

XORゲート

NOTゲート

MIL記号

45

論理演算と論理素子● ゲートの端にある○が「反転」を表す

NANDゲート

NORゲート

NOTゲート

46

等価な論理ゲート● ド・モルガン律などによる

ABB

CD

AB+CD =

47

NANDゲートは万能

● NANDゲートですべてのゲートの代用ができる

x⋅x= x

x⋅y=x⋅y

x⋅y=x+ y

48

NANDゲートの実現例

● Diode-Transistor Logic (DTL)– 簡略化した回路図(実際はもう少し複雑)

– DTLは遅くて消費電力が大きいので、実際にはあまり使われない

V+V+

V+V+

V+V+

H

L

L

H

IN1 IN2 OUT

L L H

L H H

H L H

H H L

49

半導体でなくても論理ゲートは作れる

● リレーで作る論理ゲート

コイルに電流を流すと隣にあるスイッチがON/OFF

S1 S2

S1とS2の両方がONのときだけOFFになる

50

論理演算と論理回路

● 論理式⇔論理回路● 例 Z=ABBCCA

ABC

Z

51

演習

● 次の論理式に基づく論理回路を描け。

S=X⋅YX⋅YC=X⋅Y

?X

Y

C

S

52

半加算器

● さっきの論理式の真理値表

X Y C S0 0 0 00 1 0 11 0 0 11 1 1 0

X, Yを1桁の2進数、CSを2桁の2進数と見ると、CSはXとYの算術加算になっている

⇒半加算器 (Half Adder)

C: Carry (桁上げ)S: Sum (和)

53

桁の多い加算

● 2桁以上の2進数の加算をするにはどうする?– 桁上げを考慮⇒3つの2進数の和を計算しなければならない

– 3つの1桁の2進数 a,b,cを加算→2桁の2進数CS

a b c C S

0 0 0 0 0

0 0 1 0 1

0 1 0 0 1

0 1 1 1 0

1 0 0 0 1

1 0 1 1 0

1 1 0 1 0

1 1 1 1 1

54

全加算器 (full adder)● 半加算器の組み合わせで作れる

55

発展

● 前ページの回路の入出力関係がその前の真理値表と同じになっていることを確かめよう

● 2ページ前の真理値表を直接表現する論理式を考えてみよう

C= f (a , b , c)S=g (a ,b , c)

56

桁の多い加算器

● 筆算と同じ要領(下から順に桁上げ) 1111+1111-----100001 1 1 1

57

論理関数の設計

● これまでは論理式から論理回路を描いていた● 本当にやりたいこと

– 要求仕様(欲しい入出力関係)を実現する論理回路● やるべきこと

– 要求仕様(真理値表)→論理式(関数)→論理回路● 問題点

– どうやって真理値表を満たす論理式を作るか– 真理値表を満たす論理式は1つではない

● どういう論理式を作ればいいか

58

真理値表から論理関数へ

● 次の真理値表で表される論理式(論理関数)は?

x y z f(x,y,z)

0 0 0 0

0 0 1 0

0 1 0 1

0 1 1 0

1 0 0 0

1 0 1 1

1 1 0 1

1 1 1 0

59

真理値表から論理関数へ

● 次の真理値表で表される論理式(論理関数)は?

x y z f(x,y,z)

0 0 0 0

0 0 1 0

0 1 0 1

0 1 1 0

1 0 0 0

1 0 1 1

1 1 0 1

1 1 1 0

答えは唯一ではない

f = x y z+ x y z+ x y z

f = (x+ y+ z)( x+ y+ z)(x+ y+ z)( x+ y+ z)( x+ y+ z)

f = y z+ x y z

60

真理値表から論理関数へ

● 論理関数への変換の考え方– できるだけ機械的に変換できたほうがいい

● 真理値表から標準形論理式への変換

– できるだけ論理演算が少ないほうがいい● 論理回路として実現した時の素子数が少ない

– 低コスト、高速● 演算数が最小の論理式:最簡形論理式● 最簡形論理式の導出

– カルノー図– クワイン・マクラスキ法

61

基礎的な概念

● 基本的に積和形(論理積の論理和)で考える

● リテラル:変数または変数の否定

y z+ x y z

リテラル

y z+ x y z

リテラル

リテラル

項(積項)

62

標準形論理式

● 積和標準形(主加法標準形) Sum-of-product– リテラルの論理積の論理和– すべての項がすべての変数を含む– 同じ項は1回しか出てこない– 積和標準形の例

– 積和標準形でない例

f ( x , y , z)= x y z+ x y z+ x y z

f ( x , y , z)= y z+ x y z

f ( x , y , z)= y (x+ z)+ x y z

f ( x , y , z)= x y z+ x y z+ x y z+ x y z

63

標準形論理式

● 和積標準形(主乗法標準形) Product-of-sum– リテラルの論理和の論理積– すべての論理和がすべての変数を含む– 同じ論理和は1回しか出てこない– 和積標準形の例

– 和積標準形でない例

f ( x , y , z)=( x+ y+ z)(x+ y+ z)( x+ y+ z)

f ( x , y , z)=( x+ z)( x+ y+ z)

f ( x , y , z)=( x+ z)( x y+ z)

f ( x , y , z)=( x+ y+ z)(x+ y+ z)(x+ y+ z)

64

2つの標準形の関係

● どんな論理式でも、積和標準形と和積標準形の両表で表現できる。– 証明(変数の数による数学的帰納法)

● 1変数の場合は自明● k変数の場合に成立を仮定。

任意のk+1変数論理関数を考える

次のk変数関数を考える

f (x1 , x2 ,… , xk+ 1)

g0(x1 ,… , xk )= f ( x1 , x2 ,… , xk , 0)g1( x1 ,… , xk)= f (x1 , x2 ,… , xk ,1)

65

2つの標準形の関係

● gをそれぞれ積和と和積標準形で表した論理式

● 以前と同じ議論により、

g0( x1 ,… , xk)→ gSOP0 ( x1 ,… , xk ) , g POS

0 (x1 ,… , xk)g1(x1 ,… , xk)→ gSOP

1 ( x1 ,… , xk) , g POS1 (x1 ,… , xk )

f (x1 , x2 ,… , xk , xk+ 1)=xk+ 1 g0( x1 ,… , xk)+ x k+ 1 g1(x1 ,… , xk)=xk+ 1 g SOP

0 (x1 ,… , xk )+ xk+ 1 g SOP1 ( x1 ,… , xk)

これを分配律によって展開すれば、fも積和標準形で表せる。

66

2つの標準形の関係

● 和積標準形の場合、まず次の関係を考えるx=0ならa、x=1ならbとなる論理式

● したがって

(x+ a)( x+ b)x=0 →( x+ a)( x+ b)=(0+ a)(1+ b)=a⋅1=ax=1 →(x+ a)( x+ b)=(1+ a)(0+ b)=1⋅b=b

f (x1 , x2 ,… , xk , x k+ 1)=(xk+ 1+ g0(x1 ,… , x k))(xk+ 1+ g 1(x1 ,… , xk ))=(xk+ 1+ gPOS

0 (x1 ,… , x k))(xk+ 1+ gPOS1 (x1 ,… , x k))

これを分配律によって展開すれば、fも和積標準形で表せる。

67

標準形論理式と論理回路設計

● ある標準形は、1つの仕様(真理値表)に対して基本的に1つしか存在しない

真理値表 一対一標準形論理式

一対一 論理回路

x y f(x,y)

0 0 0

0 1 1

1 0 1

1 1 0

x y+ x y

68

真理値表から積和標準形へ

x y x・y x・y x・y x・y

0 0 1 0 0 0

0 1 0 1 0 0

1 0 0 0 1 0

1 1 0 0 0 1

● 最小項:すべての変数のリテラルを含む積項● ある入力の組み合わせの時だけ1になり、それ以外の組み合わせでは0になる。

x y f(x,y)

0 0 0

0 1 1

1 0 1

1 1 0

実現したい真理値表のうち、1になる組み合わせの最小項だけを OR でつなぐと積和標準形になる。

f (x , y)= x y+ x y

69

真理値表から和積標準形へ

x y x+y x+y x+y x+y

0 0 0 1 1 1

0 1 1 0 1 1

1 0 1 1 0 1

1 1 1 1 1 0

● 最大項:すべての変数のリテラルを含む論理和● ある入力の組み合わせの時だけ0になり、それ以外の組み合わせでは1になる。

x y f(x,y)

0 0 0

0 1 1

1 0 1

1 1 0

実現したい真理値表のうち、0になる組み合わせの最大項だけを AND でつなぐと和積標準形になる。

f (x , y)=(x+ y)( x+ y)

70

演習

● 次の真理値表による論理関数を積和標準形と和積標準形で表せ。

x y z f(x,y,z)0 0 0 0

0 0 1 0

0 1 0 1

0 1 1 0

1 0 0 1

1 0 1 0

1 1 0 1

1 1 1 1

71

論理式の簡単化

● 標準形で表現した論理式は一般に冗長

x y f(x,y)

0 0 0

0 1 1

1 0 1

1 1 1

x y+ x y+ x y

x

y

x y+ x y+ x y= x y+ x y+ x y+ x y=( x+ x) y+ x ( y+ y)=1⋅y+ x⋅1=x+ y

x

y

同じ

どうすれば同じ関数を表現するときの論理演算の数を最小にできるのか?

72

基礎的な概念

● 論理関数の順序– 値の順序:0≤0, 0≤1, 1≤1– 論理関数の順序:f(x),g(x)について、

∀x(f(x)≤g(x))↔f≤g– 例:確かめてみよう

● xy ≤ x ≤ x+y– (真理値表を書き、左辺が1のところが右辺でも必ず1になっているな

らば≤が成立)

73

基礎的な概念

● 系– 論理関数a,b,c,dについて

● a ≤ c, b ≤ d ならば a+b ≤ c+d● a ≤ c, a ≤ d ならば a ≤ c+d● a ≤ c, b ≤ c ならば a+b ≤ c

74

基礎的な概念

● 論理式 f の主項とは

– リテラルの論理積 t のうち、次の条件を満たすもの● t ≤ f であり、● tからそれ以上リテラルを取り除くと t ≤ f でなくなる

● 例 x y z f x・y・z x・y x

0 0 0 0 0 0 0

0 0 1 0 0 0 0

0 1 0 0 0 0 0

0 1 1 1 0 0 0

1 0 0 1 1 1 1

1 0 1 1 0 1 1

1 1 0 0 0 0 1

1 1 1 0 0 0 1

f ≤x y zf ≤x yf ≤x

これが主項

75

主項と論理式

● ある論理式 f の主項を全部列挙し、その論理和をとれば、それは f と一致する。– ただし一般には冗長

x y z f x・y x・z y・z

0 0 0 0 0 0 0

0 0 1 0 0 0 0

0 1 0 0 0 0 0

0 1 1 1 0 0 1

1 0 0 1 0 1 0

1 0 1 0 0 0 0

1 1 0 1 1 1 0

1 1 1 1 1 0 1

f =x y+ x z+ y z=x z+ y z

76

必須主項

● ある論理式を構成するために必ず必要な主項

x y z f x・y x・z y・z

0 0 0 0 0 0 0

0 0 1 0 0 0 0

0 1 0 0 0 0 0

0 1 1 1 0 0 1

1 0 0 1 0 1 0

1 0 1 0 0 0 0

1 1 0 1 1 1 0

1 1 1 1 1 0 1

f =x y+ x z+ y z=x z+ y z

必須主項

77

最簡形論理式とは

● 次の条件を満たす論理式:– ある論理関数を実現する論理式のうち、– 積項の数が最小で、– かつ式全体のリテラルの数が最小のもの

● 論理式を簡単化するときの目標● 論理関数の仕様(真理値表)に対して最簡形が一

意に決まるとは限らない

78

最簡形を求めるには

● 次のような手順を踏む

1.与えられた論理関数の主項をすべて求める

2. 求まった主項のなかの必須主項を調べる

3.すべての必須主項と、それ以外の主項のうちできるだけリテラルの少ない主項を組み合わせて元の論理関数を表現する

● これらの求め方でいくつかの方法がある● カルノー図● クワイン・マクラスキ―法

79

最簡形を求める方法

● カルノー図 (Karnaugh map)– 真理値表に似た表と四角形でできた図を使う– 人間向き

– 変数の数はふつう4個ぐらいまで

● クワイン・マクラスキ―法 (Quine-McClusky alg.)– 文字列処理– 計算機向き(人間にはつらい)– 変数の数は多くてもよいが、変数が多いと時間がかかる

80

カルノー図

● 2次元の真理値表をもとに主項を発見する

● 3変数(x,y,z)、4変数(x,y,z,w)の表の例

– 0,1の並びに注意

xy\zw 00 01 11 10

00

01

11

10

xy\z 0 1

00

01

11

10

81

カルノー図

● カルノー図では積項は長方形になる

xy\zw 00 01 11 10

00

01

11

10

z y

x

82

カルノー図

● カルノー図は表の上下左右がつながっている

xy\zw 00 01 11 10

00

01

11

10

y

w

83

カルノー図

● リテラルの多い積項の例

xy\zw 00 01 11 10

00

01

11

10

x・z

z・w

y・z・w

x・y・z・w

x・y・w

84

カルノー図による論理式の簡単化

●カルノー図の表を描き、目標となる論理式が1となるマス目に“1”を記入●“1”を囲む、できるだけ大きい長方形(=主項)を探す

● 辺の長さは2のn乗のみ● 上下左右が連続していることを忘れずに

●すべての“1”をカバーする、できるだけ少ない数の、できるだけ大きい長方形の組み合わせを探す●その長方形の組み合わせに対応する論理式が最簡形になっている

85

カルノー図の例

カルノー図の表を描き、目標となる論理式が1となるマス目に“1”を記入

xy\zw 00 01 11 10

00 1 1 1

01 1 1

11 1 1

10 1 1

86

カルノー図の例

“1”を囲む、できるだけ大きい長方形(=主項)を探す– 辺の長さは2のn乗のみ

– 上下左右が連続していることを忘れずに

xy\zw 00 01 11 10

00 1 1 1

01 1 1

11 1 1

10 1 1

87

カルノー図の例

すべての“1”をカバーする、できるだけ少ない数の、できるだけ大きい長方形の組み合わせを探す

xy\zw 00 01 11 10

00 1 1 1

01 1 1

11 1 1

10 1 1

ある“1”を1つの四角だけが囲んでいるなら、その四角は必須主項

この2つは必須ではない→大きいほうを選ぶ

88

カルノー図の例

その長方形の組み合わせに対応する論理式が最簡形になっている

xy\zw 00 01 11 10

00 1 1 1

01 1 1

11 1 1

10 1 1

x・y・w y・w x・w

z・w

使わない

x w+ y w+ z w+ x y w

89

演習

● 次のカルノー図を使って最簡形論理式を求めよ。

xy\z 0 1

00 1

01 1

11 1 1

10 1

xy\zw 00 01 11 10

00

01 1 1 1

11 1 1 1

10 1 1 1

90

部分論理関数とカルノー図

● 入力のすべてのパターンを考えなくてよい場合– 例:7セグメントLEDに0~4の数字を表示

0

1

2

3

4

56LED

エンコーダ

x1

x2

x3

b0

b6

000 001 010 011 100x1x

2x

3=

91

部分論理関数とカルノー図

● b1~b6の真理値表

– 下3行の入力は想定しなくてよい→部分論理関数

0

1

2

3

4

56

x1 x2 x3 b0 b1 b2 b3 b4 b5 b6

0 0 0 1 1 1 1 1 1 0

0 0 1 0 1 1 0 0 0 0

0 1 0 1 1 0 1 1 0 1

0 1 1 1 1 1 1 0 0 1

1 0 0 0 1 1 0 0 1 1

1 0 1 N/A

1 1 0 N/A

1 1 1 N/A

92

部分論理関数とカルノー図

● b0の論理関数の設計

x1x2\x3 0 1

0 0 1

0 1 1 1

1 1

1 0

x1x2\x3 0 1

0 0 1

0 1 1 1

1 1 * *

1 0 *

想定外の入力に対して0を出力

想定外の入力に対して何を出力してもよい

x1 x3+ x1 x2 x1 x3+ x2

93

部分論理関数とカルノー図

● 演習:b6に対応する論理関数を設計しよう。

x1 x2 x3 b6

0 0 0 0

0 0 1 0

0 1 0 1

0 1 1 1

1 0 0 1

1 0 1 N/A1 1 0 N/A1 1 1 N/A

94

クワイン・マクラスキー法

● 機械的に最簡形を求める方法● 文字列処理によって主項を発見する● 手順●すべての最小項を文字列で表現する● 組み合わせ表を使って文字列をまとめていく(主項の発見)

● 主項表を作り、必須主項を発見する● 必須主項以外の主項を発見する

95

クワイン・マクラスキ―法

● 項を文字列化する例(変数 xyzw の場合)

– x・y・z・w → 1111– x・y・z・w → 0101– x・y・z → 111-– x・z・w → 1-00– x・z → 1-0-

● 0と1が1か所だけ違う文字列をまとめる

– 1111+1110=111-– 0101+0111=01-1– 00-1+01-1=0--1

x y z w+ x y z w=x y z (w+ w)=x y z

x y z w+ x y z w= x y (z+ z)w= x y w

x y w+ x y w= x ( y+ y)w= x w

96

クワイン・マクラスキー法

● 表を使った主項の発見

1.すべての最小項の組み合わせ表を作り、第0表とする。n←0とする。

2. まとめられる文字列はまとめる。まとめられなかった項に印をつける。

3. 文字列をまとめることができた場合は、それらを集めて第(n+1)表を作る。2.へ。

4. 印のついた項が主項である。

97

表を使った主項の発見g x , y , z , w= x y wx y z w y z wx y z w x y z wx z

最小項は0001 0010 0011 0111 1001 1010 1011 1100 1110 1111第0表

0010 0011 0111 1001 1010 1011 1100 1110 1111

0001 00-1 -001

0010 001- -010

0011 0-11 -011

0111 -111

1001 10-1

1010 101- 1-10

1011 1-11

1100 11-0

1110 111-

98

表を使った主項の発見第1表

001- 0-11 -001 -010 -011 10-1 101- 1-10 11-0 -111 1-11 111-

00-1 -0-1

001- -01-

0-11 --11

-001 -0-1

-010 -01-

-011 --11

10-1

101- 1-1-

1-10 1-1-

11-0

-111

1-11

99

表を使った主項の発見

第2表

-01- --11 1-1-

-0-1

-01-

--11

まとめられる組み合わせはない

発見された主項は -0-1, -01-, --11, 1-1-, 11-0

次にこの中から必須主項を探す→主項表

100

主項表

0001 0010 0011 0111 1001 1010 1011 1100 1110 1111

-0-1 x x x x

-01- x x x x

--11 x x x x

1-1- x x x x

11-0 x x

ある主項がどの最小項をカバーするか記入する

101

主項表

0001 0010 0011 0111 1001 1010 1011 1100 1110 1111

-0-1 x x x x

-01- x x x x

--11 x x x x

1-1- x x x x

11-0 x x

最小項のうち印が1個しかついてないものをチェック

102

主項表

0001 0010 0011 0111 1001 1010 1011 1100 1110 1111

-0-1 x x x x

-01- x x x x

--11 x x x x

1-1- x x x x

11-0 x x

その印がある行の主項が必須主項

-0-1, -01-, --11, 11-0 は必須主項1-1- は必須主項でない

103

主項表

0001 0010 0011 0111 1001 1010 1011 1100 1110 1111

-0-1 x x x x

-01- x x x x

--11 x x x x

1-1- x x x x

11-0 x x

必須主項がカバーする最小項をチェック

必須主項だけですべての最小項がカバーできる→必須主項だけで最簡形が構成される

g ( x , y , z ,w)= y w+ y z+ z w+x y w

104

カルノー図によるQM法の理解

xy \ zw 00 01 11 10

00 0001 0011 0010

01 0111

11 1100 1111 1110

10 1001 1011 1010

第0表

xy \ zw 00 01 11 10

00

01

11

10

第1表

00-1 -111001- 111--001 1-11-011 1-10-010 11-00-11 10-1101-

105

カルノー図によるQM法の理解

xy \ zw 00 01 11 10

00

01

11

10

第2表

xy \ zw 00 01 11 10

00

01

11

10

最適な組み合わせ

-0-1-01---111-1-

106

必須主項以外が必要な例

g ( x , y , z )= x y z+ x y z+ x y z+ x y z+ x y z001 011 110 111 100第0表 011 110 111 100

001 0-1

011 -11

110 11- 1-0

111

0-1 -11 11- 1-0第1表 -11 11- 1-0

0-1

-11

11-

107

必須主項以外が必要な例

主項表001 011 110 111 110

0-1 * *

-11 * *

11- * *

1-0 * *

必須

必須

001 011 110 111 110

0-1 * *

-11 * *

11- * *

1-0 * *

必須主項でカバーされる最小項

どちらでもよいことがわかる

108

演習

x y zx y zx y zx y zx y z を簡単化せよ。

クワイン・マクラスキー法を使って

Recommended