毕业设计(论文)-基于FPGA的计算器设计.doc_第1页
毕业设计(论文)-基于FPGA的计算器设计.doc_第2页
毕业设计(论文)-基于FPGA的计算器设计.doc_第3页
毕业设计(论文)-基于FPGA的计算器设计.doc_第4页
毕业设计(论文)-基于FPGA的计算器设计.doc_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录摘要IAbstractII第一章 引言11.1 课题研究的目的与意义11.2 国内外发展现状11.3 课题的主要技术路线2第二章 FPGA技术及硬件描述语言32.1 FPGA技术的发展现状及与CPLD的比较32.2 FPGA设计方法52.3 利用硬件描述语言(HDL)的硬件电路设计方法62.4 VHDL语言的特点72.5 Quartus 概述及其设计流程7第三章 系统总体设计103.1 计算器的计算部分103.2 计算器的存储部分103.3 计算器的显示部分113.4 计算器的输入部分12第四章 计算器的VHDL设计144.1 加法器的设计与仿真144.2 减法器的设计与仿真154.3 乘法器的设计与仿真164.4 除法器的设计与仿真18第五章 结束语20致谢21参考文献22附录2341基于FPGA的计算器设计摘要: 本文介绍了一个简单计算器的设计,该设计采用了现场可编程逻辑器件FPGA设计,并基于硬件描述语言VHDL在Altera公司的Quartus 软件上实现仿真。系统由计算部分、存储部分、显示部分和输入部分四个部分组成,计算部分为加法器、减法器、乘法器和除法器,存储部分需要3个存储器来实现:内部累加器(acc)、输入寄存器(reg)以及结果暂存器(ans)。显示部分由四个七段译码管组成,分别来显示输入数字,输入部分采用外接键盘,由09十个数字按键,加减乘除四个运算符按键,一个等号按键和一个清零按键组成的。通过外部的按键可以完成四位数之内的 加、减、乘、除四种功能运算,其结构简单,易于实现。 关键词:FPGA;VHDL;计算器The design of calculator based on FPGAAbstract:This article describes the design of a simple calculator, the design uses Field Programmable Gate Array FPGA based on VHDL hardware description language to design and Alteras Quartus in software for emulation. This system is componentted by the calculation section, storage section, display and input section of the four parts, the computing part include adder, subtractor, multiplier and divider,Storage part needs three memory to help achieved: internal accumulator (acc), input register (reg) as well as the results of registers (ans). Display part is made up three decoder of 7 sections, respectively to show the number of input. Input part has ten number keys, from 0 9, also has addition and subtraction and multiplication and division arithmetic operator keys, a button and of equal sign and the clear key. Buttons can be done through external within the four-digit add, subtract, multiple, divede the four kinds of functional operations, its structure is simple and easy to implement.Key words:FPGA;VHDL;calclute第一章 引言1.1 课题研究的目的与意义在人类学会交易的时候,计算也随之产生,而算盘作为计算最实用的工具存在了几千年。算盘亦称珠算,是中国人民创造的一种计算工具,素有“中国计算机”之称。算盘产生于汉代之前,是由古代的“筹算”演变而来的,珠算一词,最早见于汉末三国时代徐岳撰数术记遗,书中有“珠算,控带四时,经纬三才”的记述。南宋数学家杨辉的乘除通变算宝中有“九归”口诀,元代刘因亦有算盘诗,明人吴敬九章详注比类算法大全记载了珠算的有关算法。明清时期,算盘的应用已很广泛,关于算盘制造规格,明万历年间柯尚迁的数学通轨载有13档算盘图,上2珠,下5珠,呈长方形,四周为木框,内有轴心,俗称“档”,档中间用一根横梁隔开,运算时定位后拨珠运算。后来出现的各种规格的算盘,都是在此基础上发展起来的。算盘构造简单,便于掌握,使用方便,成为计算理财不可缺少的工具。算盘从明代开始传入朝鲜、日本等东亚国家。清代时算盘随着经济文化交往被传入东南亚诸国,二次世界大战后,美国也从日本引进了算盘,可见算盘在人们的日常生活中起着非常重要的作用,不管是大商人还是小商贩都需要使用算盘进行计算。可是随着人类文明的进步和科学技术的不断发展。算盘已经越来越不能满足一些高强度、高难度、高速度的复杂计算。这时,一种新的电子产品问世了,它就是电子计算器。电子计算器的发明是跨时代的,它比算盘计算的速度要快几百几千倍,计算的结果要比算盘更精确,操作的方法要更方便,更简单易学,计算的范围更广,并且小巧、轻便。它已经成为人们日常生活中不可缺少的一种计算工具,为我们的生活提供了很大的方便。而随着计算机的普及,越来越多人在使用计算机,越来越多的工作离不开计算机,可以说计算机已经成为现代社会中不可或缺的工具,而电子计算器功能也以软件的形式进入计算机的软件世界,这不仅给人们带来了更大的便利,更为人们引入了更快的计算速度和更强大的运算功能。1.2 国内外发展现状(1)国外情况在国外,电子计算器在集成电路发明后,只用短短几年时间就完成了技术飞跃,经过激烈的市场竞争,现在的计算器技术己经相当成熟。计算器已慢慢地脱离原来的“辅助计算工具”的功能定位,正向着多功能化、可编程化方向发展,在各个领域都得到了广泛的应用。用计算器不仅可以实现各种各样复杂的数学计算还可以用来编制、运行程序,甚至解方程组,图形计算器还可以进行图形处理。计算器内置的软件允许用户进行类似于对计算机的文件和目录管理等操作,允许用户对图形界面进行定制,同时各种新技术也被应用到计算器里使计算器功能越来越强大。可以说,计算器就是一个“微微型”的计算机。(2)国内情况国内也有厂商利用计算器芯片开发新的产品,但对计算器技术的研究、计算器芯片的设计还处于起步阶段。计算器的主要功能还是在于“计算”,不妨称之为“低档计算器”。即便是对这种计算器,很多厂商也只从事计算器的组装、销售业务。一些IC设计公司、芯片提供商也开始研究计算器技术。1.3课题的主要技术路线本次设计基于现场可编程逻辑器件FPGA进行设计,应用硬件描述语言VHDL编程并在Altera公司的Quartus 软件上实现仿真。需要进行计算器的常用运算功能的实现,通过外接键盘输入、LED数码显示来达成运算目的。第二章 FPGA技术及硬件描述语言2.1 FPGA技术的发展现状及与CPLD的比较(1)FPGA技术的发展现状FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输入输出模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有:.采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。.FPGA可做其它全定制或半定制ASIC电路的测试样片。.FPGA内部有丰富的触发器和IO引脚。.FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。.FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。与FPGA对应的还有DSP处理器,DSP处理器速度虽然很快,并对许多DSP应用来说很有用,但仍有一些应用要求性能再进一步提升,而FPGA提供了更高的性能。FPGA可以生成一个定制硬件设计,从而控制逻辑能够在硬件中实现,不必再利用精确的时钟周期来实现控制功能。此外,通过裁减硬件架构,FPGA可以提供额外的性能。如果最重要的设计考虑因素是速度,那么可以在FPGA中设计完全并行的算法处理方案。现在,许多系统已经包含了一个FPGA,用于协议转换、胶合逻辑或一些其它系统功能。如果那个FPGA没有被完全利用,那么把DSP功能加入其中可以为系统节约成本。而且如果标准发生改变,使用FPGA就不会有任何风险。FPGA的配置文件能够像软件那样升级,尽管它们必须被存储在系统的非易失性存储器中。目前的FPGA设计一般采用Top-down(自顶向下)的设计方法。先将系统划分为各个功能子模块,在系统级层次上进行行为描述,再对这些子模块进一步进行行为描述。(2)FPGA与CPLD的比较FPGA是现场可编程逻辑门阵列的简称,是电子设计的一个里程碑。CPLD是复杂可编程逻辑器件的简称。尽管FPGA和CPLD都是可编程ASIC器件,有很多共同特点,但由于CPLD和FPGA结构上的差异,具有各自的特点: .CPLD更适合完成各种算法和组合逻辑,FPGA更适合于完成时序逻辑。换句话说, FPGA更适合于触发器丰富的结构,而CPLD更适合于触发器有限而乘积项丰富的结构。.CPLD的连续式布线结构决定了它的时序延迟是均匀的和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性。.在编程上FPGA比CPLD具有更大的灵活性。CPLD通过修改具有固定内连电路的逻辑功能来编程, FPGA主要通过改变内部连线的布线来编程; FPGA可在逻辑门下编程,而CPLD是在逻辑块下编程。 .FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现。 .CPLD比FPGA使用起来更方便。CPLD的编程采用E2PROM或FASTFLASH技术,无需外部存储器芯片,使用简单。而FPGA的编程信息需存放在外部存储器上,使用方法复杂。.CPLD的速度比FPGA快,并且具有较大的时间可预测性。这是由于FPGA是门级编程,并且CLB之间采用分布式互联,而CPLD是逻辑块级编程,并且其逻辑块之间的互联是集总式的。 .在编程方式上,FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入SRAM中。其优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。 CPLD主要是基于EEPROM或FLASH存储器编程,编程次数可达1万次,优点是系统断电时编程信息也不丢失。CPLD又可分为在编程器上编程和在系统编程两类。.一般情况下,CPLD的功耗要比FPGA大,且集成度越高越明显。随着FPGA门数以及性能的提高,可以将现在的许多数字电路部分下载到FPGA上,实现硬件的软件化,包括51核,DSP核以及其他的一些数字模块,到最后一个系统板子就剩下电源、模拟电路部分,接口部分以及一块FPGA。FPGA可以说是芯片级的PCB板,在一个芯片里设计原来的电子系统的所有数字电路部分。现在也有将ARM核嵌入到FPGA里面的,比如Altera公司的Nois核。Nois是一个软核,是有软件编写的一个32位处理器,并不是硬件上存在的处理核,该核工作频率为50HZ,现在用于许多图像处理以及其他的很多网络设备。利用锁相环技术可以将频率成倍提升,一般的ARM核是将锁相环做到芯片里面的,在变成的时候可以对某个寄存器进行设置从而达到分频和倍频的目的。而将DSP核嵌入到FPGA里面去实现强大的计算功能是Altera公司近期推出的一系列芯片的一个优点。Altera公司的Stratix II系列芯片采用内嵌的DSP核,但是其DSP核的计算速度比现在业界上最快的DSP芯片还要快几个数量级。2.2 FPGA设计方法在FPGA设计中,有许多重要的原则和规律可循,掌握这些原则和规律,人们可以设计出许多高性能的电子系统。(1) 硬件原则硬件原则主要针对HDL代码编写而言的。硬件描述语言,它通过对硬件的抽象,最终实现在芯片内部的实际电路。因此评判一段HDL代码的优劣的最终标准是:其描述并实现的硬件电路的性能(主要是指面积和速度)。评价一个设计的代码水平,主要从设计工程师所构想的硬件实现方案的效率以及合理性来分析。(2) 系统原则一个硬件系统,通过何种方式进行模块划分与任务分配,使用算法和实现功能,以及FPGA的规模估算、数据接口设计等,具体到FPGA的设计就要求对设计的全局有个宏观上的合理安排。一般来说实时性要求高、频率快、功耗小的功能模块适合使用CPLD实现。而FPGA与CPLD相比,更适合实现规模较大、频率较高、寄存器资源使用较多的设计。(3) 面积和速度的平衡与互换原则这是在进行FPGA设计时的一个重要原则。这里“面积”是指一种设计所要消耗的FPGA/CPLD的逻辑资源的数量,对于FPGA可以用所消耗的触发器(FF)和查找表(LUT)来衡量,更一般的衡量方式可以用设计所占用的等价逻辑门数。“速度”是指设计在芯片上稳定运行,所能够达到的最高频率,这个频率由设计的时序状况决定,和设计满足的时钟周期,时钟建立时间(Clock Setup Time),时钟保持时间(Clock Hold Time)等众多时序特征量密切相关。面积和速度是对立统一的矛盾体。要求一个设计同时具备运行频率最高而且面积最小是不现实的。科学的设计方法是在满足设计时序要求的前提下,占用最小的芯片面积。或者在所规定的面积下,频率更高。这两种目标充分体现了面积和速度的平衡思想。相比之下,满足时序、工作频率的要求更重要一些,当两者冲突时,采用速度优先的准则。(4) 同步设计原则采用同步时序设计是FPGA设计的一个重要原则。它可以使静态时序分析变得简单而且可靠,能有效地避免毛刺的影响,使设计更加有效,还可以减小环境对芯片的影响。在遵循这一原则的时候,应该尽可能的在设计中使用同一时钟,时钟走全局网络,同时避免使用混合时钟采样数据。2.3 利用硬件描述语言(HDL)的硬件电路设计方法硬件描述语言,就是可以描述电路的功能、信号连接关系及定时关系的语言。它能比电路图更有效地表示硬件电路的特性。利用硬件描述语言编程来表示逻辑器件及系统硬件的功能和行为,是该设计方法的一个重要特征。随着大规模专用集成电路(ASIC)的开发和研制,为了提高开发的效率,增加已有开发成果的可继承性以及缩短开发时间,各ASIC研制和生产厂家相继开发了用于各自目的的硬件描述语言。其中最有代表性的是美国国防部开发的VHDL语言,Verilog公司开发的Verilog HDL以及日本电子工业振兴协会开发的UDL/I语言。利用硬件描述语言(HDL)的硬件电路设计方法具有以下特点:(1) 采用自上而下的设计方法(2) 系统中可大量采用ASIC芯片由于目前众多的制造ASIC芯片的厂家,他们的工具软件都可以支持HDL语言的编程,因此,硬件设计人员在设计硬件电路时,无须受只能使用通用元器件的限制,而可以根据硬件电路设计的需要,设计自用的ASIC芯片或可编程逻辑器件。这样最终会使系统电路设计更趋合理,体积也可大为缩小。(3) 采用系统早期仿真从自上至下的设计过程可以看到,在系统设计过程中要进行三级仿真,即行为层次仿真、RTL层次仿真和门级层次仿真。也就是说进行系统数学模型的仿真、系统数据流的仿真和系统门级电路原理的仿真。这三级仿真贯穿系统硬件设计的全过程,从而可以在系统设计早期发现设计中存在的问题。(4) 降低了硬件电路设计难度在采用传统的硬件电路设计方法时,往往要求设计者在设计电路前应写出该电路的逻辑表达式或真值表(或时序电路的状态表)。这一工作是很困难和繁杂的,特别是在系统比较复杂时更是如此。在用HDL语言设计硬件电路时,就可以使设计者免除编写逻辑表达式或真值表之苦。这样使硬件电路的设计难度有了大幅度的下降,从而也缩短了硬件电路的设计周期。(5) 主要设计文件是用HDL语言编写的源程序在传统的硬件电路设计中,最后形成的主要文件是电原理图,而采用HDL语言设计系统硬件电路时,主要的设计文件是用HDL语言编写的源程序。如果需要也可以转换为电原理图形式输出。用HDL语言源程序作为归档文件有很多好处。其一是资料量小,便于保存。其二是可继承性好。当设计其它硬件电路时,可以使用文件中的某些库、进程和过程等描述某些局部硬件电路的程序。其三是阅读方便。阅读程序比阅读原理图要更容易一些。阅读者很容易在程序中看出某一硬件电路的工作原理和逻辑关系。而阅读电原理图,推知其工作原理却需要较多的硬件知识和经验,而且看起来也不那么一目了然。2.4 VHDL语言的特点VHDL语言作为一种标准的硬件描述语言,具有结构严谨、描述能力强的特点。支持从系统级到逻辑门级电路所有层次的设计,适合于复杂逻辑电路和系统的设计。作为一种高级硬件描述语言,VHDL语言有如下特点:.与其他的硬件描述语言相比,VHDL具有更强的行为描述能力。强大的行为描述能力是避开具体的器件结构、从逻辑行为上描述和设计大规模电子系统的重要保证。.VHDL具有丰富的仿真语句和库函数,使得在任何大系统的设计早期,就能检查系统的功能可行性,随时可对系统进行仿真模拟,使设计者对整个工程的结构和功能的可行性做出判断。.用VHDL完成一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动把VHDL描述设计转变成门级网表(根据不同的实现芯片)。这种方式突破了门级设计的瓶颈,极大地减少了电路设计的时间和可能发生地错误,降低了开发成本。利用EDA工具的逻辑优化功能,可以自动地把一个综合后的设计变成一个更小、更高速的电路系统。反过来,设计者还可以容易地从综合和优化的电路中获得设计信息,返回去更新修改VHDL设计描述,使之更加完善。.VHDL对设计的描述具有相对独立性。设计者可以不懂硬件的结构,也不必顾及最终设计的目标器件是什么,而进行独立的设计。正因为VHDL得硬件描述与具体的工艺技术和硬件结构无关,所以VHDL设计程序的硬件实现目标器件有广阔的选择范围。.由于VHDL具有类属描述语句和子程序调用等功能,对于完成的设计,在不改变源程序的条件下,只需改变类属参量或函数,就能轻而易举地改变设计的规模和结构。.VHDL本身的生命周期长。因为VHDL得硬件描述与工艺无关,不会因工艺变化而使描述过时。而与工艺技术有关的参数可通过VHDL提供的属性加以描述,当生产工艺改变时,只需要修改相应程序中的属性参数即可。2.5 Quartus 概述及其设计流程(1) Quartus 概述Quartus 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。Quartus 可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。Quartus 支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。此外,Quartus 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。目前Altera已经停止了对Maxplus II 的更新支持,Quartus 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera在Quartus 中包含了许多诸如SignalTap II、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法。Altera Quartus 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。Altera的Quartus 可编程逻辑软件属于第四代PLD开发平台。该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。Quartus平台与Cadence、ExemplarLogic、 MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。改进了软件的LogicLock模块设计功能,增添 了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。支持MAX7000/MAX3000等乘积项器件。(2)Quartus 设计流程.建立新工程:首先将所设计工程项目划分为若干子模块,将每个子模块单独存放在一个文件夹中,并分别进行编译,验证通过后,将每个子模块的VHDL文本文件添加到总工程文件夹中,并建立图元(建立图元block,右键点击.V文件,选择 create symbol files for current files),将各个图元(亦即子模块)连接起来构成总体设计项目。.设计各子模块:编写各子模块相应的代码,并分别进行编译,验证通过后将各子模块VHDL文件添加到顶层设计中,创建图元,进行连接以完成总体项目的设计。这部分就是将管脚连好。在原理图编辑中,英文的大小写代表相同的含义,只要器件连接线的节点名称相同就会默认为是连接的,总线(Bus)在图形编辑窗口显示的是一条粗线,总线必须在名称的后面加上“a.b”,表示一条总线内所含有的节点编号,原理图编辑的文件扩展名为“.bdf”,在Quartus II中工程名称必须与顶层实体名称相同,且VHDL设计中实体名称亦为相同的名字,否则不能进行编译。.编译工程.仿真:波形矢量文件的扩展名为“.vwf”,仿真分为功能仿真和时序仿真,也称为前仿真和后仿真,功能仿真是忽略延时后的仿真,是最理想的仿真,时序仿真则是加上了一些延时的仿真,是最接近于实际的仿真,在设计中通常先做功能仿真验证逻辑的正确性,后做时序仿真验证时序是否符合要求,需注意默认为时序仿真,在设置功能仿真后需要生成功能仿真网络表。第三章 系统总体设计系统总体设计框图如图3.1所示。此设计由计算部分、存储部分、显示部分和输入部分组成。图3.1 计算器的系统组成框图3.1 计算器的计算部分在这一部分中,可以将每一个数均表示成8位或者4位二进制数统一进行运算,各个计算数之间的计算可以直接使用VHDL语言中的运算符来实现。但在显示时,必须将个位、十位、百位分开显示,设计时使用比较的方法来实现计算器的功能要求。另外,由于在VHDL语言中只能进行除数是2的幂的除法,不能进行任意数的除法,因此必须单独设计一个除法器来实现计算器的功能要求,该除法器可以利用减法运算和左移位运算实现除法运算,具体算法见第四章。3.2 计算器的存储部分存储部分需要3个存储器来实现:内部累加器(acc)、输入寄存器(reg)以及结果暂存器(ans)。在存放数字时,将数字放入acc或者reg里面,当第一次按下数字键时,表示该数字是个位。当第二次按下数字键时,表示这次输入的是个位,上一次输入的是十位,所以要把第一次输入的数字乘以10,再加上第二次输入的数字,来得到最终输入的数字。当第三次按下数字键时,要将第一次输入的数字乘以100,再加上第二次输入的数字乘以10,再加上第一次输入的数字,来得到最终输入的数字。当进行第一次计算时,第一个数字存放在acc里面。按下运算符以后,第二个数字放在reg里面。当再按下运算符号或者等号时,第一次计算的结果将存放在ans里面,同时reg清零,等待下一个数字的输入。进行第二次运算时,将ans里面的结果与reg里面新输入的数字进行运算,再将运算结果存放在ans里面,直到最后按下等号按键的时候,显示最终的运算结果。3.3 计算器的显示部分显示部分是系统的输出部分,用于显示按键值及计算结果,由于数字系统的数据运算都是二进制的,而输出表达式都是BCD码,为了满足BCD码的译码显示,最方便的方法就是利用译码程序在FPGA中实现。本文采用的是共阳极七段数码管,显示数字时需要将对应管脚置为低电平,输出时,从左到右,按从高到低位的顺序依次接g、f、e、d、c、b、a。七段译码器的基本结构如图3.2所示。图3.2 七段译码器的结构其VHDL语言描述如下所示。在这段程序中,indata是输入4位二进制数的端口,outdata是输出7位译码的端口,用WITH语句来实现译码。WITH indata SELECToutdata=0111111WHEN0000, -0的显示; 0000110WHEN0001, -1的显示; 1011011WHEN0010, -2的显示; 1001111WHEN0011, -3的显示; 1100110WHEN0100, -4的显示; 1101101WHEN0101, -5的显示; 1111101WHEN0110, -6的显示; 0000111WHEN0111, -7的显示; 1111111WHEN1000, -8的显示; 1101111WHEN1001, -9的显示; 0000000WHEN OTHERS; -其它的输入按键均不显示。计算器显示部分的设计和实现,实际上就是七段译码器的设计和实现,三个七段译码器分别显示的是个位、十位和百位。输入第一个数字后至再一次按下数字按键输入第二个数字前,三个七段译码器显示的都是第一个数字。当开始输入第二个数字的时候显示第二个数字,再次按下运算按键到输入第三个数字前,显示的是前两个数字的运算结果,以此类推,当最后按下等号键的时候,显示最终的运算结果。3.4 计算器的输入部分计算器输入部分的设计最主要的是按键译码电路的设计和实现。计算器的输入部分是由09十个数字按键、加减乘除四则运算的运算符按键、一个等号按键和一个清零按键组成的,设计所要做的是对按键信息进行译码,使其在计算器内部可以使用。数字按键译码电路的主体部分VHDL语言描述如下。PROCESS(inclk,reset) BEGIN IF reset=1THEN -异步复位信号为高电平的时候 outnumoutnum=0000;outflagoutnum=0001;outflagoutnum=0010;outflagoutnum=0011;outflagoutnum=0100;outflagoutnum=0101;outflagoutnum=0110;outflagoutnum=0111;outflagoutnum=1000;outflagoutnum=1001;outflagoutnum=outnum;outflag=0; -不按键时保持 END CASE;END IF;END PROCESS;在本次设计的程序中,设reset是异步复位信号的输入端口,inclk是时钟信号的输入端口,innum端口用来表示输入的按键向量,outnum端口用来表示输入的按键动作对应的输出数字,outflag端口用来输出是否有按键动作,它主要实现的是按下什么就输出什么。一共有十个位,初始值都为低电平“0”,当按下哪个位时哪个位上的电平就跳为高电平(有且仅有一个为高电平),这时就有相应的输出。那十个位分别对应的是09这十个数字,所以当第一个位(从左往右位数依次增高)为高电平时显示0,第十个位上位高电平时,相应的显示为9。如果按下的键是加号、减号、乘号、除号或者是等于号时,也是不显示的,所以也可以称作数字按键译码电路。第四章 计算器的VHDL设计4.1加法器的设计与仿真本次设计的加法器属于多位加法器的范畴,可按其进位方式的不同分为两类:串行进位加法器和并行进位加法器。串行进位加法器是将多个一位全加器级联,低位全加器的进位输出送给相邻高位全加器作为进位输入,以此构成多位加法器。这种设计思路简单明了且占用资源少,但运算速度较慢。并行进位方式则是在各位的加法环节之外,另外设有进位产生逻辑电路,各位的进位输入信号同时产生,从而各位可以同时完成全加运算,输出最后结果。并行进位方式具有较快的运算速度,但是相对于串行进位方式来说,却往往占用更多的资源。尤其是当运算位数增加的时候,相同位数的并行进位和串行进位加法器的资源占用差距也越来越大。因此,常常需要设计者在运算速度和资源占用量之间做出折中平衡。而经过实践证明,4位二进制并行进位加法器和串行级联加法器占用的资源几乎相同。因此,可以用两个4位二进制并行加法器级联构成8位二进制加法器,这是一种较为合理的选择,加法器的原理框图如图4.1所示。图4.1 加法器的原理框图加法器要有被加数、加数和进位位的输入端口。设a端口为被加数,b端口为加数,ci为输入进位。此加法器还有两个输出端口,分别是加法运算的最终结果输出和进位位的输出,设s为结果的输出端口,co为进位的输出端口。当输入被加数与加数后,两个8位二进制数开始相加,之后,再与输入进位位相加,这样得到的最终结果就是加法器加法运算的最终结果。加法器模块图如附录中所示。程序如附录中加法程序,经Quartus 编译后建立.vmf文件,设置被加数a为“0010000”即十进制数16(可设置0255内的任意数字),设置加数b为“10110000”即十进制数176(可设置0255内的任意数字,但因为程序中未包含出错溢出判断,所以需满足a+b255),仿真后所得结果如图4.2所示。16+176192,仿真结果正确,可知此加法器设计有效。图4.2 加法器仿真16+1761924.2减法器的设计与仿真首先设计一个四位二进制数的减法器,四位全减器的原理框图如图4.3所示。由图可以看出,此减法器共需要两个输入端口和一个输出端口。减法器的设计可以引用加法器,即通过对减数的求补,再与被减数相加得到最终的结果,所以需要增设一个进位位输入端口和进位位的输出端口。图4.3 四位全减器的原理框图可以设a端口为被减数,b端口为减数,ci为输入借位位,s为结果的输出端口,co为借位的输出端口。减法器的运算过程中首先要引用加法器,在此不再赘述。而且此减法器可以进行位数扩展,每增加一位需要多引用一个加法器,为使图形原理简洁,所以此处只列出四位减法器。减法器模块图如附录中所示。程序如附录中减法程序,经Quartus 编译后建立.vmf文件,设置被减数a为“1111”即十进制数15(可设置015内的任意数字),设置减数b为“1001”即十进制数9(可设置015内的任意数字,但因为程序中未包含出错判断,所以需满足ab),仿真后所得结果如图4.4所示。15-96,仿真结果正确,可知此减法器设计有效。图4.4 减法器仿真15-964.3乘法器的设计与仿真乘法器是数字系统中的基本逻辑器件,在很多应用中都会出现如各种滤波器的设计、矩阵的运算等。这里设计的是一个44的乘法器。依据乘法器的原理,可以绘出其原理框图如图4.5所示。图4.5 乘法器的原理框图可设a端口为被乘数(一个4位二进制数),b端口为乘数(一个4位二进制数),y为乘法运算的结果的输出端口。乘法器模块图如附录中所示。程序如附录中乘法程序,经Quartus 编译后建立.vmf文件,设置被乘数a为“1101”即十进制数13(可设置016内的任意数字),设置乘数b为“1010”即十进制数10(可设置016内的任意数字),仿真后所得结果如图4.6所示。13*10130,仿真结果正确,可知此乘法器设计有效。图4.6 乘法器仿真 13*101304.4 除法器的设计与仿真除法器是基于连减和移位操作的,连减实际上就是基于数学上除法的基本原理。例如,ab=c余数是d,就等价于a减去c个b后得到d而且db;之所以可以使用移位操作,是因为所有运算的数都用二进制表示,本文设计的除法器主要部分为一个控制移位的控制器,另有一个由全加器组成的4位减法器(引用上面的减法器的设计)。又因为规定了结果为4位,控制器首先比较被除数的高4位与除数的大小,判断是否溢出,溢出则退出,否则就做4位移位和减法得到结果。在每次做完减法以后都要判断是否够减,即判断是否有借位,不够得话,就恢复被减数,移一位再减。除法器的原理框图如图4.7所示。图4.7 除法器的原理框图设a端口为被除数,b端口为除数,clk为时钟信号的输入端口,str为启动信号的输入端口,此端口的作用是当启动信号为高电平的时候有效,表示启动了除法器开始作除法运算。s为除法运算所得到的商的输出端口,y为除法运算中所得到的余数的输出端口。该除法器的设计中使用了状态机,它有5个状态:start为开始状态,one为第一次移位状态,two为第二次移位状态,three为第三次移位状态(正常运算结果的输出状态),error为溢出出错状态。在除法器的设计中引用了减法器。ain用来寄存被除数,bin用来寄存除数,atem为减法器的被减数输入,btem为减法器的减数输入,stem用来计算内存结果,citem为减法器的借位输入,cotem为减法器的借位输出。除法器的模块图如附录中所示。程序如附件中除法程序,经Quartus 编译后建立.vmf文件,设置clk=100ns,str=1,使除法器工作。前面部分设置被除数为“10010100”,即十进制数148(可设置0255内的任意数字),后面部分设置被除数为“00010110”,即十进制数22(可设置0255内的任意数字,为对比,勿与第一个数设置相同),设置除数为“1101”,即十进制数13(可设置015内的任意数字,本部分程序中有差错判断部分,所以除数取0时不做运算),仿真所得结果如图4.8所示。当检测到clk上升沿时启动运算,所以第一个clk上升沿出现前虽然被除数与除数已设置,商和余数仍然为0,第一个clk上升沿出现,计算得到14813115,仿真结果正确。当被除数改变为22的一段时间内,因为未检测到clk上升沿,所以未进行运算,商和余数未变,分别仍为11和5。当接下来的第一个clk上升沿出现,再次进行运算,计算得到221319,仿真结果正确,由此可知此除法器设计有效。图4.8 除法器仿真 14813115,221319第五章 结束语毕业设计是本科学习阶段最后一次将自己所学理论与实际相结合的机会,通过这次比较完整的基于FPGA的计算器芯片设计,我自己的理论与实践相结合的能力有了大幅度的提升。在温习了所学专业知识的基础上,同时通过查阅专业书籍、相关文献资来解决实际工程问题,这锻炼了我的综合运用各项知识和资源的能力。而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的实际动手经验得到了极大的丰富,由于程序编写与处理是一项非常繁琐非常令人头疼的工作,完成了这些,也使我的意志、抗压能力及耐力都得到了不同程度的提升,我相信这些提升是会影响我一辈子的宝贵财富。这一次的设计让我积累很多的解决实际问题的经验,使我的头脑更加灵活,这必然会让我在未来的工作学习中表

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论