ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:533.88KB ,
资源ID:4903217      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4903217.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(地铁自动售票系统VHDL.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

地铁自动售票系统VHDL.docx

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

2、售票的自动售票,完成地铁售票的核心控制功能。功能要求:售票机有两个进币孔,一个是输入硬币,一个是输入纸币,硬币的识别范围是5角和1 元的硬币,纸币的识别范围是1 元、2 元,5 元,10 元。乘客可以连续多次投入钱币。乘客可以选择的种类为2 元和4 元,乘客一次只能选择一个出站口。购买车票时,乘客先选择出站名,然后选择所需的票数,再进行投币,投入的钱币达到所需金额时,售票机自动出票,并找出余额,本次交易结束,等待下一次的交易。在投币期间,乘客可以按取消键取消本次操作,钱币自动退出。二、 课题分析1 买车票时,乘客按“开始选择”按钮,接着选择出站口接着 选择购票数量(根据提示,一次购票数限制在3

3、张以内);然后按“开始投币”按钮,投入钱币;当投入的钱币达到所需金额时,售票机自动出票,并找出余额。考虑到控制整个售票机的物理体积,余额将全部采用5角硬币的形式找出。2 选择出站口或投币过程中,乘客都可以按“取消”按钮取消该次交易。选择出站口的过程中,若按“取消”,则售票机直接回到初始状态;投币过程中,若按“取消”,则售票机将乘客已经投入的钱币全部退出,再回到初始状态。3 客一次只能选择一个出站口,根据乘坐的站数确定票价。假设乘客购票所在站到终点站共有15站。若乘坐1-8站,则票价为2元张;若乘坐9-16站,则票价为4元张。16个站用长度位4的二进制向量编码表示,即0001表示乘坐1站,001

4、0表示乘坐2站,依次类推,1111表示乘坐15站(到终点站)。4 票机有2个进币端口。硬币口可识别5角和1元2种硬币,拟用长度为2的一比特热位(one-hot)编码方式表示,即01表示5角,10表示1元。纸币口类似,用长度为4的一比特热位编码方式表示。乘客可以连续多次投入钱币,并且可以以任意顺序投入硬币和纸币。5 票机设有钱币“暂存杆”,其有3个状态:退币状态、等待状态、进币状态,分别用00、01、10表示。退币状态下,“暂存杆”将乘客投入的钱币推出;等待状态下,投入的钱币被“暂存杆”挡住暂存;进币状态下,“暂存杆”将乘客投入的钱币推入售票机内部。三、系统流程图:四、 系统状态图五、程序源代码

5、及注释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

6、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_vector(1 downto 0); -钱币“暂存杆” ticket_out :out std_logic_vector(4 downto 0); -购买的车票 ticket_gate :out std_logic; -出票口 change_gate :out std_logic -找零口)

7、;end subway;architecture behave of subway is type state_type is (initialize_state,select_state,insert_state,ticket_state,change_state); -状态变量申明 signal state:state_type; -状态信号申明 begin process(clk) variable type_temp :std_logic; -记录是否已选择出站口的变量 variable account_temp :std_logic; -记录是否已选择购票张数的变量 variable

8、 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 :std_logic_vector(1 downto 0); -记录票数的变量 variable total_price :std_logic_vector(7 downto 0); -记录总票价的变量 variable

9、 total_insert :std_logic_vector(7 downto 0);- 记录投入钱币总额的变量 variable change :std_logic_vector(7 downto 0); -记录应找零金额的变量 variable sign :std_logic; -记录系统是否已经过初始化的变量 variable temp :std_logic; -记录投入钱币金额达到总票价的变量 begin if (clkevent and clk=1) then -时钟信号上升沿触发 case state is when initialize_state= -初始状态 if(sign

10、=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; -单张票价记录清零 number:=00; -购票张数记录清零 total_price:=00000000; -票价总额记录清零 total_insert:

11、=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)and(ticket_stop=1001)and(ticket_stop -选择3张票 tem

12、p_account:=00100;-表示3张票 number:=11; -购票张数为3 total_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

13、=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; -重新计算投币总额 when 0010=tot

14、al_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元硬币 when

15、 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) then change:=total

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

17、nge00000000) then change_gate=1; -找零口打开 change:=change-00000101;-计算剩余应找零金额 else change_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)系统进入找零状态:找零口打

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

20、金额。 (5)系统判断投入的总金额已经达到票价总额。(6)系统进入出票状态:系统准备好1元的票1张,出票口打开出票。(7)出票口关闭,系统回到初始状态。此段仿真主要验证了投入钱币购票且无找零的功能正常。系统全部恢复初始状态的时间在9.26us左右(如图)。至此,系统各项功能的测试全部完毕。六、 芯片模型七、 感想与体会本次设计基本实现了设计要求。但由于有事耽搁,没有及时验收,望老师谅解。在设计过程中,有两个细节值得一提:一是“钱币暂存杆”的设计。本人认为,当乘客投入钱币后,若其最终未购票,则此时的找零没有必要从退币口另行退出,而是应该直接将其投入的钱币退还,这是与工程实际相符的。故作此设计,类似于一挡板,通过几个不同的位置(状态)实现功能要求。二是找零全部采用5角的硬币。本人认为,若采用多种票额复合找零的方式,无疑会大大增大自动售票机的物理体积(尤其是纸币),这与当今小型化、微型化的理念和趋势是相悖的

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1