基于Verilog HDL的10位超前进位加法器计分解文档格式.docx
《基于Verilog HDL的10位超前进位加法器计分解文档格式.docx》由会员分享,可在线阅读,更多相关《基于Verilog HDL的10位超前进位加法器计分解文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
陈宇宁
2014年6月22日
设计题目:
设计一个10位的超前进位加法器。
要求作出功能和时序仿真。
一总体设计方案
1.1设计原理
将n个全加器相连可得n位加法器,但是加法时间较长。
解决的方法之一是采用“超前进位产生电路”来同时形成各位进位,从而实现快速加法。
超前进位产生电路是根据各位进位的形成条件来实现的。
4位超前进位加法器的设计:
首先对于1位全加器其本位值和与进位输出可表示如下:
从上面的式子可看出:
如果a和b都为1,则进位输出为1,如果a和b有一个为1,则进位输出等于
。
令G=ab。
P=a+b,则有:
由此可以用G和P来写出4位超前进位链如下:
(设定4位被加数和加数为A和B,进位输入为
,进位输出为
,进位产生
,进位传输
)
由上面的超前进位链可看出:
各个进位彼此独立产生,将进位级连传播给去掉了,因此,减小了进位产生的延迟时间。
1.210位超前进位加法器的Verilog描述
由上面的4位超前进位加法器可以推出10位超前进位加法器的Verilog描述:
moduleadd_ahead(sum,cout,a,b,cin);
input[9:
0]a,b;
inputcin;
output[9:
0]sum;
outputcout;
wire[9:
0]G,P;
wire[9:
0]C,sum;
assignG[0]=a[0]&
b[0];
assignP[0]=a[0]|b[0];
assignC[0]=cin;
assignsum[0]=G[0]^P[0]^C[0];
assignG[1]=a[1]&
b[1];
assignP[1]=a[1]|b[1];
assignC[1]=G[0]|(P[0]&
cin);
assignsum[1]=G[1]^P[1]^C[1];
assignG[2]=a[2]&
b[2];
assignP[2]=a[2]|b[2];
assignC[2]=G[1]|(P[1]&
C[1]);
assignsum[2]=G[2]^P[2]^C[2];
assignG[3]=a[3]&
b[3];
assignP[3]=a[3]|b[3];
assignC[3]=G[2]|(P[2]&
C[2]);
assignsum[3]=G[3]^P[3]^C[3];
assignG[4]=a[4]&
b[4];
assignP[4]=a[4]|b[4];
assignC[4]=G[3]|(P[3]&
C[3]);
assignsum[4]=G[4]^P[4]^C[4];
assignG[5]=a[5]&
b[5];
assignP[5]=a[5]|b[5];
assignC[5]=G[4]|(P[4]&
C[4]);
assignsum[5]=G[5]^P[5]^C[5];
assignG[6]=a[6]&
b[6];
assignP[6]=a[6]|b[6];
assignC[6]=G[5]|(P[5]&
C[5]);
assignsum[6]=G[6]^P[6]^C[6];
assignG[7]=a[7]&
b[7];
assignP[7]=a[7]|b[7];
assignC[7]=G[6]|(P[6]&
C[6]);
assignsum[7]=G[7]^P[7]^C[7];
assignG[8]=a[8]&
b[8];
assignP[8]=a[8]|b[8];
assignC[8]=G[7]|(P[7]&
C[7]);
assignsum[8]=G[8]^P[8]^C[8];
assignG[9]=a[9]&
b[9];
assignP[9]=a[9]|b[9];
assignC[9]=G[8]|(P[8]&
C[8]);
assignsum[9]=G[9]^P[9]^C[9];
assigncout=G[9]|(P[9]&
C[9]);
endmodule
1.3设计环境
本文在设计10位超前进位加法器过程中,采用QuartusII9.0软件。
对于硬件,在实验设计过程中,用到了TPG-EDA/SOPC教学实验箱。
二采用QuartusII9.0软件进行仿真
2.1主要步骤:
(1)打开QuartusII9.0,新建工程后新建VerilogHDLfile文件。
(2)将上面的10超前进位加法器的Verilog描述程序输入新建的文件并保存。
(3)点击Processing→startcompilation进行编译,编译成功后如下:
(4)点击Assignments→Pins进行管脚分配,分配好后保存并再编译:
分配好管脚后再次编译:
(4)新建VectorWaveformfile文件并导入全部管脚(Radix改为UnsignedDecimal):
(5)功能仿真,Assignments→setting在simulationmode那里选择functonal
(6)对输入a和b取随机值(选中输入右键Value→randomValue→everygridinterval)并保存,建立网表Processing→GeneratefunctionalsimulationNetlist
(7)Processing→startsimulation进行仿真,运行结果如下:
功能仿真结果
(8)时序仿真,Assignments→setting在simulationmode那里选择Timing→ok。
(9)保存文件,进行仿真。
如下图所示:
时序仿真结果
(10)选中输入,Edit→GridSize,Edit→Endtime进行修改:
(11)对a和b重新取随机值并保存,进行仿真:
时序仿真结果(修改endtime和gridsize)
2.2分析与总结:
由10超前进位加法器的仿真结果可以知道其计算值在0-1023(
^10)之间,a+b+
的值超过1023(
为0时),产生进位(此时
为1)。
步骤(7)(9)(11)分别为功能仿真结果、时序仿真结果、(修改endtime和gridsize)时序仿真结果,经过对比可以看出,功能仿真不存在延时,时序仿真会有很明显的延时,通过修改endtime和gridsize可以减小延时对结果的影响。
三个人体会
通过这次EDA课程设计,让我更加了解了QuartusII9.0软件这个软件,在这个设计过程中我深刻地体会到刻苦努力与认真对待的重要性,进一步巩固了自己所学的专业基础知识,提高了自己解决问题的能力。
本设计使得我有了一次非常好的将理论与实践结合的机会,并使我从中学到了新知识。
在此,感谢我的指导老师陈宇宁老师的耐心指导和教诲。