16位全加器.docx

上传人:b****2 文档编号:17525919 上传时间:2023-07-26 格式:DOCX 页数:15 大小:249KB
下载 相关 举报
16位全加器.docx_第1页
第1页 / 共15页
16位全加器.docx_第2页
第2页 / 共15页
16位全加器.docx_第3页
第3页 / 共15页
16位全加器.docx_第4页
第4页 / 共15页
16位全加器.docx_第5页
第5页 / 共15页
16位全加器.docx_第6页
第6页 / 共15页
16位全加器.docx_第7页
第7页 / 共15页
16位全加器.docx_第8页
第8页 / 共15页
16位全加器.docx_第9页
第9页 / 共15页
16位全加器.docx_第10页
第10页 / 共15页
16位全加器.docx_第11页
第11页 / 共15页
16位全加器.docx_第12页
第12页 / 共15页
16位全加器.docx_第13页
第13页 / 共15页
16位全加器.docx_第14页
第14页 / 共15页
16位全加器.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

16位全加器.docx

《16位全加器.docx》由会员分享,可在线阅读,更多相关《16位全加器.docx(15页珍藏版)》请在冰点文库上搜索。

16位全加器.docx

16位全加器

四川理工大学

课程设计任务书

设计题目:

采用门电路设计一个16位的全加器电路

 

院系:

计算机学院

专业:

计算机科学与技术

班级:

2008级6班

指导教师:

朱文忠

学生姓名:

赵******************

 

目录:

一引言………………………………………1

1.1设计背景……………………………1

1.2设计分工……………………………1

二设计目的…………………………………2

2.1设计目的……………………………2

2.2设计内容……………………………2

三设计过程…………………………………2

3.1硬件方案……………………………2

3.1.1一位全加器的原理及设计………2

3.1.2四位全加器的原理及设计………4

3.1.3十六位全加器的原理及设计……7

3.2软件方案……………………………9

3.3可行性论证…………………………13

3.4结论…………………………………15

四参考文献…………………………………16

 

引言

1.设计背景

随着计算机科学技术的发展,人们获得信息的途径更加多样,获取信息的速度更加快捷。

硬件的发展允许程序员编出很多精彩的使用软件,也使得计算机更加普及。

中央处理器CPU的好坏是影响和制约计算机速度和性能的关键因素。

而加法器是组成CPU的的重要部件,一般运算速度的快慢就取决与每秒执行加法的次数,加法器是算术逻辑单元中的基本逻辑器件。

例如:

为了节省资源,减法器和硬件乘法器都可由加法器来构成。

但宽位加法器的设计是很耗费资源的,因此在实际的设计和相关系统的开发中需要注意资源的利用率和进位速度等两方面的问题。

多位加法器的构成有两种方式:

并行进位和串行进位方式。

并行进位加法器设有并行进位产生逻辑,运算速度快;串行进位方式是将全加器级联构成多位加法器。

并行进位的并行加法器又可以分为组内并行、组间串行的进位链和组内并行、组间并行的进位链。

通常,并行加法器比串行级联加法器占用更多的资源,并且随着位数的增加,相同位数的并行加法器比串行加法器的资源占用差距也会越来越大。

它们的目的就是要进位信号的产生尽可能的快,因此产生了二重进位链或更高重进位链,显然进位速度的提高是以硬件设计的复杂化为代价来实现的。

2.设计分工

赵**(081010*****):

硬件方案、排版

吴**(081010*****):

可行性论证、结论

王**(081010*****):

软件方案、找资料

 

设计目的

1.设计目的

(1)掌握1位全加器的形成;

(2)掌握4位片SN74LS181的原理;

(3)用4片SN74LS181以并/串形成16位字长的ALU;

(4)形成16位运算器数据通路结构;

(5)将设计结果下载到实验板上,进行验证。

2.设计内容

了解计算机的硬件系统,了解一位全加器的组成原理,深入讨论计算机的组成原理,在熟悉常用的门电路的组成和工作过程的基础上,要求设计出一个16位的全加器。

其中要求设计并写出产生求和结果的逻辑表达式,需要写出利用快速进位链产生进位的逻辑表达式,同时还要实现时需要用一个时钟信号控制运算的执行,如第一拍给出输入数据,第二拍给出运算控制信号,第三拍送输出数据,然后又回到第一拍,循环往复,直到运算全部结束。

根据要求设计出针对具体指令所对应的流程图;根据流程及门电路设计出相应的全加器。

编写出VHDL程序,在仿真软件上运行并检验所设计的微程序的正确性。

设计过程

1.硬件方案

1.1一位全加器的原理及设计

1.1.1一位全加器的原理

全加器是实现两个一位二进制数及低位来的进位数相加即将三个一位二进制数相加,求得和数及向高位进位的逻辑电路。

