コンピュータによる除算teched.kyokyo-u.ac.jp/~htada/class/tyuutou/div.pdfx1 x0 x2 x3 y1 y0...

84
2007/8/7 1 コンピュータによる除算 京都教育大学 産業技術科学科 多田 知正 [email protected]

Upload: vankhuong

Post on 28-Apr-2019

217 views

Category:

Documents


0 download

TRANSCRIPT

2007/8/7 1

コンピュータによる除算

京都教育大学 産業技術科学科

多田 知正

[email protected]

2007/8/7 2

復習:掛け算の方法

筆算のまねをする

被乗数をずらしながら足していく

シフトレジスタ

加算器

を利用

2007/8/7 3

2進数の割り算

00101 0101)00011101 0000 0011 0000 0111 0101 0100 0000 1001 0101 0100

方法は10進数の 割り算と同じ

00011 1001)00011101 0000 0011 0000 0111 0000 1110 1001 1011 1001 0010

2007/8/7 4

割り算の筆算

桁をずらしながら被除数と除数を比較する

被除数≧除数なら

商(≧1)を立てて,被除数から(除数×商)を引く

被除数<除数なら

商0を立てて,引き算は行わない

これを回路で実現するにはどうするか?

2007/8/7 5

問題

被除数と除数の大きさの比較が必要

どちらが大きいかによってふるまいが異なる

どうやって調べるか?

どのようにふるまいを変えるか?

2007/8/7 6

復習:4桁の減算器

並べれば何桁でもできる

一番上は無視

HS

X1

X0

X2

X3

Y1

Y0

Y2

Y3

FS

FS

FS

D0

D1

D2

D3

B

2007/8/7 7

減算器による計算

HS

1

0

0

1

0

1

0

1

FS

FS

FS

1

0

0

0

0

1010 - 1001 0001

X

Y

D

1

0

0

引き算ができる場合

2007/8/7 8

減算器による計算

HS

1

0

0

1

0

1

1

1

FS

FS

FS

1

0

1

1

1

1010 - 1101 1101?

X

Y

D

1

0

1

1になる

引き算ができない場合

2007/8/7 9

減算器の出力

最後の桁で借りが発生した 場合に1になる

HS

X1

X0

X2

X3

Y1

Y0

Y2

Y3

FS

FS

FS

D0

D1

D2

D3

B

X(引かれる数)よりも Y(引く数)の方が大きかった

引き算に失敗した

2007/8/7 10

減算器出力の最上位の桁

減算器の出力の最上位の桁が0 引き算が成功した

引かれる数≧引く数

減算器の出力の最上位の桁が1 引き算が失敗した

引かれる数<引く数

ここを見れば,どちらの数が大きいのかがわかる

2007/8/7 11

基本方針

とりあえず被除数から除数を引いてみる

最上位の出力が0なら引き算の結果を反映させる

レジスタに記憶させる

最上位の出力が1なら引き算の結果を無視する

レジスタに記憶させない

2007/8/7 12

4桁の2進数による割り算

01100 1101)10011101 0000 10011 1101 1101 1101 0000 0000 0001 0000 0001

「5桁-4桁」の引き算が必要な 場合がある

2007/8/7 13

5桁の減算器

SUB

X4 . . . X0 Y4 . . . Y0

B D4 . . . D0

横にして簡単に書くと X1

X0

X2

X3

Y1

Y0

Y2

Y3

D0

D1

D2

D3

X4 Y4

D4

HS

FS

FS

FS

FS B

2007/8/7 14

0

除算回路

SUB

← ← ← ← ← ← ← ← ← ← ← ←

左シフトレジスタ

下4桁(D3-D0)

出力の 最上位の桁(D4) (Bは無視)

5本分

4本分

2007/8/7 15

変形左シフトレジスタ

L

D

T

Q

Q

D

T

Q

Q

T

D

T

Q

Q

D

T

Q

Q

D

T

Q

Q

D

T

Q

Q

D

T

Q

Q

T’

← ← ← ← ← ← ← ← ← ← ← ← L

T T’

sel

sel

sel

sel

sel

sel

sel

0

D

T

Q

Q

sel

2007/8/7 16

除算回路の動作例1

10011101 0001) 10011101 0001 0000 0000 0000 0000 0001 0001 0001 0001 0001 :

2007/8/7 17

0

除算回路の動作

SUB

0 0 0 0 1 0 0 1 1 1 0 1 ?

0 0 0 1

0

0

000 01

000 00

00 00 最初の状態

1

← ← ← ← ← ← ← ← ← ← ← ←

0

除数

被除数

2007/8/7 18

0

除算回路の動作

SUB

0 0 0 0 0 0 0 1 1 1 0 1 1

0 0 0 1

1

1

000 00

000 00

00 00 1

← ← ← ← ← ← ← ← ← ← ← ←

0

2007/8/7 19

0

除算回路の動作

SUB

0 0 0 0 0 0 0 1 1 1 0 1 1

0 0 0 1

0

1

000 00

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 20

0

除算回路の動作

SUB

0 0 0 0 0 0 1 1 1 0 1 1 ?

0 0 0 1

1

0

000 00

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 21

0

除算回路の動作

SUB

0 0 0 0 0 0 1 1 1 0 1 1 ?

0 0 0 1

0

0

000 00

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 22

0

除算回路の動作

SUB

0 0 0 0 0 0 1 1 1 0 1 1 0

0 0 0 1

1

1

000 00

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 23

0

除算回路の動作

SUB

0 0 0 0 0 0 1 1 1 0 1 1 0

0 0 0 1

0

1

000 00

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 24

0

除算回路の動作

SUB

0 0 0 0 0 1 1 1 0 1 1 0 ?

0 0 0 1

1

0

000 00

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 25

0

除算回路の動作

SUB

0 0 0 0 0 1 1 1 0 1 1 0 ?

0 0 0 1

0

0

000 00

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 26

0

除算回路の動作

SUB

0 0 0 0 0 1 1 1 0 1 1 0 0

0 0 0 1

1

1

000 00

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 27

0

除算回路の動作

SUB

0 0 0 0 0 1 1 1 0 1 1 0 0

0 0 0 1

0

1

000 00

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 28

0

除算回路の動作

SUB

0 0 0 0 1 1 1 0 1 1 0 0 ?

0 0 0 1

1

0

000 01

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 29

0

除算回路の動作

SUB

0 0 0 0 1 1 1 0 1 1 0 0 ?

0 0 0 1

0

0

000 01

000 00

00 00 1

← ← ← ← ← ← ← ← ← ← ← ←

0

2007/8/7 30

0

除算回路の動作

SUB

0 0 0 0 0 1 1 0 1 1 0 0 1

0 0 0 1

1

1

000 00

000 00

00 00 1

← ← ← ← ← ← ← ← ← ← ← ←

0

2007/8/7 31

0

除算回路の動作

SUB

0 0 0 0 0 1 1 0 1 1 0 0 1

0 0 0 1

0

1

000 00

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 32

0

除算回路の動作

SUB

0 0 0 0 1 1 0 1 1 0 0 1 ?

0 0 0 1

1

0

000 01

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 33

0

除算回路の動作

SUB

0 0 0 0 1 1 0 1 1 0 0 1 ?

0 0 0 1

0

0

000 01

000 00

00 00 1

← ← ← ← ← ← ← ← ← ← ← ←

0

2007/8/7 34

0

除算回路の動作

SUB

0 0 0 0 0 1 0 1 1 0 0 1 1

0 0 0 1

1

1

000 00

000 00

00 00 1

← ← ← ← ← ← ← ← ← ← ← ←

0

2007/8/7 35

0

除算回路の動作

SUB

0 0 0 0 0 1 0 1 1 0 0 1 1

0 0 0 1

0

1

000 00

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 36

0

除算回路の動作

SUB

0 0 0 0 1 0 1 1 0 0 1 1 ?

0 0 0 1

1

0

000 01

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 37

0

除算回路の動作

SUB

0 0 0 0 1 0 1 1 0 0 1 1 ?

0 0 0 1

0

0

000 01

000 00

00 00 1

← ← ← ← ← ← ← ← ← ← ← ←

0

2007/8/7 38

0

除算回路の動作

SUB

0 0 0 0 0 0 1 1 0 0 1 1 1

0 0 0 1

1

1

000 01

000 00

00 00 1

← ← ← ← ← ← ← ← ← ← ← ←

0

2007/8/7 39

0

除算回路の動作

SUB

0 0 0 0 0 0 1 1 0 0 1 1 1

0 0 0 1

0

1

000 01

000 00

00 00 1

← ← ← ← ← ← ← ← ← ← ← ←

0

2007/8/7 40

0

除算回路の動作

SUB

0 0 0 0 0 0 1 1 0 0 1 1 1

0 0 0 1

1

0

000 00

000 00

00 00 1

← ← ← ← ← ← ← ← ← ← ← ←

0

2007/8/7 41

0

除算回路の動作

SUB

0 0 0 0 0 0 1 1 0 0 1 1 1

0 0 0 1

0

0

000 00

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 42

0

除算回路の動作

SUB

0 0 0 0 0 0 1 1 0 0 1 1 1

0 0 0 1

1

1

000 00

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 43

0

除算回路の動作

SUB

0 0 0 0 0 0 1 1 0 0 1 1 1

0 0 0 1

0

1

000 00

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 44

0

除算回路の動作

SUB

0 0 0 0 0 1 1 0 0 1 1 1 ?

0 0 0 1

1

0

000 00

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 45

0

除算回路の動作

SUB

0 0 0 0 0 1 1 0 0 1 1 1 ?

0 0 0 1

0

0

000 00

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 46

0

除算回路の動作

SUB

0 0 0 0 0 1 1 0 0 1 1 1 0

0 0 0 1

1

1

000 00

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 47

0

除算回路の動作

SUB

0 0 0 0 0 1 1 0 0 1 1 1 0

0 0 0 1

0

1

000 00

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 48

0

除算回路の動作

SUB

0 0 0 0 1 1 0 0 1 1 1 0 ?

0 0 0 1

1

0

000 01

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

1

2007/8/7 49

0

除算回路の動作

SUB

0 0 0 0 1 1 0 0 1 1 1 0 ?

0 0 0 1

0

0

000 01

000 00

00 00 1

← ← ← ← ← ← ← ← ← ← ← ←

0

2007/8/7 50

0

除算回路の動作

SUB

0 0 0 0 0 1 0 0 1 1 1 0 1

0 0 0 1

1

1

000 00

000 00

00 00 1

← ← ← ← ← ← ← ← ← ← ← ←

0

2007/8/7 51

0

除算回路の動作

SUB

0 0 0 0 0 1 0 0 1 1 1 0 1

0 0 0 1

0

1

000 00

111 11

11 11 0

← ← ← ← ← ← ← ← ← ← ← ←

あまり

1

2007/8/7 52

除算回路の動作例2

01100 1101)10011101 1101 01101 1101 00000 0000 00001 0000 0001

2007/8/7 53

1

除算回路の動作

SUB

0 0 0 0 1 0 0 1 1 1 0 1 ?

1 1 0 1

0

0

000 01

101 00

01 00 最初の状態

0

← ← ← ← ← ← ← ← ← ← ← ←

除数

被除数

2007/8/7 54

1

除算回路の動作

SUB

0 0 0 0 1 0 0 1 1 1 0 1 0

1 1 0 1

1

1

000 01

101 00

01 00 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 55

1

除算回路の動作

SUB

0 0 0 0 1 0 0 1 1 1 0 1 0

1 1 0 1

0

1

000 01

101 00

01 00 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 56

1

除算回路の動作

SUB

0 0 0 1 0 0 1 1 1 0 1 0 ?

1 1 0 1

1

0

000 10

101 00

01 00 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 57

1

除算回路の動作

SUB

0 0 0 1 0 0 1 1 1 0 1 0 ?

1 1 0 1

0

0

000 10

101 01

01 01 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 58

1

除算回路の動作

SUB

0 0 0 1 0 0 1 1 1 0 1 0 0

1 1 0 1

1

1

000 10

101 01

01 01 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 59

1

除算回路の動作

SUB

0 0 0 1 0 0 1 1 1 0 1 0 0

1 1 0 1

0

1

000 10

101 01

01 01 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 60

1

除算回路の動作

SUB

0 0 1 0 0 1 1 1 0 1 0 0 ?

1 1 0 1

1

0

001 00

101 01

01 01 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 61

1

除算回路の動作

SUB

0 0 1 0 0 1 1 1 0 1 0 0 ?

1 1 0 1

0

0

001 00

101 11

01 11 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 62

1

除算回路の動作

SUB

0 0 1 0 0 1 1 1 0 1 0 0 0

1 1 0 1

1

1

001 00

101 11

01 11 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 63

1

除算回路の動作

SUB

0 0 1 0 0 1 1 1 0 1 0 0 0

1 1 0 1

0

1

001 00

101 11

01 11 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 64

1

除算回路の動作

SUB

0 1 0 0 1 1 1 0 1 0 0 0 ?

1 1 0 1

1

0

010 01

101 11

01 11 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 65

1

除算回路の動作

SUB

0 1 0 0 1 1 1 0 1 0 0 0 ?

1 1 0 1

0

0

010 01

111 00

11 00 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 66

1

除算回路の動作

SUB

0 1 0 0 1 1 1 0 1 0 0 0 0

1 1 0 1

1

1

010 01

111 00

11 00 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 67

1

除算回路の動作

SUB

0 1 0 0 1 1 1 0 1 0 0 0 0

1 1 0 1

0

1

010 01

111 00

11 00 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 68

1

除算回路の動作

SUB

1 0 0 1 1 1 0 1 0 0 0 0 ?

1 1 0 1

1

0

100 11

111 00

11 00 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 69

0

除算回路の動作

SUB

1 0 0 1 1 1 0 1 0 0 0 0 ?

1 1 0 1

0

0

100 11

001 10

01 10 1

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 70

0

除算回路の動作

SUB

0 0 1 1 0 1 0 1 0 0 0 0 1

1 1 0 1

1

1

001 10

001 10

01 10 1

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 71

1

除算回路の動作

SUB

0 0 1 1 0 1 0 1 0 0 0 0 1

1 1 0 1

0

1

001 10

110 01

10 01 1

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 72

1

除算回路の動作

SUB

0 1 1 0 1 0 1 0 0 0 0 1 ?

1 1 0 1

1

0

011 01

110 01

10 01 1

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 73

0

除算回路の動作

SUB

0 1 1 0 1 0 1 0 0 0 0 1 ?

1 1 0 1

0

0

011 01

000 00

00 00 1

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 74

0

除算回路の動作

SUB

0 0 0 0 0 0 1 0 0 0 0 1 1

1 1 0 1

1

1

000 00

000 00

00 00 1

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 75

1

除算回路の動作

SUB

0 0 0 0 0 0 1 0 0 0 0 1 1

1 1 0 1

0

1

000 00

100 11

00 11 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 76

1

除算回路の動作

SUB

0 0 0 0 0 1 0 0 0 0 1 1 ?

1 1 0 1

1

0

000 00

100 11

00 11 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 77

1

除算回路の動作

SUB

0 0 0 0 0 1 0 0 0 0 1 1 ?

1 1 0 1

0

0

000 00

100 11

00 11 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 78

1

除算回路の動作

SUB

0 0 0 0 0 1 0 0 0 0 1 1 0

1 1 0 1

1

1

000 00

100 11

00 11 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 79

1

除算回路の動作

SUB

0 0 0 0 0 1 0 0 0 0 1 1 0

1 1 0 1

0

1

000 00

100 11

00 11 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 80

1

除算回路の動作

SUB

0 0 0 0 1 0 0 0 0 1 1 0 ?

1 1 0 1

1

0

000 01

100 11

00 11 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 81

1

除算回路の動作

SUB

0 0 0 0 1 0 0 0 0 1 1 0 ?

1 1 0 1

0

0

000 01

101 00

01 00 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 82

1

除算回路の動作

SUB

0 0 0 0 1 0 0 0 0 1 1 0 0

1 1 0 1

1

1

000 01

101 00

01 00 0

← ← ← ← ← ← ← ← ← ← ← ←

2007/8/7 83

1

除算回路の動作

SUB

0 0 0 0 1 0 0 0 0 1 1 0 0

1 1 0 1

0

1

000 01

101 00

01 00 0

← ← ← ← ← ← ← ← ← ← ← ←

答え

あまり

2007/8/7 84

まとめ

除算 筆算のまねをする

除数をずらしながら引いていく

被除数と除数の比較が問題 減算器の出力の最上位の桁でわかる

減算器

シフトレジスタ

を利用