位的移位相加乘法器仿真.docx

上传人:b****3 文档编号:27039878 上传时间:2023-06-26 格式:DOCX 页数:9 大小:338.53KB
下载 相关 举报
位的移位相加乘法器仿真.docx_第1页
第1页 / 共9页
位的移位相加乘法器仿真.docx_第2页
第2页 / 共9页
位的移位相加乘法器仿真.docx_第3页
第3页 / 共9页
位的移位相加乘法器仿真.docx_第4页
第4页 / 共9页
位的移位相加乘法器仿真.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

位的移位相加乘法器仿真.docx

《位的移位相加乘法器仿真.docx》由会员分享,可在线阅读,更多相关《位的移位相加乘法器仿真.docx(9页珍藏版)》请在冰豆网上搜索。

位的移位相加乘法器仿真.docx

位的移位相加乘法器仿真

 

玉林师范学院本科生课程设计论文

 

基于10位的移位相加乘法器的设计

 

院系

电子与通信工程学院

专业

通信工程

学生班级

通信111班

姓名

学号

201808402132

指导教师单位

电子与通信工程学院

指导教师姓名

陈宇宁

 

2018年6月22日

 

基于10位的移位相加乘法器设计

1.设置要求:

设计一个10位的移位相加乘法器。

要求作出功能和时序仿真。

2.设置原理:

移位相加乘法器将乘法变为加法实现,乘法通过逐次移位相加实现,每次判断乘数的最低位,若为1则将被乘数移位相加,若为0左移后以全零相加直至被乘数的最高位。

为了实现NxN乘法,需要一个2N位的左移寄存器,一个N位的右移寄存器,一个2N位加法器,再加少量的控制逻辑即可实现。

1、新建工程:

1.设置电路原理图如下:

上图共包括5个子模块,shiftA,shiftB模块分别实现操作数A和B的移位,sum模块实现P+A,reg16模块存储结果,multshift_cntrl模块式控制逻辑,完成状态间的转移,并控制其他模块。

2.设置参数如下:

shiftA模块源代码:

moduleshiftA(R,L,E,CLK,Q>。

input[9:

0]R。

inputL,E,CLK。

outputreg[19:

0]Q。

integerK。

wire[19:

0]R20。

assignR20={{10{1'b0}},R}。

always@(posedgeCLK>

begin

if(L>Q<=R20。

elseif(E>begin

Q[0]<=1'b0。

for(K=1。

K<20。

K=K+1>Q[K]<=Q[K-1]。

end

end

endmodule

shiftB模块源代码:

moduleshiftB(R,L,E,CLK,Q0,Z>。

input[9:

0]R。

inputL,E,CLK。

outputQ0。

outputZ。

reg[9:

0]Q。

integerK。

always@(posedgeCLK>

begin

if(L>Q<=R。

elseif(E>begin

for(K=9。

K>0。

K=K-1>

Q[K-1]<=Q[K]。

Q[9]<=1'b0。

end

end

assignZ=(Q==0>。

assignQ0=Q[0]。

endmodule

SUM模块源代码:

moduleSum(A,P,Psel,sum>。

input[19:

0]A,P。

inputPsel。

output[19:

0]sum。

reg[19:

0]sum。

wire[19:

0]AP_sum。

integerK。

assignAP_sum=A+P。

always@(PselorAP_sum>

beginsum=Psel?

AP_sum:

20'b0。

end

endmodule

Reg16模块源代码:

modulereg16(R,CLK,Rst,E,Q>。

input[19:

0]R。

inputCLK,Rst,E。

outputreg[19:

0]Q。

always@(posedgeCLKornegedgeRst>

begin

if(Rst==0>Q<=0。

elseif(E>Q<=R。

end

endmodule

multshift_cntrl模块源代码:

modulemultshift_cntrl(Clock,Reset,s,z,B0,EA,EB,EP,Psel,Done>。

inputClock,Reset,s,z,B0。

outputregDone。

outputregEA,EB,EP,Psel。

reg[1:

0]t,Y。

parameterS1=2'b00,S2=2'b01,S3=2'b10。

always@(sortorz>

begin:

State_table

case(t>

S1:

if(s==0>Y=S1。

elseY=S2。

S2:

if(z==0>Y=S2。

elseY=S3。

S3:

if(s==1>Y=S3。

elseY=S1。

default:

Y=2'bxx。

endcase

end

always@(posedgeClockornegedgeReset>

begin:

State_flipflops

if(Reset==0>t<=S1。

elset<=Y。

end

always@(sortorB0>

begin:

FSM_outputs

EA=0。

EB=0。

EP=0。

Done=0。

Psel=0。

case(t>

S1:

EP=1。

S2:

beginEA=1。

EB=1。

Psel=1。

if(B0>EP=1。

elseEP=0。

end

S3:

Done=1。

endcase

end

endmodule

二、编译和仿真:

1.编译:

如图

2.引脚设置:

如图:

Assignments---pins

2.1时序仿真:

设置引脚后的时序仿真图:

 

2.2功能仿真:

功能仿真图如下:

点击Processing--Simulator--点击开始仿真图标StartSimulation.

三、分析总结:

通过这次EDA的学习设计,掌握了系统的数字电子设计的方法,解决了一些常常忽略的问题,增强了动手能力、许多经验和书本上学不到的知识。

通过这次学习,加深了对EDA的了解,只有把理论和实践结合起来才能真正掌握知识提高自己的实际动手能力和独立思考的能力。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1