实验五 Booth算法的乘法器.doc
文本预览下载声明
实验五 Booth算法的乘法器
姓 名
学 号
专 业 微电子学与固体电子学
指导老师
实验目的
本实验在于使用Booth算法思想,设计一个16*16的乘法器。
实验原理
比较好的带符号数乘法的方法是布斯(Booth)算法。它采用相加和相减的操作计算数据的乘积。Booth算法对乘数从低位开始判断,根据两个数据位的情况决定进行加法、减法还是仅仅移位操作。判断的两个数据位为当前位及其右边的位(初始时需要增加一个辅助位0),移位操作是向右移动。
图一 Booth算法流程图
三、实验verilog代码
(1)booth算法模块
module booth_mux(reset,a,b,mux);
input [15:0]a,b;
input reset;
output [31:0] mux;
reg [31:0] mux;
reg [32:0] A;
integer i;
always@(a or b)begin
if(reset==1)begin
A={16b0,b,1b0};
for(i=0;i=15;i=i+1)begin //循环部分,循环16次。
if(A[1:0]==2b10)
A[32:17]=A[32:17]-a;
else if(A[1:0]==2b01)
A[32:17]=A[32:17]+a;
A={A[32],A[32:1]};
end
mux=A[32:1];
end
else begin
A=0;
mux=0;
end
end
endmodule
测试模块部分
module booth_mux_tb;
reg reset;
reg [15:0]a,b;
wire[31:0] mux;
booth_mux u1(.reset(reset),
.a(a),
.b(b),
.mux(mux));
initial begin
a=0;
b=0;
reset=0;
end
always begin
#20 reset=1;
#300 a=a+1;
#400 b=b+1;
end
endmodule
实验结果
显示全部