Transcript 論理回路基礎
論理回路基礎
9. 演算回路
五島 正裕
論理回路基礎
今日の内容
演算回路
加算器
二の補数
シフト演算器
論理回路基礎
加減算器
論理回路基礎
二進数の加算
0
+)
0
0
+)
1
1
0
+)
1
0
1
+)
1
1
10
桁上げ
carry
1 1
1
0 1
+)
0 1
1 0
1 1
0 1
+)
1 1
1 0 0
1 1
1 1
+)
0 1
1 0 0
和
sum
1 1
+)
1 1
1 1 0
← 桁上げ
論理回路基礎
半加算器,全加算器
桁上げ
carry
和
sum
x
y cout s
cin x
y cout s
0
0
0
0
0
0
0
0
0
0
1
0
1
0
0
1
0
1
1
0
0
1
0
1
0
0
1
1
1
1
0
0
1
1
1
0
1
0
0
1
0
1
0
1
1
0
1
1
0
1
0
1
1
1
1
1
半加算器 (half adder)
全加算器 (full adder)
論理回路基礎
全加算器
xy
cin
00
01
0
1
11
xy
10
cin
1
1
1
00
0
1
01
11
1
1
1
10
1
1
s = x ^ y ^ cin
cout = xy + ycin + cin x
x
y
x
cout
cin
y
cin
s
論理回路基礎
桁上げ伝搬加算器 (ripple carry adder)
桁上げ伝搬加算器 (ripple carry adder)
n 個の全加算器の cin と cout を順に接続
桁上げ (carry) が下位から伝播
伝搬遅延時間:O(n)
xn-1 yn-1
x1 y1
FA
cn-1
x0 y0
FA
cout
x
y
s
sn-1
cin
cn-2
c1
c-1 = 0
FA
cout
x
y
s
s1
cin
c0
cout
x
y
s
s0
cin
論理回路基礎
桁上げ先見加算器 (carry-lookahead adder)
桁上げ先見加算器 (carry-lookahead adder)
桁上げを先読み
伝搬遅延時間:
O(log n)
xn-1 yn-1
x1 y1
x0 y0
c-1 = 0
carry lookahead generator
x
y
s
sn-1
cin
x
cn-2
y
s
s1
cin
x
c0
y
s
s0
cin
論理回路基礎
桁上げ先見器 (carry lookahead generator)
ci = xy + yci-1 + ci-1 x
= xiyi + (xi + yi ) ci-1
= gi +
pi
ci-1
gi:(下位からのキャリーに関わらず)キャリーが生成 (generate)
pi:(下位からのキャリーが 1 のとき)キャリーが伝播 (propagate)
1 ?
1 1
1 ?
+)
1 ?
? ?
gi = 1
1 1
0 ?
+)
1 ?
0 ?
1 1
1 ?
+)
0 ?
0 ?
pi = 1
1 ?
+)
1 ?
? ?
論理回路基礎
桁上げ先見器 (carry lookahead generator)
ci = xiyi + (xi ^ yi ) ci-1
= gi + pi
ci-1
gi:(下位からのキャリーに関わらず)キャリーが生成 (generate)
pi:(下位からのキャリーが 1 のとき)キャリーが伝播 (propagate)
c3 = g3 + p3c2
= g3 + p3 (g2 + p2c1)
= g3 + p3 (g2 + p2(g1 + p1c0))
= g3 + p3 (g2 + p2(g1 + p1(g0 + p0c−1)))
= g3 + p3g2 + p3p2g1 + p3p2p1g0 + p3p2p1p0c-1
c2 = g2 + p2g1 + p2p1g0 + p2p1p0c-1
c1 = g1 + p1g0 + p1p0c-1
c0 = g0 + p0c-1
論理回路基礎
桁上げ先見器 (carry lookahead generator)
g3
p3
g2
p2
g1
p1
g0 p0 c-1
P
G
c3
c2
c1
c0
論理回路基礎
桁上げ先見器のツリー接続
c0 g0 p0
c15 g15 p15
GP
c-1
GP
c-1
GP
c-1
GP
c-1
c-1
GP
c-1
論理回路基礎
補数表現
論理回路基礎
負の数の表現
表現される値
補数 (complement) 表現:
「上半分」を負数に充てる
n 進数
n
の補数
n-1 の補数
二進数
二の補数 (two’s complement)
一の補数 (one’s complement)
O
元の値
論理回路基礎
補数表現
n 進数
の補数
n
n
から引いた値
表現される値
n-1 の補数
n-1 から引いた値
十進数
十の補数
100…0 から引いた値
九の補数
099…9 から引いた値
O
二進数
二の補数 (two’s complement)
100…0 から引いた値
一の補数 (one’s complement)
011…1 から引いた値
元の値
論理回路基礎
十進数
補数表現
0
1
2
3
4
5
6
7
8
9
表現される値
0
1
2
3
4
−4
−3
−2
−1
−0
九の補数(1桁)
補数表現
0
1
2
3
4
5
6
7
8
9
表現される値
0
1
2
3
4
−5
−4
−3
−2
−1
十の補数(1桁)
論理回路基礎
二進数
補数表現
000
001
010
011
100
101
110
111
表現される値
0
1
2
3
−3
−2
−1
−0
一の補数(3桁)
補数表現
000
001
010
011
100
101
110
111
表現される値
0
1
2
3
−4
−3
−2
−1
二の補数(3桁)
論理回路基礎
補数表現
表現される値
表現される値
00
00
O
01
元の値
10
11
一の補数
O
100
01
10
11
二の補数
元の値
論理回路基礎
二進数の補数表現
符号ビット (sign bit)
最上位桁(ビット)が符号を表す(0 が正,1 が負)
一の補数 と 二の補数
一の補数:
ビット反転で得られる
計算が困難
二の補数
ビット反転後,+1
計算が容易
論理回路基礎
二の補数の加算
二の補数の加減算
基本的には,特に気にしなくてよい
符号ビットからの桁上げは無視
オーバフロー (overflow)
結果が表現できる範囲にない
符号ビットがおかしなことになる
– 0+0→1
– 1+1→0
論理回路基礎
二の補数の加算
111
1 1 1 … −1
1 1 1 … −1
+)
1 1 1 0 … −2
符号ビットからの桁
上げ
+)
1
11
11
0 1 1 … +3
0 1 1 … +3
0 0 1 … +1
1 0 0 … −4
+)
0 1 1 … +3
1
1 0 0 … −4
+)
1 1 0 … −2
オーバフロー
1 1 1 … −1
1 0 1 1 … +3
1 0 0 … −4
+)
1 0 0 … −4
1 0 0 0 … +0
論理回路基礎
符号なし加算
z=x+y
2
2
overflow
n +1
n
2
n
y
O
2
n
x
論理回路基礎
二の補数の加算
top view
2
n
−, +
overflow
O
−, −
+, +
+, −
2
n
O
2
2
underflow
n
n−1
O
−2
n−1
−2
n
side view
論理回路基礎
二の補数の加算
2
overflow
n +1
−1
n
2 −1
n
2 −1
O
O
n
2 −1
符号なし加算
符号なし加算結果を
二の補数とみなす
論理回路基礎
n -bit 二の補数の和
符号ありの値
n +1
−1
2
0 1...1
n −1
2
1 0 1...1
−1
0 0...0
符号なしの値
1 0 0...0
O
1 1...1
n −1
−2
1 0...0
1 1 0...0
1 1 1...1
論理回路基礎
二の補数の加算
overflow
underflow
符号あり加算
符号なし加算結果を
二の補数とみなす
論理回路基礎
加算器による減算
入力の一方(y)を二の補数に:
y の各ビットを反転
c−1 を 1 に
xn-1 yn-1
x1 y1
x0 y0
sub
c-1
FA
cn-1
FA
cout
x
y
s
sn-1
cin
cn-2
c1
FA
cout
x
y
s
s1
cin
c0
cout
x
y
s
s0
cin
論理回路基礎
シフタ
論理回路基礎
シフト演算
シフト演算
左/右
算術/論理
論理シフト演算 (logical shift):
左シフト(1桁): 10100 ⇒ 01000
右シフト(1桁): 10100 ⇒ 01010
算術シフト演算 (arithmetic shift):符号ビットを保存
左シフト(1桁): 10100 ⇒ 11000
右シフト(1桁): 10100 ⇒ 11010
(ローテート)
左シフト(1桁): 10100 ⇒ 01001
右シフト(1桁): 10100 ⇒ 01010
論理回路基礎
算術シフト演算
n 進数,k 桁のシフト:
n k 倍(左),1/n k 倍(右)
2進数,k 桁のシフト:
2 k 倍(左),1/2 k 倍(右)
粒度が小さいので,使いやすい
(小さい整数)倍:算術シフト & 加算
3x = 2x + x
5x = 4x + x
7x = 8x - x
論理回路基礎
バレル・シフタ
x7
x6
x5
x4
x3
x2
x1
x0
shamt0
shamt1
shamt2
z7
z6
z5
z4
z3
z2
8b バレル・ローテータ
z1
z0
論理回路基礎
今日のまとめ
論理回路基礎
今日のまとめ
演算回路
加減算器
シフト演算器
論理回路基礎
今後の予定
1/12
1/19
(最後)
3/ 2
試験 (9:00~10:30)