计算器的设计.docx
- 文档编号:6474414
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:34
- 大小:513.62KB
计算器的设计.docx
《计算器的设计.docx》由会员分享,可在线阅读,更多相关《计算器的设计.docx(34页珍藏版)》请在冰豆网上搜索。
计算器的设计
第一章
绪论
1.1课题来源及意义
在当今以数字化和网络化为特征的信息技术革命大潮中,电子技术获得了飞速发展,现代电子产品渗透了社会的各个领域。
现代电子产品的性能进一步提高,功能越来越复杂,集成化智能化的复杂程度越来越高,更新换代的节奏越来越快,开发风险也越来越大,而且正向着功能多样化、体积小型化、功耗最低化的趋势发展。
所有这些,都给电子系统设计者带来了前所未有的压力,面对这种压力,唯一的出路就是熟练掌握EDA技术,并获得了其有力的支持。
EDA的出现,极大地提高了电路设计的效率和可靠性,减轻了设计者的劳动强度,EDA是电子产品开发研制的动力和加速器,是现代电子设计的核心。
现在生活中计算器的应用基本上可以说是无处不在,小到做买卖的商人的加减乘除的简易计算器,还有学生群体中使用能够进行复杂运算的多功能计算器。
可谓是和生活息息相关。
EDA的设计观念是按照"自顶向下"的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片专用集成电路(ASIC)实现,然后采用硬件描述语言(VHDL)完成系统行为级设计,最后通过综合器和适配器生成最终的目标器件。
用EDA来设计计算器,分别做加减乘除的底层文件、存储文件、显示文件以及输入文件。
然后对其进行整合,层次分明,可以分别对底层文件进行测试,和传统计算器的设计相比,在测试方面有很大的优势。
在EDA技术蓬勃的发展下,本次毕业设计选了EDA技术关于计算器的设计,不仅仅在原来EDA基础编程的情况下,进行更深一步的研究,为了以后从事EDA方面的研究,有更深层次应用,所以通过EDA对计算器的设计,对EDA技术的语言程序、运用电路图设计方法、以及各种不同底层程序的编辑对QuartusII软件的运用更为自如。
1.2国内外发展状况
回顾近30年电子设计技术的发展历程,可将EDA技术[1]分为三个阶段。
(1)七十年代为CAD阶段,这一阶段人们开始用计算机辅助进行IC版图编辑和PCB布局布线,取代了手工操作,产生了计算机辅助设计的概念。
(2)八十年代为CAE阶段,与CAD相比,除了纯粹的图形绘制功能外,又增加了电路功能设计和结构设计,并且通过电气连接网络表将两者结合在一起,以实现工程设计,这就是计算机辅助工程的概念。
CAE的主要功能是:
原理图输入,逻辑仿真,电路分析,自动布局布线,PCB后分析。
(3)九十年代为ESDA阶段。
尽管CAD/CAE技术取得了巨大的成功,但并没有把人从繁重的设计工作中彻底解放出来。
在整个设计过程中,自动化和智能化程度还不高,各种EDA软件界面千差万别,学习使用困难,并且互不兼容,直接影响到设计环节间的衔接。
基于以上不足,人们开始追求贯彻整个设计过程的自动化,这就是ESDA即电子系统设计自动化。
从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用文泛、工具多样、软件功能强大。
中国EDA市场已渐趋成熟,不过大部分设计工程师面向的是PC主板和小型ASIC领域,仅有小部分(约11%)的设计人员工发复杂的片上系统器件。
为了与台湾和美国的设计工程师形成更有力的竞争,中国的设计队伍有必要购入一些最新的EDA技术。
在信息通信领域,要优先发展高速宽带信息网、深亚微米集成电路、新型元器件、计算机及软件技术、第三代移动通信技术、信息管理、信息安全技术,积极开拓以数字技术、网络技术为基础的新一代信息产品,发展新兴产业,培育新的经济增长点。
要大力推进制造业信息化,积极开展计算机辅助设计(CAD)、计算机辅助工程(CAE)、计算机辅助工艺(CAPP)、计算机机辅助制造(CAM)、产品数据管理(PDM)、制造资源计划(MRPII)及企业资源管理(ERP)等。
有条件的企业可开展“网络制造”,便于合作设计、合作制造,参与国内和国际竞争。
开展“数控化”工程和“数字化”工程。
自动化仪表的技术发展趋势的测试技术、控制技术与计算机技术、通信技术进一步融合,形成测量、控制、通信与计算机(M3C)结构。
在ASIC和PLD设计方面,向超高速、高密度、低功耗、低电压方向发展。
外设技术与EDA工程相结合的市场前景看好,如组合超大屏幕的相关连接,多屏幕技术也有所发展。
中国自1995年以来加速开发半导体产业,先后建立了几所设计中心,推动系列设计活动以应对亚太地区其它EDA市场的竞争。
在EDA软件开发方面,目前主要集中在美国。
但各国也正在努力开发相应的工具。
日本、韩国都有ASIC设计工具,但不对外开放。
中国华大集成电路设计中心,也提供IC设计软件,但性能不是很强。
相信在不久的将来会有更多更好的设计工具有各地开花并结果。
据最新统计显示,中国和印度正在成为电子设计自动化领域发展最快的两个市场,年复合增长率分别达到了50%和30%。
EDA技术发展迅猛,完全可以用日新月异来描述。
EDA技术的应用广泛,现在已涉及到各行各业。
EDA水平不断提高,设计工具趋于完美的地步。
EDA市场日趋成熟,但我国的研发水平沿很有限,需迎头赶上。
第二章
VHDL语言
2.1VHDL语言
VHDL语言全称是“超高速集成电路硬件描述语言(VeryHighSpeedIntergatedCircuitHardwreDescriptionLnguage)”,它是随着集成电路系统化和高度集成化的发展而逐步发展起来的,是一种用于数字系统的设计和测试的硬件描述语言。
对于小规模的数字集成电路,通常可以用传统的设计输入方法(如原理图输入)来完成,并进行模拟仿真。
但纯原理图输入方式对于大型、复杂的系统,由于种种条件和环境的制约,其工作效率低,而且容易出错,暴露出多种弊端。
在信息技术高速发展的今天,对集成电路提出了高集成度、系统化、微尺寸、微功耗的要求,因此,高密度可编程逻辑器件和VHDL便应运而生。
2.2VHDL语言的特点
VHDL语言作为一种标准的硬件描述语言,具有结构严谨、描述能力强的特点[2],支持从系统级到逻辑门级电路所有层次的设计,适合于复杂逻辑电路和系统的设计。
作为一种高级硬件描述语言,VHDL语言有如下特点。
(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力。
强大的行为描述能力是避开具体的器件结构、从逻辑行为上描述和设计大规模电子系统的重要保证。
(2)VHDL具有丰富的仿真语句和库函数,使得在任何大系统的设计早期,就能检查系统的功能可行性,随时可对系统进行仿真模拟,使设计者对整个工程的结构和功能的可行性做出判断。
(3)用VHDL完成一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动把VHDL描述设计转变成门级网表(根据不同的实现芯片)[3]。
这种方式突破了门级设计的瓶颈,极大地减少了电路设计的时间和可能发生地错误,降低了开发成本。
利用EDA工具的逻辑优化功能,可以自动地把一个综合后的设计变成一个更小、更高速的电路系统。
反过来,设计者还可以容易地从综合和优化的电路中获得设计信息,返回去更新修改VHDL设计描述,使之更加完善。
(4)VHDL对设计的描述具有相对独立性。
设计者可以不懂硬件的结构,也不必顾及最终设计的目标器件是什么,而进行独立的设计。
正因为VHDL得硬件描述与具体的工艺技术和硬件结构无关,所以VHDL设计程序的硬件实现目标器件有广阔的选择范围。
(5)由于VHDL具有类属描述语句和子程序调用等功能,对于完成的设计,在不改变源程序的条件下,只需改变类属参量或函数,就能轻而易举地改变设计的规模和结构[4]。
(6)VHDL本身的生命周期长。
因为VHDL得硬件描述与工艺无关,不会因工艺变化而使描述过时。
而与工艺技术有关的参数可通过VHDL提供的属性加以描述,当生产工艺改变时,只需要修改相应程序中的属性参数即可。
2.3VHDL语言设计实体的基本结构
VHDL语言是一种强数据类型语言,它有三种数据对象,即常数、信号和变量,每一种数据对象都要指定数据类型。
VHDL的数据类型丰富[5],既有数值数据类型和逻辑数据类型,又有位型和位向量型。
既支持预定义的数据类型,又支持自定义的数据类型。
这样就给硬件描述带来较大的自由度,使设计人员能够方便地使用VHDL创建高层次的系统模型。
VHDL语言将所设计的电路系统均看作一个设计实体,它可以是任意复杂的系统,也可以是一块电路板、一个芯片、一个电路单元甚至一个门电路。
如果将一个系统自上而下分层,划分模块,则各层的设计模块都可以作为一个设计实体。
不论是简单的数字电路,还是复杂的数字系统,其基本构成是一致的,它们都是由实体说明(Entity)和结构体(Architecture)两个最基本的部分组成。
实体说明部分用来描述该模块或系统的接口信息,包括端口的数目、方向和类型,其作用相当于传统设计方法中所使用的元件符号。
结构体部分则描述该模块的内部电路,对应于原理图、逻辑方程[6]和模块的输入/输出特性。
两者相结合就可以组成VHDL设计文件。
一个设计试题可以包括一个或多个结构体,用于描述其逻辑结构和逻辑功能。
2.4VHDL语言的实体
实体说明语句的格式如下:
ENITTY实体名IS
[PORT(端口表);]
END[ENTITY]实体名;
实体说明是VHDL程序设计中最基本的组成部分,主要用来描述设计实体[7]的外部接口信号,定义设计单元的输入/输出端口,是设计实体对外的一个通信界面,为可视部分。
但它并不描述设计的具体功能。
端口名是赋予每个外部引脚的名称,通常用一个或几个英文字母,或者用英文字母加数字命名。
端口模式(或端口方向)用来定义外部引脚的信号方向。
在端口说明中,共有五种模式,分别为IN(输入端口)、OUT(输出端口)、INOUT(双向端口)、BUFFER(缓冲端口)和LINKAGE(链接端口)。
2.5VHDL语言的结构体
结构体[8]是设计实体的核心,它具有指明了设计实体的行为、元件及内部连接关系。
如果将实体说明看成一个元件或电路的外部符号,则结构体就是这个元件或电路的内部原理图。
通过结构体构造设计实体的硬件结构、元件之间的连接,实现数据传输和变换,完成设计实体功能的具体实施。
结构体的格式如下:
ARCHITECTURE结构体名OF实体名IS
[结构体说明语句;]
BEGIN
[功能描述语句;]
END[ARCHITECTURE][结构体名];
结构体名是给予结构体的名称,它是该结构体唯一的名字,位于引导语句和OF语句之间。
OF后面紧随实体名,表明该结构体隶属于哪个实体,并用IS来结束结构体的命名。
结构体名原则上可以是任意合法的标识符,但为了便于程序的阅读,通常都是根据该结构体所采用的描述方式对其命名,如Behavior(行为描述)、Dataflow(数据流描述)、Structure(结构描述)等。
结构体说明语句位于ARCHITCTURE和BEGIN之间,用于定义结构体中所用的数据对象和子程序,并对所引用的元件加以说明,即对结构体的功能描述语句中所用到的信号(SIGNAL)、类型(TAPY)、常数(CONSTANT)、元件(COMPONENT)、函数(FUNCTION)和过程(PROCEDURE)等加以说明和定义,但不能定义变量。
应当注意,这些定义只能用于这个结构体中,如果要将这些定义用于其他实体或结构体,则需要将其作为程序包处理。
2.6VHDL程序设计约定
为了便于程序的阅读,此设计对VHDL程序设计特作如下约定:
(1)语句结构描述中方括号“[]”内的内容为可选内容。
(2)对于VHDL的编译器和综合器来说,程序文字的大小写是不加区分的。
本文中,VHDL中使用的关键词用大写,对于由用户自己定义的名称等用小写。
(3)程序中的注释使用横线“——”,横线“——”后的文字都不参加编译和综合。
(4)为了便于程序的阅读与调试,书写和输入程序时,使用层次缩进格式,同一层次的对齐,低层次的描述较高层次的描述缩进两个字符。
(5)考虑到MAX+PLUSⅡ要求源程序文件的名字与实体名必须一致,因此为了使同一个VHDL源程序文件能适应各个EDA开发软件上的使用要求,各个源程序文件的命名均与其实体名一致。
第三章基于EDA技术的计算器的设计
3.1计算器的设计思路
将计算器分为四个部分:
计算部分、存储部分、显示部分和输入部分。
合理设计这四部分将有利于资源的合理应用。
其中计算部分分为加减乘除法器,分别设计底层程序。
显示部分为设计一个四位二进制数与七段译码相互转换的程序。
输入部分为设计有0到9数字按键与加减乘除运算符号,以及等于号及清零键。
3.2系统组成框图
图3-1
3.3计算部分的设计和实现
计算部分就是运算的过程,此设计中主要包含的运算有加减乘除法。
3.3.1加法器的设计
先构思一下加法器的流程图,如图3-2所示。
根据流程图,可以确定一个加法器要有被加数、加数和进位位的输入端口。
故设a端口为被加数,b端口为加数,ci为输入进位。
此加法器还有两个输出端口,分别是加法运算的最终结果输出和进位位的输出,故设s为结果的输出端口,co为进位的输出端口。
图3-2加法器的流程图
根据流程图可以看出,当输入被加数与加数后,两个8位二进制数开始相加,之后,再与输入进位位相加,这样得到的最终结果就是加法器加法运算的最终结果。
加法器[9]是基于EDA的计算器的设计中的基本逻辑器件,这里设计的8位二进制数的加法器,它是属于多位加法器的范畴的。
多位加法器按其进位方式的不同可以分为两类:
串行进位加法器和并行进位进位加法器。
串行进位加法器是将多个一位全加级联,低位全加器的进位输出送给相邻高位全加器作为进位输入,以此构成多位加法器。
这种设计思路简单明了且占用资源少,但运算速度较慢。
并行进位方式则是在各位的加法环节之外,另外设有进位产生逻辑电路,各位的进位输入信号同时产生,从而各位可以同时完成全加运算,输出最后结果。
并行进位方式具有较快的运算速度,但是相对于串行进位方式来说,却往往占用更多的资源。
尤其是当运算位数增加的时候,相同位数的并行进位和串行进位加法器的资源占用差距也越来越大。
因此,常常需要设计者在运算速度和资源占用量之间做出折中平衡。
实践证明,4位二进制并行进位加法器和串行级联加法器占用的资源几乎相同。
因此,可以用两个4位二进制并行加法器级联以构成8位二进制加法器,这是一种较为合理的选择。
4位二进制并行进位加法器的源程序ADDER4B.VHD如下:
LIBRARYIEEE;——库
以上这部分是设计中的全加器的VHDL语言的第一部分——库。
一种用来存放预先已设计好的程序包[10]、数据集合体、元件的仓库。
库存放的信息供用户进行VHDL设计时调用,以提高设计效率。
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
以上这些是此加法器所要调用的程序包,是VHDL语言的第二部分。
用VHDL语言编写的共享文件[11],定义了在设计结构体和实体说明中将要使用的常数、数据类型、子程序和设计好的电路单元等。
ENTITYADDER4BIS——4位二进制数的加法器的实体
PORT(ci:
INSTD_LOGIC;——进位位的输入端口
a:
INSTD_LOGIC_VECTOR(3DOWNTO0);——一个4位二进制数的输入
——端口(被加数)
b:
INSTD_LOGIC_VECTOR(3DOWNTO0);——一个4位二进制数的输入
——端口(加数)
s:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);——加法运算的结果输出端口
co:
OUTSTD_LOGIC——进位位的输出端口
);
ENDADDER4B;
这部分是此加法器的VHDL语言的第三部分——实体说明。
定义电路单元的输入、输出引脚信号。
程序的实体名称可任意取名[12](这里我取的是ADDER4B),但必须与VHDL程序的文件名称相同(保存时的文件名)。
实体说明以标示符ENTITY开始,以END结束。
ARCHITECTUREbehaveOFADDER4BIS——4位二进制数的加法器的结构体
SIGNALSINT:
STD_LOGIC_VECTOR(4DOWNTO0);——类似于在芯片[15]内
——部定义的一个数据
SIGNALaa,bb:
STD_LOGIC_VECTOR(4DOWNTO0);
BEGIN
aa<='0'&a;——拓展位数,使其成为最高位
bb<='0'&b;
SINT<=aa+bb+ci;——相加
s<=SINT(3DOWNTO0);
co<=SINT(4);——最高位为输出进位位
ENDbehave;
这是加法器的VHDL语言的第四部分——结构体。
用来描述电路内部和逻辑功能。
结构体的名称可任意取名(这里取的是behave),并以标示符ARCHITECTURE开头,以END结尾。
(注.以下的程序是部分的VHDL语言)
根据以上设计的两个4位二进制数的加法器,来设计两个8位二进制数的加法器。
顶层模块:
8位二进制并行进位加法器的部分程序ADDER4B.VHD如下:
SIGNALCARRY_OUT:
STD_LOGIC;
BEGIN
U1:
ADDER4B
PORTMAP(ci=>ci,a=>a(3DOWNTO0),b=>b(3DOWNTO0),s=>s(3DOWNTO0),co=>CARRY_OUT);
U2:
ADDER4B
PORTMAP(ci=>CARRY_OUT,a=>a(7DOWNTO4),b=>b(7DOWNTO4),s=>s(7DOWNTO4),co=>co);
调用两个4位二进制数加法的模块。
引脚分布图如下图3-3所示:
图3-38位加法器电路的引脚分布图
仿真波形图(图3-4):
图3-48位加法器的仿真波形
从以上仿真波形中可以作出总结(“0”为低电平,“1”为高电平):
若a为“8”,b为“9”时,a+b=“17”,这时的ci为高电平,所以在此基础之上还要再加“1”,得到s=“18”,这时最终的结果。
因为最高位没有进位,所以co为“0”即为低电平。
3.3.2减法器的设计
首先设计一个两个4位二进制数的减法器。
根据以下图3-5的4位全减器的流程图可以看出,此减法器共需要两个输入端口和一个输出端口。
减法器的设计可以引用加法器,即通过对减数的求补[16],再与被减数相加得到最终的,所以还要增设一个进位位输入端口和进位位的输出端口。
所以可以设a端口为被减数,b端口为减数,ci为输入借位位,s为结果的输出端口,co为借位的输出端口。
减法器的运算过程中首先要引用加法器(上面的加法器的程序中很详细地介绍了加法器的设计,故减法器中加法器的描述部分在这里就省略了)。
图3-54位全减器的流程图
减法器的部分VHDL语言描述:
BEGIN
btem(3DOWNTO0)<=NOTb(3DOWNTO0);——先把减数求反
ctem(0)<=NOTci;——输入进位也求反,从而对减数求补码
g1:
FORiIN0TO3GENERATE——连用四位全加器[17]
add:
adderPORTMAP(a(i),btem(i),ctem(i),stem(i),ctem(i+1));
ENDGENERATE;
s(3downto0)<=stem(3downto0);——把中间变量所得到的值赋给s,因
——为s是减法器运算出来的结果的输
——出端口,通过s把计算结果输出
co<=NOTctem(4);——求反输出进位
ENDbehave;
然后将4位全减器级联起来,就可得到两个8位二进制数的减法器。
图3-5是其原理图:
图3-6减法器的原理图
减法器的仿真波形:
图3-7减法器的仿真波形图
从以上仿真波形图3-7中可以作出总结(“0”为低电平,“1”为高电平):
两个数做减法,采用的是4位4位一减,若a为“00111000”,b为“00100010”时,首先将它们各自的低4位先做运算,先将b的第四位求补,之后与a的第四位相加后得到第四位的运算结果“0110”,最高位有进位,但输出时取反就为“0”,再用同样的方法计算出高四位的运算结果,得“0001”,之后还得加上一个低4位向高4位的进位“0”,所以最终结果s为“00010110”。
3.3.3乘法器的设计
乘法器是数字系统中的基本逻辑器件,在很多应用中都会出现如各种滤波器的设计、矩阵的运算等。
这里设计的是一个4×4的乘法器。
根据乘法器的原理,可以绘出其流程图(图3-8),从流程图中又可以看出可设a端口为被乘数(一个4位二进制数),b端口为乘数(一个4位二进制数),y为乘法运算的结果的输出端口。
图3-8乘法器的流程图
乘法器的部分VHDL语言描述:
ENTITYmulIS
PORT(
a,b:
INSTD_LOGIC_VECTOR(3DOWNTO0);——被乘数与乘数的输入
y:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)——乘积的输出端口
);ENDmul;
ARCHITECTUREarchOFmulIS
BEGIN
y(7DOWNTO0)<=a(3DOWNTO0)*b(3DOWNTO0);——y=a×b
ENDarch;
乘法器的引脚图:
图3-9乘法器的引脚图
从乘法器的引脚图中也可以看出,乘法器有两个输入引脚,分别来输入乘数和被乘数,一个用来输出运算结果的输出端口,在封装好的乘法器的器件中,就是来实现乘法运算的算法的。
乘法器的仿真波形:
图3-10乘法器的仿真波形
从乘法器的仿真图3-10中可以看出,y的输出就是a与b的相乘后的结果。
例如:
若a为“0001”,b为“0010”,则根据左移原理可得出最终结果s,为“00000010”。
结果完全正确。
这里也可以证实两个4位二进制数的乘积为一个8位二进制数。
3.3.4除法器的设计
整个除法器是基于连减和移位操作的,连减实际上就是基于数学上除法的基本原理。
例如,a÷b=c余数是d,就等价于a-c个b后得到d而且d
所设计的除法器主要部分为一个控制移位的控制器,另有一个由全加器组成的4位减法器(可引用上面的减法器的设计)。
又因为规定了结果为4位,控制器首先比较被除数的高4位与除数的大小,判断是否溢出,溢出则退出,否则就做4位移位和减法得到结果。
在每次做完减法以后都要判断是否够减,即判断是否有借位,不够得话,就恢复被减数,移一位再减。
除法器的流程图如下图3-11所示:
图3-11除法器的流程图
设a端口为被除数,b端口为除数,clk为时钟信号的输入端口,str为启动信号的输入端口,此端口的作用是当启动信号为高电平的时候有效,表示启动了除法器开始作除法运算。
s为除法运算所得到的商的输出端口,y为除法运算中所得到的余数的输出端口。
该除法器的设计中使用了状态机,它有5个状态:
start为开始状态,one为第一次移位状态,two为第二次移位状态,three为第三次移位状态(正常运算结果的输出状态),error为溢出出错状态。
在除法器的设计中引用了减法器。
ain用来寄存被除数,bin用来寄存除数,atem为减法器的被减数输入,btem为减法器的减数输入,stem用来计算内存结果,citem为减法器的借位输入,cotem为减法器的借位输出。
除法器的VHDL语言描述的部分程序:
BEGIN
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算器 设计