基于VHDL的自动贩卖机控制系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

一、概述 (1)

二、自动售货机控制系统的实现 (2)

1、自动售货机功能描述及控制系统组成 (2)

2、自动售货机控制功能的状态描述 (2)

3、自动售货机功能控制模块的VHDL实现 (3)

4、投币输入信号电路的设计与实现 (4)

5、自动售货机控制系统功能仿真 (5)

三、结束语 (6)

四、参考文献 (7)

基于VHDL的自动贩卖机控制系统

一、概述

有限状态机FSM(Finite State Machine)及其设计技术是实用数字系统设计中实现高效率、高可靠逻辑控制的重要途径。传统的状态机设计方法需进行繁琐的状态分配、绘制状态表、化简次态方程等,而利用VHDL可以避免这些繁琐的过程,直接利用状态转换图进行状态机的描述,所有的状态均可表达为CASE_WHEN结构中的一条CASE语句,而状态的转移则通过IF_THEN_ELsE语句实现。此外,与VHDL的其它描述方式相比,状态机的VHDL表述丰富多样,程序层次分明,结构清晰,易读易懂;在排错、修改和模块移植方面也有其独到的特点。

二、自动售货机控制系统的实现

1、自动售货机功能描述及控制系统组成

设计一个自动售货机的逻辑控制电路。它有两个投币口分别为一元投币口和五角投币口,假设每次只能投入一枚一元或五角硬币,投入一元五角硬币后机器自动给出一瓶饮料,投入两元硬币后,在给出一瓶饮料的同时找回一枚五角的硬币。图1为自动售货机控制系统方框图,由投币信号处理模块和功能控制模块组成。

投币

找钱

信号出货

图1 自动售货机控制系统

2、自动售货机控制功能的状态描述

取投币信号为输入逻辑变量,投入一枚一元硬币时用A=1表示,未投入时A=0。投入一枚五角硬币用B=1表示,未投入时B=0。给出饮料和找钱为两个输出变量,分别用Z和Y 表示,给出饮料时Z=1,不给时Z=0,找回一枚五角硬币时Y=1,不找时Y=0。

根据上面的功能描述,可用三个状态S0,S1,S2表示,未投币前的初始状态为S0,投入五角硬币以后为S1,投入一元硬币后(包括投入一枚一元硬币和投入两枚五角硬币的情况)为S2,再投入一枚五角硬币后电路返回S0,同时输出为Z=1,Y=0;如果投入的是一枚一元硬币,则电路也应能返回S0,同时输出为Z=1,Y=1。根据上面的分析可得到状态转换

图如图2所示。

图2 自动售货机系统状态转换图

3、自动售货机功能控制模块的VHDL实现

根据图2所示的状态转换图,用VHDL语言中的CASE_WHEN结构和IF_THEN_ELSE语句实现控制功能,源程序如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY ZIDONG IS

PORT(A,B:IN STD_LOGIC;

clk:IN STD_LOGIC;

Z,Y:OUT STD_LOGIC);

END ZIDONG;

ARCHITECTURE beha OF ZIDONG IS

TYPE states IS(S0,S1,S2);

SIGNAL state:states;

SIGNAL X:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN

X<=A&B;

PROCESS(x,state)

BEGIN

IF rising_edge(clk) THEN

CASE state IS

WHEN S0=>Z<='0';Y<='0';

IF(X="01")THEN

state<=s1;

ELSIF(X="10")THEN

state<=s2;

ELSE

state<=s0; END IF;

WHEN S1=>Z<='0';Y<='0'; IF(X="01")THEN

state<=s2;

ELSIF(X="10")THEN

state<=S0;

Z<='1';Y<='0';

ELSE

state<=s1;

END IF;

WHEN S2=>Z<='0';Y<='0'; IF(X="01")THEN

state<=S0;

Z<='1';Y<='0';

ELSIF(X="10")THEN

state<=s0;

Z<='1';Y<='1';

ELSE

state<=s2;

END IF;

END CASE;

END IF;

END PROCESS;

END beha;

图3 利用MAX+PLUSII软件及VHDL语言编写控制芯片

4、投币输入信号电路的设计与实现

A、B分别为一元硬币和五角硬币驱动信号,Z为饮料输出信号,Y为找钱输出信号。通过对程序分析和仿真可以看出,A和B的驱动信号的持续时间必须控制在clk时钟周期内,如果驱动信号时间太短,系统检测不到投币信号,时间太长,会误认为是两次或多次投币,造成误操作。因此,要使整个控制系统可靠运行,还必须设计专门投币输入信号处理电路。

自动售货机的所有信号均由同步时钟信号clk的正边沿触发。由于售货机的硬币接受器一般是一个机械设置装置,投币时产生的信号要比同步信号clk要慢得多,一般可持续好几个周期,必须对投币输入信号进行处理,使每一次投币时在clk脉冲周期内只能产生一个脉冲作为功能控制模块的投币驱动信号。基于上面的功能要求,设计了如图4所示的投币输入信号的处理电路,其中yiyuan和wujiao作为一元硬币和五角硬币的投币输入信号,A和B 为相应的输出信号,作为功能控制模块的输入信号,而且A、B输出是在投币输入信号yiyuan 和wujiao为高电平1之后的一个周期内被设置为1。经过仿真结果如图6所示,实现了每次投币后在一个clk周期内只产生一个可靠的脉冲驱动信号。

相关文档
最新文档