全加器是组合逻辑电路中最常见也最实用的一种,考虑低位进位的加法运算就是全加运算,实现全加运算的电路称为全加器。

它主要实现加法的运算,其中分为并行全加器和串行全加器,所谓并行就是指向高位进位时是并行执行的,而串行就是从低位到高位按顺序执行,为了提高运算,必须设法减小或消除由于进位信号逐级传递所消耗的时间,为了提高运算速度,制成了超前进位加法器,这是对全加器的一种创新。

1.1.2一位全加器的设计

要使全加器进行加法运算,也需要用各种门电路设计出相应的逻辑电路,根据组合逻辑电路设计的步骤,我们先设计一位全加器的设计。

(1)根据全加器所需要的功能,我们可以设计出一位全加器的组合逻辑框图。

如图3.1所示。

图3.1一位全加器的逻辑结构

(2)根据逻辑图我们可以写出各个器件的逻辑功能。

Ci=XiYiCi-1+XiYiCi-1+XiYiCi-1+XiYiCi-1=(Xi

Yi)Ci-1+XiYi

Fi=XiYiCi-1+XiYiCi-1+XiYiCi-1+XiYiCi-1=Xi

Yi

Ci-1

(3)由上面可得。

Xi和Yi为两个输入的一位二进制书,Ci-1为低位二进制数相加的进位输出到本位的输入,则Fi为本位二进制数Xi、Yi和低位进位输入Ci-1的相加之和,Ci为Xi、Yi和低位进位输入Ci-1相加向高位的进位输出。

因此,该电路可以完成一位二进制数全加的功能,称为全加器。

此电路的真值表如表3-1所示。

表3-1一位全加器真值表

Xi

Yi

Ci-1

Fi

Ci

0

0

0

0

0

0

1

0

1

0

1

0

0

1

0

1

1

0

0

1

0

0

1

1

0

0

1

1

0

1

1

0

1

0

1

1

1

1

1

1

 

1.2四位全加器的原理及设计

1.2.1四位全加器的工作原理

加法器是数字系统中的基本逻辑器件。

例如:

为了节省资源,减法器和硬件乘法器都可由加法器来构成。

但宽位加法器的设计是很耗费资源的,因此在实际的设计和相关系统的开发中需要注意资源的利用率和进位速度等两方面的问题。

多位加法器的构成有两种方式:

并行进位和串行进位方式。

并行进位加法器设有并行进位产生逻辑,运算速度快;串行进位方式是将全加器级联构成多位加法器。

通常,并行加法器比串行级联加法器占用更多的资源,并且随着位数的增加,相同位数的并行加法器比串行加法器的资源占用差距也会越来越大。

  四位全加器可对两个多位二进制数进行加法运算,同时产生进位。

当两个二进制数相加时,较高高位相加时必须加入较低位的进位项(Ci),以得到输出为和(S)和进位(C0)。

1.2.2四位全加器的设计

设计四位全加器有两种方案,一种利用串行进位方式设计,另一种是利用并行进位方式进行设计。

但是这两种方式设计的电路的工作效率是恨不一样的,串行进位是需要等待低位计算的所得的进位后才能进行高位的运算的,而并行进位也就是先进位方式,每个进位只需要经历一个与非门和一个与或门的延时,这样和串行进位相比,大大提高了运算速度。

所以我们这里选择先进位全加器。

四位先行进位全加器的真值表如表3-2所示。

表中的C0为低位向高位的进位,P1~P4以及G1~G4为输入端,C1~C4为输出端。

表3-2四位先行进位全加器真值表

C0

P1

G1

P2

G2

P3

G3

P4

G4

C1

C2

C3

C4

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

0

0

0

1

0

0

0

0

0

1

1

0

0

0

0

1

0

0

0

0

0

0

1

1

1

1

0

0

1

1

0

0

0

1

1

1

1

0

0

0

1

1

0

0

0

0

1

1

0

0

1

1

0

1

0

1

0

0

0

1

1

1

1

1

1

0

1

1

1

0

1

1

0

0

0

0

1

1

1

0

0

1

0

1

1

0

0

1

1

0

0

1

0

1

0

0

1

1

1

1

0

0

0

0

1

1

0

0

0

1

1

0

0

1

1

1

1

1

0

1

1

0

1

1

1

1

0

0

1

1

1

1

0

1

0

1

1

1

1

1

1

0

0

1

1

1

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

0

0

0

0

0

0

0

0

0

0

0

1

1

0

0

0

0

0

0

1

1

0

0

1

1

1

0

0

0

0

1

1

0

0

0

0

1

1

1

0

0

0

0

1

1

1

1

0

1

1

1

1

0

0

1

1

1

1

0

0

0

1

