📄 __keyboard.vhd
字号:
---------------------------------------------------------------------------------- Company: -- Engineer:---- Create Date: 16:32:37 08/31/07-- Design Name: -- Module Name: keyboard - Behavioral-- Project Name: -- Target Device: -- Tool versions: -- Description:---- Dependencies:-- -- Revision:-- Revision 0.01 - File Created-- Additional Comments:-- --------------------------------------------------------------------------------library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;---- Uncomment the following library declaration if instantiating---- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity keyboard is Port ( KB_ROW : buffer std_logic_vector(3 downto 0); KB_COL : in std_logic_vector(3 downto 0); KB_CLK : in std_logic; KB_RST : in std_logic; KB_VAL : out std_logic_vector(7 downto 0); KB_VLD : out std_logic; KB_BLL : out std_logic);end keyboard;architecture Behavioral of keyboard isconstant MAXSCAN1: std_logic_vector(3 downto 0):= X"4";constant BELLDIV : std_logic_vector(4 downto 0):= "11111";signal SCANTMP :std_logic_vector(7 downto 0);signal SCANVAL :std_logic_vector(7 downto 0);signal SCANCNT :std_logic_vector(3 downto 0);signal BL_CNT :std_logic_vector(4 downto 0);signal BL_FRQ :std_logic;signal BL_ENA :std_logic;beginKB_BLL <= not(KB_CLK and BL_ENA);process(KB_CLK,KB_RST)begin if(KB_RST = '0') then SCANVAL <= X"FF"; SCANCNT <= MAXSCAN1; BL_ENA <= '0'; KB_VAL <= X"FF"; KB_ROW <= X"E"; KB_VLD <= '0'; elsif(KB_CLK'event and KB_CLK = '1') then case KB_ROW is when X"E" => KB_ROW <= X"D"; when X"D" => KB_ROW <= X"B"; when X"B" => KB_ROW <= X"7"; when X"7" => KB_ROW <= X"F"; when X"F" => KB_ROW <= X"E"; when others=>KB_ROW <= X"E"; end case; if(KB_ROW = X"F") then SCANTMP <= X"FF"; if(SCANTMP = X"FF" or SCANTMP /= SCANVAL) then SCANVAL <= SCANTMP; SCANCNT <= MAXSCAN1; BL_ENA <= '0'; KB_VLD <= '0'; else if(SCANCNT > X"1") then SCANCNT <= SCANCNT-1; BL_ENA <= '1'; KB_VLD <= '0'; elsif(SCANCNT = X"1") then case SCANVAL is when X"EE" => KB_VAL<=X"55"; when X"ED" => KB_VAL<=X"44"; when X"EB" => KB_VAL<=X"42"; when X"E7" => KB_VAL<=X"45"; when X"DE" => KB_VAL<=X"39"; when X"DD" => KB_VAL<=X"36"; when X"DB" => KB_VAL<=X"33"; when X"D7" => KB_VAL<=X"52"; when X"BE" => KB_VAL<=X"38"; when X"BD" => KB_VAL<=X"35"; when X"BB" => KB_VAL<=X"32"; when X"B7" => KB_VAL<=X"2E"; when X"7E" => KB_VAL<=X"37"; when X"7D" => KB_VAL<=X"34"; when X"7B" => KB_VAL<=X"31"; when X"77" => KB_VAL<=X"30"; when others => KB_VAL<=X"67"; end case; SCANCNT <= X"0"; KB_VLD <= '1'; else KB_VLD <= '0'; end if; end if; elsif(KB_COL /= X"F") then SCANTMP(3 downto 0)<=KB_ROW; SCANTMP(7 downto 4)<=KB_COL; else SCANTMP <= SCANTMP; end if; end if;end process;end Behavioral;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -