乘法器——booth編碼


    博主最近在學習加法器、乘法器、IEEE的浮點數標准,作為數字IC的基礎。當看到booth編碼的乘法器時,對booth編碼不是很理解,然后在網上找各種理解,終於豁然開朗。現將一個很好的解釋分享給大家,希望能對大家有所幫助。

    首先,看看這幾個公式:

    可以證明的是,這三個公式是相等的,一個有符號的二進制數的補碼用公式1來表示,可以等價地寫成公式2和公式3。

    布斯編碼可以減少部分積的數目(即減少乘數中1的個數),用來計算有符號乘法,提高乘法運算的速度。

    

    如上圖所示為二進制乘法的過程,也是符合我們正常計算時的邏輯,我們假設有一個8位乘數(Multiplier),它的二進制值為0111_1110,它將產生6行非零的部分積,因為它有6個非零值(即1)。如果我們利用公式2將這個二進制值改為1000_00-10,其中低四位中的-1表示負1,可以證明兩個值是相等的。可以這樣簡單理解,那就是現在原值得末尾加輔助位0,變為0111_1110_0,然后利用低位減去高位,即得到1000_00-10。這樣一變換可以減少0的數目,從而減少加的次數,我們只需相加兩個部分積,但是終的加法器必須也能執行減法。這種形式的變換稱為booth encoding(即booth編碼),它保證了在每兩個連續位中最多只有一個是1或-1。部分積數目的減少意味着相加次數的減少,從而加快了運算速度(並減少了面積)。從形式上來說,這一變換相當於把乘數變換成一個四進制形式。

    最經常使用的是改進的booth編碼。乘數按三位一組進行划分,相互重疊一位。其實就是把公式1重寫為公式3。每一組按下表編碼,並形成一個部分積。

    再考慮前面提及的8位二進制數0111_1110。從msb到lsb,可以把它分為三位一組首尾重疊的四組:01(1),11(1),11(1),10(0),末尾補了一個輔助位0。根據上表編碼得到:10(2),00(0),00(0),-10(-2),或者表示為1000_000-10,這與前面得到結果是一樣的。這時,乘2就是移位。所以布斯算法僅涉及加法,減法和移位操作。
    這樣一來就很容易理解了。
    
 


免責聲明!

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



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