【HDL系列】乘法器(6)——Radix-4 Booth乘法器

目錄

一、Radix-4 Booth乘法器原理

二、Verilog設計


一、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。

基4 Booth編碼器

第(5)點生成部分和,根據編碼器輸出,與被乘數相乘,生成部分和:、

1.如果編碼器zero爲1,則輸出部分和爲0;

2.如果編碼器one爲1,則輸出部分和爲被乘數;

3.如果編碼器two爲1,則輸出部分和爲被乘數左移1位;

4.如果是負數,則生成補碼輸出。

生成部分和

16比特乘法器,需要8個Booth編碼器Booth Enc和8個生成部分和Gen Prod模塊。根據Wallace樹結構、CSA和行波進位加法器RCA,設計框圖如下:

Booth乘法器設計框圖
Booth乘法器頂層

在追求面積、功耗和速度的要求下,該設計有以下幾個優化空間:

(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”。

謝謝您的閱讀!

原創不易,如果對您有幫助,記得點贊關注哦。歡迎批評指正,謝謝鼓勵!

一起“紙上談芯”,共同學習:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章