Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
基礎情報処理
論理 (スイッチング)回路と計算
もくじ
� 2進数表現
� 2進数の計算
� 論理回路による実現
JJ J 基礎情報処理 —論理回路と計算— I II Page 2
2進数表現
JJ J 基礎情報処理 —論理回路と計算— I II Page 3
真偽値
0 = 偽
1 = 真
JJ J 基礎情報処理 —論理回路と計算— I II Page 4
自然数
� 1と 0を並べて2進数で表現する
13 = 8+4+1
= 23 ×1+22 ×1+21 ×0+20 ×1
= 1101 (2進数表現)
� 一般形bn−1bn−2 · · ·b0 (bn−1, · · · ,b0 ∈ {0,1})
= 2n−1 ×bn−1 +2n−2 ×bn−2 + · · ·+20 ×b0
� n桁の2進数のことを、n bit(ビット)の2進数という
JJ J 基礎情報処理 —論理回路と計算— I II Page 5
2進数の性質
� n桁の2進数で表せる自然数n︷ ︸︸ ︷
00 · · ·0 = 0 からn︷ ︸︸ ︷
11 · · ·1 = 2n −1 まで
� 奇数、偶数の判定最下位桁が 1なら奇数、0なら偶数
� 2k倍、1/2k倍I 2k
bn−1 · · ·b0
−→ bn−1 · · ·b0k︷ ︸︸ ︷
0 · · ·0 左シフト
I 1/2k
bn−1 · · ·bkbk−1 · · ·b0
−→k︷ ︸︸ ︷
0 · · ·0bn−1 · · ·bk 右シフトJJ J 基礎情報処理 —論理回路と計算— I II Page 6
2進数の計算
JJ J 基礎情報処理 —論理回路と計算— I II Page 7
2進数の計算
� コンピュータが扱える数は有限桁のもののみ
� ここでは、8bitの2進数を考える
JJ J 基礎情報処理 —論理回路と計算— I II Page 8
1桁の2進数の足し算
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10
JJ J 基礎情報処理 —論理回路と計算— I II Page 9
2進数の足し算
1 0 1 1 1 1 0 1
+ 0 0 0 1 0 1 1 0
1 1 0 1 0 0 1 1
JJ J 基礎情報処理 —論理回路と計算— I II Page 10
2進数の引き算
1 1 1 0 0 0 0 1
− 0 0 1 0 0 0 1 0
1 0 1 1 1 1 1 1
JJ J 基礎情報処理 —論理回路と計算— I II Page 11
負数の表現
34の2の補数表現
34 = 0 0 1 0 0 0 1 0
−→ 1 1 0 1 1 1 0 1 ビット反転
−→ 1 1 0 1 1 1 1 0 +1
= 34の2の補数表現 = –34の表現
JJ J 基礎情報処理 —論理回路と計算— I II Page 12
2の補数表現を用いた引き算
� 225–34 = ?225−34 = 225+(−34)を計算する
1 1 1 0 0 0 0 1
+ 1 1 0 1 1 1 1 0 34の2の補数表現
1無視
1 0 1 1 1 1 1 1 非負数と思って足し算
= 191
JJ J 基礎情報処理 —論理回路と計算— I II Page 13
2の補数表現でなぜうまく行くのか?
2進数表現 b7 b6 b5 b4 b3 b2 b1 b0
2の補数表現 b7 b6 b5 b4 b3 b2 b1 b0 + 1 (bは bit bの反転)
b7 b6 b5 b4 b3 b2 b1 b0 + (b7 b6 b5 b4 b3 b2 b1 b0 + 1)
= (b7 b6 b5 b4 b3 b2 b1 b0 + b7 b6 b5 b4 b3 b2 b1 b0) + 1
= 11111111 + 1
= 100000000
� 最上位 bitの 1を無視すれば、(2進数表現)+(2の補数表現)=0I 2の補数表現はもとの2進数表現の負数
JJ J 基礎情報処理 —論理回路と計算— I II Page 14
剰余類と2の補数
� コンピュータが扱う整数は通常のものとは異なるI 限られた範囲しか扱わない (例: n bit2進数の場合 0以上 2n −1以下)
� コンピュータが扱うのは整数そのものでなく剰余類I aは bとmodulo mで合同
a ≡ bmodm
意味: k ∈ Zが存在して a−b = km (a÷ mと b÷ mの余りは等しい)
I aのmod mでの剰余類a+mZ = {b | a ≡ bmodm} (= {a+mk | k ∈ Z})
定理: 剰余類は足し算および引き算について閉じている。すなわち、a ≡ bmodmかつ c ≡ d modmならば、a+ c ≡ b+d mod m, a− c ≡ b−d mod mが成り立つ。
JJ J 基礎情報処理 —論理回路と計算— I II Page 15
剰余類と2の補数
� 「剰余類は足し算および引き算について閉じている」=⇒同じ剰余類に属する整数は交換可能
例: m = 28(= 256)のとき、· · ·
(−1)+28Z= {· · · ,−513,−257,−1,255,511, · · ·},
0+28Z= {· · · ,−512,−256,0,256,512, · · ·},
1+28Z= {· · · ,−511,−255,1,257,513, · · ·},
2+28Z= {· · · ,−510,−254,2,258,514, · · ·},
· · ·
∴ 2−1 ≡ 2+(−1)≡ 2+255 ≡ 257 ≡ 1 (mod 28)
JJ J 基礎情報処理 —論理回路と計算— I II Page 16
2の補数表現 =剰余類の表現
最上位 bitの 1を無視 = 28(= 256)で割った商は無視して剰余だけをとる
bit列 2進表現 n 剰余類 n+28Z 2の補数
00000000 0 {· · · ,−256,0,256, · · ·} +0 ←2進表現と一致
00000001 1 {· · · ,−255,1,257, · · ·} +1 ←2進表現と一致...
......
...
01111111 127 {· · · ,−129,127,383, · · ·} +127 ←2進表現と一致
10000000 128 {· · · ,−128,128,384, · · ·} −128
10000001 129 {· · · ,−127,129,385, · · ·} −127...
......
...
11111111 255 {· · · ,−1,255,511, · · ·} −1
※ 各 bit列について、対応する剰余類のどの元を選んでもよかったが、2の補数が最も合理的な選択
JJ J 基礎情報処理 —論理回路と計算— I II Page 17
2の補数表現の性質
� nbitの2の補数表現で表せる整数の範囲
1
n−1︷ ︸︸ ︷0 · · ·0 = −2n−1 から 0
n−1︷ ︸︸ ︷1 · · ·1 = 2n−1 −1 まで
� 非負の数の表現は通常の2進数表現と一致
� 正負の判定最上位 bitが 1ならば負の数、0ならば非負の数
� 奇数、偶数の判定最下位桁が 1なら奇数、0なら偶数
JJ J 基礎情報処理 —論理回路と計算— I II Page 18
2種類の数の表現
符号なし (unsigned)整数 符号つき (signed)整数
解釈 単純な2進数表現 2の補数表現
用途 非負整数のみ 正負の整数
整数の範囲 0以上 2n −1以下 −2n−1以上 2n−1 −1以下
� 同じ bit列でも異なる整数と解釈できる。例えば、bit列 11011110は、I 符号なし整数としては、222、符号つき整数としては、–34
JJ J 基礎情報処理 —論理回路と計算— I II Page 19
論理回路による実現
JJ J 基礎情報処理 —論理回路と計算— I II Page 20
1bitの足し算
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10 桁上げ
下位桁からの桁上げがある場合0 + 0 = 1
0 + 1 = 10
1 + 0 = 10
1 + 1 = 11
1bitの足し算における入出力
� 入力: 1bitのデータ×2、下位桁からの桁上げ (carry in)
� 出力: 1bitのデータ×1、上位桁への桁上げ (carry out)
JJ J 基礎情報処理 —論理回路と計算— I II Page 21
1bit加算器
a b cin cout sum
0 0 0 0 0
0 1 0 0 1
1 0 0 0 1
1 1 0 1 0
0 0 1 0 1
0 1 1 1 0
1 0 1 1 0
1 1 1 1 1
JJ J 基礎情報処理 —論理回路と計算— I II Page 22
1bit加算器の構成
� 各出力 bit毎の組合わせ論理回路を構成し、組み合わせるI 桁上げ (cout)のみ計算する組合わせ論理回路I 和 (sum)のみ計算する組合わせ論理回路
� それぞれ 1bit出力なので、真偽値の計算回路として表せる
JJ J 基礎情報処理 —論理回路と計算— I II Page 23
桁上げ用回路の構成
� 桁上げが起こる (cout=1になる)のは、3つの入力 (a,b,cin)のうち2つまたは3つが 1のとき
� それ以外のとき、桁上げは起こらない (cout=0)
cout = (a∧b∧cin)∨ (a∧b)∨ (a∧cin)∨ (b∧cin)
= (a∧b)∨ (a∧cin)∨ (b∧cin)
JJ J 基礎情報処理 —論理回路と計算— I II Page 24
桁上げ回路図
cout = (a∧b)∨ (a∧cin)∨ (b∧cin)
JJ J 基礎情報処理 —論理回路と計算— I II Page 25
和算回路の構成
� 和が 1(sum=1)になるのは、3つの入力 (a,b,cin)のうち1つまたは3つが 1のとき
� それ以外のとき、和は 0(sum=0)
sum = (a∧b∧cin)∨ (a∧¬b∧¬cin)∨ (¬a∧b∧¬cin)∨ (¬a∧¬b∧cin)
Exercise. 上の式に対応する回路を構成せよ。
JJ J 基礎情報処理 —論理回路と計算— I II Page 26
1bit加算器構成図
JJ J 基礎情報処理 —論理回路と計算— I II Page 27
n bit加算器
n = 4の場合
� 入力: an · · ·a1, bn · · ·b1(n bitデータ列×2)
� 出力: dn · · ·d1 (加算結果)、cout (桁あふれ 1bit)
JJ J 基礎情報処理 —論理回路と計算— I II Page 28
n bit減算器
n = 4の場合
� 入力: an · · ·a1, bn · · ·b1(n bitデータ列×2)
� 出力: dn · · ·d1 (減算 bn · · ·b1 −an · · ·a1の結果)
JJ J 基礎情報処理 —論理回路と計算— I II Page 29
オーバーフロー・アンダーフロー
� 計算結果が表現できる範囲を越えてしまった場合はどうなるのか?オーバーフロー 計算結果が範囲より大きくなるエラー
I 符号なし整数の例 1101+0100(= 13+4) = 0001(= 1)I 符号付き整数の例 0110+0101(= 6+5) = 1011(=−5)I 符号付き整数の例 0011−1011(= 3− (−5)) = 1000(=−8)
アンダーフロー 計算結果が範囲より小さくなるエラー
I 符号付き整数の例 1011−0110(= (−5)−6) = 0101(= 5)
� どの場合も誤った計算結果となる。I 特に、符号付き整数の場合、符号が反転するので注意。
� ただし、剰余類で考えると正しい計算となっている。(−5)−6 ≡ 5 mod 24, etc.
JJ J 基礎情報処理 —論理回路と計算— I II Page 30
問題
4bit長の符合なし整数表現 a4a3a2a1を入力とし、これが表す整数を 7倍した結果を 7bit長の 2進数表現 d7d6d5d4d3d2d1として出力する論理回路を構成せよ。
例 入力が 1101(= 13)のとき、出力は 1011011(= 91)
解法1 7回足す。安直だが回路を書くのが大変。ゲートの数も多くなるのでやめましょう。
解法2 入力の 4倍、2倍、1倍を足し合わせる。2n倍は bitシフト (bit列をずらす)だけなので少しマシですが、もう少し回路を減らせます。
解法3 (ヒント) 2の補数を使う。
JJ J 基礎情報処理 —論理回路と計算— I II Page 31
解答例
☆ 7 = 8−1→ 8倍したものから元の数を引けばよい。
(1) 8倍する a4a3a2a1 → a4a3a2a1000 (3bit左シフト)
(2)引き算する
� a4a3a2a1000は符号なし整数として 7桁∴符号付き整数 (2の補数表現)としては 8桁必要
� a4a3a2a1000→ 0a4a3a2a1000� a4a3a2a1 → 0000a4a3a2a1� 0a4a3a2a1000と 0000a4a3a2a1の 2の補数表現を足す
(3)出力 8bitのうち、下位桁 7bitを出力
∵ 出力の範囲は 0以上 105(= 15×7 ≤ 127)以下だから、8桁の 2の補数表現で正しく表される。最上位桁 (必ず 0となる)を無視すればよい。
JJ J 基礎情報処理 —論理回路と計算— I II Page 32
JJ J 基礎情報処理 —論理回路と計算— I II Page 33
講義資料
� この資料は以下より電子的に入手可能です。http://www.math.kyoto-u.ac.jp/˜susumu/lecture/digital11.pdf
JJ J 基礎情報処理 —論理回路と計算— I II Page 34
http://www.math.kyoto-u.ac.jp/~susumu/lecture/digital11.pdf