语音信箱控制系统
PACKAGE VM_PACK IS
TYPE T_VM_STATE
IS(MAIN_ST,REVIEW_ST,REPEAT_ST,SAVE_ST,ERASE_ST,SEND_ST,ADDR
ESS_ST,RECORD_ST,BEGIN_REC_ST,MESSAGE_ST);
TYPE T_KEY IS('1','2','3','4','5','6','7','8','9','*','#');
END PACKAGE VM_PACK;
LIBRARY WORK;
USE WORK.VM_PACK.ALL;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY CONTROL IS
PORT(CLK:IN STD_LOGIC;
KEY:IN T_KEY;
PLAY,RECORDS,ERASE,SAVE,ADDRESS:OUT STD_LOGIC); END ENTITY CONTROL;
ARCHITECTURE ART OF CONTROL IS
SIGNAL NEXT_STATE,CURRENT_STATE:T_VM_STATE;
BEGIN
PROCESS(CURRENT_STATE,KEY)IS
BEGIN PLAY<='0';SAVE<='0';ERASE<='0';
RECORDS<='0';ADDRESS<='0';
CASE CURRENT_STATE IS
WHEN MAIN_ST=>
IF(KEY ='1')THEN NEXT_STATE<=REVIEW_ST;
ELSIF(KEY='2')THEN NEXT_STATE<=SEND_ST;
ELSE NEXT_STATE<=MAIN_ST;
END IF;
WHEN REVIEW_ST=>
IF (KEY='1') THEN NEXT_STATE<=REPEAT_ST;
ELSIF(KEY ='2') THEN NEXT_STATE<=SAVE_ST;
ELSIF(KEY ='3') THEN NEXT_STATE<=ERASE_ST;
ELSIF(KEY ='#') THEN NEXT_STATE<=MAIN_ST;
ELSE NEXT_STATE<=REVIEW_ST;
END IF;
WHEN REPEAT_ST=>
PLAY<='1';
NEXT_STATE<=REVIEW_ST;
WHEN SAVE_ST=>
SAVE<='1';
NEXT_STATE<=REVIEW_ST;
WHEN ERASE_ST=>
ERASE<='1';
NEXT_STATE<=REVIEW_ST;
WHEN SEND_ST=>
NEXT_STATE<=ADDRESS_ST;
WHEN ADDRESS_ST=>
ADDRESS<='1';
IF(KEY ='#')THEN NEXT_STATE<=RECORD_ST;
ELSE
NEXT_STATE<=ADDRESS_ST;
END IF;
WHEN RECORD_ST=>
IF(KEY ='5')THEN NEXT_STATE<=BEGIN_REC_ST;
ELSE NEXT_STATE<=RECORD_ST;
END IF;
WHEN BEGIN_REC_ST=>
RECORDS<='1';
NEXT_STATE<=MESSAGE_ST; WHEN MESSAGE_ST=>
RECORDS<='1';
IF(KEY ='#')THEN NEXT_STATE<=SEND_ST;
ELSE NEXT_STATE<=MESSAGE_ST;
END IF;
END CASE;
END PROCESS;
PROCESS IS
BEGIN
WAIT UNTIL (CLK'EVENT AND CLK='1');
--PROCESS(CURRENT_STATE,KEY);
CURRENT_STATE<=NEXT_STATE;
END PROCESS;
END ARCHITECTURE ART;