keysan.vhd

来自「这是一些经典的vhdl example」· VHDL 代码 · 共 38 行

VHD
38
字号
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY keysan IS
PORT(
		clk_scan	: IN	STD_LOGIC;                       --扫描时钟,周期10MS
		keydrv     	: OUT	STD_LOGIC_VECTOR(3 DOWNTO 0));   --输出扫描信号
END keysan;
ARCHITECTURE behavier OF keysan IS
	CONSTANT s0 : STD_LOGIC_VECTOR(3 DOWNTO 0) := "1110";	 --定义状态机编码
	CONSTANT s1 : STD_LOGIC_VECTOR(3 DOWNTO 0) := "1101";
	CONSTANT s2 : STD_LOGIC_VECTOR(3 DOWNTO 0) := "1011";
	CONSTANT s3 : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0111";
	SIGNAL   present_state : STD_LOGIC_VECTOR(3 DOWNTO 0);	 --状态机现态
	SIGNAL   next_state : STD_LOGIC_VECTOR(3 DOWNTO 0);      --状态极次态
BEGIN
	--状态更新进程
	PROCESS(clk_scan)                                        															
	BEGIN
		IF(clk_scan'event and clk_scan='1') THEN
			present_state <= next_state;
		END IF;
	END PROCESS;
    --状态译码
	PROCESS(present_state)
	BEGIN
		CASE present_state IS
			WHEN s0 => next_state<=s1;
			WHEN s1 => next_state<=s2;
			WHEN s2 => next_state<=s3;
			WHEN s3 => next_state<=s0;
			--多余态处理
			WHEN OTHERS => next_state<=s0;
		END CASE;
	END PROCESS;
	--输出译码
	keydrv <= present_state;
END behavier;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?