⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keybcontrol.vhd

📁 DE1-FPGA-Board
💻 VHD
字号:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
--USE ieee.numeric_std.all;

ENTITY KeybControl IS 
	port
	(
	CLOCK18		: IN    STD_LOGIC;
	PS2_DAT 	: INOUT STD_LOGIC;
	PS2_CLK 	: INOUT STD_LOGIC;
	iRST_N		: IN    STD_LOGIC;
	O_COIN1		: OUT   STD_LOGIC := '0';
	O_1P_START	: OUT   STD_LOGIC := '0';
	O_1P_LE		: OUT   STD_LOGIC := '0';
	O_1P_RI		: OUT   STD_LOGIC := '0';
	O_1P_UP		: OUT   STD_LOGIC := '0';
	O_1P_DN		: OUT   STD_LOGIC := '0';
	O_COIN2		: OUT   STD_LOGIC := '0';
	O_2P_START	: OUT   STD_LOGIC := '0';
	O_2P_LE		: OUT   STD_LOGIC := '0';
	O_2P_RI		: OUT   STD_LOGIC := '0';
	O_2P_UP		: OUT   STD_LOGIC := '0';
	O_2P_DN		: OUT   STD_LOGIC := '0'
	);
END KeybControl;

ARCHITECTURE Keyb_Control OF KeybControl IS 

SIGNAL SCANCODE : STD_LOGIC_VECTOR(7 downto 0);
SIGNAL RX_OK    : STD_LOGIC;
SIGNAL EXTENDED : STD_LOGIC;
SIGNAL RELEASED : STD_LOGIC;

COMPONENT ps2_keyboard_interface
	PORT(clk : IN STD_LOGIC;
		 reset : IN STD_LOGIC;
		 rx_read : IN STD_LOGIC;
		 tx_write : IN STD_LOGIC;
		 ps2_clk : INOUT STD_LOGIC;
		 ps2_data : INOUT STD_LOGIC;
		 tx_data : IN STD_LOGIC_VECTOR(7 downto 0);
		 rx_extended : OUT STD_LOGIC;
		 rx_released : OUT STD_LOGIC;
		 rx_shift_key_on : OUT STD_LOGIC;
		 rx_data_ready : OUT STD_LOGIC;
		 tx_write_ack : OUT STD_LOGIC;
		 tx_error_no_keyboard_ack : OUT STD_LOGIC;
		 rx_ascii : OUT STD_LOGIC_VECTOR(7 downto 0);
		 rx_scan_code : OUT STD_LOGIC_VECTOR(7 downto 0)
		);
END	COMPONENT;
        
BEGIN
keyboard_interface : ps2_keyboard_interface
PORT MAP(clk => CLOCK18,
		 reset => not iRST_N,
		 rx_read => RX_OK,
		 tx_write => '0',
		 ps2_clk => PS2_CLK,
		 ps2_data => PS2_DAT,
		 tx_data => "00000000",
		 rx_extended => EXTENDED,
		 rx_released => RELEASED,
		 rx_data_ready => RX_OK,
		 rx_scan_code => SCANCODE
		);

	process(CLOCK18,iRST_N,EXTENDED,RELEASED,SCANCODE)
	begin
	if(iRST_N='0')then
		O_COIN1		<= '0';
		O_1P_START	<= '0';
		O_1P_LE		<= '0';
		O_1P_RI		<= '0';
		O_1P_UP		<= '0';
		O_1P_DN		<= '0';
		O_COIN2		<= '0';
		O_2P_START	<= '0';
		O_2P_LE		<= '0';
		O_2P_RI		<= '0';
		O_2P_UP		<= '0';
		O_2P_DN		<= '0';
	elsif(rising_edge(CLOCK18))then
		if(EXTENDED='0')then
			if(RELEASED='0')then
				case(SCANCODE)is
				when X"2E" => O_COIN1    <= '1';--"5"
				when X"16" => O_1P_START <= '1';--"1"
				when X"36" => O_COIN2    <= '1';--"6"
				when X"1E" => O_2P_START <= '1';--"2"
				when X"23" => O_2P_LE	 <= '1';--"d"
				when X"34" => O_2P_RI	 <= '1';--"g"
				when X"2D" => O_2P_UP	 <= '1';--"r"
				when X"2B" => O_2P_DN	 <= '1';--"f"
				when others => NULL;
				end case;
			else
				case(SCANCODE)is
				when X"2E" => O_COIN1    <= '0';--"5"
				when X"16" => O_1P_START <= '0';--"1"
				when X"36" => O_COIN2    <= '0';--"6"
				when X"1E" => O_2P_START <= '0';--"2"
				when X"23" => O_2P_LE	 <= '0';--"d"
				when X"34" => O_2P_RI	 <= '0';--"g"
				when X"2D" => O_2P_UP	 <= '0';--"r"
				when X"2B" => O_2P_DN	 <= '0';--"f"
				when others => NULL;
				end case;
			end if;
		else
			if(RELEASED='0')then
				case(SCANCODE)is
				when X"6B" => O_1P_LE <= '1';--"<-"
				when X"74" => O_1P_RI <= '1';--"->"
				when X"75" => O_1P_UP <= '1';--"^"
											 --"|"
				when X"72" => O_1P_DN <= '1';--"|"
											 --"v"
				when others => NULL;
				end case;
			else
				case(SCANCODE)is
				when X"6B" => O_1P_LE <= '0';--"<-"
				when X"74" => O_1P_RI <= '0';--"->"
				when X"75" => O_1P_UP <= '0';--"^"
											 --"|"
				when X"72" => O_1P_DN <= '0';--"|"
											 --"v"
				when others => NULL;
				end case;
			end if;
		end if;
	end if;
	end process;
END Keyb_Control;

⌨️ 快捷键说明

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