地铁自动售票系统VHDL_第1页
地铁自动售票系统VHDL_第2页
地铁自动售票系统VHDL_第3页
地铁自动售票系统VHDL_第4页
地铁自动售票系统VHDL_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、通信线路EDA课程项目 -关于VHDL语言模拟地铁售票控制系统设计 项目组负责人:胡弘正 通信0903(200985250321)项 目组成员:刘上校 通信0903(200985250317) 邹 娟 通信0901(200985250103)完 成 日 期 :遥遥无期一、 设计要求:功能描述:用于模仿地铁售票的自动售票,完成地铁售票的核心控制功能。功能要求:售票机有两个进币孔,一个是输入硬币,一个是输入纸币,硬币的识别范围是5角和1 元的硬币,纸币的识别范围是1 元、2 元,5 元,10 元。乘客可以连续多次投入钱币。乘客可以选择的种类为2 元和4 元,乘客一次只能选择一个出站口。购买车票时,

2、乘客先选择出站名,然后选择所需的票数,再进行投币,投入的钱币达到所需金额时,售票机自动出票,并找出余额,本次交易结束,等待下一次的交易。在投币期间,乘客可以按取消键取消本次操作,钱币自动退出。功能描述:用于模仿地铁售票的自动售票,完成地铁售票的核心控制功能。功能要求:售票机有两个进币孔,一个是输入硬币,一个是输入纸币,硬币的识别范围是5角和1 元的硬币,纸币的识别范围是1 元、2 元,5 元,10 元。乘客可以连续多次投入钱币。乘客可以选择的种类为2 元和4 元,乘客一次只能选择一个出站口。购买车票时,乘客先选择出站名,然后选择所需的票数,再进行投币,投入的钱币达到所需金额时,售票机自动出票,

3、并找出余额,本次交易结束,等待下一次的交易。在投币期间,乘客可以按取消键取消本次操作,钱币自动退出。二 课题分析1 买车票时,乘客按“开始选择”按钮,接着选择出站口接着 选择购票数量(根据提示,一次购票数限制在3张以内);然后按“开始投币”按钮,投入钱币;当投入的钱币达到所需金额时,售票机自动出票,并找出余额。考虑到控制整个售票机的物理体积,余额将全部采用5角硬币的形式找出。2 选择出站口或投币过程中,乘客都可以按“取消”按钮取消该次交易。选择出站口的过程中,若按“取消”,则售票机直接回到初始状态;投币过程中,若按“取消”,则售票机将乘客已经投入的钱币全部退出,再回到初始状态。3 客一次只能选

4、择一个出站口,根据乘坐的站数确定票价。假设乘客购票所在站到终点站共有15站。若乘坐1-8站,则票价为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的一比特热位编码方式表示。乘客可以连续多次投入钱币,并且可以以任意顺序投入硬币和纸币。5 票机设有钱币“暂存杆”,其有3个状态:退币状态、等待状态、进币状态,分别

