📄 系统的vhdl源程序.txt
字号:
1、控制器源程序ALARM-CONTROLLER:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
PACKAGE P_ALARM IS
SUBTYPE T_DIGITAL IS INTEGER RANGE 0 TO 9;
SUBTYPE T_SHORT IS INTEGER RANGE 0 TO 65535;
TYPE T_CLOCK_TIME IS ARRAY(5 DOWNTO 0)OF T_DIGITAL;
TYPE T_DISPLAY IS ARRAY (5 DOWNTO 0)OF T_DIGITAL;
END PACKAGE P_ALARM;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE WORK.P_ALARM.ALL;
ENTITY ALARM_CONTROLLER IS
PORT(KEY:IN STD_LOGIC;
ALARM_BUTTON:IN STD_LOGIC;
TIME_BUTTON:IN STD_LOGIC;
CLK:IN STD_LOGIC;
RESET:IN STD_LOGIC;
LOAD_NEW_A:OUT STD_LOGIC;
LOAD_NEW_C:OUT STD_LOGIC;
SHOW_NEW_TIME:OUT STD_LOGIC;
SHOW_A:OUT STD_LOGIC);
END ENTITY ALARM_CONTROLLER;
ARCHITECTURE ART OF ALARM_CONTROLLER IS
TYPE T_STATE IS(S0,S1,S2,S3,S4);
CONSTANT KEY_TIMEOUT:T_SHORT:=500;
CONSTANT SHOW_ALARM_TIMEOUT:T_SHORT:=500;
SIGNAL CURR_STATE:T_STATE;
SIGNAL NEXT_STATE:T_STATE;
SIGNAL COUNTER_K:T_SHORT;
SIGNAL ENABLE_COUNT_K:STD_LOGIC;
SIGNAL COUNT_K_END:STD_LOGIC;
SIGNAL COUNTER_A:T_SHORT;
SIGNAL ENABLE_COUNT_A:STD_LOGIC;
SIGNAL COUNT_A_END:STD_LOGIC;
BEGIN
PROCESS(CLK,RESET)IS
BEGIN
IF RESET='1'THEN
CURR_STATE<=S0;
ELSIF RISING_EDGE(CLK)THEN
CURR_STATE<=NEXT_STATE;
END IF;
END PROCESS;
PROCESS(KEY,ALARM_BUTTON,TIME_BUTTON,CURR_STATE,COUNT_A_END,COUNT_K_END)IS
BEGIN
NEXT_STATE<=CURR_STATE;
LOAD_NEW_A<='0';
LOAD_NEW_C<='0';
SHOW_A<='0';
SHOW_NEW_TIME<='0';
ENABLE_COUNT_K<='0';
ENABLE_COUNT_A<='0';
CASE CURR_STATE IS
WHEN S0=>
IF(KEY='1')THEN
NEXT_STATE<=S1;
SHOW_NEW_TIME<='1';
ELSIF(ALARM_BUTTON='1')THEN
NEXT_STATE<=S4;
SHOW_A<='1';
ELSE
NEXT_STATE<=S0;
END IF;
WHEN S1=>
IF(KEY='1')THEN
NEXT_STATE<=S1;
ELSIF(ALARM_BUTTON='1')THEN
NEXT_STATE<=S2;
LOAD_NEW_A<='1';
ELSIF(TIME_BUTTON='1')THEN
NEXT_STATE<=S3;
LOAD_NEW_C<='1';
ELSE
IF(COUNT_K_END='1')THEN
NEXT_STATE<=S0;
ELSE
NEXT_STATE<=S1;
END IF;
ENABLE_COUNT_K<='1';
END IF;
SHOW_NEW_TIME<='1';
WHEN S2=>
IF(ALARM_BUTTON='1')THEN
NEXT_STATE<=S2;
LOAD_NEW_A<='1';
ELSE
NEXT_STATE<=S0;
END IF;
WHEN S3=>
IF(TIME_BUTTON='1')THEN
NEXT_STATE<=S3;
LOAD_NEW_C<='1';
ELSE
NEXT_STATE<=S0;
END IF;
WHEN S4=>
IF(KEY='1')THEN
NEXT_STATE<=S1;
ELSE
NEXT_STATE<=S4;
IF(COUNT_A_END='1')THEN
NEXT_STATE<=S0;
ELSE
NEXT_STATE<=S4;
SHOW_A<='1';
END IF;
ENABLE_COUNT_A<='1';
END IF;
WHEN OTHERS=>
NULL;
END CASE;
END PROCESS;
COUNT_KEY: PROCESS(ENABLE_COUNT_K,CLK)IS
BEGIN
IF(ENABLE_COUNT_K='0')THEN
COUNTER_K<=0;
COUNT_K_END<='0';
ELSIF(RISING_EDGE(CLK))THEN
IF(COUNTER_K>=KEY_TIMEOUT)THEN
COUNT_K_END<='1';
ELSE
COUNTER_K<=COUNTER_K+1;
END IF;
END IF;
END PROCESS COUNT_KEY;
COUNT_ALARM:PROCESS(ENABLE_COUNT_A,CLK)IS
BEGIN
IF(ENABLE_COUNT_A='0')THEN
COUNTER_A<=0;
COUNT_A_END<='0';
ELSIF RISING_EDGE(CLK)THEN
IF(COUNTER_A>=SHOW_ALARM_TIMEOUT)THEN
COUNT_A_END<='1';
ELSE
COUNTER_A<=COUNTER_A+1;
END IF;
END IF;
END PROCESS COUNT_ALARM;
END ARCHITECTURE ART;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -