新闻中心

EEPW首页>EDA/PCB>设计应用> 基于VHDL +FPGA 的自动售货机控制模块的设计与实现

基于VHDL +FPGA 的自动售货机控制模块的设计与实现

作者: 时间:2012-08-21 来源:网络 收藏

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

LIBRARY IEEE; --库和程序包的使用说明

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY sellmachine IS --实体定义

PORT(clk,reset: IN std_logic;

state_inputs:IN std_logic_vector(0 TO 1);

comb_outputs:OUT std_logic_vector(0 TO 1));

END sellmachine;

ARCHITECTURE state OF sellmachine IS --结构体

TYPE fsm_st IS (S0,S1,S2,S3,S4); --状态枚举类型定义

SIGNAL current_state,next_state:fsm_st; --状态信号的定义

BEGIN

reg:PROCESS(reset,clk) --时序进程

BEGIN

IF reset='1' THEN current_state=S0; --异步复位

ELSIF rising_edge(clk) THEN

current_state=next_state; --状态转换

END IF;

END PROCESS;

corn:PROCESS(current_state,state_inputs) --组合进程

BEGIN

CASE current_state IS

WHEN S0=>comb_outputs=00; --现态S0

IF state_inputs=00 THEN next_state=S0; --输入不同,次态不同

ELSIF state_inputs=01 THEN next_state=S1;

ELSIF state_inputs=10 THEN next_state=S2;

END IF;

WHEN S1=>comb_outputs=00; --现态S1

IF state_inputs=00 THEN next_state=S1; --输入不同,次态不同

ELSIF state_inputs=01 THEN next_state=S2;

ELSIF state_inputs=10 THEN next_state=S3;

END IF;

WHEN S2=>comb_outputs=00; --现态S2

IF state_inputs=00 THEN next_state=S2; --输入不同,次态不同

ELSIF state_inputs=01 THEN next_state=S3;

ELSIF state_inputs=10 THEN next_state=S4;

END IF;

WHEN S3=>comb_outputs=10; --现态S3

IF state_inputs=00 THEN next_state=S0; --输入不同,次态不同

ELSIF state_inputs=01 THEN next_state=S1;

ELSIF state_inputs=10 THEN next_state=S2;

END IF;

WHEN S4=>comb_outputs=11; --现态S4

IF state_inputs=00 THEN next_state=S0; --输入不同,次态不同

ELSIF state_inputs=01 THEN next_state=S1;

ELSIF state_inputs=10 THEN next_state=S2;

END IF;

END CASE;

END PROCESS;

END state;



评论


相关推荐

技术专区

关闭