乘法器——booth編碼

    博主最近在學習加法器、乘法器、IEEE的浮點數標準,做爲數字IC的基礎。當看到booth編碼的乘法器時,對booth編碼不是很理解,而後在網上找各類理解,終於豁然開朗。現將一個很好的解釋分享給你們,但願能對你們有所幫助。算法

    首先,看看這幾個公式:學習

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

    布斯編碼能夠減小部分積的數目(即減小乘數中1的個數),用來計算有符號乘法,提升乘法運算的速度。spa

    

    如上圖所示爲二進制乘法的過程,也是符合咱們正常計算時的邏輯,咱們假設有一個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。部分積數目的減小意味着相加次數的減小,從而加快了運算速度(並減小了面積)。從形式上來講,這一變換至關於把乘數變換成一個四進制形式。3d

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

    再考慮前面說起的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就是移位。因此布斯算法僅涉及加法,減法和移位操做。
    這樣一來就很容易理解了。
相關文章
相關標籤/搜索