位的移位相加乘法器仿真.docx
《位的移位相加乘法器仿真.docx》由会员分享,可在线阅读,更多相关《位的移位相加乘法器仿真.docx(9页珍藏版)》请在冰豆网上搜索。
位的移位相加乘法器仿真
玉林师范学院本科生课程设计论文
基于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的了解,只有把理论和实践结合起来才能真正掌握知识提高自己的实际动手能力和独立思考的能力。