日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

booth乘法器原理

發(fā)布時間:2024/3/7 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 booth乘法器原理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在微處理器芯片中,乘法器是進行數(shù)字信號處理的核心,同時也是微處理器中進行數(shù)據(jù)處理的關(guān)鍵部件。乘法器完成一次操作的周期基本上決定了微處理器的主頻。乘法器的速度和面積優(yōu)化對于整個CPU的性能來說是非常重要的。為了加快乘法器的執(zhí)行速度,減少乘法器的面積,有必要對乘法器的算法、結(jié)構(gòu)及電路的具體實現(xiàn)做深入的研究。Booth算法與乘法器的一般結(jié)構(gòu) 乘法器工作的基本原理是首先生成部分積,再將這些部分積相加得到乘積。在目前的乘法器設(shè)計中,基4Booth算法是部分積生成過程中普遍采用的算法。對于N位有符號數(shù)乘法A×B來說,常規(guī)的乘法運算會產(chǎn)生N個部分積。如果對乘數(shù)B進行基4Booth編碼,每次需考慮3位:相鄰高位、本位和相鄰低位,編碼后產(chǎn)生部分積的個數(shù)可以減少到[(N+1)/2]?? ([X]取值為不大于X的整數(shù)),確定運算量0、±1A、±2A。對于2A的實現(xiàn),只需要將A左移一位。因此,對于符號數(shù)乘法而言,基4 Booth算法既方便又快捷。而對于無符號數(shù)來說,只需對其高位作0擴展,而其他處理方法相同。雖然擴展后可能導(dǎo)致部分積的個數(shù)比有符號數(shù)乘法多1,但是這種算法很好地保證了硬件上的一致性,有利于實現(xiàn)。對于32位乘法來說,結(jié)合指令集的設(shè)計,通常情況下需要相加的部分積不超過18個

booth乘法器是一種位操作乘法器,與傳統(tǒng)乘法器不同的是直接操作位。傳統(tǒng)乘法器依靠加法,不斷累加,在這里就不說了。

------------------------------------------------------------------------------------------------------------------------------------------------------------

booth乘法器有個重要的加碼運算。來看一下

?B[-1]就是B的零位右邊的位,是假想的位。如0010??0??B[-1]就是0。

??做booth乘法器又引入了p空間。

上圖的左移一位或者右移一位指的是p空間。什么是p空間呢?我們以7(0111)和2(0010)相乘為例。他們位數(shù)n均為4位。所以p空間大小為n*2+1=9。p空間是如何做乘法運算的呢?

?

代碼如下:

module product ( input CLK, input RSTn,

input Start_Sig, input [7:0]A, input [7:0]B,

output Done_Sig, output [15:0]Product,

output [7:0]SQ_a, output [7:0]SQ_s, output [16:0]SQ_p );

/*************************/

reg [3:0]i; reg [7:0]a; // a的寄存器 reg [7:0]s; // a的補碼加1 a非 reg [16:0]p; // p空間存儲器 reg [3:0]X;?? //操作次數(shù) reg isDone;

always @ ( posedge CLK or negedge RSTn ) ?if( !RSTn ) ??begin ??? ???i <= 4'd0; ???a <= 8'd0; ???s <= 8'd0; ???p <= 17'd0; ???X <= 4'd0; ???isDone <= 1'b0; ??end ?else if( Start_Sig ) ??case( i ) ??? ???0: ????begin a <= A; s <= ( ~A + 1'b1 ); p <= { 8'd0 , B , 1'b0 }; i <= i + 1'b1; end ??? ???1: ????if( X == 8 ) begin X <= 4'd0; i <= i + 4'd2; end ????else if( p[1:0] == 2'b01 ) begin p <= { p[16:9] + a , p[8:0] }; i <= i + 1'b1; end ????else if( p[1:0] == 2'b10 ) begin p <= { p[16:9] + s , p[8:0] }; i <= i + 1'b1; end ????else i <= i + 1'b1; ??? ???2: ????begin p <= { p[16] , p[16:1] }; X <= X + 1'b1; i <= i - 1'b1; end ??? ???3: ????begin isDone <= 1'b1; i <= i + 1'b1; end ??? ???4: ????begin isDone <= 1'b0; i <= 4'd0; end ??? ??endcase

/*************************/

assign Done_Sig = isDone; assign Product = p[16:1];

/*************************/

assign SQ_a = a; assign SQ_s = s; assign SQ_p = p; /**************************/ endmodule


總結(jié)

以上是生活随笔為你收集整理的booth乘法器原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。