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

基于FPGA的5位(有符号位)定点整数的原码乘法器Verilog代码Quartus仿真

07/18 09:23
663
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240201154535542.doc

共1个文件

名称:基于FPGA的5位(有符号位)定点整数的原码乘法器Verilog代码Quartus仿真

软件:Quartus

语言:Verilog

代码功能:

组成原理第二次实验内容:

设计实现5位(包括符号位)定点整数的原码乘法器,分别由移位加和全加器阵列结构实现,比较两种结构的运算速度(输入乘数到输出积的时间)和硬件资源(逻辑门触发器的个数)。

可以画原理图或者写verilog程序,quartus或者modelsim仿真,可编程逻辑器件实现。

1.原码阵列乘法器结构参考教材上的结构,电路结构如下:

QQ图片20240201154239.png

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

QQ图片20240201154250.png

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

QQ图片20240201154256.png

控制器状态流程图如下:

QQ图片20240201154300.png

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

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

  • 2-240201154535542.doc
    下载

相关推荐