5、用00、01、10表示。退币状态下,“暂存杆”将乘客投入的钱币推出;等待状态下,投入的钱币被“暂存杆”挡住暂存;进币状态下,“暂存杆”将乘客投入的钱币推入售票机内部。三、系统流程图:初始状态按“开始选择”选择出站口按“开始投币”投入钱币钱币足够找零口找零出票口出票按“取消”按“取消”退回钱币钱币入库选择购票数四系统状态图五、程序源代码及注释library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity subway isport(clk:in std_logic;-系统时钟select_start:

6、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;-“取消”按钮ticket_stop:in std_logic_vector(3 downto 0);-出站口编号ticket_account:in std_logic_vector(1 downto 0);-购票张数money_gate:out std_logic_vecto

7、r(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 subway istype state_type is (initialize_state,select_state,insert_state,ticket_state,change_state);-状态变量申明signal state:state_type;-状态

8、信号申明beginprocess(clk)variable type_temp:std_logic;-记录是否已选择出站口的变量variable account_temp:std_logic;-记录是否已选择购票张数的变量variable temp_type:std_logic_vector(4 downto 0);-记录票种的中间变量variable temp_account:std_logic_vector(4 downto 0); -记录票数的中间变量variable price:std_logic_vector(7 downto 0);-记录单张票价的变量variable number

9、:std_logic_vector(1 downto 0);-记录票数的变量variable total_price:std_logic_vector(7 downto 0);-记录总票价的变量variable total_insert:std_logic_vector(7 downto 0);- 记录投入钱币总额的变量variable change:std_logic_vector(7 downto 0);-记录应找零金额的变量variable sign:std_logic;-记录系统是否已经过初始化的变量variable temp:std_logic;-记录投入钱币金额达到总票价的变量be

10、ginif (clkevent and clk=1) then-时钟信号上升沿触发case state iswhen initialize_state=-初始状态if(sign=0)then-表示系统未经过初始化 money_gate=00;-钱币“暂存杆”退出钱币ticket_out=00000;-购票记录清零ticket_gate=0;-出票口关闭change_gate=0;-找零口关闭temp_type:=00000;-票种记录清零temp_account:=00000;-票数记录清零type_temp:=0;account_temp:=0;price:=00000000;-单张票价记录

11、清零number:=00;-购票张数记录清零total_price:=00000000;-票价总额记录清零total_insert:=00000000;-投入钱币总额记录清零change:=00000000;-应找零金额记录清零sign:=1;-记录已完成系统初始化temp:=0;-投入达到总票价记录清零else-表示系统已经过初始化money_gate=01;-钱币“暂存杆”归为等待状态if (select_start=1) then-按下“开始选择”按钮sign:=0;state-选择状态if(type_temp=0)then-表示尚未选择出站口if(ticket_stop=0001)an

12、d(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

13、;account_temp:=1; when others=null; end case;end if;if(type_temp=1)and(account_temp=1)then-表示已选择出站口且已选择购票张数if(insert_start=1) then-按下“开始投币”按钮state=insert_state;-系统进入投币状态end if;end if; if(cancel=1) then-按下“取消”按钮state-投币状态 case note is-纸币识别 when 0001=-1元纸币total_insert:=total_insert+00001010;-重新计算投币总额

14、when 0010=total_insert:=total_insert+00010100;-2元纸币 when 0100=total_insert:=total_insert+00110010;-5元纸币 when 1000=total_insert:=total_insert+01100100;-10元纸币 when others=null;end case;case coin is-硬币识别when 01=total_insert:=total_insert+00000101;-5角硬币when 10=total_insert:=total_insert+00001010;-1元硬币wh

15、en others=null; end case;if(cancel=1) then-按下“取消”按钮state=initialize_state;-回到初始状态end if;if(temp=1)then-判断投入钱币金额达到总票价money_gate=10;-钱币“暂存杆”将钱币推入售票机内,表示接受投币state=total_price)then-判断投入总金额是否已达到票价总额temp:=1; -记录投入钱币金额达到总票价end if;when ticket_state=-出票状态-计算应找零金额if(number=11)thenchange:=total_insert-price-pr

16、ice-price;elsif(number=10)thenchange:=total_insert-price-price;elsif(number=01)thenchange:=total_insert-price;end if;ticket_out=temp_type+temp_account; -计算输出车票ticket_gate00000000)then-判断是否还有找零state=change_state;-系统进入找零状态elsestate-找零状态-找零口打开时,可控制每个时钟上升沿推出一个5角的硬币if(change00000000)thenchange_gate=1;-找零

17、口打开change:=change-00000101;-计算剩余应找零金额elsechange_gate=0;-找零口关闭state=total_price)。(6)系统进入出票状态(ticket_state):系统准备好4元的票3张(10100),出票口打开(ticket_gate=1)出票。(7)系统进入找零状态(change_state):找零口打开(change_gate=1)找零,每个时钟上升沿时出一个5角硬币,变量change实时显示剩余应找零金额。(8)找零完毕,找零口关闭;出票口关闭。系统回到初始状态。此段仿真主要验证了连续投入单种介质钱币购票且找零的功能正常。系统全部恢复初始

18、状态的时间在4.56us左右(如图)。4(1)乘客在约4.75us时按下“开始选择”按钮,系统进入选择状态。 (2)乘客选择出站口为第12站,系统得出票价为4元;选择购买2张,系统得出票数为2张。进而得出总票价为8元。 (3)乘客按下“开始投币”按钮,系统进入投币状态。 (4)乘客依次投入5角硬币、5角硬币、5元纸币、5角硬币、1元硬币、2元纸币,系统实时计算投入的总金额。 (5)系统判断投入的总金额已经达到票价总额。(6)系统进入出票状态:系统准备好4元的票2张,出票口打开出票。(7)系统进入找零状态:找零口打开找零,每个时钟上升沿时出一个5角硬币,变量change实时显示剩余应找零金额。(8)找零完毕,找零口关闭;出票口关闭。系统回到初始状态。此段仿真主要验证了连续混合投入硬币和纸币购票且找零的功能正常。系统全部恢复初始状态的时间在7.36us左右(限于版面,未在下图中标出,向右移动水平进度条可定位)。5(1)乘客在约7.55

温馨提示

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

评论

0/150

提交评论