1. 乘法器原理
在計算兩個補碼相乘時,可以通過booth演算法來實現定點補碼一位乘的功能。布斯(booth)演算法採用相加和相減的操作計算補碼資料的乘積,booth演算法對乘數從低位開始判斷,根據後兩個資料位的情況決定進行加法、減法還是僅僅進行移位操作。討論當相乘的兩個數中有乙個或二個為負數的情況,在討論補碼乘法運算時,對被乘數或部分積的處理上與原碼乘法有某些類似,差別僅表現在被乘數和部分積的符號位要和數值一起參加運算。
booth乘法規則如下:
假設x、y都是用補碼形式表示的機器數,[x]補和[y]補=ys.y1y2…yn,都是任意符號表示的數。比較法求新的部分積,取決於兩個比較位的數字,即yi+1yi的狀態。
首先設定附加位yn+1=0,部分積初值[z0]補=0。
當n≠0時,判斷ynyn+1,
若ynyn+1=00或11,即相鄰位相同時,上次部分積右移一位,直接得部分積。
若ynyn+1=01,上次部分積加[x]補,然後右移一位得新部分積。
若ynyn+1=10,上次部分積加[-x]補,然後右移一位得新部分積。
當n=0時,判ynyn+1(對應於y0y1),運算規則同(1)只是不移位。即在運算的最
後一步,乘積不再右移。
2. 設計思想
程式首先進行判0操作,如果乘數中有乙個或兩個為0,則直接輸出結果0,否則進入程式主體。程式主體分成三個判斷模組進行,當乘數最低位與次低位值相等時,先將乘數右移一位,再將原部分累加和右移一位至乘數最高位,同時部分積累加和的最高位根據次高位正負補0或1;如果乘數最低位與次低位分別為1,0時,將原部分累加和加上被乘數x補後,再右移一位至乘數最高位,同時部分積累加和的最高位根據次高位正負補0或1;如果乘數最低位與次低位分別為0,1時,將原部分累加和減去被乘數x補後,再右移一位至乘數最高位,同時部分積累加和的最高位根據次高位正負補0或1。每次比較一次乘數的最末兩位,進行相應運算後,共迴圈4次。迴圈結束後,再進行一次判斷,如果乘數最低位與次低位分別為1、0,將原部分累加和加上被乘數x補。如果乘數最低位與次低位分別為0、1,將原部分累加和減去被乘數x補。此時,最終累加和就是乘積的高位結果,取乘數的高四位作為低位結果,拼接即為最終乘法結果。
3. 程式設計
module multiplication(mx,my,mout);//補碼一位乘法模組
input [5:0]mx,my;//定義六位數輸入,其中前兩位為符號位
output reg [9:0]mout;//定義九位數輸出,其中前兩位為符號位
reg [5:0] a;//a暫存器存放部分積累加和
reg [5:0] b,c;//b暫存器存放補碼表示的被乘數,c暫存器存放補碼表示的乘數
reg [3:0] n;//n作為臨時變數,用來存放迴圈次數
reg p,q;//p用於負數移位補1操作,q用於存放新增的附加位cn+1,初始化為0
always @ (mx,my)
begin
if((mx==0)||(my==0))
mout=0;
else
begin
a=6'b000000;
n=4'b1111;
p=1'b1;
q=1'b0;
b=mx;
c=my;
c=;while(n)
begin
n=n>>1;
if(((c[0]==0)&&(c[1]==0))||((c[0]==1)&&(c[1]==1)))//如果cn+1和cn同為0或1,則只進行移位
begin
c=c/2;//除2表示右移一位
c[5]=a[0];//高位由部分累加和的低位補充
a=a/2;
if(a[4]==1)
a=;//累加和的最高位保持不變(此時補1)
else
a=a;//不進行任何操作,預設高位補0
endelse if((c[0]==1)&&(c[1]==0))//如果cn=0,cn+1=1,則先加上被乘數的補碼,再移位
begin
a=a+b;
c=c/2;
c[5]=a[0];
a=a/2;
if(a[4]==1)
a=;else
a=a;
endelse if((c[0]==0)&&(c[1]==1))//如果cn=1,cn+1=0,則先減去被乘數的補碼,再移位
begin
a=a-b;
c=c/2;
c[5]=a[0];
a=a/2;
if(a[4]==1)
a=;else
a=a;
endend
//四次迴圈後,進行最後一步,此步不移位,用來處理符號位
if((c[0]==1)&&(c[1]==0))
begin
a=a+b;
endelse if((c[0]==0)&&(c[1]==1))
begin
a=a-b;
endmout=;
endendendmodule
4. 設計驗證例:已知x=0.1010,y=-0.1101,求x*y:
1. 兩數用補碼表示 x補=00.1010 y補=11.0011 -x補=11.0110
2. 設定輸入為001010和110011
3. **得結果為1101111110,即 x*y補=1101111110,即為-0.0111111
P2P介面Booth乘法器設計
本文首發於個人部落格 booth乘法器是一種使用移位實現的乘法器,實現過程如下,對於乘法 擴充套件a的位數為n 1位,新增,則a變為 從i 0開始,到i n 1結束,依次考察的值,做如下操作 最後,捨棄r的最右端1位,即獲得 其原理比較容易理解,對於以上乘法,可以分解為 以上是位移乘法器的原理,那麼...
乘法器 硬體設計
人們日常習慣的乘法是十進位制,但計算機實現起來不方便。首先,需要記錄9x9乘法表,每次相乘去表中找結果 其次,將豎式相加也不方便。但二進位制卻十分方便,馮 諾伊曼在 關於endvac的報告草案 中說 二進位制可以極大簡化乘法和除法運算。尤其是對於乘法,不再需要十進位制乘法表,也不需要兩輪的加法 二進...
FPGA 乘法器的設計
乘法算是基本運算之一,廣泛應用在數字訊號處理中,濾波器中乘法運算必不可少,實現乘法器的方法很多,各有各的優缺點,常見的有移位相加法,加法樹法,查表法,混合法 在我們用語言設計電路時,初學時在實現乘法運算時通常很簡單的用 號操作,但是這種方法談不上設計乘法器,其最終的硬體實現要根據綜合器綜合的結果,好...