計算機組成與設計(七)—— 除法器


除法的運算過程

與乘法相比,除法的實現較為復雜,運算過程如下:

過程:

  • 被除數和余數:將余數和被除數視為一個,共享一個寄存器,初始值為被除數
  • 除數:可視為不斷右移,並和被除數相減
  • 商:每個bit依次生成,可視為不斷左移

 

除法器的工作流程

 

要注意的是,與手算相比,電路實現總是將余數減除數,所以如果出現差小於0,要執行回退操作。

怎么會退呢?其實沒有真正回退地方法,由於前面執行的是減法,回退只需加回來就可以了

 

除法器的電路實現

工作過程:

  1. 初始化:將8-bit被除數放到“余數寄存器”,4-bit除數放到“除數寄存器”的高4位,將4-bit商寄存器置零
  2. 執行減法運算:余數-除數,將結果放到“余數寄存器”
  3. 檢查余數寄存器的最高位(判斷正負)。如果值小於0,回退,商左移,新的最右位設為0;如果值大於或等於0,商左移,新的最右位設為1.
  4. 除數寄存器右移一位
  5. 檢查是否為最后一輪(本例為第5輪)

32-bit除法器同理可得

 

除法器的面積優化

對上面32-bit除法器從面積分析:

  • “除數寄存器”實際只使用了一半
  • “商寄存器”初始是空的,從左到右依次填滿
  • “余數寄存器”初始是滿的,有實際意義的位每過一個周期從左到右依次減少

 

對應的,我們可以得到針對上述問題的方案:

  • “除數寄存器”縮減為32-bit的,無需支持移位
  • 取消“商寄存器”,商從右端逐位移入“余數寄存器”
  • 64-bit ALU縮小為32-bit
  • “余數寄存器”只有高32位參與加減法運算
  • “余數寄存器”需要支持左移和右移
  • 運算結束時,商占據“余數寄存器”的低32位

 

其中有兩點需要注意:

  1. 對優化的除法器右移,優化后的除法器的運算步驟是先相減再左移,比如0000,0111 / 0010, 每次做左移、減法,倒數第二步得到00110001,最后一次循環,減法再左移得到:00100011,因為真正的商是:0011, 而余數是0001。最終結果應該是先取低四位商,再右移取高四位余數。
  2. 和乘法器一樣,余數寄存器實際應該是65位而保證加法器的進位不會丟失。

 

參考鏈接:

1、https://www.coursera.org/learn/jisuanji-zucheng/discussions/weeks/5/threads/PdDS8dpvEeeC6xLrkeqqDg

2https://www.coursera.org/learn/jisuanji-zucheng/lecture/z6vMq/407-chu-fa-qi-de-you-hua

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM