• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

任意位宽Booth乘法器设计Verilog代码VIVADO仿真

08/07 11:55
842
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-2406241P330c2.doc

共1个文件

名称:任意位宽Booth乘法器设计Verilog代码VIVADO仿真

软件:VIVADO

语言:Verilog

代码功能:

任意位宽Booth乘法器设计

乘数和被乘数均为 n 位(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]就是乘数和被乘数的乘积。

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

演示视频:

设计文档:

1. 工程文件

2. 程序文件

3. 仿真文件(testbench)

4. 仿真图

 

部分代码展示:

//假设乘数和被乘数均为 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]就是乘数和被乘数的乘积。
module Multiplier_1024bit(mult_A, mult_B, mult_product);
parameter n=1024;
input [n-1:0] mult_A;//输入乘数A
input [n-1:0] mult_B;//输入乘数B
output [2*n-1:0] mult_product;//乘积
reg [2*n-1:0] mult_product;
integer Count;
reg [2*n:0] PA='d0,right='d0;//设置一个 2n+1 位的 p 空间
always @ (mult_A or mult_B)
begin
PA[2*n:0]={1024'b0,mult_A,1'b0}; //将乘数填入 p[n:1]中=-----------------------
for(Count=0;Count<n;Count=Count+1)//循环n次
begin
 case(PA[1:0])
2'b10://-mult_B,右移一位(有符号数移位)
begin
   PA[2*n:n+1]=PA[2*n:n+1] - mult_B[n-1:0];//PA=PA-mult_B ;
   right[2*n:0]=(PA[2*n]==0)?{1'b0,PA[2*n:1]}:{1'b1,PA[2*n:1]};//判断 p[2n]位,如果是逻辑 0 右移一位补 0,如果是逻辑 1 就右移一位补 1
end
2'b01://+mult_B,右移一位(有符号数移位)
begin
PA[2*n:n+1]=PA[2*n:n+1] + mult_B[n-1:0]; //PA=PA+mult_B

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=899

  • 2-2406241P330c2.doc
    下载

相关推荐