集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 3560|回复: 5

自动售货机控制系统VHDL有限状态机实现

[复制链接]
weibode01 发表于 2010-11-9 11:50:39 | 显示全部楼层 |阅读模式
本帖最后由 fpgaw 于 2010-11-18 15:58 编辑

自动售货机控制系统VHDL有限状态机实现  

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

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

2.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 shj_ctrl IS
PORT(A,B:IN STD_LOGIC;
clk:IN STD_LOGIC;
Z,Y:OUT STD_LOGIC);
END shj_ctrl
ARCHITECTURE beha OF shi_ctrl 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;
    上面程序中,A、B分别为一元硬币和五角硬币驱动信号,Z为矿泉水输出信号,Y为找钱输出信号。通过对程序分析和仿真可以看出,A和B的驱动信号的持续时间必须控制在clk时钟周期内,如果驱动信号时间太短,系统检测不到投币信号,时间太长,会误认为是两次或多次投币,造成误操作。因此,要使整个控制系统可靠运行,还必须设计专门投币输入信号处理电路。

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


3 自动售货机控制系统功能仿真
    自动售货机控制系统模块之间连接如图5所示,其中“shuru”为投币输入信号处理模块,其输出信号作为功能控制模块“SHJ_CTRL”的输入驱动信号,OUT为自动售货机的矿泉水输出信号,ZHAOQIAN为找钱输出信号。整个控制系统通过MAX+PLUSII软件进行编译和仿真,仿真结果如图6所示,符合电路设计要求。并把程序下载到芯片MAXEPM7128SLC84-15进行验证与实际相符。


4 结束语
    VHDL语言有限状态机设计控制电路,可大大降低设计难度和时间,提高设计效率和可靠性,利用语言的灵活性及功能强大的EDA工具,可以轻松完成硬件的功能扩充与升级,还可以实现更复杂的数字系统,整个设计过程相对于传统的设计方法,有较大的突破。VHDL语言作为现代数字系统的重要设计工具,以其灵活、简洁的设计风格在电路设计中发挥着越来越重要的作用。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
jiayuanhewen 发表于 2010-11-10 10:21:08 | 显示全部楼层
你好,我是一名即将毕业的应用电子毕业专业的毕业生,我现在正在做的论文题目是基于fpga的自动售货机主控制系统的设计与实现,我现在非常缺少这方面的资料,你能帮我推荐这方面的说吗?谢谢你了!
 楼主| weibode01 发表于 2010-11-10 10:44:20 | 显示全部楼层
那么巧啊,上述材料是在61EDA网里找到的,关于自动售贷机的课题我想只能从上面的文章中看有什么别的扩展咯
jiayuanhewen 发表于 2010-11-11 17:07:04 | 显示全部楼层
哦,我知道了谢谢你啊,那您能推荐有关于这方面的书吗?我一直在找<<基于fpga的自动售货机主控制系统的设计与实现>>您知道在哪能买到这本书吗?非常感谢!
 楼主| weibode01 发表于 2010-11-12 07:55:07 | 显示全部楼层
书我也没懂是哪本有关于这个题目的,这个系统我觉得是不是应该按照你的想法,然后自己一步步写,调试,最后做成成品啊
mikechang 发表于 2011-1-13 20:21:05 | 显示全部楼层
楼主关于这个话题的见解真是很精辟,相信是在本领域里的高手吧,应该是研发部的资深专家了。eepeople网站上有适合您的职位,比如产品市场推广工程师PME、财务经理、电机设计工程师等等,来自世界知名电子企业,大家可以去看看。
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-29 01:36 , Processed in 0.062826 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表