您好、欢迎来到现金彩票网!
当前位置:2019手机棋牌游戏平台 > 位脉冲拥挤 >

论文说明书定稿doc

发布时间:2019-06-12 10:26 来源:未知 编辑:admin

  1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。

  毕业设计说明书(论文) 作 者: 学 号: 系: 专 业: 题 目: 基于VHDL的地铁自动售票机系统设计 指导者: (姓 名) (专业技术职务) 评阅者: (姓 名) (专业技术职务) 2014 年 5 月 毕业设计(论文)评语 学生姓名: 班级、学号: 题 目: 综合成绩: 指导者评语: 指导者(签字): 年 月 日 毕业设计(论文)评语 评阅者评语: 评阅者(签字): 年 月 日 答辩委员会(小组)评语: 答辩委员会(小组)负责人(签字): 年 月 日 毕业设计说明书(论文)中文摘要 由于社会的进步,人口都向城市流动,交通也越来越拥挤。为此,出现了地铁。随着科技的发展,人们对出行的要求越来越高,地铁自动售票机就应运而生了。自动售票机实现了乘客自助购票,大大加快了出行速度。 本文主要讨论了用VHDL语言设计地铁自动售票系统。VHDL语言有较强的描述能力,可以分模块编写程序再合并,所以能设计复杂、多层次的系统。编写的程序可用Altera公司的Quarts II软件进行调试和仿真。设计的地铁自动售票机最终要实现票价选择、投币状态、余额计算、自动出票、自动找零等功能。 关键词 VHDL 自动售票系统 模块 Quarts II 仿真 毕业设计说明书(论文)外文摘要ing can use Altera corporations Quarts II software carries on the debugging and simulation.The subway ticket machines can achieve selection of ticket price,insert_state,balance calculation, automatic ticket,automatic change and so on. Keywords VHDL Metro ticketing system Module Quarts II Simulation 目 次 1 引言 1 1.1 研究意义 1 1.2 研究背景 1 1.3 研究任务 2 1.4 研究内容 2 2 理论基础 3 2.1 FPGA 3 2.2 VHDL语言 4 2.3 QuartusⅡ软件 6 3 课题设计 9 3.1 设计要求 9 3.2 系统分析与设计方案 9 4 程序仿线 自动售票机主控模块的波形仿线 车票选择模块的波形仿线 纸、硬币处理模块的波形仿线 自动找零、出票模块的波形仿线 整个售票机系统的波形仿线 结 论 25 致 谢 26 参 考 文 献 27 附录 28 1 引言 自动售票机主要的控制模块可以用多种语言设计完成。但这些语言有较大的差异,不利于后期的修改和使用者之间的交流。而VHDL语言是一种功能强大、标准化的硬件描述语言。用VHDL语言设计程序时可以先分块编写再合并,所以能够编写出多层次的程序,与此同时,VHDL语言编写的程序避免了其他语言只能在各自环境中使用的缺陷。 本章主要讨论了地铁的起源、发展,以及随着社会的发展,为了简化购票流程,从而设计出了自动售票机来代替人工售票等。 1.1 研究意义 近年来,国民经济快速发展,城市的各项设施也越来越好,进而人们对交通的要求也不断增加。因此,安全又快捷的地铁就出现了。地铁的速度较快,且在行驶过程的载客数较多,这是公交所不具备的,而且它的出现增加了乘客的选择,也可以很好的缓解交通拥挤的情况。如今,我国的地铁都实行售票制,而越来越多的乘客选择地铁出行也增加了售票工作的困难。这也给自动售票机的诞生和创新提供了一个很好的市场潜力和发展空间[1]。自动售票机系统是可以解决各类轨道交通系统的各个终端设备协同工作的平台[2],是基于计算机技术、网络技术 、自动控制技术、大型数据库技术、机电一体化技术、模式识别技术、传感技术、精密机械技术等多项高新技术于一体的大型系统[3]。乘客可以根据自动售票机显示屏上的操作指示选择要到达的地点以及购票张数,并投币完成购票。它能够实现自主购票,可以减少地铁站的工作员工人数,人工售票的工作强度以及地铁站不必要的售票窗口的花费,同时它还能避免人工售票带来的一些失误,大大提高售票的正确率。 1.2 研究背景 1863年,地铁在伦敦建成,是世界上第一条地铁,也是最长的地铁,至今已有一百多年的历史,。而提出要建造这个条地铁的人确是英国的一个律师,叫查尔斯.皮尔逊。他生活的那个年代路上的车辆已经很多,交通也比较拥挤,总是发生车祸,查尔斯暗暗发觉随着车辆的增多,这种情况发生的概率会越来越高,就在他发愁的时候,他发现才出现没多久的铁路时速快,载客量大。于是,他向当地政府提出了将铁路建造在城市街道下面的想法,经过岁月的验证,最后被英国政府采纳,就有了地铁。 地铁出现后,由于它的轨道不与地面上的车辆以及建筑发生冲突,并且它的行驶速度非常快,没有地面上车辆的车轮滚动的声音和鸣笛声,噪声很小,行驶过程比较平坦,一次性可以容纳的人数又是公交车的7-8倍,并且它使用电力驱动,不会污染环境,所以赢得了人们的青睐,经过不断改进,一直运行到现在。 地铁自从1863年在英国伦敦建成后到如今,随着城乡一体化的构建,大量农民涌入城市。城市人口迅速膨胀, 城市交通也越来越拥挤,而人们的生活节奏却越来越快,对售票系统的要求也越来越高,所以,人工售票被渐渐淘汰,取而代之的是高效快速的自动售票系统。 在国外,有一部分城市已经采用了自动售检票系统,并且已经有相当高的技术含量。而中国的这项技术最初是从国外流传而来的,经过不断的研究创新,已开发出了很多新的产品,而这项技术也一直都在提高。到目前为止,国内轨道交通AFC的技术已与城市一卡通接轨,实现城市甚至城市区间的一卡通[4]。 1.3 研究任务 ⑴ 查阅相关资料,认真学习数字逻辑电路,要了解计时器、触发器等原理并会编写售票机程序中用到的逻辑电路。 ⑵ 分析自动售票机要实现的功能,选择设计方案,并说明其工作原理。 ⑶ 根据课题要求,学习VHDL语言和FPGA的基本知识,利用VHDL语言设计地铁自动售票机系统并对相关的软件程序进行说明。 ⑷ 对地铁自动售票机系统进行仿真。仿真结果要求:①票价选择;②投币系统;③余额计算;④出票;⑤自动找零。 ⑸ 将编写好的地铁自动售票机系统上箱进行验证。 1.4 研究内容 ⑴ 首先学习此课题设计需要用到的VHDL语言,对它的结构特点、设计流程、基本语言、描述方式及主要描述语句有一定的了解。 ⑵ 其次学习Altera公司的Quartus Ⅱ软件的系统特点、设计流程、设计方法以及基本操作。 ⑶ 在学习了VHDL语言和Quartus Ⅱ软件的基础上用VHDL语言编写地铁自动售票机的程序,完成程序后再用Quartus Ⅱ软件对编写的程序进行调试和仿真,使其能够实现票价选择,投币系统,余额计算,自动出票,自动找零等功能。 2 理论基础 2.1 FPGA 2.1.1 FPGA介绍 FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物[5]。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点[6]。 FPGA的编程语言有两种,一种是VHDL语言另一种则是Verilog语言,它们都是用于FPGA,也都比较常用。而VHDL语言是由美国国防部创建的,并在1987年正式成为IEEE的标准硬件描述语言;而Verilog语言是从一家软件开发企业的开发成果中转移过来的,由于它各方面的特点都比较突出,在1995年终于成为了IEEE的标准硬件描述语言。 用VHDL或是Verilog语言编写的程序经过编译综合、仿真验证、引脚锁定之后将配置好的数据烧录至FPGA上进行测试。在IC设计、验证方面常用到这种方法。它既可以用来设计一些比较基础的电路模块,比如:门电路、加法器等;也可以设计一些微复杂的时序逻辑电路,比如:移位寄存器、计数器等;还可以设计一些更复杂的组合电路,比如:解码器、编码器等。 FPGA的开发应用与个人计算机和单片机的差别较大,FPGA主要是通过并行运算和VHDL语言或是Verilog语言完成的,而个人计算机和单片机是用顺序运算的,这也加大了它开发的难度。它的开发涉及顶层设计、模块分层、逻辑实现、软硬件调试等方面,再次说明它的开发并不容易。 2.1.2 FPGA特点 FPGA器件是由Xilinx公司开发并推出的,在推出后它们一直都在不断更新中,长期以来,在FPGA领域保持着领先。FPGA有以下几个特点: ⑴ FPGA芯片内部的触发器数量比较多,所以更适合于结构复杂的时序逻辑电路。 ⑵ FPGA芯片的规模比较大,布线结构相对比较复杂,新型器件高达千万门级,所以常用它来完成复杂电路的设计[7]。 ⑶ FPGA芯片在出厂之前全部都要经过测试,所以有安全保障。此外,开发FPGA所需的资金与普通的ASIC芯片相比较要少许多,可以节省一部分开发消费。 ⑷ FPGA芯片编写的程序信息在每次断电时会丢失,重新通电之后无法自行回复,需要从外部导入。虽然有诸多不变,但使用者可以反复地编程、擦除、使用,实现任意次的编程。 还能使软、硬件协同操作使用。 2.2 VHDL语言 2.2.1 VHDL语言的简介 在开发软件的初期,各个生产商为了减少开发周期,提高效率,开发出了各种不同的具有各自代表性的硬件描述语言,但由于差别大,只能适用于各开发商自己开发软件的环境,这给后期的修改和使用者之间的交流造成了一定的障碍。所以人们想要制定出统一的硬件描述语言。于是,在1981年的时候,美国成立了VHDL工作小组,并提出了一种比较标准的语言,简称VHDL。1983年的时候,TI公司、IBM公司联合Intermetic公司组建小组,共同开发VHDL语言版本和软件开发环境。到了1986年,VHDL语言开始趋于标准化。一年后,IEEE组织正式宣布此语言版本为硬件描述语言的标准 。但并没有因此结束,在确定之后的的一年左右时间里,美国国防部对其进行强制性的推广及使用。之后的多年时间里,IEEE对其进行过修订,使其涉及范围更广、功能更加强大。并且把修订后的VHDL语言定为新的标准。在VHDL语言产生并成为标准的过程中,它一直都在前进,它用它强大的语言结构适应了EDA技术的发展的同时还促进了它的进步。所以不得不承认它是适用于电路设计的功能强大的硬件语言。 VHDL语言的全称是超高速集成电路硬件描述语言(Very High Speed Integrated Circuit Hardware Description Language) [8]。常用于数字电路的设计。VHDL语言的语言格式、语法和描述方式与一般的计算机编程语言有许多相似的地方。VHDL语言的程序包括实体、结构体、配置、程序包和库5个部分[9]。其基本结构如图2.1所示。 图 2.1 VHDL程序基本结构 其中实体还分成外部和内部。当某个实体定义了外部界面以后,只要完成内部功能的编程,其他部分能够直接使用它,简化了设计过程,体现出了它的优越性。 VHDL语言在欧洲使用较为广泛,而Verilog语言则在中国、美国、日本、台湾等地方用的比较多。两种语言相比而言,Verilog语言学起来较容易一些,它跟C语言比较类似,如果有C语言基础的话,不需要花太多的时间就能掌握它。但是VHDL语言比较抽象,不容易学,需要的时间比较长。一旦掌握之后,它的优势就凸显出来了,其设计效率比Verilog语言高很多。 2.2.2 VHDL语言的特点 ⑴ VHDL语言已经是标准的硬件描述语言,它涉及的范围广,有很强的描述能力,并且可以先分模块进行设计,最后再把各个模块合并起来组成一个完整的程序,所以此语言可以设计结构复杂,层次较多的结构电路。 ⑵ VHDL语言的描述能力和它本身的程序结构使得它能够分解大规模程序的设计,还能重新利用之前的设计。设计者无法独立设计一个大规模程序,所以这样的程序通常是多人合作完成的。VHDL语句的再利用设计与分解大型程序的功能使共同完成设计成了可能。 ⑶ VHDL语言有很多仿真语句和库函数,能实现综合仿真,所以在设计系统的过程中能及时进行仿真,检验程序的进展或是发现程序的错误,并进行相应的修改,保证程序的顺利运行。设计者通过这种方法不需做出实际的模型就能比较出各种方案的可行性及它们之间的优劣,并作出取舍,大大降低了整个设计的开发成本。 ⑷ VHDL语言的硬件有相对的独立性,它与制作工艺无关,不会随其而改变,所以使用时间长。一个设计可以在其他的硬件结构中使用,使用过程中也不需要对其结构有深入的了解,总而言之,使用起来比较简单。 2.2.3 VHDL语言的设计流程 ⑴ 设计规范的定义 首先设计者要知道设计目的和要求,然后制定整个系统设计的总体方案。这一步是整个系统设计的铺垫,是十分关键的。 ⑵ 采用VHDL进行设计描述 设计者先要根据系统设计的要求选择方式,考虑是否要分模块来编写。通常,设计者采用“自顶向下”的设计方法。在划分模块的时候一定要仔细划分,确保这样的划分是最好的,不然会直接影响到电路的设计。规划完成后,设计者可以此为依据编写每个模块相应的VHDL程序,再将每个部分程序组装起来,这样就成了一个完整的程序。 ⑶ VHDL程序仿真 程序仿真是编写程序过程中不可或缺的。如果编写好的程序不进行仿真,直接布局布线,若此时发生错误,则需要修改VHDL语言再重新布局布线,十分耗时。若每编写一个程序就对其仿真,可以及时发现错误,节省设计者的时间和金钱。 ⑷ 综合、优化和装配(或布局布线) 综合指的是将设计描述转化成底层电路的表示形式,其结果是一个网表或者是一组逻辑方程[10];优化是为了缩小时间延迟,更好的利用资源来提高程序的执行效率;装配就是对特定资源进行分配。而布局布线是将每个模块的程序编译以后生成的元器件重新定位,然后再进行布线。 ⑸ 仿真 这是在程序编写完毕,并且装配完成之后进行的仿真,是对整个程序是否符合其要实现的功能的验证。 2.3 QuartusⅡ软件 2.3.1 QuartusⅡ软件简介 MAX+plusⅡ软件是美国Altera 公司推出的一种EDA 工具,在开发出来后的几年时间里,Altera 公司在推出两种设计芯片同时也在不断改进开发软件,一共经历了四代:第一代A+plus、第二代MAX+plus、第三代MAX+plus II 和第四代Quartus。QuartusⅡ软件不但包含了MAX+plus II软件的优势,在面对新技术时同样可以使用。QuartusⅡ是一款针对FPGA芯片的综合性的开发软件,它有多种输入方式,例如:原理图输入、AHDL语言输入、VHDL语言输入、Tcl script输入以及Systemverilog HDL语言输入等。同时,它的内部有自己的编译综合器和仿真器,能够进行与程序相对应的输入输出管脚的波形仿真,最后对器件的各个引脚进行分配,是设计器件用的比较完整的一个软件。 QuartusⅡ软件适用于多种系统,像个人电脑的Microsoft Windows XP、Microsoft Windows 7系统,Linux系统以及Unix系统等都支持这款软件。除此之外,这款软件还支持LPM宏功能模块库,设计者可以使用已存在的模块,无需重新编写,简化了设计过程,提高了设计效率。它也支持第三方软件工具的运行,除了自身可以对程序进行波形仿真之外,其他的仿真工具它也能使用。另外,QuartusⅡ支持多种可编程逻辑器件的开发、集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,它的软件设计功能强大且容易操作,是一种综合性的开发平台[11]。 2.3.2 QuartusⅡ软件的特点 该软件对Altera 公司之前开发的几代软件去其糟粕,取其精华,再在功能上加以改进才开发出的新产品。所以,之前几代软件的功能它都具备,同时简化了使用者的操作,使用户能很快的入手。在整个逻辑器件设计的过程中,从程序各模块的编写到程序的编译到设计功能的仿真再到编程下载都有这款软件提供,可以说这是一款功能十分强大的软件。该软件支持公司多款MAX系列的器件,与很多EDA供应商开发的软件工具兼容,改进了软件的LogicLock模块设计功能,增添了FastFit编译选项,推进网络编辑性能,提升了调试能力[12]。 2.3.3 QuartusⅡ软件的设计流程 QuartusⅡ软件开发的设计流程图如图2.2所示。 ⑴ 设计输入 设计者根据程序要实现的功能着手,考虑好思路并设计好各模块的划分,再用VHDL语言或原理图等的形式输入。 ⑵ 综合 设计者将之前输入的设计根据软件本身的要求进行编译、优化、配置与综合,生成了网表文件,供下一阶段使用。 ⑶ 布局布线 设计者用适配器将上一阶段综合得到的网表文件对应到FPGA器件上。将分开的模块重新定位,之后组合到一起,给其分配引脚,再布局。 ⑷ 时序分析 网表的布局布线完成后,即可得到相应的供此阶段用的编程文件。设计者可以看到整个编程文件的时序信息,也可以分析它的时序性能。 ⑸ 仿真 它有两种形式,一种是在不考虑外界环境及器件因素的情况下的对电路的直接仿真;另一种是在接近实际环境中对生成的器件的仿真。 ⑹ 器件编程与配置 设计者在编译成功之后将编译的程序下载到实际的试验箱上进行进一步验证。 ⑺ 在线校验 对配制好的器件在网上测试,看其是否符合原先器件设计要达到的功能。 3 课题设计 3.1 设计要求 设计一个程序并对它进行仿真验证使它能够模拟地铁站自动售票机的功能。主要内容如下: 该自动售票机的主控模块控制其他几个模块,当主控模块的start=1的时候,使能端en0和en1为1,此时车票选择模块与纸、硬币处理模块工作,分别输出总价cost和总票数quantity以及投入总钱数money_insert。当主控模块的start=0的时候,使能端en2为1,此时自动找零、出票模块工作,根据使能端bi为1或0来选择自动售票机是找零出票呢还是退钱不出票。 自动售票机的整个功能如下所述:自动售票机有两处可以投币,一处接受硬币另一处接受纸币。硬币接受孔只能识别一元硬币,纸币接受孔可以接受5元和10元的纸币。根据站点的远近,将车站均等的分成三组,第一组的票价为2元,第二组的票价为3元,第三组的票价为4元。乘客一次只能选择一个价位的票,但每次最多可以选择购买三张车票。当选好出站口和购买的车票数以后,乘客就要开始投币,投币过程中可以投入硬币可以投入纸币,也可以两种混投,只要投入的钱数满足本次购票需要的钱数即可。若投入的钱数不够需要的钱数,售票机会显示钱数不够,要求继续投币,直到达到所需金额为止。投币结束后,自动售票机自动出票并进行找零,交易结束,跳回主界面等代下位乘客。若是乘客在购票过程取消了购票操作,则自动售票机立即结束购票进程,并返还已投的钱币。 3.2 系统分析与设计方案 3.2.1 系统的框架结构 根据课题要实现的功能,选择按模块来编写程序,本设计大概分成四个模块,分别是自动售票机主控模块,车票选择模块,纸、硬币处理模块,自动找零、出票模块。总的框架图如图3.1所示。 ⑴ 自动售票机主控模块:当此模块的start为1的时候,使能端en0和en1为1,en2为0,此时车票选择模块与纸、硬币处理模块工作。当此模块的start为0的时候,使能端en2为1,en0和en1为0,此时自动找零、出票模块工作。若投入的总钱数大于等于总价的线, 自动售票机输出票数quantity,并输出对应的找钱df为money_insert-cost。若投入的总钱数小于总价的线, 自动售票机不出票,并退出乘客负的总钱数,此时df为money_insert。 ⑵ 车票选择模块:受控于主控模块,乘客先启动rest让售票机进入初始状态,然后根据自己的需要选择票价,有2元,3元,4元的可供选择,选定票价后再选择购买张数,乘客一次性至多只能购买3张,选择完毕后输出总价cost和总票数quantity。 ⑶ 纸、硬币处理模块:受控于主控模块,乘客先让rest为0让售票机进入初始状态,等时钟脉冲的上升沿到来时,投入钱币数,有1元硬币,5元和10元纸币,若投入的钱数不足于总票价,则继续投币,否则输出投入总钱数。 ⑷ 自动找零、出票模块:受控于主控模块,乘客先让rest为0让售票机进入初始状态,等时钟脉冲的上升沿到来时,若是使能端bi为1,则输出票数为车票选择模块输出的票数quantity,并且输出找零为df。若是使能端bi为0,则不出票,退回投入的总钱数money_insert。 整个操作流程图如图3.2所示。 3.2.2 各模块功能分析 ⒈自动售票机主控模块 该模块是自动售票机的核心,它通过控制其余模块的使能端来控制其他几个模块的运行。主控模块的原理图如图3.3所示。 图3.3 车票模块原理图 ⑴ 输入端口: rest:复位信号,当rest为0时,所有输出为零,定义为初始状态。 clk:时钟脉冲,定义为上升沿时有效。 start:选择功能使能端,start为1时,车票选择模块与纸、硬币处理模块工作,start为0时,自动找零、出票模块工作。 money_insert:乘客投入的总钱数。 cost:乘客选择的总票价。 ⑵ 输出端口: en0:使能端,控制车票选择模块工作。 en1:使能端,控制纸、硬币处理模块工作。 en2:使能端,控制自动找零、出票模块工作。 bi:使能端,控制是否出票找零或是退钱。 df:根据bi的状态决定退出的钱数。 ⒉车票选择模块 此模块共有三种票价的车票可供选择,乘客可以根据自己的需要选择票价及票数(不超过3张)。车票选择模块的原理图如图3.4所示。 图3.4 车票选择模块原理图 输入端口: ① rest:复位信号,当rest为0时,所有输出为零,定义为初始状态。 ② clk:时钟脉冲,定义为上升沿时有效。 ③ jia_2,jia_3,jia_4:分别代表2元,3元和4元的票价,当其中一个为1时,代表该票价被选中。 shu_1,shu_2,shu_3:分别代表1张,2张和3张的票数,当其中一个为1时,代表该票数被选中。 ⑵ 输出端口: quantity:代表乘客所选择的票数。 cost:代表乘客最终选择的总票价。 ⑶ 其他端口: ① price:代表乘客所选择的票价。 ⒊ 纸、硬币处理模块 此模块主要执行乘客在上一个模块中所选择了总票价后来投入纸、硬币购票的过程,将投入的总钱数送往主控模块进行比较。纸、硬币处理模块的原理图如图3.5所示。 图3.5 纸、硬币处理模块原理图 ⑴ 输入端口: rest:复位信号,当rest为0时,所有输出为零,定义为初始状态。 clk:时钟脉冲,定义为上升沿时有效。 en1:使能端,en1为1时有效,代表纸、硬币处理模块工作。 qian_1,qian_5,qian_10:代表投入的钱数分别为1元,5元和10元,当其中一个为1时,代表投入该钱数。 cost:代表车票选择模块中乘客选择的总票价。 ⑵ 输出端口: money_insert:代表乘客在购票时投入的总钱数。 ⑶ 其他端口: ① qian:代表在投币过程每次投入的钱数。 ⒋ 自动找零、出票模块 此模块主要根据乘客所购买车票的价格及其投入的钱数进行相应的出票并找零或是不出票并退钱的操作。车票选择模块的原理图如图3.6所示。 图3.6 自动找零、出票模块原理图 ⑴ 输入端口: ① rest:复位信号,当rest为0时,所有输出为零,定义为初始状态。 ② clk:时钟脉冲,定义为上升沿时有效。 en2:使能端,控制自动找零、出票模块工作。 bi:使能端,控制是否出票找零或是退钱。 quantity:代表乘客所选择的票数。 df:根据bi的状态决定退出的钱数。 ⑵ 输出端口: piaoshu:售票机吐出的票数。 change:售票机吐出的所找的零钱数。 3.2.3 整个系统功能分析 当各个模块都设计好并且仿真成功后,建立顶层文件,并将各模块相应的端口连接起来,其中所有模块共用一个时钟信号clk。整个自动售票机程序的顶层文件如图3.7所示。 图3.7 整个自动售票机系统原理图 4 程序仿线 自动售票机主控模块的波形仿真 此模块波形仿线 主控模块波形仿真图 Start设定周期为10 ns ,cost设定周期为10ns ,当start为1时,选择en0与en1使能端工作,即选票模式与投币模式共同运行,而start为0时,en2使能端工作,即找零/出票模式运行,开始找零出票或退钱。 money_insert设定周期为10ns 并且延时为5ns,使波形中出现money_insert与cost的价格相同的时间也会出现money_insert比cost的价格小的时间,当cost与money_insert 的价格相同时,总是满足 money_insert=cost的情况,所以此时 bi为1, df的值为money_insert与cost两值之差,此时df总是为0,表明此模块程序波形仿真成功。当money_insert的价格小于cost的价格的时候,此时bi为0, df与money_insert的值相等,此时df的输出始终等于输入的价格,即money_insert 的值,表明此模块程序波形仿线 主控模块波形仿真图 将时钟脉冲clk的周期设定为1ns,上升沿有效。当复位脉冲rest为1时,上升沿时钟脉冲到来相应的输出端工作。start设定周期为10 ns ,选择的总票价cost设定周期为10ns ,当start为1时,选择en0与en1使能端工作,即选票模式与投币模式共同运行,而start为0时,en2使能端工作,即找零/出票模式运行,开始找零出票或退钱。 投入的总钱数 money_insert设定周期为5ns,使波形中出现money_insert比cost的价格大的时间,所以此时 bi总为1, df的值为money_insert与cost两值之差,如:start为0时,en0,en1.en2分别为001,cost为2,money_insert为4,所以bi为1,且df为money_insert与cost两值之差,为2,表明此模块程序波形仿线 车票选择模块的波形仿真 此模块波形仿线 车票选择模块波形仿真图 将时钟脉冲clk的周期设定为1ns,上升沿有效。当复位脉冲rest为1时,上升沿时钟脉冲到来,开始选择票价,在设定票价信号时选择20%的占空比,并且将不同票价jia_2,jia_3,jia_4的周期设定为100ns,且逐一延时5ns,使它们之间不发生重合,以同样的方式设定票数shu_1,shu_2,shu_3的周期,要注意,shu_1的周期要覆盖整个jia_2,jia_3,jia_4的周期的并集,保证乘客一次只能选定一个票价和购票数。并且它们为1时有效,代表选中。如仿真图所示,当票价price为4元,购票数quantity为两张的时候,乘客需要付的总票价cost为8元,表明此模块程序仿线 纸、硬币处理模块的波形仿真 此模块波形仿线 纸、硬币处理模块的波形仿真图 将时钟脉冲clk的周期设定为1ns,上升沿有效。 当复位脉冲rest为1且纸、硬币处理模块的使能端en1为1时,上升沿时钟脉冲到来,该模块开始工作。购票需要的总票价cost的周期设为25ns,并且延时20ns。在设定投入钱币信号时选择20%的占空比,同时将投入的钱数qian_1,qian_5,qian_10的周期设定为25ns,并且qian_1,qian_5,qian_10分别延时13ns,33ns和53ns,保证它们之间不会重合但又都在同一个总票价中,并且它们为1时有效,代表选中。如仿真图所示,当总票价cost为9元时,qian_1有效时,投入1元,由于投入钱数money_insert小于总票价cost,所以继续投入一元进行累加,当qian_5有效时,投入5元,累加的7元,还是不足,继续投入5元,累加得12元,此时投入充足的钱了,投入的总钱数money_insert就为12,表明此模块程序仿线 自动找零、出票模块的波形仿真 此模块波形仿线 自动找零、出票模块的波形仿真图 将时钟脉冲clk的周期设定为1ns,上升沿有效。当复位脉冲rest为1且自动找零、出票模块的使能端en2为1时,上升沿时钟脉冲到来,该模块开始工作。df的周期与选择的票数quantity的周期都设为5ns,出票或退钱的使能端bi的周期设定为10ns,当bi为1时,开始找零且出票,;例如:df为10,quantity为2时,找零change为10,出两张票,波形仿线时,售票机不出票并退回钱,例如:df为4,quantity为4时,退出的钱数为4,输出票数为0,表明此模块程序仿线 整个售票机系统的波形仿线 整个售票机模块系统的波形仿真图 将时钟脉冲clk的周期设定为1ns,且上升沿有效。start为模块选择势能端,当start为1时,车票选择模块和纸、硬币处理模块工作,当start为0时,自动找零、出票模块工作。jia_2,jia_3,jia_4代表选择的票价,shu_1,shu_2,shu_3代表选择的票数,qian_1,qian_2,qian_2代表投入的钱数,当它们其中一个为1时代表选中。上述图中选择了3元的票价,购买了3张票,一共投了10元。在start为1的时候输出选择的票价price为3,投入的钱数qian为10,在start为0时输出票数3和所找的零钱change为1元。验证正确,表明此模块程序仿线 整个售票机模块系统的波形仿真图 将时钟脉冲clk的周期设定为1ns,且上升沿有效。start为模块选择势能端,当start为1时,车票选择模块和纸、硬币处理模块工作,当start为0时,自动找零、出票模块工作。jia_2,jia_3,jia_4代表选择的票价,shu_1,shu_2,shu_3代表选择的票数,qian_1,qian_2,qian_2代表投入的钱数,当它们其中一个为1时代表选中。上述图中选择了4元的票价,购买了3张票,每次投入的钱数为1元。在start为1的时候,每有一个上升沿来临时,就投入1元,当start为0时不再投钱。由于start为0时投入的钱数不足12元,所以在start为0时不出票,并退回投入的钱数3元。验证正确,表明此模块程序仿线 上箱过程 在整个程序的波形仿真成功之后,便可进行下一步操作:上箱验证。步骤如下: ⑴ 将整个程序的管脚配置好,要保证这些管脚与实验箱上的实际管脚一一对应。管教配置如图5.1所示。 图5.1 自动售票机程序管脚配置 注意:由于数码管的输入是4位的,而piaoshu的输出只有3位,所以需要将piaoshu的最高位设为0,如图5.2所示。 图5.2 自动售票机piaoshu最高位管脚配置 ⑵ 配置好管脚以后再次进行仿真,使管脚信息进入程序中,连接实验箱,将仿真好的程序烧入实验箱进行验证。如图5.3所示。 图5.3 程序烧入试验箱 5.2 上箱结果 将仿真好的程序烧到实验箱上以后,便可进行验证,其中时钟脉冲clk为0.5HZ。验证结果如下图5.4,5.5所示。 图5.4 投币不足退钱且不出票 本次实验用四个数码管显示,第一个代表选择的票价price,第二个代表投入的钱数qian,第三个代表吐出的票数piaoshu,最后一个代表吐出的钱数change。除此以外还有8个输入:键8表示start,键7表示qian_5,键6表示qian_1,键5表示jia_4,键4表示jia_3,键3表示jia_2,键2表示shu_3,键1表示shu_1。由于设计的系统除时钟脉冲clk和复位信号rest外共有10个输入,但按键只有8个,所以这里省掉了qian_10和shu_2的输入。当start为1时系统在选择票价﹑票数后投入钱数,当start为0时,系统出票。上图选择的票价jia_2为2,票数shu_1为1,投入的钱数qian_1为1,在这种情况下投入的钱数不足,所以系统不出票且退出所投的钱1元,验证成功。 图5.5 投币足够找零且出票 上图中选择的票价为jia_3为3,票数shu_1为1,投入的钱数qian_5为5,在这种情况下投入的钱数大于总票价,所以系统吐出1张票并且退出所找的零钱2元,验证成功。 结 论 这次的毕业设计利用的是VHDL语言编程的,所采用的是自上而下的模块化设计地铁站自动售票机的。先将整个课题按要实现的功能合理的分成了四个模块,分别对每个模块进行VHDL编程并进行相应的波形仿真,全部成功之后再把四个模块合起来,生成顶层文件,再对其进行最后的波形仿真看能否实现自动售票机要求的功能,最后下载到试验箱进行最后验证。在设计过程中也有遇到一些困难,在刚开始分模块的时候就出现了错误,分出来只有三个模块,由于模块分的不佳,编写的程序较为复杂且逻辑不通,后来纠正了错误才成功的。通过本次毕业设计,我学到了很多,首先是对VHDL语言有了更深层次的理解,而且也能操作QuartusⅡ软件了,这是知识上的收获,此外,也培养了我的逻辑思维以及独立思考的能力,总的来说是一次很好的锻炼。 致 谢 这次的毕业设计之所以能够顺利的完成,主要还是要感谢指导老师对我的悉心指导,以及同班同学对我的帮助,没有他们的耐心帮助,我可能无法完成本次毕业设计。也要感谢身边的朋友和亲人对我的关心,是他们在我不耐烦的时候给了我勇气,让我能坚定的走下去。 参 考 文 献 [1] 李开.自动售票机的创新设计与应用[J].中国电子商务,2011,(11):117. [2] 向鹏.地铁自动售票机系统设计[J].自动化应用,2010, (11):12. [3] 张国侯,宗明.南京地铁自动售检票系统(AFC)模式研究[J].机电信息, 2005,(22):49. [4] 陆永宁.IC卡应用系统[M].东南大学出版社,2000. [5] 于宗光. SoC和FPGA技术未来的发展趋势[J].电子与封装, 2006,(3):12. [6] 阎石.数字电子技术基础[M].4版.北京:高等教育出版社,1998. [7] 张鹏南,孙宇,夏洪洋.基于QuartusⅡ的VHDL数字系统设计入门与应用实例[M].1版. 北京:电子工业出版社,2012.18-19. [8] 郑燕,郝建国.基于VHDL与QuartusⅡ软件的可编程逻辑器件应用与开发[M].2版. 北京:国防工业出版社,2011.44. [9] 张鹏南,孙宇,夏洪洋.基于QuartusⅡ的VHDL数字系统设计入门与应用实例[M].1版. 北京:电子工业出版社,2012.54. [10] 张鹏南,孙宇,夏洪洋.基于QuartusⅡ的VHDL数字系统设计入门与应用实例[M].1版. 北京:电子工业出版社,2012.53. [11] 张竟成. 基于解析模型的变电站培训仿真系统[D].天津: 天津大学,2009. [12] 张鹏南,孙宇,夏洪洋.基于QuartusⅡ的VHDL数字系统设计入门与应用实例[M].1版. 北京:电子工业出版社,2012.20-21. 附录 自动售票机主控模块的VHDL代码如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity zhu_kong is port(start,clk,rest:in std_logic; cost,money_insert:in std_logic_vector(3 downto 0); en0,en1,en2,bi:out std_logic; df:out std_logic_vector(3 downto 0) --定义各输入输出端口 ); end zhu_kong; architecture behave of zhu_kong is begin process(clk) begin if (rest=0) then en0=0; en1=0;en2=0; bi=0; df=0000; --先将各状态清零 elsif (clkevent and clk=1) then --等待时钟脉冲上升沿的到来 if (start=1) then --选择功能使能端有效时 en0=1;en1=1;en2=0; --车票选择模块,纸、硬币处理模块工作 else en0=0; en1=0;en2=1; --否则自动找零、出票模块工作 end if; if (money_insert=cost) then --当投入的总钱数=总价时 bi=1; df=money_insert-cost; --使能端bi有效,退钱数为总钱数与总价之差 else bi=0; df=money_insert;--否则使能端无效,退钱数为总钱数 end if; end if; end process; end behave; 车票选择模块的VHDL代码如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity ticket_select is port(rest:in std_logic; clk:in std_logic; jia_2,jia_3,jia_4:in std_logic; shu_1,shu_2,shu_3:in std_logic; price:buffer std_logic_vector(3 downto 0); quantity:out std_logic_vector(2 downto 0); cost:out std_logic_vector(3 downto 0) --定义各输入输出端口 ); end ticket_select; architecture behave of ticket_select is begin process(clk) begin if (rest=0) then price=0000; quantity=000; cost=0000; --先将各状态清零 elsif (clkevent and clk=1) then --等待时钟脉冲上升沿的到来 if (jia_2=1) then price=0010; --选择2元的票价 elsif (jia_3=1) then price=0011; --选择3元的票价 elsif (jia_4=1) then price=0100; --选择4元的票价 else price=0000; --没有选择票价 end if; if (shu_1=1) then quantity=001; --选择购买一张车票 cost=price; --需要付的钱币等于票价 elsif (shu_2=1) then quantity=010; --选择购买两张车票 cost=price+price; --需要付的钱币等于票价的两倍 elsif (shu_3=1) then quantity=011; --选择购买三张车票 cost=price+price+price; --需要付的钱币等于票价的三倍 else quantity=000; --没有选择票数 end if; end if; end process; end behave; 纸、硬币处理模块的VHDL代码如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity tou_bi is port(rest,clk,en1:in std_logic; qian_1,qian_5,qian_10:in std_logic; cost:in std_logic_vector(3 downto 0) ; qian:buffer std_logic_vector(3 downto 0); money_insert:out std_logic_vector(3 downto 0) ); end tou_bi; --定义各输入输出端口 architecture behave of tou_bi is begin process(clk) begin if (en1=1) then if (rest=0) then qian=0000; money_insert=0000; --先将各状态清零 elsif (clkevent and clk=1) then --等待时钟脉冲上升沿的到来 if (qian_1=1) then qian=0001; --投入一个1元硬币 elsif (qian_5=1) then qian=0101; --投入一张5元纸币 elsif (qian_10=1) then qian=1010; --投入一张10元纸币 else qian=0000; --不投入钱 end if; if (qiancost) then --投入的钱数小于车票总价 if (qian_1=1) then --投入一个1元硬币 qian=qian+0001; --投入的钱数加1 elsif (qian_5=1) then --投入一张5元纸币 qian=qian+0101; --投入的钱数加5 elsif (qian_10=1) then --投入一张10元纸币 qian=qian+1010; --投入的钱数加10 end if; else --投入的总钱数大于或等于车票总价 money_insert=qian; --投入的总钱数就等于投入的钱数 end if; end if; end if; end process; end behave; 自动找零、出票模块的VHDL代码如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity give_change is port(rest,clk,en2,bi:in std_logic; df:in std_logic_vector(3 downto 0); quantity:in std_logic_vector(2 downto 0); piaoshu:out std_logic_vector(2 downto 0); change:out std_logic_vector(3 downto 0) ); --定义各输入输出端口 end give_change; architecture behave of give_change is begin process(clk) begin if (en2=1) then if (rest=0) then piaoshu=000; change=0000; --先将各状态清零 elsif (clkevent and clk=1) then --等待时钟脉冲上升沿的到来 if (bi=1) then --当使能端bi有效 piaoshu=quantity; --输出票数为车票选择模块输出的票数 change=df; --找零为投入钱数与总价之差 else piaoshu=000; --使能端bi有效时不出票 change=df; --找零为投入的总钱数 end if; end if; else null; end if; end process; end behave; 本科毕业设计说明书(论文) 第 Ⅰ 页 共 Ⅰ 页 本科毕业设计说明书(论文) 第1页 共33页 本科毕业设计说明书(论文) 第 11页 共 33页 本科毕业设计说明书(论文) 第 26 页 共33页 库、程序包 实体 结构体 进程或其他并行语句 配置 设计输入 综合 布线布局 时序分析 仿真 在线校验 修改设计 器件编程与配置 生产 图2.3 QuartusⅡ软件的设计流程 自动售票机主控模块 纸、硬币处理模块 自动找零、出票模块 车票选择模块 cost eno en1 money_insert en2 bi df quantity 图3.1 自动售票机系统结构框图 投币数票价 计算金额 投币 选票 3元 4元 2元 进入初始状态 是 否 出票找零 继续投币 退币返回 否 是 交易结束 图3.2 操作流程图

http://vision-images.com/weimaichongyongji/117.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有