809 Views
April 16, 22
スライド概要
1. 算術論理演算器は簡単な論理回路の組合せで作れる
2. CPUとはこのような基本要素の集合でできている
機械系のためのメカトロニクス
内容
1. 加減算器の作成(ALU)
①半加算回路
②全加減算回路
③n桁2進加算器の構成
④減算器を作る(負数の加算とする)
⑤負数の作り方(補数)
⑥n桁の2進加減算器の完成
2. 論理演算器の作成(ALU)
①論理演算器(bit毎の演算)
②論理演算器(全加減算器の活用)
③論理演算器(bit毎の演算)の完成
④論理演算器(演算の幅を広げる)
3. 演算結果の状態判定表示(ALU)
①演算結果の状態判定表示
②N:negative(負数の検出)
③Z:zero(ゼロの検出)
④V:overflow(オーバーフローの検出)
⑤C:Carry (最上位からの桁上げ検出)
4. ALUの完成
これまでに主に,ロボティクス・メカトロニクス研究,特にロボットハンドと触覚センシングの研究を行ってきました。現在は、機械系の学部生向けのメカトロニクス講義資料、そしてロボティクス研究者向けの触覚技術のサーベイ資料の作成などをしております。最近自作センサの解説を動画で始めました。https://researchmap.jp/read0072509 電気通信大学 名誉教授
第11回コンピュータの原理 メカトロニクス CPU_ALUについて 下 条 誠 電気通信大学名誉教授 https://researchmap.jp/read0072509/ 機械系のためのメカトロニクス The University of Electro-Communications Department of Mechanical Engineering and Intelligent System
メカトロニクス:アナログとディジタル 現実の世界 計算機の世界 アナログ量 (連続量) デジタル量 (離散量) (電圧、電 流) 物体 位置姿勢 距離 位置、速度、 加速度、力 関節 角度 力 ハンド 位置、速度 把持力 制御量 モータ制御用 電圧電流 今回の 大テーマ デジタル制御 digital control 測定量 Hand 2 ADC Program development 0 0 0 1 1 1 1 ..... 1 1 0 1 1 0 1 1 0 0 1 Filtering、 modeling、 learning DAC Program execution Robot Arm サンプル値 量子化データ 11 10 アナログ量 0 0 0 1 1 1 1 1 0 0 1 0 1 1 1 1 0 1 1 0 1 1 0 0 1 1 0 1 0 1 1 0 01 00 time アナログ信号 連続信号 0 0 0 1 ・・・・ 1 1 1 0 量子化(2bit例) 時間的に離散化 time デジタル量 デジタル信号(2bit例) 21 20
達成目標 1. 算術論理演算器は簡単な論理回路の組合せで作れる 2. CPUとはこのような基本要素の集合でできている このようなことが何となくわかる メカトロニクス第6回エレクトロニクス ディジタル回路も参照のこと 今回は少し細かいかもしれません。とばしても問題はないでしょう。 ALUは意外と“簡単な論理回路の組合せ“で作れるのだとわかるだけで よいかと思います。 参考のためのスライドです。とばしても構いません。 参考文献:都倉信樹、コンピュータ概論、岩波書店(1992) 3
内 容 1. 加減算器の作成(ALU) ① 半加算回路 ② 全加減算回路 ③ n桁2進加算器の構成 ④ 減算器を作る(負数の加算とする) ⑤ 負数の作り方(補数) ⑥ n桁の2進加減算器の完成 2. 論理演算器の作成(ALU) ① 論理演算器(bit毎の演算) ② 論理演算器(全加減算器の活用) ③ 論理演算器(bit毎の演算)の完成 ④ 論理演算器(演算の幅を広げる) 3. 演算結果の状態判定表示(ALU) ① 演算結果の状態判定表示 ② N:negative(負数の検出) ③ Z:zero(ゼロの検出) ④ V:overflow(オーバーフローの検出) ⑤ C:Carry (最上位からの桁上げ検出) 4. ALUの完成 4 A B ALU
コンピュータの基礎 5
2.CPUの基礎 1. バスの説明 2. CPUの基礎 6 ALUについて解説 A B ① CPUの内部構造 ② CPUへの命令 ③ アドレス指定モード ④ 実行順序の制御 3. メモリーの説明 説明は後のコンピュータに大きな影響を与えた、往年の名機“PDP-11”を例にとる。 PDP-11上のオペレーティングシステム (OS) の設計は他のOS、例えばCP/MやMSDOSの設計に影響を及ぼしている。 最初の公式にUNIXと名付けられたバージョンのOSは、1970年に PDP-11/20 上で 動作した。PDP-11のプログラミング上の低レベルな特徴とC言語の言語要素の類似は 非常によく言われてはいる(wikipedia) ALU
CPUの構成例(PDP-11) 7 CPUの所で詳しく解説します R0 R1 RR RA RB R2 R3 R4 IR(命令レジスタ) BAR decoder BCR controller R5 trB data 番地 R7(PC) trA control BDR 制御部 R6(SP) address 0000 IBA ……………………….. IBB A 1000 B Shifter Main Memory PSW 0101011101010001 0111011100010001 0110000001000001 …………………….. ALU IBG ………………………….. RAM ⚫ PC: Program Counter ⚫ PSW: Program Status Word 次の命令のメモリアドレスを示す 演算結果の状態などを示す ⚫ ALU: Arithmetic and Logic Unit 算術演算や論理演算などを行う ROM IPL Initial program loader 主記憶
ALU(Arithmetic Logic Unit) 1. 加減算器の作成(ALU) ① 半加算回路 ② 全加減算回路 ③ n桁2進加算器の構成 ④ 減算器を作る(負数の加算とする) ⑤ 負数の作り方(補数) ⑥ n桁の2進加減算器の完成 2. 論理演算器の作成(ALU) ① 論理演算器(bit毎の演算) ② 論理演算器(全加減算器の活用) ③ 論理演算器(bit毎の演算)の完成 ④ 論理演算器(演算の幅を広げる) 3. 演算結果の状態判定表示(ALU) ① 演算結果の状態判定表示 ② N:negative(負数の検出) ③ Z:zero(ゼロの検出) ④ V:overflow(オーバーフローの検出) ⑤ C:Carry (最上位からの桁上げ検出) 4. ALUの完成 ALU:算術論理演算装置 A B ALU 8
ALU (Arithmetic Logic Unit) ALUは、1)加減演算、2)論理演算、3)状態判定を行う装置である A B A入力 1)加減算器 B入力 2)論理演算器 3)演算結果の状態判定 D F 出力 ステータス 制御部 入力 演算結果 G について解説する 9
1. 加減算器の作成(ALU) 10 ⚫ 2進数の加減算器を作る ➢ G=A+B or G=A-B ① 入力A (16bit) A(a15 a14 a13…a2 a1 a0) ② 入力B (16bit) B(b15 b14 b13…b2 b1 b0) ③ 出力G (16bit) S(s 15 s 14 s 13 …s 2 s 1 s 0 ) A B A入力 B入力 D F 加算or減算 指令 出力 ステータス 制御部 入力 演算結果 G 例として16bit演算とした
①半加算器(Half Adder) 11 下位からの桁上げを含まない1bit加算器を作る 1bit半加算器関数表 ⚫ 1bitでの演算(a+b) a 0 b + 0 Sum Carry 0 + 1 1 + 0 1 + 1 0 0 1 0 1 0 0 1 ① ② ③ ④ ⚫ 1bit半加算器の論理式 ① ② ③ ④ 1 a a b C S 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 AND XOR Sum 𝑎⨁𝑏 𝑐 = 𝑎𝑏 𝑠 = 𝑎𝑏 ത + 𝑎𝑏ത = 𝑎⨁𝑏 Carry 𝑎⋅𝑏 b 1bit半加算回路
①半加算器(Half Adder) 12 下位からの桁上げを含まない1bit加算器を作る 半加算器 a Sum a 𝑎⨁𝑏 c HA Carry Carry 𝑎⋅𝑏 b a f b 𝑓 = 𝑎𝑏 ത + 𝑎𝑏ത = 𝑎⨁𝑏 Half Adder s Sum Half Adder 1bit半加算回路 XOR素子 b ⚫ 半加算器 ① 1bit演算を行う ② 上位への桁上げあり(Carry) ③ 下位からの桁上げなし
②全加算器(Full Adder) 13 下位からの桁上げを含む全加算器を作る HA(Half Adder)を2つ使うこと で全加算器を作る 入力 Carry a b ① 1bit演算を行う ② 上位への桁上げあり ③ 下位からの桁上げあり 下位からの 桁上げ HA a Half Adder c Cout ⚫ 全加算器 d Carry c Cin HA Sum 表記としてあり:上位への桁上げCout d FA Full Adder 上位へ の桁上 げ Half Adder S b 完成 下位からの桁上げCin s 下位か らの桁 上げ Sum Full Adder
②全加算器(Full Adder) 14 下位からの桁上げを含む全加算器を作る(論理式から) 1bit全加算器関数表 a b Carry c d FA Full Adder 上位へ の桁上 げ Cout s 1bit加算を行う 全加算器の論理 値表を作る 下位か らの桁 上げ Sum C in Full Adder 上位への桁上げCout 下位からの桁上げCin この様な表し方もある a b d c s 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 ⚫ 1bit全加算器の論理式 ത + 𝑎𝑏 𝑠 = 𝑎ത𝑏𝑑 ത 𝑑ҧ + 𝑎𝑏ത 𝑑ҧ + 𝑎𝑏𝑑 これを簡単化する ത + 𝑎𝑏𝑑ҧ + 𝑎𝑏𝑑 𝑐 = 𝑎𝑏𝑑 ത + 𝑎𝑏𝑑
②全加算器(Full Adder) 15 1bit全加算器の論理式の簡単化 ത + 𝑎𝑏 ത 𝑑ҧ + 𝑎𝑏ത 𝑑ҧ + 𝑎𝑏𝑑 1) 𝑠 = 𝑎ത𝑏𝑑 カルノー図ではグループがみえない ⚫ sのカルノー図 bd a 00 01 11 10 0 0 1 0 1 1 1 0 1 0 ➢ 式の変形で簡略化を行う ത + 𝑎𝑏 𝑠 = 𝑎ത𝑏𝑑 ത 𝑑ҧ + 𝑎𝑏ത 𝑑ҧ + 𝑎𝑏𝑑 = 𝑎ത𝑏ത + 𝑎𝑏 𝑑 + 𝑎𝑏 ത + 𝑎𝑏ത 𝑑ҧ = 𝑎⨁𝑏 𝑑 + 𝑎⨁𝑏 𝑑ҧ = 𝒂⨁𝒃⨁𝒅 ത + 𝑎𝑏𝑑ҧ + 𝑎𝑏𝑑 2) 𝑐 = 𝑎𝑏𝑑 ത + 𝑎 𝑏𝑑 ⚫ cのカルノー図 bd a 00 01 11 10 0 0 0 1 0 1 0 1 1 1 ➢ カルノー図から 𝑐 = 𝒂𝒃 + 𝒂𝒅 + 𝒃𝒅
②全加算器(Full Adder) 16 下位からの桁上げを含む全加算器を作る(論理式から) a a b d Sum 𝑠 Carry c 𝑐 d FA Full Adder 上位へ の桁上 げ Carry b s 下位か らの桁 上げ Sum Full Adder 全加算器の回路は、いろいろある。もち ろん1bit全加算器の論理式の簡単化を行 わず、下記式をそのまま実現しても良い 1bit全加算器 の論理式 1) 𝑠 = 𝑎⨁𝑏⨁𝑑 2) 𝑐 = 𝑎𝑏 + 𝑎𝑑 + 𝑏𝑑 ത + 𝑎𝑏 𝑠 = 𝑎ത𝑏𝑑 ത 𝑑ҧ + 𝑎𝑏ത 𝑑ҧ + 𝑎𝑏𝑑 ത + 𝑎𝑏𝑑ҧ + 𝑎𝑏𝑑 𝑐 = 𝑎𝑏𝑑 ത + 𝑎𝑏𝑑
③n桁2進加算器の構成 ⚫ 計算 (16bit) S=A+B ⚫ n桁2進加算器 ① 入力A (16bit) A(a15 a14 a13…a2 a1 a0) ① FA(Full Adder)を n個繋ぎ合わせるこ とで実現できる ② 入力B a15 b15 FA S15 オーバーフロー ビット (16bit) B(b15 b14 b13…b2 b1 b0) ③ 出力S (16bit) S(s 15 s 14 s 13 …s 2 s 1 s 0 ) ② 減算器は次頁 c15 17 a14 b14 d15 c14 FA a1 b1 d14 ・・・ c1 S14 FA S1 出力(和) a0 b0 d1 c0 FA d0 S0 𝑑𝑖 = 𝑐𝑖−1 1 ≤ 𝑖 ≤ 15 n桁へはn個接続
④減算器を作る(負数の加算とする) 1. 減算は、負の数の加算とする 18 𝑎 − 𝑏 = 𝑎 + (−𝑏) 負の数は補数表現で表す 2. 2進数で負の数をどう表すか 3. 2進数の補数表現 重 𝑋: n桁の2進数 要 𝑋 = 2𝑛 − 𝑋 𝑋 = 𝑋の補数とする 例)4桁の2進数について例を示す 𝑋 = 24 − 𝑋 = 10000 − 0011 = 1101 𝑋 = 0011 2進数で3 検算 2進数で-3 𝑋 + 𝑋 = 0011 + 1101 = 10000 3 -3 無視する 下位4桁を取る 0
⑤負数の作り方(補数) ⚫ 4桁(n=4)の補数を作る(例) 𝑋 = 24 − 𝑋 = 10000 − 𝑋 10000 = 1111 + 1 なので 𝑋 = 1111 − 𝑋 + 1 と書換られ 𝑋ത = 1111 − 𝑋 と置くと 𝑋ത はXの全ビットを反転させたもの よって 𝑋 = 𝑋ത + 1 補数 ⚫ n桁の補数の作り方 Xのビットを全て反転させ、 +1とすればよい 例1) 全ビットの反転 = 1101 例2) 𝑋 = 𝑋ത + 1 +1 3 𝑋 = 0011 全ビット ത 反転 𝑋 = 0011 = 1100 𝑋 = 𝑋ത + 1 = 1100 + 1 Xの全ビット反転+1 ⚫ n桁の補数を作る 19 -3 5 +1 𝑋 = 0101 全ビット ത 反転 𝑋 = 0101 = 1010 𝑋 = 𝑋ത + 1 = 1010 + 1 = 1011 -5 +1
⑤負数の作り方(補数) 20 ⚫ 負数を論理回路を用いて作る (step1)Xのビットを全て反転させ、( step2)+1とする (step1)Xのビットを全て反転 X x f y 制御入力 XOR y=0 y=1 x y f 0 0 0 x f x f 0 1 1 0 0 0 1 1 0 1 1 1 1 0 1 1 0 非反転 XOR を使えば、 2 進数の全bit を 反転/非反転とす ることができる 反転 ( step2)+1とする a15 b15 FA a14 b14 d15 FA c14 c15 S15 a1 b 1 d14 FA ・・・ c1 S14 a0 b 0 d1 FA c0 S1 S0 d0 d0を“1”と すればよい
⑥n桁の2進加減算器の完成 1. 加算:制御信号xが”0” S=A+B 2. 減算:制御信号xが”1” S=A-B 21 ⚫ 2進加減算器の完成 ➢ n桁へはn個接続する ത ① XORは反転素子となりB(b15 b14 b13…b2 b1 b0)の全ビットが反転 𝐵 ② d0=1となり、最下位桁に桁上げがあること、”+1”に相当 = 𝐵ത + 1 ③ この結果入力Bは補数となる 𝐵 ④ よって、S=A+(-B)が実現。即ち減算となる n桁へはn個接続 16桁の2進加減算器 a15 b15 制御信号 a0 b0 a1 b1 a14 b14 x 0: add 1: sub c15 FA S15 d15 FA c14 S14 d14 ・・・ FA c1 S1 d1 FA c0 d0 S0 𝑑𝑖 = 𝑐𝑖−1 1 ≤ 𝑖 ≤ 15
2. 論理演算器の作成(ALU) ⚫ 2進加減算器を基に論理演算器を作る ➢ 論理演算の機能を回路で作る 1. 論理演算機能(G) 2. 演算結果の判定表示(D) ① Bit毎のAND ① N:negative 負数の時“1” ② Bit毎のOR ② Z:zero ゼロの時“1” ③ Bit毎のXOR ③ V:overflow オーバーフロー発生“1” ④ C:Carry 最上位からの桁上げ発生“1” 22
①論理演算器(bit毎の演算) 23 16bitのAとBの論理演算を例とする ① 入力A (16bit) A(a15 a14 a13…a2 a1 a0) ② 入力B (16bit) B(b15 b14 b13…b2 b1 b0) ③ 出力G (16bit) G(g15 g14 g13…g2 g1 g0) ⚫ bit毎の演算(対応するbit毎の演算を16bit同時に行う) ① aの通過 g[i]=a[i] (0≦i≦15) ② bの反転 g[i]=b[i] (0≦i≦15) ③ AND g[i]=a[i]・b[i] (0≦i≦15) 全加減算器 (Full Adder) ④ OR g[i]=a[i]+b[i] (0≦i≦15) を基に作る ⑤ XOR g[i]=a[i]⊕b[i] (0≦i≦15)
②論理演算器(全加減算器の活用) a Carry c 上位 への 桁上 げ 1bit全加算器関数表 b 1bit加算を行う 全加算器の表 d FA Full Adder s 24 Sum 下位 から の桁 上げ Full Adder a b d c s 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 制御入力 1bit全加算器の論理式 𝑠 = 𝑎⨁𝑏⨁𝑑 𝑐 = 𝑎𝑑 + 𝑎𝑐 + 𝑏𝑑 ⚫ dを制御入力とすると ➢ s出力、c出力は、AND、 OR、XORとなる d=0 d=1 s a⊕b a⊕b⊕1 c ab a+b XOR AND OR
②論理演算器(全加減算器の活用) ai bi x ci ⚫ 加減算器では d FA 1 ci-1 y ⚫ 論理演算器では ➢ y=0とすればよい gi (←“1”端子入力を選択) ✓ 減算ではx=1 z 1 ➢ y=1,v=1とすればよい ✓ 加算ではx=0 0 si 0 FA(Full Adder)の入出力を2:1セレクターを 用いて切り替える (←“0”端子入力を選択) ✓ ANDではx=0、z=0,v=0 v ✓ ORでは x=0、z=1,v=0 ✓ XORではx=0、z=0,v=1 d=0 d=1 si ai⊕bi ai⊕bi⊕1 ci aibi ai+bi 2:1 セレクタ 25
③論理演算器(bit毎の演算)完成 ⚫ FAを用いたbit毎の演算(AND,OR,XOR)の完成 2:1 セレクタ x y z u v 演算出力 0 1 - 0 1 aとbの加算 a+b 1 1 - 1 1 aとbの減算 a -b 0 0 0 - 0 Bit毎のAND g[i]=a[i]・b[i] 0 0 1 - 0 Bit毎のOR g[i]=a[i]+b[i] 0 0 0 - 1 Bit毎のXOR g[i]=a[i]⊕b[i] 26
④論理演算器(演算の幅を広げる) 27 入力に“1”、“0”を与えたときの例を示す。ここでは、“0”はa側、“1”はb側のみとした。 このように演算の機能を増やすことができる 制御入力 ALUの出力 入力 入力 定数を与えたときの出力 g x y z u v g a b 0 1 - 0 1 𝑎+𝑏 a 1 𝑎+1 1 加算 0 1 - 1 1 𝑎+𝑏+1 a 1 𝑎 +2 2 加算 1 1 - 1 1 𝑎−𝑏 a 1 𝑎−1 1 減算 1 1 - 0 1 𝑎−𝑏−1 a 1 𝑎−2 2 減算 0 0 0 - 1 0 b 0 0 - 1 0 b b ഥ b 通過 1 𝑎⊕𝑏 𝑎 ⊕ 𝑏ത 1 1 - 1 1 𝑎−𝑏 0 b −b 符号反転 0 0 0 - 1 𝑎⊕𝑏 a a 0 定数 0 1 1 - 1 1 𝑎−𝑏 0 1 −1 0 1 - 0 1 𝑎+𝑏 0 1 1 反転 定数-1 定数 1
3. 演算結果の状態判定表示(ALU) ⚫ 演算結果の状態判定を作る ➢ 演算結果の判定表示の機能を回路で作る方法 1. 論理演算機能(G) 28 例として16bitとする 2. 演算結果の判定表示(D) ① Bit毎のAND ① N:negative 負数の時“1” ② Bit毎のOR ② Z:zero ゼロの時“1” ③ Bit毎のXOR ③ V:overflow オーバーフロー発生“1” ④ C:Carry 最上位からの桁上げ発生“1”
① 演算結果の状態判定表示(ALU) 2. 演算結果の判定表示(D) ① N:negative 負数の時“1” N Z V C ② Z:zero ゼロの時“1” ③ V:overflow オーバーフロー発生“1” ④ C:Carry 最上位からの桁上げ発生“1” 演算結果の判定の意味 bit 1 0 N 𝑔<0 𝑔≥0 Z 𝑔=0 𝑔≠0 V overflow発生 overflowなし C 最上位からの桁上げ有 最上位からの桁上げ無し 29
② N:negative(負数の検出) 例として16bitとする ⚫ N:negative 負数の時“1” 15 出力g 14 s 1 13 0 12 - 11 - 10 - 9 - 8 - 2の補数表示の場合 ここを チェック 7 6 5 - 4 - 3 - 2 - 1 0 0 - - 1 • S=0 ならば正、よってN=0 • S=1 ならば負、よってN=1 例) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 -3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 15 13 12 11 10 9 8 7 6 5 4 3 2 1 0 14 30 +5 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 -5 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1
③ Z:zero(ゼロの検出) 出力g Z=1 ⚫ 出力gの全てのbitが “0”の時、Z=1 𝑍ҧ = 𝑔15 + 𝑔14 + 𝑔13 + 𝑔12 + 𝑔11 + 𝑔10 + 𝑔9 + 𝑔8 + 𝑔7 + 𝑔6 + 𝑔5 + 𝑔4 + 𝑔3 + 𝑔2 + 𝑔1 + 𝑔0 注)この論理和回路ではデータの遅延が起こるので、実際は違う方法となる。 31
④ V:overflow(オーバーフローの検出) 簡単のため、4bitの場合を例として説明する 32 ( -23=-8 から 23-1 =7 ) ⚫ 4bit 加算の場合: ① 正(0000~0111)+ 正(0000~0111) → {(0~7)+(0~7)} 結果が1000(8)~1110(14) のとき(=負のとき) 、overflow ② 正(0000~0111)+ 負(1000~1111)→ {(0~7)+(-1~-8)} 結果は–8~6 オーバーフローはない. ③ 負(1000~1111)+ 正(0000~0111) ) → {(-1~-8)+(0~7)} 結果は–8~6 オーバーフローはない. ④ 負(1000~1111)+ 負(1000~1111)→{(-1~-8) +(-1~-8)} 結果が0000(0)~0111(7) のとき(=正のとき) 、overflow ⚫ 4bit 減算の場合: ⑤ 正(0000~0111)–正(0000~0111) → {(0~7)-(0~7)} オーバーフローなし. ⑥ 正(0000~0111)–負(1000~1111) → {(0~7)-(-1~-8)} ①と同じ 結果が負のとき、 overflow. ⑦ 負(1000~1111)–正(0000~0111) → {(-1~-8)-(0~7)} ④と同じ。結果が正のとき,、 overflow ⑧ 負(1000~1111)–負(1000~1111) →{(-1~-8) +(-1~-8)} オーバーフローなし http://ocw.kyushu-u.ac.jp/menu/faculty/09/4.html
④ V:overflow(オーバーフローの検出) ① 正+正 6+3=9 overflow 4+3=7 0 + 0 1 1 0 0 1 1 0 0 1 1 ④ 負+負 (-6)+(-3)=-9 overflow c3=0 c2=1 0 + 0 0 1 0 1 0 1 1 0 1 1 正+負 6+(-3)=3 0 + 1 1 0 1 1 0 0 1 1 c3=0 c2=0 1 0 0 1 1 0 1 1 1 (-4)+(-3)=-7 1 1 0 0 0 1 0 0 1 1 + 1 1 1 c3=1 c2=1 1 0 1 0 1 1 ⑤ 正-正 1 0 1 0 1 1 ⑦ 負-正 c3=1 c2=1 0 + 1 2+(-3)=-1 0 1 0 1 c3=1 c2=0 c3=0 c2=0 ②, ③ + 1 1 6-3 =6+(-3)= =3 ⑥ 正-負 6-(-3)=6+3=9 →①と同じ overflow ⑧ 負-負 (-6)-(+3)=(-6)+(-3)=-9 →④と同じ overflow (-3)-(-6)=6+(-3)=3 (-3)-(-2)=2+(-3)=-1 33
④ V:overflow(オーバーフローの検出) 34 16Bitとしても同様で、まとめると a15 b15 c14 s15 c15 条 件 overflow 0 0 0 0 0 ①正+正=正/⑤正ー負=正 0 0 0 1 1 0 ①正+正=負/⑤正ー負=負 1 0 1 0 1 0 ②正+正=負/⑥正ー負=負 0 0 1 1 0 1 ②正+負=正/⑥正ー正=正 0 1 0 0 1 0 ③負+正=負/⑦負ー負=負 0 1 0 1 0 1 ③負+正=正/⑦負ー負=正 0 1 1 0 0 1 ④負+負=正/⑧負ー正=正 1 1 1 1 1 1 ④負+負=負/⑧負ー正=負 0 𝐶15 ≠ 𝐶14 ならばoverflowの発生 𝑜𝑣𝑒𝑟𝑓𝑙𝑜𝑤 𝐶14 𝐶15 http://ocw.kyushu-u.ac.jp/menu/faculty/09/4.html
④V:overflow(オーバーフローの検出) 35 16bitの2の補数表現で可能数の範囲 -215=-32768 から 215-1 =32767 オーバーフロー( overflow )とは、この範囲からはみだすことである。よって、 この範囲からはみ出す加算条件を求める。正数と負数の加算ではオーバーフロー は発生しない 1. 正数+ 正数が負の数になる (正数- 正数=正数+負数) ① 正数とは、入力A,Bのbit15が“0”である。また結果が負となるとは、出力S のbit15が“1”である。よって、 ② 𝑎15 𝑏15 𝑠15 = 1 2. 負数+負数が正の数になる ① 負数とは、入力A,Bのbit15が“1”である。また結果が正となるとは、出力S のbit15が“0”である。よって、 ② 𝑎15 𝑏15 𝑠15 = 1 2. よって、オーバーフロー検出は V=𝑎15 𝑏15 𝑠15 +𝑎15 𝑏15 𝑠15 が V=“1”となるときである
⑤ C:Carry(最上位からの桁上げ検出) ⚫ Cは、最上位からの桁上げであり、加算器の最上位桁の桁上げ 出力そのものである 桁上げが発 生したら C=1 36
3.ALUの完成 (1/2) 37 制御 演算結果 の判定 ⚫ 論理素子には遅延が存在する。このため実際は様々な工夫を用いている ⚫ overflowについて、加減算結果についてのみ有効とするならば、“V・y”とすべきか?
3.ALUの完成 (2/2) 38 ⚫ ALUの制御入力 1 演算出力 x y z u v 0 1 - 0 1 aとbの加算 a+b 1 1 - 1 1 aとbの減算 a -b 0 0 0 - 0 Bit毎のAND g[i]=a[i]・b[i] 0 0 1 - 0 Bit毎のOR g[i]=a[i]+b[i] 0 0 0 - 1 Bit毎のXOR g[i]=a[i]⊕b[i] ⚫ 演算結果の判定表示 ① N:negative 負数の時“1” ② Z:zero ゼロの時“1” ③ V:overflow オーバーフロー発生“1” ④ C:Carry 最上位からの桁上げ発生“1” 0 1 s 0 s 2:1 セレクタ
おわり 39