简易地铁自动售票系统设计方案.docx
《简易地铁自动售票系统设计方案.docx》由会员分享,可在线阅读,更多相关《简易地铁自动售票系统设计方案.docx(45页珍藏版)》请在冰豆网上搜索。
简易地铁自动售票系统设计方案
简易地铁自动售票系统设计方案
设计制作一个简易地铁自动售票系统。
基本要求:
a)地铁票价统一为每两元,只能投入币值为五元的人民币进行购票。
b)能够开机自检,检验显示器件正常。
c)通过按键开关BTN俞入购票数和投入的人民币数并恰当显示相应信息。
d)设置适当的声音提示或显示提示表示取票和找零。
e)一次购票成功后系统能够恰当地转入下一次购票等待状态。
f)系统能够复位。
提高要求:
将投币种类增加为1元、5元和10元三种。
二、系统设计
2、设计思路
a)购买车票时,乘客按“开始购票”按钮开始购票;
接着,选择车票的种类,即单价,分2元、4元、6元;
选择购票数量,一次购票数限制在3以,选择1、2、3;
然后,进入投币阶段,投入钱币,投入的钱币设计为1元、5元、10元币种;
当投入的钱币达到所需金额时,系统进入出票以及找零状态,售票机自动出票,并自
动找出余额;
然后,再次点击“开始购票”进行另一次购票。
b)选择出站口或投币过程中,乘客都可以按“取消”按钮取消该次交易。
选择出站口的过程中,若按“取消”按钮,则售票机直接进入到找零状态;投币过程中,若按“取消”,则售票机将乘客已经投入的钱币全部退出,即进入找零状态,。
c)客人一次只能选择一个车票种类。
3种票类型用3位二进制向量编码表示,即001表示选择2元车票,010表示选择2元车票,100选择2元车票。
实验之前设计的是3种票类型用2位二进制码表示,因为考虑到仿真及下载到实验板模拟的方便,遂将之改为3位,使之每一个类型用一个按键控制。
d)票机的进币口可识别三种纸币,仿照c)中模式,拟用长度为3的二进制表示。
乘客
可以连续多次投入钱币,并且可以以任意顺序投入。
纸币最多可以投入27元。
e)用5位二进制数表示5个状态,分别是
状态
程序标示
代表状态
00001
Seistyle
等待选择票种状态
00010
Seiticket
等待选择购票数量状态
00100
Inputmoney
等待放入钱币状态
01000
Ticketout
出票状态
10000
Givechagne
找零状态
3、系统总体框图
图2
图5
MDS
状态|程序标示|代表状态
00001
00010
00100
01000
10000
图6
4、分模块设计
经过分析,本地铁自动售票系统的设计需要实现以下几项主要功能:
票种选择,票数选择,投币处理,出票及余额找零•
本系统可以采用模块化设计和有限状态机的设计方案来实现。
采用模块化设计方法即从整个系统的功能出发,将系统的整体逐步分解为若干个子系统和模块,然后用VHDL语言对各个模块进行编程,最后形成顶层文件,在QuartusU环境下进行
编译与仿真,检查所编程序是否运行正确。
如果出现错误,需要进行修改,直到完全通过为止。
采用模块化设计的优点在于:
对设计的描述从上到下逐步由粗略到详细,符合常规的逻辑思维习惯。
便于由多个设计者同时进行设计从而加速整个项目的开发进度;每个子模块都能够
灵活使用综合和实现工具独立进行优化,从而达到更好的优化结果;调试、更改某个子模块时,不会影响其他模块的实现结果,保证了整个设计的稳定性与可靠性。
有限状态机(FiniteStateMachine,简称FSM是指输出向量不仅依赖于当前输入向量,
也依赖于过去输入向量序列的电路.一个有限状态机电路由寄存器逻辑(时序逻辑)和组合逻辑组成•有限状态机是数字逻辑电路以及数字系统的重要组成部分,尤其应用于数字系统核心部
件的设计,以实现高效率高可靠性的逻辑控制。
一般有限状态机的VHD组成:
说明部分:
主要是设计者使用TYP语句定义新的数据类型,如:
TYPEstatesIS(stO,st1,st2,st3,st4,st5);
SIGNALpresent_state,next_state:
states;
主控时序逻辑部分:
任务是负责状态机运转和在外部时钟驱动下实现部状态转换的进程。
时序进程的实质
是一组触发器,因此,该进程中往往也包括一些清零或置位的输入控制信号,如Reset信号
主控组合逻辑部分:
任务是根据状态机外部输入的状态控制信号(包括来自外部的和状态机部的非进程的信号)和当前的状态值current_state来确定下一状态next_state的取值容,以及对外部或对部其他进程输出控制信号的容。
辅助逻辑部分:
辅助逻辑部分主要是用于配合状态机的主控组合逻辑和主控时序逻辑进行工作,以完善和提高系统的性能。
无论与基于VHD的其它设计方案相比,还是与可完成相似功能的CPU目比,状态机都有其难以逾越的优越性,它主要表现在以下几方面:
由于状态机的结构模式相对简单,设计方案相对固定,特别是可以定义符号化枚举类型的状态,这一切都为VHD综合器尽可能发挥其强大的优化功能提供了有利条件。
而且,性能良好的综合器都具备许多可控或不可控的专门用于优化状态机的功能。
状态机容易构成性能良好的同步时序逻辑模块,这对于对付大规模逻辑电路设计中令人深
感棘手的竞争冒险现象无疑是一个上佳的选择,加之综合器对状态机的特有的优化功能,使的状态机解决方案的优越性更为突出。
状态机的VHD设计程序层次分明,结构清晰,易读易懂,易排错和修改。
在高速运算和控制方面,状态机更有其巨大的优势。
由于在VHD中,一个状态机可以由多个进程构成,一个结构体中可以包含多个状态机,而一个单独的状态机(或多个并行运行的状态机)以顺序方式的所能完成的运算和控制方面的工作与一个CP类似。
就运行速度而言,状态机状态变换周期只有一个时钟周期,而且,由于在每一状态中,状态机可以完成许多并行的运算和控制操作,所以,一个完整的控制程序,即使由多个并行的状
态机构成,其状态数也是十分有限的。
因此有理由认为,由状态机构成的硬件系统比CPI所能
完成同样功能的软件系统的工作速度要高出两个数量级。
就可靠性而言,状态机的优势也是十分明显的。
首先是由于状态机的设计中能使用各种无懈可击的容错技术;其次是当状态机进入非法状态并从中跳出所耗的时间十分短暂,通常只有
2个时钟周期,约数十个ns,尚不足以对系统的运行构成损害.
应用VHDL设计状态机的具体步骤如下:
(1)根据系统要求确定状态数量、状态转移的条件和各状态输出信号的赋值,并画出状态转移图;
(2)按照状态转移图编写状态机的VHDL设计程序;
(3)利用EDA工具对状态机的功能进行仿真验证。
经过综合比较,决定采用状态机来实现本系统的设计,这样不仅思路很清楚而且可读性也非常强.利用状态机实现售票功能。
需要首先把整个系统的所有状态都给罗列出来,然后实现每个状态的容,最后再利用一些变量将各个状态连接起来,实现整个系统的基本功能•
Kinin模块是用来防抖的,由于按键动作的时刻和按下的时间长短是随机的。
并且存在由开关簧片反弹导致的电平抖动,抖动的时间一般小于20mS因此必须为每个按键开关设置一个消抖和同步电路,此电路可有多种形式。
按一次键,只产生一个脉冲,脉冲宽度为防抖动时钟的脉宽。
在投币的时候,由于要多次投币,多次按键,使之在按键的时候,每按一次,程序只会执行一次。
防抖动时钟的频率为100HZ左右,接下来得为其设置一个分频系数为500k的分频。
div_500k是系数为500k的分频,为的是把实验板50mHZ勺频率分为100Hz,使防抖电路正常工作。
div_2k是系数为2k的分频,为的是把实验板50mH的频率分为25000Hz,每个数码管工作频率到2000Hz左右。
三、仿真波形及波形分析
a).系统复位
系统复位,Restart='1';系统进入第一个状态state=00001,系统所有数据清零,Seistyle,等待选择票种状态,6个数码管显示000000;
b).选择车票种类
屯ijjh-iSOUkvhd
h
苦kayrLYhd
|卷SLh^Sj^ulotck^E«l5^kM.._|令Cdiripilabori
Simulation'Wavefcrms
ire:
U-5F
17G5hs
150u*
IrfETwF15&ui
A
Num
Jpa
3M..0
a:
-嗣»£
KO0ftg購豁比
I■
L上倨L92u2.21uz監善口
■FBI
17m
—
ME
g1.
Clk
rLrLnr-n_rLn_nnnrLmTrLrLirLr_TrLnnnrLruuuLr_mrLruLrLrLinrLr_fi
"足
ms切s
■叽
L
-stfri.ti]
叭
-StyleLo]
I
*1Tnun
UQ:
r.a
2泊
3・
r
laafty
doc
"14
1皿二TdzMpuHLLh
—1!
.
mState
H皿L~_
ijij.i:
i.i
<>IB
-5tata|L3)
a16
^Staie(2]
金19
JU
-statiLuJ
□ilL
tmflii
-scfcl
❾家
-setsJ
J
~L
-3«4j
J~
■SLF曲
-3t[3j
S~
-SGtZj
」
O曲
-34L1]
■厂
-stLol
1
r
T
选择车票种类,style=“100“代表买单价为6元的车票,系统进入第二个状态state=00010,
Seiticket,等待选择购票数量状态,6个数码管显示600000;
c).选择车票数量
图9
选择车票数量,Tnum=100“代表购票3,系统进入第三个状态state=00100,Inputmoney,
等待放入钱币状态,MoneyInputAlarm=‘1'代表钱币不足,6个数码管显示630000;
d).投入钱币
图10
投入钱币,Money=010”代表投入5元,钱币不足,系统依旧停留在第三个状态
state=00100,MoneyInputAlarm=‘1'代表钱币不足,6个数码管显示630500,等待放入钱
币;
e).第二次投入钱币
图11
第二次投入钱币,Money=100”代表投入10元,但钱币依旧不足(6*3=18>5+10=15),
判断CastmoneyvTotalmoney,系统依旧停留在第三个状态state=00100,
MoneyInputAlarm='1'代表钱币不足,6个数码管显示631500,等待放入钱币;
f).第三次投入钱币
图12
divA.vhd
響di/LUUk.vhd
]督keyir.vhd
:
'jb^jayAuhficketW日呵
ulationWaveforms.
TimeBor;
17.6Srt5
jJjjPointer;
5.35ut
InteFYol;
Kame
191f23
255“u
2E7就
3-35l-生甲"'
Clk
irLnruuuLnrLruwuUiWuiruinnnnruuuuwLrLnj
aStrlt
coo
X1
QOx
化
[+jI'num
uou'
□c
iui>X
1^10
[±_Money
000
-X
looydoo
r
100X
妙14
脸驻时丑叩试Alar
J
~1
1■111I9
胡IE
日|Si«t»
□n(im
3C
nmii:
XMice
SIo-Ie[4]
1II[1
-Stated」
1I!
l11II
-State[2]
1I[111II
-Stats[l]
r
H■d
i■■a
1■111IH
t>20
-£t*ts[■□]!
iao
ia■a
11[|11I«
-
丘]Muu.t
00
-Mout[1]
Iliailia
I
I1il
Illi
i■■ci
Ii111II1
-ImtEO]
ilia
I1U
1
111I1
1■111■
<>24
Tout
ii■h
I
1
Q2
liHiioJG
-SG[6]
i■■iI
■■HI
1■■ci
1■111■a
027
-SG15]
h
■Sii
1a■■
iiiiiii■
-SG[4]
fc>2s1
■SG[3]
i・・m
・ia
r・・tiiBan
■■nil・m
-SGC2]
£>31
-SG[1]
d龙〕
^SG[O]
1■
-r™
JI
r~
Iti-
一i
■
|e:
0of16
|LocMion;
第三次投入钱币,Money“010“代表投入5元,钱币足够(6*3=18<5+10+5=20),判断
Castmoney>Totalmoney,MoneylnputAlarm=‘0'代表钱币已足,系统进入第四个状态,state=01000,Ticketout,出票状态;
g).系统自动出票
系统自动出票,Tout='1'显示在3个周期代表出票3,系统进入第五个状态,state=10000,
Givechagne,找零状态。
h).系统自动找零
系统自动找零,Mout[0]='1'持续两个周期代表检测restmoney>1,依次找出21元的纸币,找零结束,6个数码管显示632032,State=”10000”代表状态停留在找零阶段。
i).再次购买
图13
觀di\^50Ck.vhd
■老kje^in.'vhd
卷SubwiayAutoTicketSelS
ilationWaveforms
MasteiTimeBa:
l7.6Srt£
Poirter:
491ut
Interval:
3.06ts3.3Bu*
H
3.Tus
a
4.02us
4.34u
4.86us
1
4.98us
电
1^0
ILaE-turt.
M1
Rpbny
iaiiia
hiai
IlliIII
(iiii
Clk
uuuLnnrLrLrLruLrLnrLnruLrjirLnnrLrLruLrLnmruum
ir3
■Style
1^4
-Slyle[2]
■U1I■u
卜P4
Il■u
1■U1I■u
卜•4«
Il■u
頁
-StyleCl]
iaihia
110
iinii■n
iin
MB
-Siyle[0]
|-|Tnun
-Tiiun[2]
Tuur11]
1II1H1»
1■II
iiiiill
i■a
Mio
LTnuft[0]
Hau
1■U1■■u
Hau
u^it
l-ilonty
iw■i(»'T
[>*1?
-M«ney[2]
ii
I
iiiii■a
i■a
-Mtnty[l]
aui■au
II■u
1IIu
II■u
」14
^Mloney[O]
■ii■iii
IIIII
11[11
1[1j11
iii■
315
1oneylriputa!
ajr
10
1■II
11II1IIII
砂1&
曰Stale
ooiocXoicwX
10000
JC
毋17
:
1
—
1&
-Siate[3]
-L>19
-State[2]
抄如
aaiiaa
hiai
IIIIIII
(iiii
-SlatsCO)
<1X22
r±iHoni
00yoiy.
*Lrr
►
41
-mfr『-II11
之后,Rebuy=‘1代表再次购票,进入第一个状态state=00001,系统数据清零,
Selstyle,等待选择票种状态,6个数码管显示000000;
j).取消操作
图14
在c),d),e)之后,如果想取消交易,cancelkey='1',系统进入找零状态,如,在d)之后取消,自动找零,Mout[1]=‘1‘代表检测到restmoney>5,找出一5元的纸币,找零结束,6个数码管显示630505;
k).
整个购票过程结束。
四、
源程序
1.主程序SubwayAutoTicketSellSystem.vhd
--FileName
:
SubwayAutoTicketSellSystem.vhd
--Description
:
Achievethefunctionofautoticketselling
--Limition
:
None
--System
:
Vhdl9.0
--Soft:
Quartus2-9.0
--Author
:
ChenDawen
--Revision
:
Version1.0,2012-10-31
libraryieee;
useieee.std_logic_1164.all;
useieee.std_
_logic_unsigned.all;
entitySubwayAutoTicketSellSystemis
port(
Restartinstd」ogic;--系统复位信号
Rebuy:
instd」ogic;--
开始购票操作
Clk:
instd_logic;--
系统时钟
Cancelkey:
instd_logic;--
取消操作键
Style:
instd」ogic_vector(2downto0);-
-车票种类
Tnum:
instd」ogic_vector(2downto0);
--所购票数
Money:
instd」ogic_vector(2downto0);
--投币口
MoneyInputAlarm:
outstd_logic;--
投币不足报警信号
Tout:
outstd_logic;--
Hj出票
Mout:
outstd」ogic_vector(1downto0);
--余额找出
State:
outstd_logic_vector(4downto0);--
系统状态指示
--beep:
outstd_logic;--
蜂鸣器信号
SG:
outstd」ogic_vector(6downto0);-
-段码
BT:
outstd」ogic_vector(5downto0)
--位码
);endSubwayAutoTicketSellSystem;
architecturebehaveofSubwayAutoTicketSellSystemis
componentdiv_2K
-引入div_2k分频模块
port(clk_in:
instd_logic;
clk_out:
outstd_logic);
endcomponent;
componentdiv_500K--引入div_500k分频模块
port(clk_in2:
instd」ogic;
clk_out2:
outstd_logic);
endcomponent;
componentkeyin--弓I入keyin防抖模块
port(clk_in1:
instd_logic;
reset:
instd_logic;
resetn:
outstd_logic);
endcomponent;
typeTTis(selstyle,selticket,inputmoney,ticketout,givechange);
--定义系统转换状态(等待选择票种状态,等待选择购票数量状态,等