8位全加器Word格式文档下载.docx
《8位全加器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《8位全加器Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。
加法器是数字系统中的基本逻辑器件。
例如:
为了节省资源,减法器和硬件乘法器都可由加法器来构成。
但宽位加法器的设计是很耗费资源的,因此在实际的设计和相关系统的开发中需要注意资源的利用率和进位速度等两方面的问题。
多位加法器的构成有两种方式:
并行进位和串行进位方式。
并行进位加法器设有并行进位产生逻辑,运算速度快;
串行进位方式是将全加器级联构成多位加法器。
通常,并行加法器比串行级联加法器占用更多的资源,并且随着位数的增加,相同位数的并行加法器比串行加法器的资源占用差距也会越来越大。
实验表明,4位二进制并行加法器和串行级联加法器占用几乎相同的资源。
这样,多位数加法器由4位二进制并行加法器级联构成是较好的折中选择。
因此这次课程设计中的8位加法器可采用两个4位二进制并行加法器级联而成。
此外我们还讨论了由八个一位全加器串联构成的八位二进制全加器。
设计中前者设计为同步加法器,后者设计为异步加法器。
3.设计思路
异步八位全加器
设计流程图如下:
图1异步八位流程图
设计原理图如下页所示:
图2异步八位全加器
同步八位全加器
图3同步八位流程图
图4同步八位全加器
4.设计难点
(1)半加器的设计:
半加器不考虑低位向本位的进位,因此它有两个输入端和两个输出设加数(输入端)为A、B;
和为S;
向高位的进位为Ci+1;
函数的逻辑表达式为:
S=A⊕B;
Ci+1=AB。
(2)四位二进制带进位加法器:
两个四位二进制数进行加法运算,同时产生进位。
当两个二进制数相加时,较高高位相加时必须加入较低位的进位项(Ci),以得到输出为和(S)和进位(C0)。
(3)同步设计:
同步是有时钟信号输入,根据时钟信号来判断是否执行计算。
四、设计结果与分析
1.思路问题以及测试结果失败分析
(1)设计程序时保存文件名要与实体名一致,设计过程中出现了几次这样的低级错误,值得注意。
(2)所设计的程序文件不能直接放在根目录下,我们在自己笔记本上做完直接拷贝到实验室计算机上放在了E盘根目录下这样会出错。
(3)生成了ADD4元件后进行绘制原理图,因为输入输出是8位,也就是说要有16个输入,8个输出,但是开始绘图的时候只绘制了2个输入,一个输出,提示输入与总线连接不符合。
(4)在8个一位全加器组成8位加法器的波形仿真时候由于把时间间隔设置的特别小到20.0ns,导致计算机还没计算完前一个数据就开始下一个数据了,如下图
图5方法一的错误仿真波形
附:
由于开始时没有具体要求,我们做了两种方案的异步全加器,由两个四位全加器串联而成的八位全加器仿真时出现的问题如下:
(5)在两个4位全加器组成的8位加法器波形仿真时出现如下图形红色框中的现象,反复仿真多次结果一样,才明白,刚开始计算机会有延迟处理信号,后面的信号就正常了。
图6
2.程序简要说明
(1)设计一个半加器
VHDL源程序代码(关键代码)
ARCHITECTUREFH1OFH_ADDERIS
BEGIN
SO<
=NOT(AXOR(NOTB));
CO<
=AANDB;
ENDARCHITECTUREFH1;
具体功能:
半加器电路是指对两个输入数据位进行加法,输出一个结果位和进位,不产生进位输入的加法器电路,是实现两个一位二进制数的加法运算电路。
数据输入A被加数、B加数,数据输出SO和数(半加和)、进位CO。
其真值表为:
表1-1半加器电路真值表
输入
输出
A
B
C
S
1
(2)设计一个一位全加器
VHDL源程序代码
ARCHITECTUREFD1OFF_ADDERIS
COMPONENTH_ADDERIS
PORT(A,B:
INSTD_LOGIC;
CO,SO:
OUTSTD_LOGIC);
ENDCOMPONENT;
SIGNALD,E,F:
STD_LOGIC;
U1:
H_ADDERPORTMAP(A=>
AIN,B=>
BIN,CO=>
D,SO=>
E);
U2:
E,B=>
CIN,CO=>
F,SO=>
SUM);
COUT<
=DORF;
ENDARCHITECTUREFD1;
全加器是能够计算低位进位的二进制加法电路
表1-2一位全加器电路真值表
F
由真值表写出逻辑表达式,经化简后得:
S=A
CF=AB+BC+AC=
其中A为被加数,B为加数,相邻低位来的进位数为C,输出本位和为S。
向相邻高位进位数为F。
(3)设计一个八位串行二进制全加器
ARCHITECTUREONEOFF_ADDER8IS
COMPONENTF_ADDERIS
PORT(AIN,BIN,CIN:
COUT,SUM:
SIGNALC1,C2,C3,C4,C5,C6,C7:
F_ADDERPORTMAP(AIN=>
AIN(0),BIN=>
BIN(0),CIN=>
CIN,SUM=>
SUM(0),COUT=>
C1);
∶
U8:
AIN(7),BIN=>
BIN(7),CIN=>
C7,SUM=>
SUM(7),COUT=>
COUT);
ENDONE;
经过一番编译仿真的调试后,我们得到了如下两幅正确的仿真波形。
-
图7方法一的正确仿真波形
(1)设计一个四位全加器
ARCHITECTUREh1ofADD4is
begin
process(A,B,clk)
variablecq,qq,sq:
STD_logic_vector(3downto0);
if(clk'
eventandclk='
1'
)then
qq(0):
=not(A(0)XOR(NOT(B(0))));
sq(0):
=not(qq(0)XOR(NOT(ci)));
--低位相加并产生进位
if((A(0)xorB(0))='
cq(0):
=ci;
elsecq(0):
=A(0);
Endif;
qq
(1):
=not(A
(1)xor(NOT(B
(1))));
sq
(1):
=not(qq
(1)xor(NOT(cq(0))));
--第二位于前一进位相加,并产生进位。
if((A
(1)xorB
(1))='
)Then
cq
(1):
=cq(0);
ELSEcq
(1):
=A
(1);
ENDif;
qq
(2):
=not(A
(2)XOR(NOT(B
(2))));
sq
(2):
=not(qq
(2)XOR(NOT(cq
(1))));
if((A
(2)xorB
(2))='
)then
cq
(2):
=cq
(1);
elsecq
(2):
=A
(2);
endif;
qq(3):
=not(A(3)XOR(NOTB(3)));
sq(3):
=not(qq(3)XOR(NOT(cq
(2))));
--前一位进位与高位相加并产生进位。
if((A(3)xorB(3))='
cq(3):
=cq
(2);
ELSEcq(3):
=A(3);
Co<
=cq(3);
So<
=sq;
endif;
Endprocess;
Endarchitectureh1;
(2)设计一个八位串行二进制全加器
通过在四位全加器正确仿真的情况下,绘出由两个四位全加器串联的八位全加器的原理图,再经过仿真。
图8方法二的正确仿真波形
五、心得体会
虽然两周的EDA课程设计结束了,但我们受益颇多。
让我们学了很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
对EDA的工作原理和使用方法也有了更深刻的理解。
在开始实训之前,我们分工合作,在图书馆和网上查询资料,根据找到的资料来设计8位全加器。
当我们运行自己编出来的程序的时候,问题出现了,不是不能运行,就是运行的结果和要求的结果不相符合,让我们看到了实践与理论的差距。
出现问题不可怕,重要的是我们解决问题。
根据出现的错误提示,我们一个一个地解决在调试中出现的问题,从而我们对EDA的理解得到了加强。
通过本次设计,让我很好的锻炼了理论联系实际,与具体项目、课题相结合开发、设计产品的能力。
既让我们懂得了怎样把理论应用于实际,又让我们懂得了在实践中遇到的问题怎样用理论去解决。
并让我们的合作意识得到了加强,合作能力也得到提高。
根据分工与合作的方式,让每个人互责指定的部分,同时在一定的阶段共同讨论,以解决分工中个人不能解决的问题。
在交流中大家积极发现问题和提出改进的意见;
同时我们还向别的同学请教了来解决我们不能解决的问题,从而我们的实训顺利完成了。
六、参考文献
[1].潘松黄建业《EDA技术与VHDL》清华大学出版社
[2].康华光《电子技术基础—数字部分》高等教育出版社
[3].王锁平《电子设计自动化(EDA)教程》电子科技大学出版社
[4].张文希谢明华《EDA技术实验指导书》