|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
自动售货机控制系统VHDL有限状态机实现
, K: e0 {+ O2 K5 E$ q# @6 y
/ W1 N' l2 h( Q! G' M# g
/ k$ V; J H9 I. p( q# N$ W1 引言4 K, ?. g2 b- L4 I
有限状态机FSM(Finite State Machine)及其设计技术是实用数字系统设计中实现高效率、高可靠逻辑控制的重要途径。传统的状态机设计方法需进行繁琐的状态分配、绘制状态表、化简次态方程等,而利用VHDL可以避免这些繁琐的过程,直接利用状态转换图进行状态机的描述,所有的状态均可表达为CASE_WHEN结构中的一条CASE语句,而状态的转移则通过IF_THEN_ELsE语句实现。此外,与VHDL的其它描述方式相比,状态机的VHDL表述丰富多样,程序层次分明,结构清晰,易读易懂;在排错、修改和模块移植方面也有其独到的特点。 i. Z0 C* t9 |9 A& D* X5 ]$ {
: _) N' `. _3 B
2 自动售货机控制系统的实现( [$ U* J5 W1 T- k. W" C, m
2.1 自动售货机功能描述及控制系统组成; P8 [3 e, L2 q8 K# G$ Z' S6 F
设计一个自动售货机的逻辑控制电路。它有两个投币口分别为一元投币口和五角投币口,假设每次只能投入一枚一元或五角硬币,投入一元五角硬币后机器自动给出一瓶矿泉水,投入两元硬币后,在给出一瓶矿泉水的同时找回一枚五角的硬币。图1为自动售货机控制系统方框图,由投币信号处理模块和功能控制模块组成。
, k0 @# z; l: S6 |8 v
. j" Z! T7 ~6 `& s; ]2.2 自动售货机控制功能的状态描述
7 q2 l G& N$ V, ~5 T1 N! C0 g 取投币信号为输入逻辑变量,投入一枚一元硬币时用A=1表示,未投入时A=0。投入一枚五角硬币用B=1表示,未投入时B=0。给出矿泉水和找钱为两个输出变量,分别用Z和Y表示,给出矿泉水时Z=1,不给时Z=0,找回一枚五角硬币时Y=1,不找时Y=0。
+ K! g5 f& L5 Q; g% ]! P 根据上面的功能描述,可用三个状态S0,S1,S2表示,未投币前的初始状态为S0,投入五角硬币以后为S1,投入一元硬币后(包括投入一枚一元硬币和投入两枚五角硬币的情况)为S2,再投入一枚五角硬币后电路返回S0,同时输出为Z=1,Y=0;如果投入的是一枚一元硬币,则电路也应能返回S0,同时输出为Z=1,Y=1。根据上面的分析可得到状态转换图如图2所示。
1 {0 M' n- x1 O* n9 V% v& L
" Y( L' [! l* r. R- z* _* Q* m2.3 自动售货机功能控制模块的VHDL实现" H6 L" Q% f, ~2 {
根据图2所示的状态转换图,用VHDL语言中的CASE_WHEN结构和IF_THEN_ELSE语句实现控制功能,源程序如下:
' I* F2 z9 }) HLIBRARY IEEE;
# h$ T6 q, j7 u0 `7 H0 ^" EUSE IEEE.STD_LOGIC_1164.ALL;, I- \+ s- F! N
ENTITY shj_ctrl IS$ g9 s1 r2 \" J: a; A; C
PORT(A,B:IN STD_LOGIC;
# C4 O& W! S1 M* Lclk:IN STD_LOGIC;
4 V3 W0 O G# T! l$ ] a0 Z' GZ,Y:OUT STD_LOGIC);' X* }* Y$ r5 I8 P! c
END shj_ctrl
- K- b5 n" S- B. ?9 r9 C7 i4 OARCHITECTURE beha OF shi_ctrl IS
6 E8 Q4 N2 `: h: ]TYPE states IS(S0,S1,S2);$ h! ?2 ^. f) p7 m h3 d/ K
SIGNAL state:states;0 j& b4 P9 x5 r6 N+ t7 Y3 d: L
SIGNAL X:STD_LOGIC_VECTOR(1 DOWNTO 0);' A$ @0 L; b- e1 e9 \+ q
BEGIN' J- m U( d" T; `( X3 d
X<=A&B;1 k8 w/ r9 K( I/ C
PROCESS(x,state)* i6 r! z1 |7 ~3 R& Y* W* {1 m* x7 o/ ]
BEGIN
1 u, k, K: B& n- _1 d9 Z. KIF rising_EDGE(clk) THEN
/ w5 h& n: D, a/ A9 i7 {1 vCASE state IS
8 C" s& M R9 l$ KWHEN S0=>Z<='0';Y<='0';
8 z! L- \" E* R7 K$ b9 R- KIF(X="01")THEN- U/ o) u+ f" U' {
state<=s1;
' j; K( P3 X. oELSIF(X="10")THEN
3 ?2 v# G. L- u1 D; z4 D! ]state<=s2;7 T8 b0 x! W3 X" S$ j, o6 ]4 a/ u
ELSE
, {; v; |1 a) F/ Q U9 T5 [, Estate<=s0;
9 w" Q, y2 j* A$ \2 R$ F JEND IF;4 O7 H* ^* X8 L% Y
WHEN S1=>Z<='0';Y<='0';
' c! j' R) b; v; z2 m$ m. [IF(X="01")THEN0 x# g D6 X! m" N3 J% `4 m
state<=s2;
% x' q& j4 A4 ^0 t- J5 NELSIF(X="10")THEN7 r0 P6 P- N$ Z: ^
state<=S0;
# E# W' { }5 \+ y& `Z<='1';Y<='0';
' a1 K7 D& g- m0 t! }' UELSE
D* `# \$ B5 _' b( {& W: ?state<=s1;
1 @ l. y) g. `. |4 B: I. P2 ?4 ?0 g2 |END IF;
( M, s- j6 {/ v& U! M& G* YWHEN S2=>Z<='0';Y<='0';) p: Y5 I! ]: ^7 }, `* P
IF(X="01")THEN: b" e. S( T# m( y. M
state<=S0;
. S" K9 U* i! `7 ]Z<='1';Y<='0';& s5 i- M9 @+ O3 D3 i0 s, T8 z" T( \
ELSIF(X="10")THEN
; ]2 n/ Y5 L1 ustate<=s0;) ]' [2 t4 Z. K0 q
Z<='1';Y<='1';/ Y8 a- T3 H8 @5 b
ELSE" V2 V+ B ~% q: S+ R' \
state<=s2;
* q0 a3 P$ M8 F6 {$ ^END IF;
s4 q1 E* l$ g% e$ e; G. B: I- cEND CASE; J9 s" `$ \. B8 W6 W: [
END IF;
" |: b' s# r t4 | R; @END PROCESS;4 B4 @ k& j# o9 V& j$ J5 `1 c
END beha;
! V1 [- ~& V4 [: n$ A7 O 上面程序中,A、B分别为一元硬币和五角硬币驱动信号,Z为矿泉水输出信号,Y为找钱输出信号。通过对程序分析和仿真可以看出,A和B的驱动信号的持续时间必须控制在clk时钟周期内,如果驱动信号时间太短,系统检测不到投币信号,时间太长,会误认为是两次或多次投币,造成误操作。因此,要使整个控制系统可靠运行,还必须设计专门投币输入信号处理电路。
- n& S- X4 i. \$ `2 X
2 }7 U( H; j' F0 k0 J/ O
2.4 投币输入信号电路的设计与实现' w: \7 a, N$ T5 o. K" K
自动售货机的所有信号均由同步时钟信号clk的正边沿触发。由于售货机的硬币接受器一般是一个机械设置装置,投币时产生的信号要比同步信号clk要慢得多,一般可持续好几个周期,必须对投币输入信号进行处理,使每一次投币时在clk脉冲周期内只能产生一个脉冲作为功能控制模块的投币驱动信号。基于上面的功能要求,设计了如图3所示的投币输入信号的处理电路,其中IN_yuan和IN_jiao作为一元硬币和五角硬币的投币输入信号,A和B为相应的输出信号,作为功能控制模块的输入信号,而且A、B输出是在投币输入信号IN_yuan和IN_jiao为高电平1之后的一个周期内被设置为1。经过仿真结果如图4所示,实现了每次投币后在一个clk周期内只产生一个可靠的脉冲驱动信号。
( y# {' k6 M, E8 w. {' d, U5 @
' A, Q9 C# ?. q. _6 C
' b9 _1 a/ X# g+ v6 g% g3 自动售货机控制系统功能仿真3 W7 D( Y* I' L3 H- \2 h" p/ h: t
自动售货机控制系统模块之间连接如图5所示,其中“shuru”为投币输入信号处理模块,其输出信号作为功能控制模块“SHJ_CTRL”的输入驱动信号,OUT为自动售货机的矿泉水输出信号,ZHAOQIAN为找钱输出信号。整个控制系统通过MAX+PLUSII软件进行编译和仿真,仿真结果如图6所示,符合电路设计要求。并把程序下载到芯片MAXEPM7128SLC84-15进行验证与实际相符。
% ~# H5 d! X; H) P1 x; q8 a
! _6 S2 T3 a: e5 P% |8 L3 V* c* `; d" H* x, v% p; s9 a
4 结束语
# E/ M5 _. H; h8 Y4 s VHDL语言有限状态机设计控制电路,可大大降低设计难度和时间,提高设计效率和可靠性,利用语言的灵活性及功能强大的EDA工具,可以轻松完成硬件的功能扩充与升级,还可以实现更复杂的数字系统,整个设计过程相对于传统的设计方法,有较大的突破。VHDL语言作为现代数字系统的重要设计工具,以其灵活、简洁的设计风格在电路设计中发挥着越来越重要的作用。
, M/ J6 q1 ~9 S' ~ |
|