booth乘法器原理
booth乘法器是一種位操作乘法器,與傳統(tǒng)乘法器不同的是直接操作位。傳統(tǒng)乘法器依靠加法,不斷累加,在這里就不說了。
------------------------------------------------------------------------------------------------------------------------------------------------------------
booth乘法器有個(gè)重要的加碼運(yùn)算。來(lái)看一下
?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空間是如何做乘法運(yùn)算的呢??
代碼如下:
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的補(bǔ)碼加1 a非 reg [16:0]p; // p空間存儲(chǔ)器 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乘法器原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实现麻将牌发牌操作
- 下一篇: POI点数据获取与NOAA(美国海洋和大