內(nèi)容要點:邏輯運(yùn)算,二進(jìn)制加減法運(yùn)算,ALU的實現(xiàn)
算術(shù)運(yùn)算和邏輯運(yùn)算
-
加法指令的編碼示例1:
add $8,$9,$10#$8=$9+$10-
int f,g,h; ... //f->$8, g->$9, h->$10 f = g + h;查指令編碼表得:opcode=0,funct=
,shamt=0(非移位指令)
根據(jù)指令操作數(shù)得:rd=8(目的操作數(shù)),rs=9(第一個源操作數(shù)),rt=10(第二個源操作數(shù))
R opcode rs rt rd shamt funct 31 26 25 21 20 16 15 11 10 6 5 0 00000 01001 01010 01000 00000 100000
-
-
加法指令的編碼示例1:
addi $21,$22,-50#$21=$22+(-50)查指令編碼表得:opcode=
分析指令得:rs=22(源操作數(shù)寄存器編號), rt=21(目的操作數(shù)寄存器編號),immediate=-50(立即數(shù))
I opcode rs rt Immediate 31 26 25 21 20 16 15 0 001000 10110 10101 1111 1111 1100 1110
-
算術(shù)運(yùn)算指令(MIPS Core Instruction Set)
-
邏輯運(yùn)算指令(MIPS Core Instruction Set)
-
算術(shù)邏輯運(yùn)算的需求
- 算術(shù)運(yùn)算
- 兩個32-bit數(shù)的加法,結(jié)果為一個32-bit數(shù)
- 兩個32-bit數(shù)的減法,結(jié)果為一個32-bit數(shù)
- 檢查加減法的結(jié)果是否溢出
- 邏輯運(yùn)算
- 兩個32-bit數(shù)的“與”操作,結(jié)果為一個32-bit數(shù)
- 兩個32-bit數(shù)的“或”操作,結(jié)果為一個32-bit數(shù)
- 兩個32-bit數(shù)的“或非”操作,結(jié)果為一個32-bit數(shù)
- 算術(shù)運(yùn)算
門電路的基本原理
- 晶體管
- 現(xiàn)代集成電路中通常使用MOS晶體管(Metal-Oxide-Semiconductor)
- N型MOS管(Gate連接高電頻時導(dǎo)通)
- P型MOS管(Gate連接低電頻時導(dǎo)通)
- 現(xiàn)代集成電路中通常使用MOS晶體管(Metal-Oxide-Semiconductor)
- 非門(NOT gate)
- 與門(AND gate)
- 或門(OR gate)
- 異或門(XOR gate)
- 兩個值不相同,異或結(jié)果為真;反之為假
- A^B = (!A·B) + (A·!B)
- 寄存器的基本原理
- D觸發(fā)器(D flip-flop,DFF)
- 具有存儲信息能力的基本單元
- 由若干邏輯門構(gòu)成,有多種實現(xiàn)方法
- 主要有一個數(shù)據(jù)輸入,一個數(shù)據(jù)輸出和一個時鐘輸入
- 在時鐘clock的上升沿(0->1),采樣輸入D的值,傳送到輸出Q,其余時間輸出Q的值不變
- 照相機(jī)?顯示器 -> D觸發(fā)器
- 每10s按一次快門 -> clock頻率為0.1Hz
- 按快門后1s,顯示器上顯示照片 -> CLK-to-Q時間為1s
- 按快門前后,待拍攝的畫面不能有變化,否則畫面會糊 -> Setup/Hold時間
- 寄存器的構(gòu)成:32個D觸發(fā)器 -> 32-bit register -> CPU中的一個通用寄存器/PC/IR -> 相連得復(fù)雜的CPU
- D觸發(fā)器(D flip-flop,DFF)
算術(shù)邏輯運(yùn)算的實現(xiàn)(Arithmetic-Logical-Unit,ALU)
- MUX 多選器
- 加法和減法的實現(xiàn)
- 半加器(Half Adder)
- 輸入端口A、B
- 輸出端口S(和 & XOR Gate)、C(進(jìn)位 & AND Gate)
- 全加器(Full Adder)
- 由兩個半加器組成
- 輸入端口A、B、C
(進(jìn)位輸入)
- 輸出端口S(和)、C
(進(jìn)位輸出)
- 4-bit加法器
- 兩個4-bit二進(jìn)制數(shù)相加
- 由四個全加器構(gòu)成
- 檢查加法運(yùn)算結(jié)果是否溢出
- “溢出”(overflow):運(yùn)算結(jié)果超出了正常的表示范圍
- ”溢出“僅針對有符號數(shù)運(yùn)算(有符號數(shù)是指最高位1是否代表負(fù)數(shù))
- 兩個正數(shù)相加,結(jié)果為負(fù)數(shù)
- 兩個負(fù)數(shù)相加,結(jié)果為正數(shù)
- 檢查方法:”最高位的進(jìn)位輸入“ 不等于 ”最高位的進(jìn)位輸出“
- 注意區(qū)分”進(jìn)位“和”溢出“
- 有”溢出“時,不一定有進(jìn)位:
0011 + 0101 = 01000 - 有”進(jìn)位“時,不一定有溢出:
1110 + 1100 = 11010
- 有”溢出“時,不一定有進(jìn)位:
- ”溢出“的處理方法
- MIPS
- 將操作數(shù)看做有符號數(shù),發(fā)生”溢出“時產(chǎn)生異常
- 將操作數(shù)看做無符號數(shù),不處理”溢出“
- X86
- 利用程序狀態(tài)字寄存器中的OF位,發(fā)生”溢出“,設(shè)置OF=1
- 利用程序狀態(tài)字寄存器中的OF位,發(fā)生”溢出“,設(shè)置OF=1
- MIPS
- 減法運(yùn)算
- 減法運(yùn)算均可轉(zhuǎn)換為加法運(yùn)算
- 補(bǔ)碼表示的二進(jìn)制數(shù)的相反數(shù):按位取反,末尾加一
- A - B = A + (-B) = A + (~B + 1)
- 半加器(Half Adder)
加法器的優(yōu)化
-
行波進(jìn)位加法器(Ripple-Carry Adder,RCA)
- 結(jié)構(gòu)特點:低位全加器的C
連接到高一位全加器C
- 優(yōu)點:電路布局簡單,設(shè)計方便
- 缺點:高位的運(yùn)算必須等待低位的運(yùn)算完成,延遲時間長
- 4-bit RCA的關(guān)鍵路徑(延遲最長的路徑/關(guān)注Gate最多的路徑)
- T為門延遲
- 總延遲時間:(T+T)*4 + T = 9T
- 結(jié)構(gòu)特點:低位全加器的C
- 進(jìn)位輸出信號的分析
- C
= (A
·B
) + (A
·C
)+ (B
·C
)= (A
·B
) + (A
+B
)C
- 設(shè):
- 生成(Generate)信號:G
= A
·B
- 傳播(Propagate)信號:P
= A
+ B
- 生成(Generate)信號:G
- 則:C
= G
+ P
·C
- 計算C
時,無需等待C
,直接將從C
開始的式子不斷帶入,這樣就可以實現(xiàn)提前計算”進(jìn)位輸出信號“
- C
- 提前計算C
的電路實現(xiàn)
- 優(yōu)點:計算C
的延遲時間固定為三級門延遲,與加法器的位數(shù)無關(guān)
- 缺點:如果進(jìn)一步拓寬加法器的位數(shù),則電路變得非常復(fù)雜
- 優(yōu)點:計算C
- 超前進(jìn)位加法器(Carry-Lookahead Adder, CLA)
-
4-bit CLA: 計算C
需要3級門延遲 + 最后一級全加器還需要1級門延遲 -> 總延遲時間為4級門延遲
- 參考值:4-bit RCA的總延遲時間為9級門延遲
-
32-bit加法器的實現(xiàn)
- 如果采用RCA
- 總延遲時間為65級門延遲:(T+T)*32 + T = 65T
- 如果采用CLA
- 理想的總延遲時間為4級門延遲
- 實際上電路過于復(fù)雜,難以實現(xiàn)
- 通常的實現(xiàn)方法:
- 采用多個小規(guī)模的CLA拼接而成
- 如,用4個8-bit的CLA連接成32-bit加法器
- 如果采用RCA