第三講 算術(shù)邏輯單元(Arithmetic Logic Unit)

內(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=20_{hex},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=8_{hex}

    • 分析指令得: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)

    • R型
      • add rd, rs, rt #R[rd] = R[rs] + R[rt] [1]
      • addu rd, rs, rt #R[rd] = R[rs] + R[rt]
      • sub rd, rs, rt #R[rd] = R[rs] - R[rt] [1]
      • subu rd, rs, rt #R[rd] = R[rs] - R[rt]
    • I型
      • addi rt, rs, imm #R[rt] = R[rs] + SignExtImm [1][2]
      • addiu rt, rs, imm #R[rt] = R[rs] + SignExtImm [2]
  • 邏輯運(yùn)算指令(MIPS Core Instruction Set)

    • R型
      • and rd, rs, rt #R[rd] = R[rs] & R[rt]
      • or rd, rs, rt #R[rd] = R[rs] |R[rt]
      • nor rd, rs, rt #R[rd] = ~(R[rs] | R[rt])
    • I型
      • andi rt, rs, imm #R[rt] = R[rs] & ZeroExtImm [3]
      • ori rt, rs, imm #R[rt] = R[rs] | ZeroExtImm [3]
  • 算術(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ù)

門電路的基本原理

  • 晶體管
    • 現(xiàn)代集成電路中通常使用MOS晶體管(Metal-Oxide-Semiconductor)
      • N型MOS管(Gate連接高電頻時導(dǎo)通)
      • P型MOS管(Gate連接低電頻時導(dǎo)通)
  • 非門(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

算術(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_{in}(進(jìn)位輸入)
      • 輸出端口S(和)、C_{out}(進(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
    • ”溢出“的處理方法
      • MIPS
        • 將操作數(shù)看做有符號數(shù),發(fā)生”溢出“時產(chǎn)生異常
        • 將操作數(shù)看做無符號數(shù),不處理”溢出“
      • X86
        • 利用程序狀態(tài)字寄存器中的OF位,發(fā)生”溢出“,設(shè)置OF=1
        • 利用程序狀態(tài)字寄存器中的OF位,發(fā)生”溢出“,設(shè)置OF=1
    • 減法運(yùn)算
      • 減法運(yùn)算均可轉(zhuǎn)換為加法運(yùn)算
      • 補(bǔ)碼表示的二進(jìn)制數(shù)的相反數(shù):按位取反,末尾加一
      • A - B = A + (-B) = A + (~B + 1)

加法器的優(yōu)化

  1. 行波進(jìn)位加法器(Ripple-Carry Adder,RCA)
    • 結(jié)構(gòu)特點:低位全加器的C_{out}連接到高一位全加器C_{in}
    • 優(yōu)點:電路布局簡單,設(shè)計方便
    • 缺點:高位的運(yùn)算必須等待低位的運(yùn)算完成,延遲時間長
    • 4-bit RCA的關(guān)鍵路徑(延遲最長的路徑/關(guān)注Gate最多的路徑)
      • T為門延遲
      • 總延遲時間:(T+T)*4 + T = 9T
  • 進(jìn)位輸出信號的分析
    • C_{i+1} = (A_i·B_i) + (A_i·C_i)+ (B_i·C_i)= (A_i·B_i) + (A_i+B_i)C_i
    • 設(shè):
      • 生成(Generate)信號:G_i = A_i·B_i
      • 傳播(Propagate)信號:P_i = A_i + B_i
    • 則:C_{i+1} = G_i + P_i·C_i
    • 計算C_{i+1} 時,無需等待C_i,直接將從C_0開始的式子不斷帶入,這樣就可以實現(xiàn)提前計算”進(jìn)位輸出信號“
  • 提前計算C_4的電路實現(xiàn)
    • 優(yōu)點:計算C_{i+1}的延遲時間固定為三級門延遲,與加法器的位數(shù)無關(guān)
    • 缺點:如果進(jìn)一步拓寬加法器的位數(shù),則電路變得非常復(fù)雜
  1. 超前進(jìn)位加法器(Carry-Lookahead Adder, CLA)
  • 4-bit CLA: 計算C_3需要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加法器

  1. May cause overflow exception ? ? ?

  2. SignExtImm = {16{imm[15]}, imm} ? ?

  3. ZeroExtImm = {16{1'b0}, imm} ? ?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容