|
Key function
' N' z4 D- j& P8 G" c e; l9 T R, p按鍵開關 第一次 on時,開始計時。
, j" n3 c/ t+ H# K 第二次 on時,停止計時。/ s9 I6 Y8 D9 i5 K/ g3 }2 M
第三次 on時,開始計時。- Q1 \( K$ W1 t
未 synthesis,請自行 debug........ " \/ ]5 ^( q$ T
0 S8 o6 z/ P7 h' nLIBRARY ieee;
. w. \) l" K" f1 E1 r0 q1 |USE ieee.std_logic_1164.all;, f' L0 @6 c- ^: d) I
USE ieee.std_logic_unsigned.all;
5 |. C: o$ a1 |% AENTITY KeyFunction IS
% a# |6 L8 R/ T3 T$ C PORT(CLK,1 J/ r/ V# E% G6 G
PB,
/ P( s2 a$ ~$ s( o3 [7 g RSTn : IN STD_LOGIC;( c% `; w# _& w7 }, v
START_COUNT,
' u* r; X; \9 `6 S9 P5 u/ X1 S PAUSE( b# E, P7 J' \ O3 [
: OUT STD_LOGIC
, r6 }2 B% E& M6 _" i n e );
% k m, C% G/ v* v* wEND KeyFunction;
: R. V0 o/ o/ A' H& J, r' Z8 j2 oARCHITECTURE arc OF debounce_v IS
C t; D# d1 D2 lSIGNAL currently_state : STD_LOGIC_VECTOR(2 downto 0);
( r g) v. S/ A1 B$ ]signal pb_reg,debounce_counting,debounce_end : std_logic;! G4 \ j! |/ l
signal debounce_counter : STD_LOGIC_VECTOR(15 downto 0);4 N& p. f$ h; t4 Z3 a6 j
- o, V) q9 Y% d
constant debounce_time : STD_LOGIC_VECTOR(15 downto 0):= "0000000000000000";* P! W8 E1 J' b5 p2 P
BEGIN
0 o3 i1 _. ~1 I: _$ C5 |! k; c! B
--============================================================
7 O1 Q6 T+ M: g% o-- get key push state. ( active high)
' W" T, k% J, C+ i--============================================================ ?- }2 b8 a- ]' c B3 u8 p
PROCESS (CLK,RSTn,PB,pb_reg,debounce_counting,debounce_end)6 A, t' b! W; B* y E0 H9 ~
BEGIN! O) v9 M. {' s5 Y
if( RSTn = '0') then
+ t6 H! U: ?- i& u" I* ~ pb_reg <= 1;1 A5 x4 O: p* Q
elsif( CLK 'event and CLK ='1')then
: A: c2 [! U- D \$ I- o3 L$ A+ F0 x if( PB='1' and pb_reg ='0')then
x [9 D' W; j2 q% R debounce_counting <= '1';( u7 f. M2 J' E$ J% s
elsif( debounce_end = '1')then
+ z4 c3 T# ~- ^% v% v+ i: p debounce_counting <= '0';
: ]. _) W) p3 g- i: Y1 t( q) k else" b5 k* q: S" ^1 Z9 [
debounce_counting <= debounce_counting;: F" U+ b. a0 s0 u" M( ]; W; M
end if;
5 H4 [& l6 r# x. f% C1 e pb_reg <= PB;
7 O g: a; x8 s end if; |
|