1

1

1

0

0

1

1

0

0

1

1

0

1

1

1

1

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

0

0

0

0

1

1

1

0

1

1

1

1

1

0

0

1

1

0

0

1

0

1

1

1

1

1

1

1

0

0

0

0

1

1

0

0

1

1

1

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

四位加法器可以采用四个一位全加器级连成串行进位加法器,如图3.2所示,其中CSA为一位全加器。

图3.2四位先行进位加法器逻辑结构

如图3.3所示,四位先行进位全加器各个进位信号的产生只需要经历一级与非门和一级与或非门的延迟时间,所以比逐位进位全加器大大缩短了时间。

图3.3四位先行进位加法器原理

1.3十六位全加器的原理及设计

1.3.1十六位全加器的原理

16位全加器设计的基本思想,就是仿照通常的解组合逻辑电路的方法,先把原理图画出来,然后通过原理图把各个信号量描述出来,最后再根据各个器件的逻辑功能列出真值表。

当全加器工作时,先一个一个二进制数全部按位输入,从而在4位先行进位的加法器中进行运算,使相应部件执行所规定的操作。

1.3.2十六位全加器的设计

设计16位全加器,这里使用的方法是把4个四位全加器串联起来。

16位全加器主要由输入、输出、进位和4位先行进位的加法器这四部分组成,其原理如图3.4所示。

图3.4十六位全加器组成原理图

16位全加器总共有16位输入,而每四位为一组输入到4位先行进位加法器中进行加法运算,一般输入是两位二进制数,如图是:

Y4-1X4-1一直到Y16-13X16-13为输入;输出为F,共16位输出,而和输出一样四位为一组一起经过运算后输出,不同的是输入有两个二进制数,而输出只有一个二进制数;C表示进位,C0初始值为1,后面的C4,C8,C12,C16分别是每个四位加法器运算后的进位。

2.软件方案

用VHDL编写代码验证:

在对真值表进行分析和各个功能设计完成之后,就可以使用VHDL编写程序,运用MAX-PLUSⅡ进行模拟仿真,以验证其正确性。

如下就是四位先行进位全加器和16位全加器的VHDL代码。

//导入各种所需要的库

libraryIEEE;

useIEEE.STD_LOGIC_1164.ALL;

useIEEE.STD_LOGIC_ARITH.ALL;

useIEEE.STD_LOGIC_UNSIGNED.ALL;

--Uncommentthefollowinglinestousethedeclarationsthatare

--providedforinstantiatingXilinxprimitivecomponents.

--libraryUNISIM;

--useUNISIM.VComponents.all;

entitytestis

port(

a,b:

instd_logic_vector(3downto0);//a,b为输入,为4位标准逻辑矢量类型

cin:

instd_logic;//cin为输入,为标准矢量类型

s:

outstd_logic_vector(3downto0);//s为输出,为4位标准逻辑矢量类型

cout:

outstd_logic);//cout为输出,为标准矢量类型

endtest;

architectureBehavioraloftestis

signald,t:

std_logic_vector(3downto0);//信号量d,t为4位标准逻辑矢量

signalc:

std_logic_vector(4downto0);//信号量c为5位标准逻辑矢量

begin

as_add:

foriin0to3generate//i从0循环到3,循环4次

d(i)<=a(i)andb(i);//把a,b相与的结果赋给d

t(i)<=a(i)orb(i);//把a,b相或的结果赋给t

s(i)<=a(i)xorb(i)xorc(i);//把a,b,c进行异或的结果赋给s

endgenerate;

//以下为赋值语句

c(0)<=cin;

c

(1)<=d(0)or(t(0)andc(0));

c

(2)<=d

(1)or(t

(1)andd(0))or(t

(1)andt(0)andc(0));

c(3)<=d

(2)or(t

(2)andd

(1))or(t

(1)andt

(2)andd(0))or(t

(1)andt

(2)andt(0)andc(0));

c(4)<=d(3)or(t(3)andd

(2))or(t(3)andt

(2)andd

(1))or(t

(1)andt

(2)andt(3)andd(0))or(t(3)andt

(2)andt

(1)andt(0)andc(0));

cout<=c(4);

endBehavioral;

如下是16位全加器的VHDL代码。

libraryIEEE;

useIEEE.std_logic_1164.all;//导入各种需要的库

entityadder16is

generic(n:

integer:

=16);

port(a:

instd_logic_vector(16downto1);//a为16位标准逻辑矢量类型的输入

b:

instd_logic_vector(16downto1);//b为16位标准逻辑矢量类型的输入

cin:

instd_logic;//c为标准逻辑类型的输入

sum:

outstd_logic_vector(16downto1);//sum为16位标准逻辑矢量类型的输入

cout:

outstd_logic);

