基于FPGA的8位booth乘法器Verilog代码Quartus仿真

名称:基于FPGA的8位booth乘法器Verilog代码Quartus仿真(文末获取)

软件:Quartus

语言:Verilog

代码功能:

8位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]就是乘数和被乘数的乘积。

1. 工程文件

2. 程序文件

3. 程序编译

4. 资源占用

5. RTL图

6. 仿真文件(testbench)

7. 仿真图

部分代码展示:

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

源代码

 扫描文章末尾的公众号二维码

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值