目錄
一、Baugh-Wooley算法
Baugh-Wooley算法是由Baugh和Wooley於1973年提出的二進制補碼並行陣列相乘算法。該算法轉化爲等效並行陣列相加,其中每個部分和爲乘數和被乘數比特相與,並且所有的部分和符號位爲“+”。將n比特X,Y,乘法結果2n比特的P表示如下:
從上式看出,XY相乘,結果P=XY相當於前兩項減去後兩項正數,設爲A和B.
按順序用字母表示以上項,即P = C+D-(A+B)。
將最後兩項A和B,補0擴展表示成2n位,以便在陣列中相加:
其中ai=y(n-1)*xi
A的二進制表示如下:
-A,即A的二進制補碼,對A“取反加一”,表示如下:
取反:
加一:
B的補碼錶示與A同理。
所以,-(A+B)的結果如下,即-A-B:
將-A-B代入P的表達式,所以P的結果如下:
以n=4比特X,Y相乘爲例,P=XY爲8比特:
該4*4 乘法器結構如下:
以上結果中每個框均爲全加器,有微小差距。
藍色框,其中某個輸入爲xiyi相與;
綠色框,其中某個輸入爲xiyi相與後取反;
右下斜對角爲P的傳播路徑,上下爲進位傳播路徑,最長的進位傳播鏈爲P0的進位至P7的進位傳播。
二、Verilog設計
設計一個16比特或者32比特的Baugh-Wooley乘法器,位寬N可自定義,默認爲16比特。
幾個要點:
(1)藍色框與綠色框全加器;
(2)橙色框模塊,最後一級加法器,作爲示例,此處採用RCA加法器;
(3)xiyi, ci, si, co, so信號生成;
(4)Baugh-Wooley結構連接;
(5)乘法結果輸出P選擇。
根據以上結構拓展成16比特的結構如下:
在Verilog中,可羅列出每個模塊,並連接。爲了便於參數化,根據如上結構劃分爲5部分,每一部分使用generate…endgenerate生成。
Baugh-Wooley乘法器,Verilog源碼公衆號回覆“00e”。
參考資料:
《A Two's Complement Parallel Array Multiplication Algorithm》
《Baugh-Wooley Multiplier》
歡迎批評指正,更多閱讀,關注“紙上談芯”,不定期更新,共同學習: