基于FPGA的5位(有符号位)定点整数的原码乘法器Verilog代码Quartus仿真
名称:基于FPGA的5位(有符号位)定点整数的原码乘法器Verilog代码Quartus仿真
软件:Quartus
语言:Verilog
代码功能:
组成原理第二次实验内容:
设计实现5位(包括符号位)定点整数的原码乘法器,分别由移位加和全加器阵列结构实现,比较两种结构的运算速度(输入乘数到输出积的时间)和硬件资源(逻辑门和触发器的个数)。
可以画原理图或者写verilog程序,quartus或者modelsim仿真,可编程逻辑器件实现。
1.原码阵列乘法器结构参考教材上的结构,电路结构如下:

其中的阵列乘法器结构如下:

2.移位加实现的乘法器结构参考我补充的内容,数据通路图如下:

控制器状态流程图如下:

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件

2. 程序文件


3. 程序编译

4. RTL图

5. 状态图

6. 管脚分配

7. 仿真图


可以看到
-10*15=-150
12*-10=-120
7*12=84
11*-13=-143
-4*-12=48
乘法器功能验证正确

部分代码展示:
//5bit无符号移位相加乘法器
module Mult_5bit_unsigned(A,B,clk,start,mult_product);
input clk,start;//start高电平时输入乘数
input [4:0] A;//A是乘数5bit
input [4:0] B;//B是被乘数5bit
output [9:0] mult_product;//乘积
reg [9:0] mult_product=10'd0;
reg [9:0] mult_product_buf=10'd0;
parameter INIT=2'd0;
parameter ADD=2'd1;
parameter SHIFT=2'd2;
parameter s_END=2'd3;
reg[1:0] state=INIT;//初始状态为INIT
reg[9:0] B_buf=10'd0;//临时变量
integer Count=0;
////循环移位相加状态机控制
always@(posedge clk)
begin
case(state)
INIT://初始状态
if(start)begin
state=ADD; //start有效跳转到下一个状态ADD
B_buf[4:0]=B; //取被乘数
B_buf[9:5]=5'd0; //临时变量的高5位置0
end
else
begin
mult_product_buf=0;
Count=0;
state=INIT; //初始状态
end
ADD://相加状态
begin
if(A[Count]) //判断乘数的第Count位是否为1
mult_product_buf=mult_product_buf+B_buf; //若为1则把乘数左移一位相加
state=SHIFT; //完成相加后跳到SHIFT状态继续左移
end
SHIFT://移位状态
begin
B_buf={B_buf[8:0],1'b0}; //左移一位,最低位补0
Count=Count+1; //计数器加一
if(Count==5) //循环5次
begin
state=s_END;
mult_product<=mult_product_buf;
end
else
state=ADD;
end
s_END:begin//结束状态
mult_product_buf=0;
Count=0;
state=INIT; //初始状态
end
endcase
end
endmodule代码文件(付费下载):
![]()
![]()
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 基于FPGA的5位(有符号位)定点整数的原码乘法器Verilog代码Quartus仿真
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 基于FPGA的5位(有符号位)定点整数的原码乘法器Verilog代码Quartus仿真
发表评论
模板文件不存在: ./template/plugins/comment/pc/index.htm