EDA课程设计文档格式.docx
《EDA课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《EDA课程设计文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
但因为加法运算存在进位问题,使得某一位计算结果的得出和所有低于他的位相关。
因此为了减少进位传输所消耗的时间,提高计算速度,人们设计了多种类型的加法器,如跳跃进位加法器、进位选择加法器、超前进位加法器等。
本设计采用的是超前进位加法器。
通过Verilog设计一个超前10位加法器。
关键词:
EDA加法器Verilog
目录
第一章EDA简介1
第二章设计内容与要求2
第三章超前进位加法器设计原理2
第四章详细设计流程3
4.1.创建工程文件3
4.2.程序的编译4
4.3.波形的仿真5
第五章设计结果分析8
第六章源程序代码9
第七章心得体会10
第八章参考文献10
第一章EDA简介
EDA(ElectronicDesignAutomation)技术是指以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具;
全球提供EDA软件工具的厂商有近百家之多,大体分为两类:
一类是专业软件公司开发的EDA开发工具,独立于半导体器件厂商;
另一类是半导体器件厂商为销售本公司可编程逻辑器件PLD产品开发的EDA软件工具,只能开发该公司的PLD器件。
本设计采用的Quartus8.0开发工具属于后者,是由Altera公司开发的EDA软件工具。
EDA开发流程如下图1.1所示[2]。
图1.1EDA开发流程
Figure1.1EDAdevelopmentprocesses
第二章设计内容与要求
要求在QuartusII软件下,利用Verilog编程完成层次式电路设计,电路中的元件可以用Verilog设计也可以用库元件连线构成再封装。
10位超前进位加法器,借助EDA工具中的综合器,适配器,时序仿真器和编程器等工具进行相应处理。
适配采用Cyclone系列的EP1C6Q240C8。
要求综合出RTL电路,并进行仿真输入波形设计并分析电路输出波形。
第三章超前进位加法器设计原理
将n个全加器相连可得n位加法器,但是加法时间较长。
解决的方法之一是采用“超前进位产生电路”来同时形成各位进位,从而实现快速加法。
超前进位产生电路是根据各位进位的形成条件来实现的。
首先对于1位加法器基本位值和与进位输出为1;
如果a,b有一个为1,则进位输出等于Cin;
令G=ab,P=a+b,则有:
Cout==ab+(a+b)Cin=G+P•Cin
由此可以G和P来写出4位超前进位链如下:
(设定四位被加数和加数为A和B,进位输入cin,进位输出为cout,进位产生Gi=AiBi,进位传输Pi=Ai+Bi。
);
C0=Cin;
C1=G0+P0*C0=G0+P0*Cin
C2=G1+P1*C1=G1+P1*(G0+P0*Cin)=G1+P1*G0+P1*P0*Cin
C3=G2+P2*C2=G2+P2*(G1+P1*C1)=G2+P2*G1+P2*P1*G0+P2*P1*P0*Cin
C4=G3+P3*C3=G3+P3*(G2+P2*C2)=G3+P3*G2+P3*P2*G1+P3*P2*P1*G0+P3*P2*P1*P0*Cin
Cout=C4
由超前进位链,各个进位彼此独立产生,将进位级联传播给去掉了,因此,减小了进位产生的延迟时间。
同样可推导出下面的式子:
sum=A⊕B⊕Cin=(A*B)⊕(A+B)⊕Cin=G⊕P⊕Cin
本实验中采用10位超前进位加法器
第四章详细设计流程
4.1.创建工程文件
打开QuartusII9.1创建一个工程文件adder_ahead
选择菜单File中NewProjectWizard命令,在如下“工程设置”对话框中单击右侧“…”按钮,找到文件夹D:
\atlera\quartus,选中已存盘的add_ahead.vhd的文件。
单击Next,将与工程有关的文件加入此工程。
(1)选择仿真器和综合器类型。
都选默认的None。
(2)选择目标芯片。
(3)工具设置。
这里默认使用QuartusⅡ自含的所有设计工具。
(4)结束设置。
4.2.程序的编译
(1).选择菜单“Processing”—“StartCompilation”命令,或者点击运行编译按钮,启动完全编译,这里的完全编译包括分析与综合、适配、装配文件、定时分析、网编文件提取过程。
如果只要进行期中的某一项编译,可以选着“Tools”---“CompilerTool”命令,或者点击按钮即可出现编译工具选择串口,共包括5个编译工具,分别为分析与综合器、适配器、装配器、定时分析器、网表文件提提取器,单机每个工具前面的小图标可单独启动每一个编译器。
(2)编译完成后,会将有关的编译信息显示在窗口中,可查看其中的相关内容。
还可以查看中和后的电路原理图,选择“Tools”---“NetlistViewers”---“RTLViewer”菜单命令,既可观察综合生成的RLT方式的电路原理图,在这里我们可以看到10位超期进位加法器生成的原理图如下:
10位超期进位加法器生成的原理图:
4.3.波形的仿真
仿真时序,对项目进行仿真测试,也可以对项目中的某一个子模块进行仿真,其方法是选择菜单“Assignment”---“Wizard”----“SimulatorSetWizard”命令,在设置过程中指定仿真对象,并指定对象的仿真类型、矢量激励源等。
(1)打开波形编辑器
选择菜单“File”---“New”命令,在“New”对话框中选择“OtherFile”页中的“VectorWaveFile”选项,单击“ok”按钮,即出现选择波形按钮;
(2)输入信号节点
选择菜单“View”---“UtilityWindows”---“NodeFinder”命令,出现对话框,在“Filter”下拉列表中选择“Pins:
all”选项,再次单击“List”按钮,即在下面的“NodesFound”框中出现本设计项目的所有端口引脚列表,从端口列表中选择所需要的,并逐个拖到波形编辑窗口中。
(4)编辑输入信号波形
点击波形编辑窗口中的全屏显示,使用波形编辑窗口中的各种波形赋值,编辑各输入信号的激励波形。
在仿真的时候需要设置一个合理的区域,选择菜单“Edit”---“EndTime”命令,在淡出的“Time”窗口中输入60us.
对数据的型号的格式可以选择:
Binary(二进制),Hexadecimal(十六进制)、Octal(八进制)、SignedDecimal(有符号十进制),UnsgnedDecimal(无符号十进制)。
这里选择的是UnsignedDecimal十进制,便于观察结果。
(5)仿真参数的设置,选择菜单“Assignments”—“Setting”
命令,在弹出的对话框选择“SimulatorSetting”项下的“Mode”
以选择仿真模式,仿真模式有功能仿真模式和时序仿真模式,这里选择功能仿真。
(6)观察仿真结果
选择菜单“Processing”---“StartSimulation”命令,即启动仿真器工作。
仿真完毕后,可以通过输出波形,检验所设计电路的功能是否正确。
10位超前进位的功能输出波形图:
10位超前进位的时序输出波形图:
第五章设计结果分析
输入a
1023
512
256
输入b
16
32
888
cin
1
sum
31
544
545
104
105
结果中显示是正常的,10位超前进位加法器得到成功的实现
第六章源程序代码
moduleadd_ahead(sum,cout,a,b,cin);
input[9:
0]a,b;
inputcin;
output[9:
0]sum;
outputcout;
wire[9:
0]G,P;
0]C,sum;
assignG[0]=a[0]&
b[0];
//产生第0位本位值和进位值
assignP[0]=a[0]|b[0];
assignC[0]=cin;
assignsum[0]=G[0]^P[0]^C[0];
assignG[1]=a[1]&
b[1];
//产生第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];
//产生第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];
//产生第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];
//产生第4位本位值和进位值
assignP[4]=a[4]|b[4];
assignC[4]=G[3]|(P[3]&
C[3]);
assignsum[4]=G[2]^P[2]^C[2];
assignG[5]=a[5]&
b[5];
//产生第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];
//产生第6位本位值和进位值
assignP[6]=a[6]|b[6];
assignC[6]=