b地铁自动售票系统VHDL.docx
- 文档编号:3229111
- 上传时间:2022-11-20
- 格式:DOCX
- 页数:18
- 大小:531.78KB
b地铁自动售票系统VHDL.docx
《b地铁自动售票系统VHDL.docx》由会员分享,可在线阅读,更多相关《b地铁自动售票系统VHDL.docx(18页珍藏版)》请在冰豆网上搜索。
b地铁自动售票系统VHDL
通信线路EDA课程项目
--关于VHDL语言模拟地铁售票控制系统设计
项目组负责人:
胡弘正通信0903(200985250321)
项目组成员:
刘上校通信0903(200985250317)
邹娟通信0901(200985250103)
完成日期:
遥遥无期
一、设计要求:
功能描述:
用于模仿地铁售票的自动售票,完成地铁售票的核心控制功能。
功能要求:
售票机有两个进币孔,一个是输入硬币,一个是输入纸币,硬币的识别范围是5
角和1元的硬币,纸币的识别范围是1元、2元,5元,10元。
乘客可以连续多次投入钱币。
乘客可以选择的种类为2元和4元,乘客一次只能选择一个出站口。
购买车票时,乘客先选
择出站名,然后选择所需的票数,再进行投币,投入的钱币达到所需金额时,售票机自动出
票,并找出余额,本次交易结束,等待下一次的交易。
在投币期间,乘客可以按取消键取消
本次操作,钱币自动退出。
功能描述:
用于模仿地铁售票的自动售票,完成地铁售票的核心控制功能。
功能要求:
售票机有两个进币孔,一个是输入硬币,一个是输入纸币,硬币的识别范围是5
角和1元的硬币,纸币的识别范围是1元、2元,5元,10元。
乘客可以连续多次投入钱币。
乘客可以选择的种类为2元和4元,乘客一次只能选择一个出站口。
购买车票时,乘客先选
择出站名,然后选择所需的票数,再进行投币,投入的钱币达到所需金额时,售票机自动出
票,并找出余额,本次交易结束,等待下一次的交易。
在投币期间,乘客可以按取消键取消
本次操作,钱币自动退出。
二.课题分析
1.买车票时,乘客按“开始选择”按钮,接着选择出站口接着选择购票数量(根据提示,一次购票数限制在3张以内);然后按“开始投币”按钮,投入钱币;当投入的钱币达到所需金额时,售票机自动出票,并找出余额。
考虑到控制整个售票机的物理体积,余额将全部采用5角硬币的形式找出。
2.选择出站口或投币过程中,乘客都可以按“取消”按钮取消该次交易。
选择出站口的过程中,若按“取消”,则售票机直接回到初始状态;投币过程中,若按“取消”,则售票机将乘客已经投入的钱币全部退出,再回到初始状态。
3.客一次只能选择一个出站口,根据乘坐的站数确定票价。
假设乘客购票所在站到终点站共有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个状态:
退币状态、等待状态、进币状态,分别用00、01、10表示。
退币状态下,“暂存杆”将乘客投入的钱币推出;等待状态下,投入的钱币被“暂存杆”挡住暂存;进币状态下,“暂存杆”将乘客投入的钱币推入售票机内部。
三、系统流程图:
四.系统状态图
五、程序源代码及注释
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitysubwayis
port(
clk:
instd_logic;--系统时钟
select_start:
instd_logic;--“开始选择”按钮
insert_start:
instd_logic;--“开始投币”按钮
coin:
instd_logic_vector(1downto0);--硬币入口
note:
instd_logic_vector(3downto0);--纸币入口
cancel:
instd_logic;--“取消”按钮
ticket_stop:
instd_logic_vector(3downto0);--出站口编号
ticket_account:
instd_logic_vector(1downto0);--购票张数
money_gate:
outstd_logic_vector(1downto0);--钱币“暂存杆”
ticket_out:
outstd_logic_vector(4downto0);--购买的车票
ticket_gate:
outstd_logic;--出票口
change_gate:
outstd_logic--找零口
);
endsubway;
architecturebehaveofsubwayis
typestate_typeis(initialize_state,select_state,insert_state,ticket_state,change_state);
--状态变量申明
signalstate:
state_type;--状态信号申明
begin
process(clk)
variabletype_temp:
std_logic;--记录是否已选择出站口的变量
variableaccount_temp:
std_logic;--记录是否已选择购票张数的变量
variabletemp_type:
std_logic_vector(4downto0);--记录票种的中间变量
variabletemp_account:
std_logic_vector(4downto0);--记录票数的中间变量
variableprice:
std_logic_vector(7downto0);--记录单张票价的变量
variablenumber:
std_logic_vector(1downto0);--记录票数的变量
variabletotal_price:
std_logic_vector(7downto0);--记录总票价的变量
variabletotal_insert:
std_logic_vector(7downto0);--记录投入钱币总额的变量
variablechange:
std_logic_vector(7downto0);--记录应找零金额的变量
variablesign:
std_logic;--记录系统是否已经过初始化的变量
variabletemp:
std_logic;--记录投入钱币金额达到总票价的变量
begin
if(clk'eventandclk='1')then--时钟信号上升沿触发
casestateis
wheninitialize_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";--单张票价记录清零
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<=select_state;--系统进入选择状态
endif;
endif;
whenselect_state=>--选择状态
if(type_temp='0')then--表示尚未选择出站口
if((ticket_stop>="0001")and(ticket_stop<="1000"))then
--乘坐站数不超过8站
--由于整个系统中涉及的最小金额为5角,为表示方便,有关金额的量统一以“角”为单位--即5角为“5”,1元为“10”,2元为“20”,5元为“50”,10元为“100”
price:
="00010100";--票价为2元
--用5位逻辑矢量表示票种和数量
--其中前2位表示票种:
10000表示4元票,01000表示2元票
--后3位表示数量:
10000表示3张,01000表示2张,00100表示1张
--二者相加即可同时表示购买的票种和张数信息
temp_type:
="01000";--表示2元票
type_temp:
='1';--记录已选择出站口
elsif((ticket_stop>="1001")and(ticket_stop<="1111"))then
--乘坐站数超过8站
price:
="00101000";--票价为4元
temp_type:
="10000";--表示4元票
type_temp:
='1';--记录已选择出站口
endif;
endif;
if((account_temp='0')and(type_temp='1'))then
--表示已选择出站口但尚未选择购票张数
caseticket_accountis
when"11"=>--选择3张票
temp_account:
="00100";--表示3张票
number:
="11";--购票张数为3
total_price:
=price+price+pr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 地铁 自动 售票 系统 VHDL