名称:基于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
源代码
扫描文章末尾的公众号二维码