《《计算机组成原理》课程设计报告基于VHDL的模拟地铁售票控制系统设计与实现.doc》由会员分享,可在线阅读,更多相关《《计算机组成原理》课程设计报告基于VHDL的模拟地铁售票控制系统设计与实现.doc(31页珍藏版)》请在三一办公上搜索。
1、长沙理工大学计算机组成原理课程设计报告 学 院 计通学院 专 业 计算机科学与技术 班 级 计算机09-02班 学 号 学生姓名 指导教师 课程成绩 完成日期 2012年7月6日课程设计任务书 计算机与通信工程 学院 计算机科学与技术 专业课程名称计算机组成原理课程设计时间20112012学年第一学期1920周学生姓名指导老师题 目基于VHDL的模拟地铁售票控制系统设计与实现主要内容:利用 VHDL 语言设计地铁售票系统的核心功能 MAXPLUS II软件作为发平台,设计城市地铁售票系统程序并进行仿真。使其实现选站、选择张数、出票、找零等功能。要求:(1)要求能独立地运用VHDL语言、EDA相
2、关知识和Max Plus II仿真软件,编制一个简单的课程设计。(2)学生按要求编写课程设计报告书,能正确阐述设计和实验结果。(3)通过课程设计培养学生严谨的科学态度和团队协作精神。(4)学生应抱着严谨认真的态度积极投入到课程设计过程中,认真查阅相应文献以及实现,给出个人分析、设计以及实现。应当提交的文件:(1)课程设计报告。(2)课程设计附件(源程序、各类图纸、实验数据、仿真截图等实证材料)。课程设计成绩评定学 院 计通学院 专 业 计算机科学与技术 班 级 计算机09-02班 学 号 200986250224 学生姓名 指导教师 完成日期 2012年7月6日 指导教师对学生在课程设计中的评
3、价评分项目优良中及格不及格课程设计中的创造性成果学生掌握课程内容的程度课程设计完成情况课程设计动手能力文字表达学习态度规范要求课程设计论文的质量指导教师对课程设计的评定意见综合成绩 指导教师签字 年 月 日基于VHDL的模拟地铁售票控制系统设计与实现学生姓名: 指导老师 摘 要: VHDL 语言对于复杂的数字系统的设计,它有独特的作用。它的硬件描述能力强,能轻易的描述出硬件的结构和功能。这种语言的应用至少意味着两种重大的改变:电路的 设计可以通过文字描述的方式完成;电子电路可以当作文件一样来存储。随着现代技术的发展,这种语言的效益与作用日益明显,每年均能够以超过 30的速度快速成长。这次课程设
4、计就是利用 VHDL 语言设计地铁售票系统的核心功能 MAXPLUS II软件作为发平台,设计城市地铁售票系统程序并进行仿真。使其实现选站、选择张数、出票、找零等功能。 关键词: 地铁,售票,VHDL 语言,MaxPlus IIVHDL based simulation of subway ticket control system design and Implementation Student: Yuan Jun Advisor:YuangtaoChenAbstract: VHDL language is used to describe the behavior and structu
5、re of electronic systems but isparticularly suited as a language to describe the structure and behavior of digital electronichardware designs. The application of it means two changes: electro circuitdesign can be done by the kind of file description. and electro circuit canbe stored as a file.It is
6、used to lower the cost and reduce the design cycle.It can supply designers needs easily. With the development of moderntechnology it grows more than 30 every year.The Graduation Project just simulate tickedsales system of metro use VHDL language and it under the platform of MaxPlus II. The functions
7、station select numbers select ticket out bids all will be showing in the emulator.Key word: Metro,ticked sales,VHDL,Max-Plus目录1 引 言11.1 设计要求11.2 课题分析12 设计的基础依据22.1 EDA技术介绍22.2 VHDL语言介绍22.2.1 VHDL的简介42.2.2 VHDL语言特点42.2.3 VHDL的设计流程43 设计步骤53.1系统流程图53.2 系统状态图63.5 编写VHDL程序代码73.6 程序调试84 程序仿真124.1 波形输入建立12
8、4.2 波形仿真结果分析135 结束语17致谢18参考文献19附录201 引 言1.1 设计要求功能描述:用于模仿地铁售票的自动售票,完成地铁售票的核心控制功能。功能要求:售票机有两个进币孔,一个是输入硬币,一个是输入纸币,硬币的识别范围是5角和1 元的硬币,纸币的识别范围是1 元、2 元,5 元,10 元。乘客可以连续多次投入钱币。乘客可以选择的种类为2 元和4 元,乘客一次只能选择一个出站口。购买车票时,乘客先选择出站名,然后选择所需的票数,再进行投币,投入的钱币达到所需金额时,售票机自动出票,并找出余额,本次交易结束,等待下一次的交易。在投币期间,乘客可以按取消键取消本次操作,钱币自动退
9、出。1.2 课题分析1 买车票时,乘客按“开始选择”按钮,接着选择出站口接着 选择购票数量(根据提示,一次购票数限制在3张以内);然后按“开始投币”按钮,投入钱币;当投入的钱币达到所需金额时,售票机自动出票,并找出余额。考虑到控制整个售票机的物理体积,余额将全部采用5角硬币的形式找出。2 选择出站口或投币过程中,乘客都可以按“取消”按钮取消该次交易。选择出站口的过程中,若按“取消”,则售票机直接回到初始状态;投币过程中,若按“取消”,则售票机将乘客已经投入的钱币全部退出,再回到初始状态。3 客一次只能选择一个出站口,根据乘坐的站数确定票价。假设乘客购票所在站到终点站共有15站。若乘坐1-8站,
10、则票价为2元张;若乘坐9-16站,则票价为4元张。16个站用长度位4的二进制向量编码表示,即0001表示乘坐1站,0010表示乘坐2站,依次类推,1111表示乘坐15站(到终点站)。4 票机有2个进币端口。硬币口可识别5角和1元2种硬币,拟用长度为2的一比特热位(one-hot)编码方式表示,即01表示5角,10表示1元。纸币口类似,用长度为4的一比特热位编码方式表示。乘客可以连续多次投入钱币,并且可以以任意顺序投入硬币和纸币。2 设计的基础依据现代电子设计技术的核心是EDA技术。基于EDA技术开发的实现三层电梯自动控制与目前主流的利用可编程逻辑控制器实现电梯控制紧密相连。硬件描述语言是EDA
11、技术的重要组成部分,VHDL是作为电子设计主流硬件的描述语言。使用VHDL语言进行程序的设计,在MAX +plus软件上对程序进行编译、仿真。在MAX +plus平台上的开发具有编程软件具有采自易学易懂的梯形图语言、控制灵活方便、抗干扰能力强、运行稳定可靠等优点。2.1 EDA技术介绍20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构
12、和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程
13、下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可靠性,减轻了设计者的劳动强度。2.2 VHDL语言介绍2.2.1 VHDL的简介VHDL(Very-High-Speed Integrated Circuit HardwareDescription Language),翻译成中文就是超高速集成电路硬件描述语言。因此它的应用主要是应用在数字电路的设计中。诞生于1982年。自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原
14、有的非标准的硬件描述语言。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。2.2.2 VHDL语言的特点(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体
15、的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行
16、独立的设计。2.2.3 VHDL的设计流程(1)设计规范的定义明确设计的目的,进行设计的总体规划。分析设计要求,以及自己要达到的设计目的和目标。(2)采用VHDL进行设计描述这部分包括设计规划和程序的编写。设计规划主要包括设计方式的选择及是否进行模块划分。设计方式一般包括直接设计,自顶向下和自底向下设计。(3)VHDL程序仿真对于某些人而言,仿真这一步似乎是可有可无的。但是对于一个可靠的设计而言,任何设计最好都进行仿真,以保证设计的可靠性。另外,对于作为一个独立的设计项目而言,仿真文件的提供足可以证明你设计的完整性。(4)综合、优化和布局布线综合指的是将设计描述转化成底层电路的表示形式,其结果
17、是一个网表或者是一组逻辑方程;优化,这个主要是为了提高程序的执行效率及减少资源的利用;布局布线,指的是将逻辑关系转化成电路连接的方式。(5)仿真这一步主要是未来确定你的设计在经过布局布线之后,是不是还满足你的设计要求。3 设计步骤3.1系初始状态按“开始选择”选择出站口按“开始投币”投入钱币钱币足够找零口找零出票口出票按“取消”按“取消”退回钱币钱币入库选择购票数统流程图图 3.1系统流程图3.2 系统状态图图 3.2系统状态图 3.5 编写VHDL程序代码if(ticket_stop=0001)and(ticket_stop=1001)and(ticket_stop-选择3张票temp_ac
18、count:=00100;-表示3张票number:=11;-购票张数为3total_price:=price+price+price; -计算总票价account_temp:=1; -记录已选择购票张数 when 10=-选择2张票temp_account:=00010;number:=10;total_price:=price+price;account_temp:=1; when 01=-选择1张票temp_account:=00001;number:=01;total_price:=price;account_temp:=1; when others=null; end case;en
19、d if;3.6 程序调试 (1)建立好工作库目录,以便设计工程项目的存储,打开MAX +plus软件,其初始界面如图3.3所示:图 3.3 MAX +plus软件初始界面(2)在工具栏中选择“新建”按钮。在选择输入路径时,选择“Text Editor File”以进行文本输入,如图3.4所示:图 3.4输入路径选择为文本输入(3) 在文本输入界面内进行程序输入,如图3.5所示:图 3.5程序输入界面(4)输入完毕后,需要对程序进行保存。文件名和实体定义的符号必须保持一致,即文件名为flift。因为是使用VHDL语言,所以文件后缀名须改成vhd,详见图3.6所示:图 3.6文本输入保存界面 (
20、5)保存以后,对程序进行编译。在编译前,需要把文件设置为顶层文件,或称工程文件Project。选择菜单“File”“Project”“Set Project to Current File”,当前的文件即被指定。详见图3.7所示:图 3.7设置顶层文件 (6)在“MAX +plus”下拉按钮里选择“Compiler”,对程序进行编译,此时,MAX +plus软件会对程序进行纠错等处理。当程序被确认无误以后会出现如下界面,如图3.8所示。第一次编译时由于实体名和保存时的名字不相符,所以出现了一个错误,改正后无误。图 3.8编译完成图4 程序仿真4.1 波形输入建立在创建的波形仿真文件中,添加所有
21、输入输出端口,并添加程序中涉及的重要变量进行仿真。End Time设定为10.0us,时钟周期设定为100ns,模拟完成乘客5次购票的过程,以期测试系统的所有功能是否正常。全部的仿真波形截图如下:4.2 波形仿真结果分析1 (1)乘客按下“开始选择”按钮(select_start=1),钱币“暂存杆”进入等待状态(money_gate=01),系统进入选择状态(state=select_state)。(2)乘客选择出站口为第6站,系统得出单张票价price为20(2元);选择购买数量为2张,系统得出票数number为2。进而得出总票价total_price为40(4元)。(3)乘客按下“取消”
22、按钮(cancel=1),系统回到初始状态(state= initialize_state),钱币“暂存杆”推出(此刻无暂存钱币,仅表示初始化过程中的一个动作),然后再归为等待状态;其余变量全部清零。此段仿真主要验证了在选择状态时“取消”按钮的功能正常。系统全部恢复初始状态的时间在960.0ns左右(如图)图 4.1选择状态时“取消” 2 (1)乘客在约1.15us时按下“开始选择”按钮,系统进入选择状态。 (2)乘客选择出站口为第11站,系统得出票价为4元;选择购买3张,系统得出票数为3张。进而得出总票价为12元。 (3)乘客按下“开始投币”按钮(insert_start=1),系统进入投币
23、状态(state=insert_state)。 (4)乘客投入5元纸币(note=0100),系统得出投入的总金额为5元(total_insert为50);投入1元硬币(coin=10),系统得出投入的总金额为6元(total_insert为60)。 (5)乘客按下“取消”按钮,系统回到初始状态,钱币“暂存杆”推出,退出乘客投入的钱币,然后再归为等待状态;其余变量全部清零。此段仿真主要验证了在投币状态时“取消”按钮的功能正常。系统全部恢复初始状态的时间在2.36us左右(如图)。 图 4.2投币状态时“取消”3(1)乘客在约2.45us时按下“开始选择”按钮,系统进入选择状态。 (2)乘客选择
24、出站口为第9站,系统得出票价为4元;选择购买3张,系统得出票数为3张。进而得出总票价为12元。 (3)乘客按下“开始投币”按钮,系统进入投币状态。 (4)乘客投入10元纸币,系统得出投入的总金额为10元,再投入5元纸币,系统得出投入的总金额为15元。 (5)系统判断投入的总金额已经达到票价总额(total_insert=total_price)。(6)系统进入出票状态(ticket_state):系统准备好4元的票3张(10100),出票口打开(ticket_gate=1)出票。(7)系统进入找零状态(change_state):找零口打开(change_gate=1)找零,每个时钟上升沿时出
25、一个5角硬币,变量change实时显示剩余应找零金额。(8)找零完毕,找零口关闭;出票口关闭。系统回到初始状态。此段仿真主要验证了连续投入单种介质钱币购票且找零的功能正常。系统全部恢复初始状态的时间在4.56us左右(如图)。图 4.3连续投入单种介质钱币购票且找零4(1)乘客在约4.75us时按下“开始选择”按钮,系统进入选择状态。 (2)乘客选择出站口为第12站,系统得出票价为4元;选择购买2张,系统得出票数为2张。进而得出总票价为8元。 (3)乘客按下“开始投币”按钮,系统进入投币状态。 (4)乘客依次投入5角硬币、5角硬币、5元纸币、5角硬币、1元硬币、2元纸币,系统实时计算投入的总金
26、额。 (5)系统判断投入的总金额已经达到票价总额。(6)系统进入出票状态:系统准备好4元的票2张,出票口打开出票。(7)系统进入找零状态:找零口打开找零,每个时钟上升沿时出一个5角硬币,变量change实时显示剩余应找零金额。(8)找零完毕,找零口关闭;出票口关闭。系统回到初始状态。此段仿真主要验证了连续混合投入硬币和纸币购票且找零的功能正常。系统全部恢复初始状态的时间在7.36us左右(限于版面,未在下图中标出,向右移动水平进度条可定位)。图 4.4紧急刹车尾灯仿真图5 结束语 两周的课程设计结束了,在此次课程设计中,我收获了许多,不仅在知识学习方面,而且在动手能力方面、团结合作能力等方面都
27、有了一定的成就。 首先,在知识学习方面,虽然我们开始有在计算机组成原理这一门课程中接触过VHDL这一门语言,但是我们都还不是很了解,只知道它由实体、结构体组成,其余的就不是很了解,但是在此次课程设计中,我有了比较详细的了解,基本能够写出一个比较完整的程序。这两周的自学中,我也体会到了自学得快乐。 其次,在动手能力方面,很多时候我都是知识不能够结合实践,所以很多时候我都不知道应该怎么样开始,不过此次由于有了老师的详细讲解,所以,我能够很快知道接下来应该做什么,有什么作用,得出什么结果。最后,在团结合作能力方面,虽然每个人有每个人的题目,但是我们还是充分发挥了我们的团结合作能力,找到程序的同学帮没
28、找到的同学找,有什么错误的大家一起讨论,一起找资料解决,最后,实在不行还有我们坚强的后盾我们的指导老师,所以我们合作得很快乐。在这次设计过程中,体现出自己单独设计的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。同时,也再次体会到了团结合作的快乐。致谢在这次课程设计的撰写过程中,我得到了许多人的帮助。首先我要感谢我的指导老师陈沅涛老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识,
29、而且也开阔了视野,提高了自己的设计能力。其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计上的难题。同时也感谢学院为我提供良好的做课程设计的环境。最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学。 参考文献1 王雯隽 基于Verilong-HDL自动售货机的设计与实现M北京航空航天大学出版社 2005年5月2赵淑范 王宪伟 电子技术实验与课程设计 第一版M清华大学出版社 2006年8月3 陈光明 施金鸿 电子技术课程设计与综合试训M 第一版北京航空航天大学出版社 2007年5月4赖义汉 自动售货机控制系统VHDL有限机状态实现北京M 科学出版社 2007年 1月5中国电子
30、网. 附录library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity subway isport(clk:in std_logic;-系统时钟select_start:in std_logic;-“开始选择”按钮insert_start:in std_logic;-“开始投币”按钮coin:in std_logic_vector(1 downto 0);-硬币入口note:in std_logic_vector(3 downto 0);-纸币入口cancel:in std_logic;-“取消”
31、按钮ticket_stop:in std_logic_vector(3 downto 0);-出站口编号ticket_account:in std_logic_vector(1 downto 0);-购票张数money_gate:out std_logic_vector(1 downto 0);-钱币“暂存杆”ticket_out:out std_logic_vector(4 downto 0);-购买的车票ticket_gate:out std_logic;-出票口change_gate:out std_logic-找零口);end subway;architecture behave of
32、 subway istype state_type is (initialize_state,select_state,insert_state,ticket_state,change_state);-状态变量申明signal state:state_type;-状态信号申明beginprocess(clk)variable type_temp:std_logic;-记录是否已选择出站口的变量variable account_temp:std_logic;-记录是否已选择购票张数的变量variable temp_type:std_logic_vector(4 downto 0);-记录票种的中
33、间变量variable temp_account:std_logic_vector(4 downto 0); -记录票数的中间变量variable price:std_logic_vector(7 downto 0);-记录单张票价的变量variable number:std_logic_vector(1 downto 0);-记录票数的变量variable total_price:std_logic_vector(7 downto 0);-记录总票价的变量variable total_insert:std_logic_vector(7 downto 0);- 记录投入钱币总额的变量varia
34、ble change:std_logic_vector(7 downto 0);-记录应找零金额的变量variable sign:std_logic;-记录系统是否已经过初始化的变量variable temp:std_logic;-记录投入钱币金额达到总票价的变量beginif (clkevent and clk=1) then-时钟信号上升沿触发case state iswhen initialize_state=-初始状态if(sign=0)then-表示系统未经过初始化 money_gate=00;-钱币“暂存杆”退出钱币ticket_out=00000;-购票记录清零ticket_ga
35、te=0;-出票口关闭change_gate=0;-找零口关闭temp_type:=00000;-票种记录清零temp_account:=00000;-票数记录清零type_temp:=0;account_temp:=0;price:=00000000;-单张票价记录清零number:=00;-购票张数记录清零total_price:=00000000;-票价总额记录清零total_insert:=00000000;-投入钱币总额记录清零change:=00000000;-应找零金额记录清零sign:=1;-记录已完成系统初始化temp:=0;-投入达到总票价记录清零else-表示系统已经过初
36、始化money_gate=01;-钱币“暂存杆”归为等待状态if (select_start=1) then-按下“开始选择”按钮sign:=0;state-选择状态if(type_temp=0)then-表示尚未选择出站口if(ticket_stop=0001)and(ticket_stop=1001)and(ticket_stop-选择3张票temp_account:=00100;-表示3张票number:=11;-购票张数为3total_price:=price+price+price; -计算总票价account_temp:=1; -记录已选择购票张数 when 10=-选择2张票temp_account:=00010;number:=10;total_price:=price+price;account_temp:=1; when 01=-选择1张票temp_account:=00001;number:=01;total_price:=price;account_temp:=1;