1 / 35

マイクロプロセッサ

マイクロプロセッサ. 第7回. コンピュータにおける算術論理演算(その3) 関根 優年. 除 算. 2 進数の除算. 商. 1001 1001010 -1000 0010 0101 1010 -1000 10. 除数. 被除数=商 × 除数 + 剰余. 1000. 被除数. 除算の各ステップ. 1.被除数の数字が1    ⇒ 除数を適切な位置にした値を       被除数から引く. 剰余. 2.被除数の数字が0    ⇒ 何もしない. 基本的な流れは 10 進数 の場合と同じ

tamra
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. マイクロプロセッサ 第7回 コンピュータにおける算術論理演算(その3) 関根 優年

  2. 除 算 2進数の除算 商 1001 1001010 -1000 0010 0101 1010 -1000 10 除数 被除数=商×除数 + 剰余 1000 被除数 除算の各ステップ 1.被除数の数字が1    ⇒ 除数を適切な位置にした値を       被除数から引く 剰余 2.被除数の数字が0    ⇒ 何もしない 基本的な流れは10進数 の場合と同じ (長くなるので4ビットで記述)

  3. 除算アルゴリズムとハードウェアの第1のバージョン除算アルゴリズムとハードウェアの第1のバージョン 開始 1. 剰余レジスタから除数レジスタを 引き、結果を剰余レジスタに収める 除数 右シフト 64ビット 剰余を判定 剰余<0 剰余≧0 商 64ビット ALU 左シフト 32ビット 2b. 剰余レジスタ+除数 レジスタ⇒剰余レジスタ 商レジスタを左シフトし、 右側の新しいビットを0 制御 剰余 2a. 商レジスタを 左シフトし、右側の 新しいビットを1 書き込み 64ビット 初期状態では 3. 除数レジスタを1ビット右にシフト 商レジスタ 0 剰余レジスタ  右半分 32ビットの被除数  左半分 0 繰返回数 の判定 33回未満 33回 終了

  4. 例題) 第1の除算アルゴリズム 710÷210(01112÷00102)を計算せよ 例題) 答) 商 3 剰余 1

  5. 除算アルゴリズムとハードウェアの第3のバージョン除算アルゴリズムとハードウェアの第3のバージョン 開始 除数 1. 剰余レジスタを1ビット左にシフト 32ビット 2. 剰余レジスタの左半分から除数レジスタを 引き、結果を剰余レジスタの左半分に収める 32ビット ALU 左シフト 剰余を判定 剰余<0 剰余≧0 剰余 制御 右シフト 書き込み 64ビット 3b. 剰余レジスタの左半分 +除数レジスタ⇒ 剰余レジスタの左半分 剰余レジスタを左シフトし、 右側の新しいビットを0 3a. 剰余レジスタを 左シフトし、右側の 新しいビットを1 初期状態では 剰余レジスタ  右半分 32ビットの被除数  左半分 0 繰返回数 の判定 33回未満 33回 終了 :剰余レジスタの左半分を1ビット右にシフト

  6. 例題) 第3の除算アルゴリズム 例題) 710÷210(01112÷00102)を計算せよ 答) 商 3 剰余 1

  7. 符号付き除算 I 1)除数・被除数の符号を記憶させる. 2)両者の符号が異なる場合には、    絶対値に対する除算を行い,    商の符号を反転させる   → 剰余の符号をどうするかが問題     被除数 = 商 × 除数 + 剰余 被除数と除数の符号が違っても、演算で得られた 商と剰余の絶対値は変わらないでほしい 例) 7 ÷ 2       ⇒ 商 3, 剰余 1 (-7) ÷ 2    ⇒ 商 ー3, 剰余 -1 7 ÷(- 2)    ⇒ 商 ー3, 剰余 1 (-7) ÷ (-2) ⇒ 商 3, 剰余 -1

  8. 符号付き除算 II 除数と被除数の符合の積が商の符号となる,        剰余 = 被除数 - 商 × 除数  = -7 - (-3×2) = -1 しかし, = -7 - (-4×2) = +1 もある. こうならないように,     “被除数と除数の符号は同じでなければならない” という規則を適用する. ー(x÷y) と(-x)÷yも共に,同じように,絶対値 |x|÷|y| で計算して,後で,        商の符号=被除数の符号×除数の符号   を決めるようになる.  

  9. MIPSにおける除算 除算は基本的には乗算と同じハードウェアで実現 ⇒ 除算命令終了時、剰余 : 32ビットレジスタ(Hi) 商 : 32ビットレジスタ(Lo) MIPS命令 div : 符号なし除算(divide)の命令 divu: 符号あり除算(unsigned divide)の命令 除算結果をレジスタHi, Loに格納する命令(乗算と同じ) mflo : move from lo 命令(商) mfhi: move from hi 命令(剰余) オーバーフロー情報をソフトウェアで見知する必要あり。 それ以外に0による除算をチェックする必要あり

  10. データ処理と制御 データ処理: データは経路(パス)を通っていくうちに処理される. この経路を データーパス という     または,Register Transfer LevelModel という 記憶:  データを一時的に記憶する    レジスター,ラッチ      データを長期的に記憶する    メモリ      制御:    流れの経路の制御,処理内容の選択の制御      処理2 処理4 処理1 処理3 処理5

  11. 設計レベルと設計原理 機能設計: 命令と命令セット         符号化の方式と計算方式   構造設計: システムのアーキテクチャー         処理の流れの設計 詳細設計,実現方式, 具現化(implementation):         論理素子を構成して実現する.         論理素子を配置して素子間を配線する. CMOS素子等で論理素子を実現し,         金属配線で繋ぐ ⇒ LSIパターンデータを作成 LSIを製造する         設計原理: 一般的な場合を高速化せよ 単純性は規則性につながる

  12. 命令実行の制御の概要 全ての命令に必要とされる2つのステップ 1. メモリから命令をフェッチするために、プログラムカウンタの値をコードが   保持されているメモリに送る 2. 命令のレジスタフィールドに指定されるレジスタの値を読みだす ロード・ストア命令 : メモリアドレスの計算 整数算術論理演算命令 : 演算 分岐命令 : 比較 この後は、ALUを用いた処理が 行われることがほとんど MIPS命令の実現方式の概念図 レジスタ 命令 メモリ データ PC データ・ メモリ ALU アドレス レジスタ 番号 命令 アドレス レジスタ 番号 レジスタ 番号 データ

  13. 論理要素とクロック方式 MIPSの具体的な機能ユニット データパス部: 組み合わせ論理要素(combinational element) - データの値に何らかの操作を与える               例) ALU ,PC,メモリ,レジスタ 制御部: 状態論理要素(state element) - 状態を記憶する               例) 命令・データメモリ、レジスタ レジスタ 命令 メモリ データ PC データ・ メモリ ALU アドレス レジスタ 番号 命令 アドレス レジスタ 番号 レジスタ 番号 データ 状態論理要素-最低でも入力2、出力1が必要         (データ入力、タイミング信号、データ出力)

  14. クロック方式 クロック信号: 時間を離散化する. 読出し可能・書込み可能かを定義する信号: 読出し、書込みタイミングの分離  読出し、書込みタイミングが同時だと、 両者の情報が交じり合い、不確定性を生む 組み合わせ論理回路 状態 論理要素 1 状態 論理要素 2 クロック信号

  15. エッジトリガクロック方式の利点 エッジトリガクロック方式: クロック信号のエッジのみで状態更新を行う方式                  同一クロックサイクルで、読み出し・書込みを両方行える クロック信号 状態更新 状態更新 (立ち上がり動作で、状態更新を行うとした場合) 状態論理要素 組み合わせ論理回路 書き込み 読み出し エッジ立ち上がり以外で更新(エッジ立下り,エッジ立ち上がり)

  16. データパスの構築 すべての命令:クロック・エッジから実行を開始し,次のクロックエッジまでに 実行を完了する ⇒ 一番実行時間が長い命令が実行できるように,              クロック幅を長くする.    ⇒長い実行時間の命令は複数クロックで実行するようにする.  •  各命令ごとに,データを処理する部品を逐次的に並べる.  •    処理が似たものは同じような部品の配置になる.(R形式命令,...) •  一時に,一つの命令しか実行しないので,共通に使える部品をまとめる. •  命令ごとに異なる処理は,場合わけを制御する. •    制御は後でまとめて設計することにし,データの処理手順だけに注目

  17. プログラム命令を送出するデータパス 加算 4 命令 メモリ 命令アドレス PC 命令 命令を格納し、それをアクセスするには状態論理要素が2つ、 次の命令を計算するためには加算器が一つ必要 命令アドレス 必要となる 論理要素 命令 メモリ PC 命令 加算 和 プログラムカウンタ (命令アドレス を格納する) 命令アドレスの計算 命令を格納する データパスの一部 命令フェッチRead(PC) PC=PC+4

  18. プログラム命令を送出するデータパス • module 記述 insAdr InstMem Inst module mem(input iAdr, output oData); reg [31:0] m [0: 1023]; assign oData = m[iAdr]; endmodule Reg [31:0] PC; PC

  19. 1bit Full Adder のHDL module Fadder (input iA, iB, input iC, output oS, output oC ); assign oC = iA&iB | iB&iC | iC&iA; assign oS = iA&iB&iC | (iA|iB|iC) & (!oC) ; endmodule

  20. 1bit ALU のHDL module ALU( input iA, iB, iC, input [1:0] cmd, output oS, oC ); wire wand, wor, waddr; assign wand = iA & iB; assign wor = iA | iB; Fadder adder(.iA(iA), .iB(iB), .iC(iC), .oC(.oC), .oS(wadder)); assign oS = mux(cmd, wand, wor, wadder);

  21. MULTIPLEXER(MUX)のHDL記述 function mux( input [1:0] cmd, input iand, ior, iadder); begin case (cmd) 2’b00: mux = iand; 2’b01: mux = ior; 2’b10: mux = iadder; endcase end endfunction endmodule

  22. Add 4 InstMem 命令アドレス PC Inst プログラム命令を送出するデータパス always @(posedge CLK)begin if(!nReset)begin PC <= 32’b0; end else begin PC <= oS0; end end assign insAdr = PC; ALU alu0(.iA(PC), iB(32’b4), iC(0), icmd(2’b10), .oC(wC0), .oS(oS0));

  23. プログラム命令を送出するデータパス mem instMem(.iAdr(insAdr), .oData(Inst)); Inst を解読して、 レジスタA,B,を定める ALU alu1(.iA(wa), iB(wb), iC(wc), icmd(wcmd), oS(wS), oC(wC) );

  24. 算術論理演算命令のデータパス 5 5 5 R形式命令(算術論理演算命令)のデータパス  レジスタを読出し、ALUで演算し、演算結果をレジスタに書き込む 6ビット 5ビット 5ビット 6ビット 5ビット 5ビット 必要となる論理要素 rs rt データ 読出 アドレス 読出 reg1 レジスタ ALU操作 3 レジスタ 番号 ALU 読出 アドレス 読出 reg2 ゼロ判定 書込 アドレス ALU ALU結果 書込 データ acm データ RegWrite

  25. データパスでの流れ 命令メモリ(レジスタファイル) PC ⇒ 6ビット 5ビット 5ビット 6ビット 5ビット 5ビット • どこかで命令が •  解読され, •  制御信号が •  出されている. • データ出力の •  ゲートを制御 •  する ALU操作 3 読出 アドレス 読出 reg1 レジスタ ゼロ判定 読出 アドレス ALU 書込 アドレス ALU結果 命令 読出 reg2 書込 データ RegWrite

  26. assign oDATA = m[PC] assign opcode = oData[31:26]; assign rs = oData[25:21]; assign rt = oData[20:16]; assign rd = oData[15:11]; assign shant = oData[10: 6]; assign func = oData[ 5: 0]; 命令メモリ(レジスタファイル) PC ⇒ 6ビット 5ビット 5ビット 6ビット 5ビット 5ビット

  27. register register( input [4:0] rs, rt, rd, input [31:0] wData, output [31:0] A, B , input RegWrite ); 読出 アドレス 読出 reg1 レジスタ 読出 アドレス 書込 アドレス 読出 reg2 書込 データ RegWrite

  28. ロード/ストア命令のデータパス 32 16 必要となる 論理要素(追加分) 符号 拡張 MemWrite 読出 アドレス 読出 データ データ メモリ 書込 アドレス 書込 データ 例) lw $t1,offset($t2)  ($t2の値)+offsetを行う際に offsetを16ビットから32ビットに符号拡張 MemRead データパス ALU操作 3 読出 reg1 読出 reg1 レジスタ 命令 MemWrite ゼロ判定 読出 reg2 ALU 読出 データ データ メモリ 書込 reg アドレス ALU結果 読出 reg2 書込 データ 書込 データ RegWrite 符号 拡張 32 16 MemRead

  29. 浮動小数点と科学記数法 数値演算には、小数の表現はどうする? 固定小数点 X = a+b 例) 44.125 (8ビット整数 、8ビット小数) b a 00101100 00100000 小数部分 整数部分 44 0.125 小数点の位置が固定 浮動小数点 固定小数点では、 表現可能な範囲が狭い X = b x 2a b a 指数部分 仮数部分 符号 次のような表記を2進法に適用する 小数点の位置が浮動 2.4888 x 1058 指数部分 仮数部分 正規化

  30. 浮動小数点表現形式の数値表現I IEEE754による表現:(-1)S x (1+仮数) x 2(指数-ゲタ) 単精度浮動小数点形式(32bit) (Cではfloat型に相当) LSB MSB ゲタ=127 S 指数 仮数 1bit 8bit 23bit 符号: Sは浮動小数点表現による数値の符号 仮数: 数値が0以外に必ず存在する先頭の1を仮数では持たない 指数: 2の補数表現のままでは,-1=11111111,1=00000001 であり,      最上位ビットで,指数の大小比較が出来ない.  ⇒  下駄を履かせる.      最も小さな負の指数を  0000…02に設定し、      最も大きな正の指数を  1111…12に設定する.

  31. 浮動小数点表現形式の数値表現II 倍精度浮動小数点形式(64bit) (Cではdouble型に相当) ゲタ=1023 S 指数 52bit 仮数 11bit 1bit 単精度(singleprecision)では28⇒256/2=128(10000000) が中心値  下駄は 128-1=127=01111111, 2128 = 3.4x1038 倍精度(doubleprecision)では, 211=2048/2=>1024が中心値, 下駄は 1024-1=1023,   21024 = 1.8x10308 これ以上の数値はオーバーフロー これ以下の数値はアンダーフロー

  32. 例題) 浮動小数点形式による表現 例題)-0.75を単精度、倍精度(IEEE754)で表現する 答) -0.75 = - (1 x 0.5 + 1 x 0.25) = -1.12 x 2-1 単精度 :S=1, 仮数=0.12, 指数=127-1=126 10111111 01000000 00000000 00000000 倍精度 :S=1, 仮数=0.12, 指数=1023-1=1022 10111111 11101000 00000000 00000000 00000000 00000000 00000000 00000000 例題)単精度(IEEE754)で表現する 11000000 10100000 00000000 00000000を10進数に 答) 単精度 :S=1, 仮数=0.012=0.25,指数=129 (-1)1 x (1+ 0.25) x 2(129-127) = -1.25x 4 = -5.0

  33. 浮動小数点加算 例) 9.99910×101 + 1.61010×10-1(仮数を4桁、指数を2桁と仮定した10進の例) ステップ1) 小数点の位置合わせ 9.99910×101 ⇒  9.99910×101 1.61010×10-1⇒  0.01610×101 指数が大きい方に合わせる ステップ2) 仮数の加算 9.99910×101 + 0.01610×101= 10.015× 101 ステップ3) 値の正規化 10.015× 101 = 1.0015× 102 ステップ4) 仮数の有効桁あわせ 1.0015× 102 ⇒ 1.002× 102 (四捨五入) もし、四捨五入して桁が増えた場合はステップ3へ

  34. 浮動小数点数の加算専用の算術演算ユニット

  35. IEEE754:浮動小数点表現 WilliamKahan 1953年トロント大学学部在学中にプログラムを習得 1960: IBM7090,FORTRANを利用 航空大学の大学院生が翼の安定性,失速の研究(シミュレーション) 単精度,倍精度でも結果は同じで,翼は失速した. Kahanが対数プログラムの新バージョンを作り,実行.   今度は,単精度でも,徐々に失速するとの結果が出た. IBM7090から7094に更新,倍精度浮動点小数ハードが不可.   倍精度で計算した時に限って,突然の失速が発生する. 解明には膨大な時間が必要であった.倍精度用のガード桁がなかった. ユーザは1.0-x の変わりに, (0.5-x)+0.5と記述してガード桁の不備を回避

More Related