計算機アーキテクチャ · 2 4/14 ノイマン型コンピュータ 3 4/21...
Transcript of 計算機アーキテクチャ · 2 4/14 ノイマン型コンピュータ 3 4/21...
計算機アーキテクチャ
2014年 5月26日
電気情報工学科 田島 孝治
第7回 計算機アーキテクチャ 1
第7回 計算アーキテクチャ(ARU) 計算機のハードウェア実装
授業スケジュール(前期)
※5/5はこどもの日、7/21は海の日のため休講
※急なスケジュール変更があった場合,掲示およびメールで連絡します
2
第7回 計算機アーキテクチャ
回 日付 タイトル
1 4/7 コンピュータ技術の歴史と コンピュータアーキテクチャ
2 4/14 ノイマン型コンピュータ
3 4/21 コンピュータのハードウェア
4 4/28 数と文字の表現
5 5/12 固定小数点数と浮動小数点表現
6 5/19 計算アーキテクチャ(ARU)
7 5/26 計算装置のハードウェア実装
8 6/2 文字コード
9 6/11? 中間試験(日程は仮)
回 日付 タイトル
10 6/16 主記憶装置とレジスタ
11 6/23 命令実行の流れ
12 6/30 命令形式とアセンブリ言語
13 7/7 命令セット
14 7/14 サブルーチンの実現
15 7/28 PCSpimによるアセンブリ言語プログラム
8/4? 期末試験(日程は仮)
16 9/29? フォローアップ(日程は仮)
今日の授業の目的
加減算のアルゴリズムを復習し、計算をできるようにする
シフト演算のハードウェア実装について知る
シフトと加減算を組み合わせた乗除算の実装について知る
第7回 計算機アーキテクチャ
3
加減算の計算アーキテクチャを理解する シフトと乗除算のアーキテクチャを理解する
全加算器の設計と実装
全加算器の真理値表
回路の論理式
第7回 計算機アーキテクチャ
4
A B 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡 S
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
A B 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡 S
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1
Cout = AB + ACin + BCin
S = A⊕ B⊕ C
1ビット全加算器の回路図
以後簡単のためにボックス化して書く
第7回 計算機アーキテクチャ
5
𝐶𝑖𝑛 B
A
𝐶𝑜𝑢𝑡
S
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
Nビット全加算器を作るには
1ビット全加算器を複数つなげれば良い
第7回 計算機アーキテクチャ
6
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
𝑆0
𝑆1
𝐴0
𝐴1
𝐵0
𝐵1
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
𝑆2
𝑆3
𝐴2
𝐴3
𝐵2
𝐵3
リプルキャリー型加算器と呼ぶ
0
減算器を作るには
減算用の論理式を作る?
加算器と同じようにカルノー図を作れば作れる
2の補数を使う
加算器と同じ回路で実現できる
2の補数を計算する回路が必要
2の補数の計算方法
反転して、1を加える
反転:NOT回路を通す
1を加える:最下位ビットの𝐶𝑖𝑛を常に1する
第7回 計算機アーキテクチャ
7
4ビット減算器
第7回 計算機アーキテクチャ
8
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
𝑆0
𝑆1
𝐴0
𝐴1
𝐵0
𝐵1
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
𝑆2
𝑆3
𝐴2
𝐴3
𝐵2
𝐵3
1
実際に演算してみよう
符号付きの場合の解釈
第7回 計算機アーキテクチャ
9
問題(10進数) 2進数 結果 10進数 正しい?
(1) 3 + (-5)
(2) (-6) – (-3)
(3) (-3) + (-7)
(4) (-6) – 4
計算スペース
第7回 計算機アーキテクチャ
10
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
𝐴0 𝐵0
𝑆0
𝐴1 𝐵1
𝑆1
𝐴2 𝐵2
𝑆2
𝐴3 𝐵3
𝑆3
𝐶 𝐶0
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
𝐴0 𝐵0
𝑆0
𝐴1 𝐵1
𝑆1
𝐴2 𝐵2
𝑆2
𝐴3 𝐵3
𝑆3
𝐶 𝐶0
計算スペース
第7回 計算機アーキテクチャ
11
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
𝐴0 𝐵0
𝑆0
𝐴1 𝐵1
𝑆1
𝐴2 𝐵2
𝑆2
𝐴3 𝐵3
𝑆3
𝐶 𝐶0
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
FA 𝐶𝑖𝑛 𝐶𝑜𝑢𝑡
𝐴 𝐵
𝑆
𝐴0 𝐵0
𝑆0
𝐴1 𝐵1
𝑆1
𝐴2 𝐵2
𝑆2
𝐴3 𝐵3
𝑆3
𝐶 𝐶0
レジスタと順序回路
加減算の回路
組み合わせ回路だけですべてが実現された
値の保持はどうするのか
レジスタの実装
FFによるものが一般的
この講義で用いるFF
D-FFのみで考える
第7回 計算機アーキテクチャ
12
Q
Q
D
CK
D-FF
入力 出力
D CK Qn+1 Qn+1
0 ↑ 0 1
1 ↑ 1 0
0/1 0 Qn Qn
0/1 1 Qn Qn
0 ↓ Qn Qn
1 ↓ Qn Qn
D-FFの真理値表
立ち上がり
立ち下り
D-FFの動作確認(タイムチャート)
第7回 計算機アーキテクチャ
13
Q
Q
D
CLK
D-FFによるシフト回路の実装
4ビットの右シフト回路を考える
パッディングはMSBの値とする
まずは状態遷移図を作る
クロックでシフト
14
0000 0001 0010
0011
0100
0101
0110 0111
1000
1001
1010 1011
1100
1101
1110 1111
真理値表の作成 15
現在の状態 次の状態
S3 S2 S1 S0 S3 S2 S1’ S0’
0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 1
0 0 1 1 0 0 0 1
0 1 0 0 0 0 1 0
0 1 0 1 0 0 1 0
0 1 1 0 0 0 1 1
0 1 1 1 0 0 1 1
現在の状態 次の状態
S3 S2 S1 S0 S3 S2 S1’ S0’
1 0 0 0 1 1 0 0
1 0 0 1 1 1 0 0
1 0 1 0 1 1 0 1
1 0 1 1 1 1 0 1
1 1 0 0 1 1 1 0
1 1 0 1 1 1 1 0
1 1 1 0 1 1 1 1
1 1 1 1 1 1 1 1
第7回 計算機アーキテクチャ
カルノー図の作成1
S0’について
第7回 計算機アーキテクチャ
16
\S3S2 S1S0\
00 01 11 10
00 0 0 0 0
01 0 0 0 0
11 1 1 1 1
10 1 1 1 1
𝑆0′ = 𝑆1
カルノー図の作成2
S1’について
第7回 計算機アーキテクチャ
17
\S3S2 S1S0\
00 01 11 10
00 0 1 1 0
01 0 1 1 0
11 0 1 1 0
10 0 1 1 0
𝑆1′ = 𝑆2
カルノー図の作成3
S2’について
第7回 計算機アーキテクチャ
18
\S3S2 S1S0\
00 01 11 10
00 0 0 1 1
01 0 0 1 1
11 0 0 1 1
10 0 0 1 1
𝑆2′ = 𝑆3
カルノー図の作成4
S3’について
第7回 計算機アーキテクチャ
19
\S3S2 S1S0\
00 01 11 10
00 0 0 1 1
01 0 0 1 1
11 0 0 1 1
10 0 0 1 1
𝑆3′ = 𝑆3
D-FFによるシフト演算器
この演算器をシフトレジスタということもある
シフトを使うと何ができるのか?
乗除算ができます
第7回 計算機アーキテクチャ
20
S1 S2 S3 S0
Q
Q
CK
D
Q
Q
CK
D
Q
Q
CK
D
Q
Q
CK
D
CLK
乗除算のルール(直接乗算法)
乗数(除数)の2進数の意味
何ビットずらす(シフトする)か示している
掛け算は左シフト、割り算は右シフト
乗除算に掛け算九九は要らない
21
例) 116 × 28
28 = (0001 1100)2
116 = (0111 0100)2
0111 0100
011 1010 0
01 1101 00
1011 0000 = -80
0ビットシフト
1ビットシフト
2ビットシフト
3ビットシフト
4ビットシフト ビットがずれて計算しにくい
左シフトは符号が維持できない
ブース法による乗算
2の補数で負の数も扱える乗算アルゴリズム
乗数の隣り合うビットを用いて演算方法を決定
1ビットづつ演算が決まる
部分積の計算式を利用
nビットの数値、XとYの部分積を𝑃𝑖とする
𝑃𝑖+1 = 2−1(𝑃𝑖 + 𝑦𝑖𝑋2𝑛)
具体的には次の表に従い数値を操作する
22
𝑦𝑖 𝑦𝑖−1 操作
0 0 そのまま右へ1ビット算術シフト
0 1 被乗数を加算した後、右へ1ビット算術シフト
1 0 被乗数を減算した後、右へ1ビット算術シフト
1 1 そのまま右へ1ビット算術シフト
ブース法による乗算 23
0000 0110 0 0000 0011 0 -)0100 1100 0011 1110 0001 1 1111 0000 1 +)0100 0011 0000 0001 1000 0
4 = (0100)2
6 = (0110)2
例:4×6(4ビット)の場合
𝑃0
𝑃1
𝑃2
𝑃3
右シフト
右シフト
右シフト
右シフト
減算
加算
0001 1000
ブース法の実装と他のアルゴリズム
ハードウェア
シフトと加算の組み合わせだけで実現可能
アルゴリズムの強み
1の連続に対し加算処理が不要
1と0が交互に繰り返されると不向き
処理アルゴリズムには亜種が存在する
今回は多ビットの加算を行わない基本的な方法を説明
乗算のアルゴリズムにはより高速なものがある
ウォリスの木(Wallace tree)を用いる方法
第7回 計算機アーキテクチャ
24
除算の実現方法
引き戻し法(restoring division)、引き放し法(nonrestoring division)が広く知られる
引き放し法
演算回数を少なくできる
負の符号も扱えるが、補正が必要になる
符号計算と数値計算を独立させたほうが良い
引き放し法の演算手順
被除数の符号と除数の符号から商の符号を決定
2の補数表現により負の数を正の数に変換
アルゴリズムにより商と剰余を計算
商の符号が負の場合、2の補数に変換 第7回 計算機アーキテクチャ
25
引き放し法のアルゴリズム
例)26÷5 (商は5、剰余は1)
第7回 計算機アーキテクチャ
26
0001 1010 0101 ÷
-)0101 0 1100 1010 0101
1001 010
0101 +)0101 1110 010 0
引き放し法のアルゴリズム 27
0101 1110 010 0 0
1100 10 +)0101 0001 10 0101 1 0011 0 -)0101 1110 0 0101 1100
0
+)0101 0001 0
シフトできなくなったら演算修了
商 剰余
演習問題
次の計算を2進数で行え
全ての数値は8bitで表し、MSBは符号ビットとする
乗算はブース法により行い過程を示すこと
第7回 計算機アーキテクチャ
28
① 41 + 60 ② 52 - 41 ③ 98 + 125 ④ 6 - 55 ⑤ 15 - 173
⑥ 58 × 6 ⑦ 60 ÷ 4 ⑧ -8 × 22 ⑨ -56 ÷ 58 ⑩ -16 × 98
浮動小数点の加減算
指数部と仮数部は別に考える
先に指数部をシフト(桁合わせ)してから演算する
数値A
数値B
計算のイメージ(指数A>指数B、共にS=0の時)
加減算の結果、正規化が必要な場合は調整する (例:仮数部が桁上がりした場合、1ビットシフトし、指数を1増やす)
29
S 指数A 仮数A
S 指数B 仮数B
仮数A
仮数B
S 指数A 仮数C
指数A - 指数B
浮動小数点の乗除算
加減算と同様に指数部と仮数部は分ける
指数部は加減算
仮数部は乗除算
必要に応じて結果を正規化
計算の流れ
30
正規化
指数演算 仮数演算