目錄
一、Radix-4 Booth乘法器原理
上文中介紹了基2 Booth乘法器,本文繼續介紹基4 Booth乘法器。
對於N比特數B來說:
N比特數B,將其展開,其中B-1=0:
基2 Booth表示爲:
其基係數爲:
基4 Booth乘法器的基係數爲:
所以,上式B可以重寫爲如下式(位寬爲偶數):
將A與B相乘,則:
以下是基4 Booth編碼表,其中A爲被乘數,B爲乘數。
以下爲6比特數9的Radix-2 Booth和Radix-4 Booth編碼例子:
從基2看9:
9 = 0*2^4 + 1*2^4 + (-1)*2^3 + 0*2^2 + 1*2^1 + (-1)*2^0
從基4看9:
9 = 1*4^2 + (-2)*4^1 + 1*4^0
其陣列表示如下:
可以看出,6比特乘數的基2 Booth算法部分累積和個數爲6,而基4的部分累積和數爲3。
相比於基2 Booth編碼,基4 Booth編碼將使得乘法累積的部分和數減少一半,其基係數只涉及到移位和補碼計算。對於二進制碼爲1010…1010的乘數(1與0交替),如果採用基2 Booth編碼,則部分和累積的輸入有幾乎一半爲被乘數的補碼,所以,相比於普通的陣列乘法器,基2 Booth編碼的乘法器性能不升反降,基4 Booth編碼可以避免以上問題。
二、Verilog設計
聲明:沒有PPA驅動的功能性Verilog設計,僅供娛樂
本文中將基於Radix-4 Booth編碼、Wallace樹、CSA以及行波進位加法器設計一個16比特位寬的有符號數並行陣列乘法器,僅供參考。
幾個如下要點:
(1)Wallace樹,請參考往期文章《圖解Wallace樹》;
(2)CSA,請參考往期文章《進位保存加法器原理與設計》;
(3)行波進位加法器,請參考往期文章《半加器、全加器和行波進位加法器原理與設計》;
(4)Radix-4 Booth編碼器;
(5)部分和生成。
前3點在往期的文章中已有介紹並設計,所以我們看第(4)點,即一個基4 Booth編碼器,根據輸入3比特生成0,+1,+2,-2,-1等係數。
根據以上Booth編碼表可以將係數生成歸納如下:
假設輸入碼字爲B[2:0]
1.B[2]決定了輸出係數的符號位,定義爲neg;
2.當輸入碼字爲011和100時,輸出絕對值爲2,定義爲two;
3.當輸入碼字爲000和111時,輸出絕對值爲0,定義爲zero;
4.除了以上碼字,輸出絕對值爲1,定義爲one。
第(5)點生成部分和,根據編碼器輸出,與被乘數相乘,生成部分和:、
1.如果編碼器zero爲1,則輸出部分和爲0;
2.如果編碼器one爲1,則輸出部分和爲被乘數;
3.如果編碼器two爲1,則輸出部分和爲被乘數左移1位;
4.如果是負數,則生成補碼輸出。
16比特乘法器,需要8個Booth編碼器Booth Enc和8個生成部分和Gen Prod模塊。根據Wallace樹結構、CSA和行波進位加法器RCA,設計框圖如下:
在追求面積、功耗和速度的要求下,該設計有以下幾個優化空間:
(1)部分和生成
在部分和負數生成中,對於像 “-1*A”和“-2*A”等,進行了取反加一,增大的關鍵路徑延時,且耗費了8個16比特加法器,後期會有改進。
(2)符號位擴展
在部分和計算中具有大量的符號位擴展,且在求和過程中翻轉頻繁,故而極大耗費面積和功耗,後期文章會提到;
(3)Wallace樹結構
在Wallace樹種求解sum和carry時,簡單地進行移位使得3:2 CSA中全加器的位寬爲32位,徒增面積和功耗;另外在結構上,因爲CSA層次有4級,大概率效率不高,通常還會結合4:2 CSA,後期會提到;
(4)最後一級加法器
最後一級32比特加法器負責進位鏈傳播,此處是速度最慢的行波進位加法器,可以根據需求進行替換。
(5)流水線技術
使用流水線技術提升乘法器的性能,
根據以上要點設計的基4 Booth乘法器,源碼參考公衆號回覆“011”。
謝謝您的閱讀!
原創不易,如果對您有幫助,記得點贊關注哦。歡迎批評指正,謝謝鼓勵!
一起“紙上談芯”,共同學習: