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

📄 keytx.vhd

📁 many application on kit SP-3: VGA, digital clock, counter, interface PS2....
💻 VHD
字号:
library IEEE, unisim;use IEEE.std_logic_1164.all;use IEEE.NUMERIC_STD.all;use unisim.vcomponents.all;use work.key_Inter_pckg.all;entity KeyTx is --100_000  generic(FREQ : natural := 50000 );   -- frequency of main clock (KHz)  port(clk  : in  std_logic;     -- main clock		rdy  : buffer  std_logic;  		 ps2_clk  : in  std_logic;           -- keyboard clock		 ps2_data : in  std_logic;           -- keyboard data		 s        : out std_logic_vector(7 downto 0);  -- LED display		 sccode  : out std_logic_vector(7 downto 0));end keyTx;architecture behave of keyTx is    constant YES : std_logic := '1';  constant NO  : std_logic := '0';  signal scancode  : std_logic_vector(7 downto 0);  -- scancode from keyboard--  signal rdy       : std_logic;         -- indicates when scancode is available  signal s_x       : std_logic_vector(7 downto 0);  -- next state of LED segments  signal kbd_error : std_logic;         -- error receiving scancode from keyboard  -- LED segment activation patterns for various numbers and letters  constant DIG_1    : std_logic_vector(7 downto 0) := "11111001";  constant DIG_2    : std_logic_vector(7 downto 0) := "10100100";  constant DIG_3    : std_logic_vector(7 downto 0) := "10110000";  constant DIG_4    : std_logic_vector(7 downto 0) := "10011001";  constant DIG_5    : std_logic_vector(7 downto 0) := "10010010";  constant DIG_6    : std_logic_vector(7 downto 0) := "10000010";  constant DIG_7    : std_logic_vector(7 downto 0) := "11111000";  constant DIG_8    : std_logic_vector(7 downto 0) := "10000000";  constant DIG_9    : std_logic_vector(7 downto 0) := "10010000";  constant DIG_0    : std_logic_vector(7 downto 0) := "11000000";  constant LETTER_A : std_logic_vector(7 downto 0) := "10001000";  constant LETTER_b : std_logic_vector(7 downto 0) := "10000011";  constant LETTER_C : std_logic_vector(7 downto 0) := "11000110";  constant LETTER_d : std_logic_vector(7 downto 0) := "10100001";  constant LETTER_E : std_logic_vector(7 downto 0) := "10000110";  constant LETTER_F : std_logic_vector(7 downto 0) := "10001110";  constant LETTER_G : std_logic_vector(7 downto 0) := "10010000";--**  constant LETTER_h : std_logic_vector(7 downto 0) := "10001011";  constant LETTER_i : std_logic_vector(7 downto 0) := "11101111";  constant LETTER_J : std_logic_vector(7 downto 0) := "11100001";  constant LETTER_K : std_logic_vector(7 downto 0) := "10001001";--***  constant LETTER_L : std_logic_vector(7 downto 0) := "11000111";  constant LETTER_n : std_logic_vector(7 downto 0) := "10101011";  constant LETTER_M : std_logic_vector(7 downto 0) := "11001000";--****  constant LETTER_o : std_logic_vector(7 downto 0) := "10100011";  constant LETTER_P : std_logic_vector(7 downto 0) := "10001100";  constant LETTER_q : std_logic_vector(7 downto 0) := "10011000";  constant LETTER_R : std_logic_vector(7 downto 0) := "10101111";  constant LETTER_s : std_logic_vector(7 downto 0) := "10010010";--***  constant LETTER_T : std_logic_vector(7 downto 0) := "10000111";  constant LETTER_u : std_logic_vector(7 downto 0) := "11100011";  constant LETTER_V : std_logic_vector(7 downto 0) := "11000001";--***  constant LETTER_W : std_logic_vector(7 downto 0) := "11000001";--***  constant LETTER_X : std_logic_vector(7 downto 0) := "10001001";--***  constant LETTER_y : std_logic_vector(7 downto 0) := "10010001";  constant LETTER_Z : std_logic_vector(7 downto 0) := "10100100";--***  constant LETTER_Enter : std_logic_vector(7 downto 0) := "01111111";--***  constant LETTER_Space : std_logic_vector(7 downto 0) := "11110111";--***  constant LETTER_BKSP  : std_logic_vector(7 downto 0) := "11111111";--***  constant LETTER_ESC   : std_logic_vector(7 downto 0) := "11111110";--***  constant LETTER_tab   : std_logic_vector(7 downto 0) := "11110110";--***  constant ERROR 	      : std_logic_vector(7 downto 0) := "10111111";begin  u400 : key_interface    generic map(      FREQ     => FREQ      )    port map(      clk      => clk,                  -- clock for the keyboard interface      rst      => kbd_error,            -- reset the keyboard intfc whenever there is an error receiving a scancode      ps2_clk  => ps2_clk,              -- clock from the keyboard      ps2_data => ps2_data,             -- serial data from the keyboard (valid on falling edge of ps2_clk)      scancode => scancode,             -- the scancode received from the keyboard      rdy      => rdy,                  -- indicates when a scancode from the keyboard is available      error    => kbd_error             -- indicates an error in receiving a scancode from the keyboard      );  -- this maps the scancode received from the keyboard into a pattern on the 7-segment display  s_x <= DIG_1 when scancode = "00010110" else         DIG_2 when scancode = "00011110" else         DIG_3 when scancode = "00100110" else         DIG_4 when scancode = "00100101" else         DIG_5 when scancode = "00101110" else         DIG_6 when scancode = "00110110" else         DIG_7 when scancode = "00111101" else         DIG_8 when scancode = "00111110" else         DIG_9 when scancode = "01000110" else         DIG_0 when scancode = "01000101" else         LETTER_A when scancode = "00011100" else			LETTER_b when scancode = "00110010" else			LETTER_C when scancode = "00100001" else			LETTER_d when scancode = "00100011" else			LETTER_E when scancode = "00100100" else 					LETTER_F when scancode = "00101011" else			LETTER_G when scancode = "00110100" else 		--**			LETTER_h when scancode = "00110011" else			LETTER_i when scancode = "01000011" else 				LETTER_J when scancode = "00111011" else			LETTER_K when scancode = "01000010" else		--**			LETTER_L when scancode = "01001011" else			LETTER_M when scancode = "00111010" else 		--**			LETTER_n when scancode = "00110001" else			LETTER_o when scancode = "01000100" else			LETTER_P when scancode = "01001101" else			LETTER_q when scancode = "00010101" else   			LETTER_R when scancode = "00101101" else			LETTER_s when scancode = "00011011" else		--**			LETTER_T when scancode = "00101100" else			LETTER_u when scancode = "00111100" else			LETTER_V when scancode = "00101010" else		--**			LETTER_W when scancode = "00011101" else			--**			LETTER_X when scancode = "00100010" else			--**			LETTER_y when scancode = "00110101" else 						LETTER_Z when scancode = "00011010" else				--**			LETTER_Enter when scancode = "01011010" else				--**			LETTER_Space when scancode = "00101001" else				--**			LETTER_BKSP  when scancode = "01100110" else				--**			LETTER_tab   when scancode = "00001101" else				LETTER_ESC   when scancode = "01110110" else				--**			ERROR;  -- update the LED display  process(clk)  begin	  if rising_edge(clk) then						if rdy = YES then			  s <= s_x;                       -- update the display each time a scancode is received						sccode <= scancode;			end if;		 end if;  end process;end behave;

⌨️ 快捷键说明

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