My title page contents

N位booth乘法器(位宽可配置)设计Verilog代码Quartus仿真

名称:N位booth乘法器(位宽可配置)设计Verilog代码Quartus仿真

软件:Quartus

语言:Verilog

代码功能:

booth算法原理

假设乘数和被乘数均为 ,那么 Booth 算法的具体执行过程以下六个步骤:

(1) 设置一个 2n+1 位的 空间,并将初始化为 0;

(2) 将乘数填入 p[n:1];

(3) 从 空间的最低位依次开始向左扫描,每次扫描两位,并判断所扫描的两位二进制数为何种情况;

(4) 判断 p[2n],如果是逻辑 右移一位补 0,如果是逻辑 就右移一位补 1;

(5) 重复步骤(3) ,循环 ;

(6) 最终 空间的 p[2n:1]就是乘数和被乘数的乘积。


FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com


演示视频:

设计文档:

设计文档.doc

1. 工程文件


2. 程序文件


3. 程序编译


4. 仿真文件(testbench)


5. 仿真图


设置为有符号数






部分代码展示:


//booth算法原理
//假设乘数和被乘数均为 n 位,那么 Booth 算法的具体执行过程以下六个步骤:
//(1) 设置一个 2n+1 位的 p 空间,并将初始化为 0;
//(2) 将乘数填入 p[n:1]中;
//(3) 从 p 空间的最低位依次开始向左扫描,每次扫描两位,并判断所扫描的两位二进制数为何种情况;
//(4) 判断 p[2n]位,如果是逻辑 0 右移一位补 0,如果是逻辑 1 就右移一位补 1;
//(5) 重复步骤(3) ,循环 n 次;
//(6) 最终 p 空间的 p[2n:1]就是乘数和被乘数的乘积。
//32位乘法器
module Multiplier_nbit(mult_A, mult_B, mult_product);
parameter width=32;
input [width-1:0] mult_A;//输入乘数A
input [width-1:0] mult_B;//输入乘数B
output [width+width-1:0] mult_product;//乘积
reg [width+width-1:0] mult_product;
integer Count;
reg [width+width:0] PA,right;//设置一个 2n+1 位的 p 空间
always @ (mult_A or mult_B)
begin
PA[width+width:0]={16'b0,mult_A,1'b0}; //将乘数{mult_product, mult_A, 1'b0}填入 p[n:1]中
for(Count=0;Count<width;Count=Count+1)//循环width次
begin
 case(PA[1:0])
2'b10:////-mult_B,右移一位(有符号数移位)
begin
 //PA=PA-mult_B ;
 PA[width+width:width+1]=PA[width+width:width+1] - mult_B[width-1:0];//PA=PA-mult_B ;
 right=(PA[width+width]==0)?{1'b0,PA[width+width:1]}:{1'b1,PA[width+width:1]};//判断 p[2n]位,如果是逻辑 0 右移一位补 0,如果是逻辑 1 就右移一位补 1
end
2'b01://+mult_B,右移一位(有符号数移位)
begin
     //PA=PA+mult_B
PA[width+width:width+1]=PA[width+width:width+1] + mult_B[width-1:0]; //PA=PA+mult_B


代码文件(付费下载):



1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » N位booth乘法器(位宽可配置)设计Verilog代码Quartus仿真

发表评论

模板文件不存在: ./template/plugins/comment/pc/index.htm

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员