1、票,并找出余额,本次交易结束,等待下一次的交易。在投币期间,乘客可以按取消键取消本次操作,钱币自动退出。二 课题分析1 买车票时,乘客按“开始选择”按钮,接着选择出站口接着 选择购票数量(根据提示,一次购票数限制在3张以内);然后按“开始投币”按钮,投入钱币;当投入的钱币达到所需金额时,售票机自动出票,并找出余额。考虑到控制整个售票机的物理体积,余额将全部采用5角硬币的形式找出。2 选择出站口或投币过程中,乘客都可以按“取消”按钮取消该次交易。选择出站口的过程中,若按“取消”,则售票机直接回到初始状态;投币过程中,若按“取消”,则售票机将乘客已经投入的钱币全部退出,再回到初始状态。3 客一次只
2、能选择一个出站口,根据乘坐的站数确定票价。假设乘客购票所在站到终点站共有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个状态:退币状态、等待状态、进币状态,
3、分别用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 : -“开始选择”按钮 insert_start : -“开始投币”按钮 coin :in std_logic_ve
4、ctor(1 downto 0); -硬币入口 note :in std_logic_vector(3 downto 0); -纸币入口 cancel : -“取消”按钮 ticket_stop : -出站口编号 ticket_account : -购票张数 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 -找
5、零口);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 : -记录是否已选择购票张数的变量 variable temp_t
6、ype :std_logic_vector(4 downto 0); -记录票种的中间变量 variable temp_account : -记录票数的中间变量 variable price :std_logic_vector(7 downto 0); -记录单张票价的变量 variable number :std_logic_vector(1 downto 0); -记录票数的变量 variable total_price : -记录总票价的变量 variable total_insert :- 记录投入钱币总额的变量 variable change : -记录应找零金额的变量 variab
7、le sign : -记录系统是否已经过初始化的变量 variable temp : -记录投入钱币金额达到总票价的变量 begin if (clkevent and clk=1) then -时钟信号上升沿触发 case state is when initialize_state= -初始状态 if(sign=0) then -表示系统未经过初始化 money_gate=00; -钱币“暂存杆”退出钱币 ticket_out00000 -购票记录清零 ticket_gate= -出票口关闭 change_gate -找零口关闭 temp_type: -票种记录清零 temp_account
8、: -票数记录清零 type_temp: account_temp: price:00000000 -单张票价记录清零 number: -购票张数记录清零 total_price: -票价总额记录清零 total_insert: -投入钱币总额记录清零 change: -应找零金额记录清零 sign: -记录已完成系统初始化 temp: ; -投入达到总票价记录清零 else -表示系统已经过初始化 money_gate01 -钱币“暂存杆”归为等待状态 if (select_start=) then -按下“开始选择”按钮 sign: state -选择状态 if(type_temp=) then -表示尚未选择出站口 if(ticket_stop0001)and(ticket_stop10011111 -乘坐站数超过8站00101000 -票价为4元10000 -表示4元票 end if; if(account_temp=)and(type_temp=) then -表示已选择出站口但尚未选择购票张数 case ticket_account is when 11= -选择3张票 temp_account:00100-表示3张票 number: -购票张数为3 total_price:=price+price+pr
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1