1 / 38

算術論理演算ユニットの設計

算術論理演算ユニットの設計. ( 教科書 4.5 節 ). 算術論理演算ユニット ALU (1). 一般的なコンピュータの内部構造. 算術演算や論理演算を実行する.. デコーダ. PC. アドレスバス. レジスタ. ALU. データバス. 主記憶. ・・・. 算術論理演算ユニット ALU (2). 算術論理演算ユニット( ALU: Arithmetic Logic Unit ). 算術演算命令 の処理 加算命令 減算命令 比較命令 論理演算命令の処理 AND 命令 OR 命令 XOR 命令(今回は省略) シフト命令の処理(今回は省略)

poppy
Download Presentation

算術論理演算ユニットの設計

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 算術論理演算ユニットの設計 (教科書4.5節) Created by Tsuneo Nakanishi, 2002-2004

  2. 算術論理演算ユニットALU(1) 一般的なコンピュータの内部構造 算術演算や論理演算を実行する. デコーダ PC アドレスバス レジスタ ALU データバス 主記憶 ・・・ Created by Tsuneo Nakanishi, 2002-2004

  3. 算術論理演算ユニットALU(2) 算術論理演算ユニット(ALU: Arithmetic Logic Unit) • 算術演算命令の処理 • 加算命令 • 減算命令 • 比較命令 • 論理演算命令の処理 • AND命令 • OR命令 • XOR命令(今回は省略) • シフト命令の処理(今回は省略) • 基本部品: インバータ,AND/ORゲート,マルチプレクサ Created by Tsuneo Nakanishi, 2002-2004

  4. AND回路の設計 AND演算(&): オペランドのビットごとに AND をとる. 1 0 1 1 0 0 1 0 1 1 1 0 1 1 0 0 1 0 1 0 0 0 0 0 a y b 1ビットのAND回路 Created by Tsuneo Nakanishi, 2002-2004

  5. OR回路の設計 OR演算(|): オペランドのビットごとに OR をとる. 1 0 1 1 0 0 1 0 1 1 1 0 1 1 0 0 1 1 1 1 1 1 1 0 a y b 1ビットのOR回路 Created by Tsuneo Nakanishi, 2002-2004

  6. 加算回路の設計(1) 1ビットの加算回路 入力:下位桁桁上げ(cin) 1 1 1 0 1 0 0 0 1 1 1 0 1 1 0 入力:足される数(a) +) 0 0 1 1 0 1 0 1 入力:足される数(b) 1 0 1 0 1 0 1 1 出力:上位桁桁上げ(cout) 出力:和(y) 1bit 加算器 a cout b y cin Created by Tsuneo Nakanishi, 2002-2004

  7. 加算回路の設計(2) 1ビットの加算回路を使った32ビット加算器 a31 cout + b31 y31 cin ・・・ a1 cout + b1 y1 cin a0 cout + b0 y0 0 Created by Tsuneo Nakanishi, 2002-2004

  8. 加算回路の設計(3) 真理値表 Created by Tsuneo Nakanishi, 2002-2004

  9. 加算回路の設計(4) a b cin y 演習問題①: この論理回路を簡単化せよ.(復習) Created by Tsuneo Nakanishi, 2002-2004

  10. 加算回路の設計(5) a b cin cout 演習問題②: この論理回路を簡単化せよ.(復習) Created by Tsuneo Nakanishi, 2002-2004

  11. 加算/AND/OR対応 1bit ALU a b cout 00 + 01 y 10 11 cin 操作 2 Created by Tsuneo Nakanishi, 2002-2004

  12. 加算/AND/OR対応 32bit ALU cout a31 +/AND/OR 対応 1bit ALU b31 y31 cin ・・・ cout a1 +/AND/OR 対応 1bit ALU b1 y1 cin cout a0 +/AND/OR 対応 1bit ALU b0 y0 cin 操作 2 0 Created by Tsuneo Nakanishi, 2002-2004

  13. 1 1 1 1 1 0 1 0 0 0 減算回路の設計(1) 減算(b を引く)=負数の加算(–b を足す) 2の補数表現をした場合,符号を気にすることなく,符号なし整数の加算とまったく同じ方法で減算できる. キャリー 0 1 1 0 0 1 1 0 102(10) +) 1 1 1 0 0 0 1 1 –29(10) 0 1 1 73(10) Created by Tsuneo Nakanishi, 2002-2004

  14. 減算回路の設計(2) 2の補数表現による負数のビット表現の簡単な求め方: • 2進数の 0 と 1 を反転する. 0000 0000 0000 0101 → 1111 1111 1111 1010 • ①で得られた2進数をひとつカウントアップする. 1111 1111 1111 1010 → 1111 1111 1111 1011 a – b を求めるには: • b の 0 と 1 を反転する. • a と①の結果を加算する. • ②の結果に 1 を加算する. Created by Tsuneo Nakanishi, 2002-2004

  15. 減算回路の設計(3) cout a31 +/AND/OR 対応 1bit ALU 0 y31 b31 1 cin 反転=0 のとき b をそのまま出力,反転=1 のとき反転出力. ・・・ cout a1 +/AND/OR 対応 1bit ALU 0 y1 b1 1 cin cout a0 +/AND/OR 対応 1bit ALU 0 y0 b0 1 cin 加算のときキャリーイン=0,減算のときキャリーイン=1とする. 操作 2 反転 cyin Created by Tsuneo Nakanishi, 2002-2004

  16. 加減算/AND/OR対応 1bit ALU a b cout 00 + 01 0 y 10 11 1 cin 反転 操作 2 Created by Tsuneo Nakanishi, 2002-2004

  17. オーバーフロー(1) オーバーフロー: 算術演算の結果がレジスタに格納可能な範囲の数を超えること. 4bit 加算の場合: • 正(0000~0111) + 正(0000~0111) → 0000~1110 (0~7) + (0~7) で結果は 0 ~ 14.オーバーフローの可能性あり. 結果が 1000(8)~1110(14) のとき(=負のとき),オーバーフロー. • 正(0000~0111) + 負(1000~1111) → 1000~0110 (0~7) + (–8~–1) で結果は –8~6.オーバーフローはない. • 負(1000~1111) + 正(0000~0111) → 1000~0110 (–8~–1) + (0~7) で結果は –8~6.オーバーフローはない. • 負(1000~1111) + 負(1000~1111) → 0000~1110 (–8~–1) + (–8~–1) で結果は –16~–2.オーバーフローの可能性あり. 結果が 0000~0111 のとき(=正のとき),オーバーフロー. Created by Tsuneo Nakanishi, 2002-2004

  18. オーバーフロー(2) 4bit 減算の場合: • 正(0000~0111) – 正(0000~0111) 正(0000~0111) + 負(1000~1111) と同じ.オーバーフローなし. • 正(0000~0111) – 負(1000~1111) 正(0000~0111) + 正(0000~0111) と同じ. 結果が負のとき,オーバーフロー. • 負(1000~1111) – 正(0000~0111) 負(1000~1111) + 負(1000~1111) と同じ. 結果が正のとき,オーバーフロー. • 負(1000~1111) – 負(1000~1111) 負(1000~1111) + 正(0000~0111) と同じ.オーバーフローなし. Created by Tsuneo Nakanishi, 2002-2004

  19. オーバーフロー(3) cout a31’ a31 +/AND/OR 対応 1bit ALU 0 y31 b31 b31’ 1 cin オーバーフローはここで検査できる. ・・・ cout a1 +/AND/OR 対応 1bit ALU 0 y1 b1 1 cin cout a0 +/AND/OR 対応 1bit ALU 0 y0 b0 1 cin 操作 2 反転 cyin Created by Tsuneo Nakanishi, 2002-2004

  20. オーバーフロー(4) cin  cout ならばオーバーフロー Created by Tsuneo Nakanishi, 2002-2004

  21. オーバーフロー(5) ovf cout a31’ a31 +/AND/OR 対応 1bit ALU 0 b31 y31 b31’ 1 cin cout a1 +/AND/OR 対応 1bit ALU 0 y1 b1 1 cin cout a0 +/AND/OR 対応 1bit ALU 0 y0 b0 1 cin 操作 2 反転 cyin Created by Tsuneo Nakanishi, 2002-2004

  22. 最上位ビット専用 1bit ALU a b 00 + 01 0 y 10 11 1 cin 反転 yout 操作 ovf 2 Created by Tsuneo Nakanishi, 2002-2004

  23. slt 回路の設計(1) a31’ a31 ovf +/AND/OR対応 1bit ALU (最上位用) 0 y31 b31 b31’ yout 1 cin a < b ⇔ a – b < 0.ゆえに a – b の結果の符号から,a < b が検査できる. ・・・ cout a1 +/AND/OR 対応 1bit ALU 0 y1 b1 1 cin cout a0 +/AND/OR 対応 1bit ALU 0 y0 b0 1 cin 操作 2 反転 cyin Created by Tsuneo Nakanishi, 2002-2004

  24. slt 回路の設計(2) オーバーフローが生じなくて(ovf=0),結果が負(y31=1) → a < b(sltf = 1) オーバーフローが生じて(ovf =1),結果が正(y31=0) → a < b(sltf = 0) Created by Tsuneo Nakanishi, 2002-2004

  25. slt 回路の設計(3) sltf ovf a31’ a31 +/AND/OR対応 1bit ALU (最上位用) 0 b31 yout b31’ y31 1 cin cout a1 +/AND/OR 対応 1bit ALU 0 y1 b1 1 cin cout a0 +/AND/OR 対応 1bit ALU 0 y0 b0 1 cin 操作 2 反転 cyin Created by Tsuneo Nakanishi, 2002-2004

  26. 完全版最上位ビット専用 1bit ALU a b 00 + 01 0 y 10 11 1 cin slt sltf 反転 操作 ovf 2 Created by Tsuneo Nakanishi, 2002-2004

  27. 完全版一般用 1bit ALU a b cout 00 + 01 0 y 10 11 1 cin slt 反転 操作 2 Created by Tsuneo Nakanishi, 2002-2004

  28. 完全版 32bit ALU(1) sltf a31 完成版 最上位ビット専用 1bit ALU b31 ovf y31 slt=0 cin ・・・ cout a1 完成版 一般ビット用 1bit ALU b1 y1 slt=0 cin cout a0 完成版 一般ビット用 1bit ALU b0 y0 反転 cin 操作 2 cyin Created by Tsuneo Nakanishi, 2002-2004

  29. 完全版 32bit ALU(2) sltf a31 完成版 最上位ビット専用 1bit ALU b31 ovf y31 slt=0 cin ・・・ cout a1 完成版 一般ビット用 1bit ALU b1 y1 slt=0 cin cout a0 完成版 一般ビット用 1bit ALU b0 y0 cin 操作 2 反転 Created by Tsuneo Nakanishi, 2002-2004

  30. 完全版 32bit ALU(3) sltf a31 完成版 最上位ビット専用 1bit ALU b31 ovf y31 slt=0 cin ・・・ cout a1 完成版 一般ビット用 1bit ALU b1 y1 slt=0 cin cout a0 完成版 一般ビット用 1bit ALU b0 結果が 0 のときに 1.減算の結果に適用して,等不等の検査ができる. y0 cin 2 ALU制御 3 Created by Tsuneo Nakanishi, 2002-2004

  31. 加算器の高速化(1) 順次桁上げ加算器(Ripple Carry Adder) a31 cout + b31 y31 c31 cin ビット数に比例して遅延が大きくなる. ・・・ a1 cout + b1 y1 c1 cin a0 cout + b0 y0 c0 Created by Tsuneo Nakanishi, 2002-2004

  32. 加算器の高速化(2) 真理値表 c1 = a0・c0 + b0・c0 + a0・b0 = (a0 + b0)・c0 + a0・b0 Created by Tsuneo Nakanishi, 2002-2004

  33. 加算器の高速化(3) 32個の各加算器の回路は同じであるので, c1 = a0・c0 + b0・c0 + a0・b0 = (a0 + b0)・c0 + a0・b0 c2 = a1・c1 + b1・c1 + a1・b1 = (a1 + b1)・c1 + a1・b1 … c31 = a31・c31 + b31・c31 + a31・b31 = (a31 + b31)・c31 + a31・b31 c2の右辺の c1,c3 の右辺の c2,…を順次置換すると, c2 = ((a0 + b0)・c0 + a0・b0)・(a1 + b1) + a1・b1  c1がわからなくても,c0から c2が求められる. c3 = (((a0 + b0)・c1 + a0・b0)・(a1 + b1) + a1・b1)・(a2 + b2) + a2・b2  c2がわからなくても,c0から c3が求められる. … ビット数が増えるほど,指数関数的に式が長くなる(=回路が大きくなる). Created by Tsuneo Nakanishi, 2002-2004

  34. 加算器の高速化(4) gi = ai・bi,pi = ai + bi とすると, c1 = g0 + p0・c0 c2 = g1 + p1・g0 + p1・p0・c0 c3 = g2 + p2・g1 + p2・p1・g0 + p2・p1・p0・c0 c4 = g3 + p3・g2 + p3・p2・g1 + p3・p2・p1・g0 + p3・p2・p1・p0・c0 4bit 桁上げ先見加算器(Carry Look Ahead Adder) 4bit 桁上げ先見 加算器 a3~a0 c4 4 b3~b0 y3~y0 4 4 c0 Created by Tsuneo Nakanishi, 2002-2004

  35. 加算器の高速化(5) 4bit 桁上げ先見加算器(Carry Look Ahead Adder) a3 y3 + 桁上げ先見ユニット g3 b3 c4 p3 c3 y2 a2 + g2 b2 p2 c1 y1 a1 + g1 b1 p1 c1 y0 a0 + g0 b0 p0 c0 Created by Tsuneo Nakanishi, 2002-2004

  36. 加算器の高速化(6) 32bit 加算器 a31~a28 4bit 桁上げ先見 加算器 4 b31~b28 y31~y28 4 4 c28 まだ長い! ・・・ a7~a4 4bit 桁上げ先見 加算器 4 b7~b4 y7~y4 4 4 c4 a3~a0 4bit 桁上げ先見 加算器 4 b3~b0 y3~y0 4 4 c0 Created by Tsuneo Nakanishi, 2002-2004

  37. 加算器の高速化(7) 8個の各4bit桁上げ先見加算器の回路は同じであるので, c4 = g3 + p3・g2 + p3・p2・g1 + p3・p2・p1・g0 + p3・p2・p1・p0・c0 c8 = g7 + p7・g6 + p7・p6・g5 + p7・p6・p5・g4 + p7・p6・p5・p4・c4 … c32 = g31 + p31・g30 + p31・p30・g29 + p31・p30・p29・g28 + p31・p30・p29・p28・c28 P0 = p3・p2・p1・p0,P1 = p7・p6・p5・p4,…,G0 = g3 + p3・g2 + p3・p2・g1 + p3・p2・p1・g0, G1 = g7 + p7・g6 + p7・p6・g5 + p7・p6・p5・g4,…として,c8の右辺の c4,c12 の右辺の c8,…を順次置換すると, c4 = G0 + P0・c0 c8 = G1 + P1・G0 + P1・P0・c0 c12 = G2 + P2・G1 + P2・P1・G0 + P2・P1・P0・c0 … Created by Tsuneo Nakanishi, 2002-2004

  38. 加算器の高速化(8) 32bit 桁上げ先見加算器(Carry Look Ahead Adder) a31~a28 y31~y28 + 桁上げ先見ユニット 4 4 G7 b31~b28 c32 4 P7 c28 ・・・ c8 y7~y4 a7~a4 + 4 4 G1 b7~b4 4 P1 c4 a3~a0 y3~y0 + 4 4 G0 b3~b0 4 P0 c0 Created by Tsuneo Nakanishi, 2002-2004

More Related