endadder16;

--structuralimplementationofthe16-bitadder

architecturestructuralofadder16is

componentadder

//以下a,b,cin,sum,cout都为标准逻辑类型,其中a,b,cin为输入,sum,cout为输出

port(a:

instd_logic;

b:

instd_logic;

cin:

instd_logic;

sum:

outstd_logic;

cout:

outstd_logic);

endcomponent;

signalcarry:

std_logic_vector(0to16);

begin

carry(0)<=cin;//把信号量cin的值赋给carry(0)

cout<=carry(16);//把信号量carry(16)的值赋给cout

--instantiateasingle-bitadder16times

gen:

forIin1to16generate//I从1循环至16,循环16次

add:

adderportmap(

//以下为赋值语句

a=>a(I),

b=>b(I),

cin=>carry(I-1),

sum=>sum(I),

cout=>carry(I));

endgenerate;

endstructural;

--behavioralimplementationofthe16-bitadder

architecturebehavioralofadder16is//定义结构体

begin

p1:

process(a,b,cin)//过程开始

variablevsum:

std_logic_vector(16downto1);

variablecarry:

std_logic;

begin

carry:

=cin;

foriin1to16loop//I从1循环至16,循环16次

vsum(i):

=(a(i)xorb(i))xorcarry;//变量vsum(i)的赋值

carry:

=(a(i)andb(i))or(carryand(a(i)orb(i)));//变量carry的赋值

endloop;

sum<=vsum;//把vsum赋给信号量sum

cout<=carry;//把carry赋给信号量cout

endprocessp1;//进程结束

endbehavioral;

 

3.可行性论证

根据4位先行进位全加器VHDL的代码,用MAX-PLUSⅡ进行模拟,得到仿真图,如图3.5所示。

图3.5四位先行进位全加器仿真图

根据表3-2和图3.5,可以进行分析四位先行进位全加器的正确性,用表中的数据和图中所表示出来的数据段进行对比分析,如图3.5,第一行为cin的输入值,对应表中的C0;第二行为cout进位信号量的输出;第三行是a的输入值,对应表中的Gi;第四行为b的输入值,对应表中的Pi;第五行为s的输出值,对应表中的Ci。

由分析可得,四位先行进位全加器的设计和仿真以及真值表的建立的过程都是正确的。

根据十六位全加器的VHDL代码,用MAX-PLUSⅡ进行模拟,得到仿真图,如图3.6所示。

图3.6十六位全加器仿真图

图3.6中,第一行cin为信号量初试值,第二行cout为信号量进位的输出,第三行和第四行中的a和b都为输入,第五行sum为16位的结果输出,从图中分析可得,十六位全加器的设计是正确的,能准确的执行十六位二进制数的加法运算。

 

总结

这次计算机组成原理课程设计,我们设计的是采用门电路设计一个16位的全加器电路,才开始感觉难度相当的大,因为当中要设计到许许多多的知识,包括数字电路,计算机组成原理,VHDL硬件描述语言等等,这些课我们三个人学得都不是怎么好,尤其是VHDL硬件描述语言,这是我们这几天才刚学习的一门知识,在还没有这个课程设计之前,我们都还不知道这是什么,所以花的大量的时间去查资料,先设计一位全加器,再设计四位全加器,最后再设计十六位全加器,在每一个环节,我们都碰到了许多难题,然后又带着这些问题去查找资料,问老师同学,才能得到解决,最后通过接近一周的时间才完成这个课程设计,由于时间有限,水平也有限,所以当中难免会有许多不当之处。

通过本次课程设计对十六位全加器的设计,确实积累和总结了不少的经验,锻炼了我们的独立和合作工作,也锻炼了实际动手能力,加深了对计算机中的全加器工作原理的认识,提高了对复杂的综合性实践环节具有分析问题、解决问题、概括总结的实际工作能力,对涉及全加器项目的开发、设计过程有初步认识。

这也让我们真正的理解到,理论与实践之间还是有很大的距离,这会让我们在以后的学习中,会更加注意理论与实践的有机结合。

参考文献

[1]陈书开、王毅等.计算机组成与系统结构[M].武汉:

武汉大学出版社,2006

[2]王炜、李清宝、赵秋霞.计算机组成原理与设计[M].北京:

科学出版社,2006.6

[3]张庸一.计算机组成原理实验及课程设计指导[M].重庆:

重庆大学出版社,2001.3

[4]王毓银、陈鸽、杨静、赵亦松.数字电路逻辑设计.北京:

高等教育出版社,2006

[5]贾金铃、田永红、陈光建,计算机组成原理.重庆:

重庆大学出版社,2010.2

[6]侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计[M].西安:

西安电子科技大学出版社,1998.5

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

当前位置:首页 > IT计算机

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2