Digital Signal Processing Reference
In-Depth Information
key board
key board_clk
key board_clk
key board_dat a
scan_code[ 7. . 0]
scan_code[ 7. . 0]
scan_ready
key board_dat a
clock_48Mhz
scan_ready
clock_48Mhz
reset
reset
read
read
inst
Figure 11.4 Keyboard FPGAcore
LIBRARY IEEE ;
USE IEEE . STD_LOGIC_1164 . ALL ;
USE IEEE .STD_LOGIC_ARITH. ALL ;
USE IEEE .STD_LOGIC_UNSIGNED. ALL ;
ENTITY keyboard IS
PORT ( keyboard_clk, keyboard_data, clock_48MHz ,
reset, read
: IN
STD_LOGIC ;
scan_code
: OUT STD_LOGIC_VECTOR ( 7 DOWNTO 0 );
scan_ready
: OUT STD_LOGIC );
END keyboard;
ARCHITECTURE a OF keyboard IS
SIGNAL INCNT
: STD_LOGIC_VECTOR ( 3 DOWNTO 0 );
SIGNAL SHIFTIN
: STD_LOGIC_VECTOR ( 8 DOWNTO 0 );
SIGNAL READ_CHAR, clock_enable
: STD_LOGIC ;
SIGNAL INFLAG, ready_set
: STD_LOGIC ;
SIGNAL keyboard_clk_filtered
: STD_LOGIC ;
SIGNAL filter
: STD_LOGIC_VECTOR ( 7 DOWNTO 0 );
BEGIN
PROCESS ( read, ready_set )
BEGIN
IF read = '1' THEN
scan_ready <= '0';
ELSIF ready_set 'EVENT AND ready_set = '1' THEN
scan_ready <= '1';
END IF ;
END PROCESS ;
--This process filters the raw clock signal coming from the
-- keyboard using a shift register and two AND gates
Clock_filter:
PROCESS
EGI N
W
I T UNTIL clock_48MHz 'EVENT AND clock_48MHz = '1';
clock_enable <= NOT clock_enable;
I F clock_enable = '1' THEN
filter ( 6 DOWNTO 0 ) <= filter( 7 DOWNTO 1 ) ;
Search WWH ::




Custom Search