组成原理课程设计16位全加器电路的设计与实现.docx
- 文档编号:28321139
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:17
- 大小:253.70KB
组成原理课程设计16位全加器电路的设计与实现.docx
《组成原理课程设计16位全加器电路的设计与实现.docx》由会员分享,可在线阅读,更多相关《组成原理课程设计16位全加器电路的设计与实现.docx(17页珍藏版)》请在冰豆网上搜索。
组成原理课程设计16位全加器电路的设计与实现
16位全加器电路的设计与实现
学生姓名:
杨传福指导老师:
王新
摘要本课程设计主要利用门电路完成一个16位的全加器电路的设计与实现。
本设计采用逐步求解的方法,即先设计一位全加器,再利用一位全加器设计出四位全加器,最后在四位全加器的基础上设计出16位全加器,并使用VHDL语言编写程序,在MAX-PLUSⅡ仿真平台上进行仿真。
仿真结果表明,本课程设计中设计出的16位全加器能正确完成16位二进制数的加法运算。
关键词全加器;门电路;先行进位
Abstract:
Thiscurriculumdesignprimarilyusethegatecircuittocompletea16-bitfull-addercircuit.Thedesignsolvethisproblemwithstep-by-stepapproach,namelystartdesigningonefull-adder,andthenuseonefull-adderdesignafourfull-adder,thelastdesignthe16-bitfull-adderbasedonthefourfull-adder,anduseVHDLlanguageprogramming,atMAX-PLUSⅡsimulationonsimulationplatform.Thesimulationresultsshowthatthedesignofthecurriculumdesignofthe16-bitfull-addertoadda16-bitbinarynumberadditionoperations.
Keywords:
Full-adder;Gatecircuit;Firstbinary
1引言
1.1课程设计的背景
随着计算机科学技术的发展,人们获得信息的途径更加多样,获取信息的速度更加快捷。
硬件的发展允许程序员编出很多精彩的使用软件,也使得计算机更加普及。
中央处理器CPU的好坏是影响和制约计算机速度和性能的关键因素。
而加法器是组成CPU的的重要部件,一般运算速度的快慢就取决与每秒执行加法的次数,加法器是算术逻辑单元中的基本逻辑器件。
例如:
为了节省资源,减法器和硬件乘法器都可由加法器来构成。
但宽位加法器的设计是很耗费资源的,因此在实际的设计和相关系统的开发中需要注意资源的利用率和进位速度等两方面的问题。
多位加法器的构成有两种方式:
并行进位和串行进位方式。
并行进位加法器设有并行进位产生逻辑,运算速度快;串行进位方式是将全加器级联构成多位加法器。
并行进位的并行加法器又可以分为组内并行、组间串行的进位链和组内并行、组间并行的进位链。
通常,并行加法器比串行级联加法器占用更多的资源,并且随着位数的增加,相同位数的并行加法器比串行加法器的资源占用差距也会越来越大。
它们的目的就是要进位信号的产生尽可能的快,因此产生了二重进位链或更高重进位链,显然进位速度的提高是以硬件设计的复杂化为代价来实现的。
1.2课程设计目的
巩固和运用所学课程,理论联系实际,提高分析、解决计算机技术实际问题的独立工作能力。
通过课程设计更清楚地理解下列基本概念:
1.计算机的硬件基本组成;
2.计算机中半加器的设计;
3.计算机中全加器的执行过程;
4.全加器的工作原理;
5.74系列芯片的组成和工作过程.
在此基础上学会和锻炼以下能力:
1.掌握全加器的组成、工作原理。
2. 掌握产生求和结果的逻辑表达式。
3. 掌握快速进位链产生进位的逻辑表达式。
4. 学会使用MAX-PLUSⅡ软件设计电路原理图及功能模拟。
5.熟悉常用的门电路,掌握快速进位链技术。
1.3课程设计的内容
了解计算机的硬件系统,了解一位全加器的组成原理,深入讨论计算机的组成原理,在熟悉常用的门电路的组成和工作过程的基础上,要求设计出一个16位的全加器。
其中要求设计并写出产生求和结果的逻辑表达式,需要写出利用快速进位链产生进位的逻辑表达式,同时还要实现时需要用一个时钟信号控制运算的执行,如第一拍给出输入数据,第二拍给出运算控制信号,第三拍送输出数据,然后又回到第一拍,循环往复,直到运算全部结束。
根据要求设计出针对具体指令所对应的流程图;根据流程及门电路设计出相应的全加器。
编写出VHDL程序,在仿真软件上运行并检验所设计的微程序的正确性。
1.4课程设计的可行性分析
全加器的性质为计算机硬件,而半加器的设计与操纵是必要的,另外是对文档的操作。
我在上学期期间学习了计算机组成原理和以前学习的数字电路有关基础知识,具备有限的分析与设计能力,了解一些全加器和文档的设计与操纵;授课老师陈书开多年从事计算机组成原理的教学与研究工作,加上指导老师王新的悉心指导,因而该设计的实现在技术上是可行的。
该系统的工作量相对于我这种开发水平的学生来说很大,必须保证按进度完成任务。
实际工作量预计两星期(每天4-8小时)。
如包含门电路的操作及技术文档的整理、制作,工作量将更大。
2全加器的组成和原理分析
全加器是常用的组合逻辑模块中的一种,对全加器的分析和对组合逻辑电路的分析一样。
组合逻辑电路的分析,就是找出给定电路输入和输出之间的逻辑关系,从而了解给定逻辑电路的逻辑功能。
组合逻辑电路的分析方法通常采用代数法,一般按下列步骤进行:
(1)根据所需要的功能,列出真值表。
(2)根据真值表,写出相应的逻辑函数表达式。
(3)根据真值表或逻辑函数表达式,画出相应的组合逻辑电路的逻辑图[1]。
(4)用VHDL编写程序在MAX-PLUSⅡ上进行模拟,并分析结果的正确性。
2.1全加器简介
全加器是组合逻辑电路中最常见也最实用的一种,考虑低位进位的加法运算就是全加运算,实现全加运算的电路称为全加器。
它主要实现加法的运算,其中分为并行全加器和串行全加器,所谓并行就是指向高位进位时是并行执行的,而串行就是从低位到高位按顺序执行,为了提高运算,必须设法减小或消除由于进位信号逐级传递所消耗的时间,为了提高运算速度,制成了超前进位加法器,这是对全加器的一种创新[2]。
2.2一位全加器
要使计算机能解决某个问题,程序员要编写相应的程序。
要使全加器进行加法运算,也需要用各种门电路设计出相应的逻辑电路,根据组合逻辑电路设计的步骤,我们先设计一位全加器的设计。
(1)根据全加器所需要的功能,我们可以设计出一位全加器的组合逻辑框图。
如图2.1所示。
图2.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相加向高位的进位输出。
因此,该电路可以完成一位二进制数全加的功能,称为全加器。
此电路的真值表如表2-1所示。
表2-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
2.3十六位全加器的设计
设计16位的全加器思路非常简单且清晰,第一种方法就是先设计一个半加器,然后两个半加器合并成一个一位的全加器,最后用16个一位的全加器组合成为一个16位的全加器;第二种方法就是先设计一个一位的全加器,然后在用16个串联或并联就组成了一个16位的全加器,而本课程设计采用的是第二种方法[3]。
2.4十六位全加器的基本原理
16位全加器设计的基本思想,就是仿照通常的解组合逻辑电路的方法,先把原理图画出来,然后通过原理图把各个信号量描述出来,最后再根据各个器件的逻辑功能列出真值表。
当全加器工作时,先一个一个二进制数全部按位输入,从而在4位先行进位的加法器中进行运算,使相应部件执行所规定的操作。
16位全加器主要由输入、输出、进位和4位先行进位的加法器这四部分组成,其原理框图如图2.2所示。
图2.216位全加器的组成原理图
16位全加器总共有16位输入,而每四位为一组输入到4位先行进位加法器中进行加法运算,一般输入是两位二进制数,如图是:
Y4-1X4-1一直到Y16-13X16-13为输入;输出为F,共16位输出,而和输出一样四位为一组一起经过运算后输出,不同的是输入有两个二进制数,而输出只有一个二进制数;C表示进位,C0初始值为1,后面的C4,C8,C12,C16分别是每个四位加法器运算后的进位。
并行进位的概念可用于更大位数的加法器上,随着加法器位数的增加,加法电路变得越来越复杂。
3详细设计
3.1真值表的建立
根据在本课程设计中十六位全加器的设计原理,只需要确定四位先行进位全加器的功能就可以直接推导出十六位全加器,所以,在本课程设计中先设计出四位先行进位全加器,而设计的第一步就是建立真值表。
表3-1为四位先行进位全加器的真值表。
表中的C0为低位向高位的进位,P1~P4以及G1~G4为输入端,C1~C4为输出端。
表3-14位先行进位全加器真值表
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四位先行进位加法器的逻辑设计
根据16位全加器的基本原理,4位先行进位加法器的设计是整个设计的关键。
四位先行进位全加器各个进位信号的产生只需要经历一级与非门和一级与或非门的延迟时间,所以比逐位进位全加器大大缩短了时间。
图3.2所示为本次课程设计中的四位先行进位全加器原理图[4]。
图3.14位先行进位全加器组合逻辑图
图3.24位先进进位全加器的原理图
3.3十六位全加器的功能设计
在掌握了4位先行进位全加器的设计之后,整体工作也就完成了一大半,在这个基础上做16位全加器只需把四个4位先进进位全加器串联起来,并增加输入和输出,那么,16位全加器的组合逻辑框图也就完成了,剩下的工作就是把各个器件的功能列出来。
如图2.3即为16位全加器的原理图。
根据4位先行进位全加器的真值表可以推导出16位全加器的功能函数。
根据全加器的原理可以得到函数关系:
C1=X1Y1+(X1+Y1)C0
C2=X2Y2+(X2+Y2)C1=X2Y2+(X2+Y2)X1Y1+(X2+Y2)(X1+Y1)C0
C3=X3Y3+(X3+Y3)C2
=X3Y3+(X3+Y3)X2Y2+(X3+Y3)(X2+Y2)X1Y1+(X3+Y3)(X2+Y2)(X1+Y1)C0
C4=X4Y4+(X4+Y4)C3
=X4Y4+(X4+Y4)X3Y3+(X4+Y4)(X3+Y3)X2Y2+(X4+Y4)(X3+Y3)
(X2+Y2)X1Y1+(X4+Y4)(X3+Y3)(X2+Y2)(X1+Y1)C0
依次可得:
C5=X5Y5+(X5+Y5)C4
C6=X5Y5+(X5+Y5)C5
C7=X6Y6+(X6+Y6)C6
C8=X8Y8+(X8+Y8)C8
C9=X9Y9+(X9+Y9)C8
C10=X10Y10+(X10+Y10)C10
C11=X11Y11+(X11+Y11)C10
C12=X12Y12+(X12+Y12)C11
C13=X13Y13+(X13+Y13)C12
C14=X14Y14+(X14+Y14)C13
C15=X15Y15+(X15+Y15)C14
C16=X16Y16+(X16+Y16)C15
根据3.1的图所示可定义两个辅助函数:
Pi=Xi+Yi,Gi=XiYi
Pi表示进位传递函数,Gi表示进位产生函数
将Pi、Gi代入前面的C1~C4式,可得:
C1=G1+P1C0
C2=G2+P2G1+P2P1C0
C3=G3+P3G2+P3P2G1+P3P2P1C0
C4=G4+P4G3+P4P3G2+P4P3P2G1+P4P3P2P1C0
3.4用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.5结果分析
根据4位先行进位全加器VHDL的代码,用MAX-PLUSⅡ进行模拟,得到仿真图,如图3.3所示。
图3.34位先行进位全加器仿真图
根据表3-1和图3.3,可以进行分析四位先行进位全加器的正确性,用表中的数据和图中所表示出来的数据段进行对比分析,如图3.3,第一行为cin的输入值,对应表中的C0;第二行为cout进位信号量的输出;第三行是a的输入值,对应表中的Gi;第四行为b的输入值,对应表中的Pi;第五行为s的输出值,对应表中的Ci。
由分析可得,四位先行进位全加器的设计和仿真以及真值表的建立的过程都是正确的。
根据16位全加器的VHDL代码,用MAX-PLUSⅡ进行模拟,得到仿真图,如图3.4所示。
图3.416位全加器仿真图
图3.4中,第一行cin为信号量初试值,第二行cout为信号量进位的输出,第三行和第四行中的a和b都为输入,第五行sum为16位的结果输出,从图中分析可得,16位全加器的设计是正确的,能准确的执行16位二进制数的加法运算。
4结束语
通过本次课程设计对全加器器的设计和实现,确实积累和总结了不少的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 组成 原理 课程设计 16 全加器 电路 设计 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)