📄 state_machine.vhd
字号:
--
--简单的状态机,有8个状态,数码管输出当前状态的编号
-- state0--state1--state2--state3--state4--state5--state6-state7--state0
--
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY state_machine IS
PORT (
clk : IN std_logic;
rst : IN std_logic;
c : OUT std_logic_vector(7 DOWNTO 0);
en : OUT std_logic_vector(7 DOWNTO 0));
END state_machine;
ARCHITECTURE arch OF state_machine IS
CONSTANT state0 : std_logic_vector(2 DOWNTO 0) := "000";
CONSTANT state1 : std_logic_vector(2 DOWNTO 0) := "001";
CONSTANT state2 : std_logic_vector(2 DOWNTO 0) := "010";
CONSTANT state3 : std_logic_vector(2 DOWNTO 0) := "011";
CONSTANT state4 : std_logic_vector(2 DOWNTO 0) := "100";
CONSTANT state5 : std_logic_vector(2 DOWNTO 0) := "101";
CONSTANT state6 : std_logic_vector(2 DOWNTO 0) := "110";
CONSTANT state7 : std_logic_vector(2 DOWNTO 0) := "111";
SIGNAL state : std_logic_vector(2 DOWNTO 0);
SIGNAL cnt : std_logic_vector(23 DOWNTO 0);
BEGIN
en <= "11111110" ;
PROCESS(clk,rst)
BEGIN
IF (NOT rst = '1') THEN
state <= state0;
cnt <= "000000000000000000000000";
ELSIF(clk'EVENT AND clk='1')THEN
cnt <= cnt + "000000000000000000000001";
IF (cnt = "111111111111111111111111") THEN
CASE state IS
WHEN state0 =>
state <= state1;
WHEN state1 =>
state <= state2;
WHEN state2 =>
state <= state3;
WHEN state3 =>
state <= state4;
WHEN state4 =>
state <= state5;
WHEN state5 =>
state <= state6;
WHEN state6 =>
state <= state7;
WHEN state7 =>
state <= state0;
WHEN OTHERS =>
NULL;
END CASE;
END IF;
END IF;
END PROCESS;
PROCESS(state)
BEGIN
CASE state IS
WHEN state0 =>
c <= "00000011";
WHEN state1 =>
c <= "10011111";
WHEN state2 =>
c <= "00100101";
WHEN state3 =>
c <= "00001101";
WHEN state4 =>
c <= "10011001";
WHEN state5 =>
c <= "01001001";
WHEN state6 =>
c <= "01000001";
WHEN state7 =>
c <= "00011111";
WHEN OTHERS =>
NULL;
END CASE;
END PROCESS;
END arch;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -