計算機組成與設計(六)—— 乘法器


乘法的運算過程

人們日常習慣的乘法是十進制,但計算機實現起來不方便。首先,需要記錄9x9乘法表,每次相乘去表中找結果;其次,將豎式相加也不方便。

但二進制卻十分方便,馮·諾伊曼在《關於ENDVAC的報告草案》中說“二進制可以極大簡化乘法和除法運算。尤其是對於乘法,不再需要十進制乘法表,也不需要兩輪的加法”。

二進制乘法運算過程

觀察這個式子,可以發現我們並不需要乘法表,如果乘數位為0,就在中間過程中全補零,如果乘數位為1,就在中間過程補被乘數

 

運算過程的進一步調整

按照上面那種計算的話,需要大量的空間來存儲中間結果,還要用一個空間存儲積。其實,不難發現,每個中間結果最后都加在乘積上,我們可以將中間結果保存在乘積中,每次用中間結果更新乘積,運算結束時,乘積里面放的就是正確的乘積。

上面說直接對乘積加上被乘數是不准確的,為了滿足對齊要求,只需將被乘數左移。

 這樣,我們得到了一個適合硬件實現的乘法運算過程。

 

乘法的實現

實現結構

以4-bit數為例,(1000)2 + (1001)2 = (1001000)2

具體流程

  1. 初始化,將Multiplier = 1001,將Multiplicand的低4為設為1000,高4位補零,Product = 0.
  2. 檢查乘數寄存器的最低位,如果為1,將被乘數寄存器加到乘積寄存器中,此時控制信號會給加法器一個信號,給乘積寄存器寫信號,等到下一個上升沿到來時,會將運算的結果存到乘積寄存器中。如果為0,不管。同時給被乘數寄存器左移信號,給乘數寄存器右移信號,也是在下一個時鍾上升沿起作用。
  3. 檢測是否經歷4次循環

最終的結果如下:

4位的過程對N位同樣有效。

N位的流程圖

 

 

乘法的優化1 

觀察上面N位乘法器的流程圖,由於每次信號要等到一個時鍾上升沿才起作用,所以1a、2、3過程各用一個周期。其實這三個過程可以並列執行,就降為一個周期了。

 

 乘法的優化2(面積優化)

面積優化就是指減少不必要的硬件資源。對於CPU這樣的集成電路來說,它的價格的一個重要因素就是集體管的數量,或者說芯片的面積。因此,在設計各個功能部件的時候,如何減少芯片的面積也是一個重要的方向。

 

 觀察上面這個圖,我們可以發現如下可以優化的地方:

  • “被乘數寄存器”有8位寬,但其中有效位始終只有4位
  • “乘數寄存器”是4位寬,但其中有效數字每周期減少1位
  • “乘積寄存器”是8位寬,但初始時有效位只有4位且每周期增加1位
  • “加法器”是8位寬,但參與運算的實際有效位置只有4位

 

我們只需逐一改進這些地方,注意,每個部件某個功能去掉,在另一個部件應加上該功能。比如”被乘數寄存器“取消了左移功能,”乘積寄存器“就相應的添加了右移功能。

  • “被乘數寄存器”縮減為4位,且取消左移功能
  • 取消“乘數寄存器”,乘數初始置於”乘積寄存器“低4位
  • ”乘積寄存器“增加右移功能,乘積初始置於其中高4位,隨着運算過程不斷右移(最高位補0)
  • ”加法器“縮減為4位,”乘積寄存器“只有高4位參與運算

優化后的圖如下:

 注:乘法寄存器實際應該是9位,以保存加法器的進位,但這里保持8位,以突出使用優化后的演變。

N位乘法器優化同理

 

 

參考鏈接:https://www.coursera.org/learn/jisuanji-zucheng/lecture/JioZX/404-cheng-fa-qi-de-you-hua-2


免責聲明!

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



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