|
Key function3 { T6 a6 W) h7 D: Y
按鍵開關 第一次 on時,開始計時。$ ~+ R" V1 G' G$ m! R
第二次 on時,停止計時。7 \+ D) q0 v7 w6 B. Q
第三次 on時,開始計時。* X% P( `* u2 }/ I$ P
未 synthesis,請自行 debug........ 8 ] I' \4 j9 \( J! r! W& A4 \
" E i' }. T$ ~) n, R
LIBRARY ieee;
# u9 D5 k% o. }* [' n; XUSE ieee.std_logic_1164.all;
. G8 S: G8 q9 A& kUSE ieee.std_logic_unsigned.all;9 B7 A( y1 ]4 }1 _4 B* C0 y
ENTITY KeyFunction IS, ]$ ^; T1 I. ]8 b
PORT(CLK,% A* s4 j& M9 g2 C3 d9 B- }4 O9 g, T
PB,; C7 A; ^; s# C" z& W
RSTn : IN STD_LOGIC;& Z6 S0 S" C* K0 [8 ~
START_COUNT,8 h4 ]2 u/ M2 E: D6 \
PAUSE& r* Q, V( D! |8 Z
: OUT STD_LOGIC
8 Y1 ]* n$ B* C) _1 \8 c: @0 ] );
2 R, j9 C. S; _9 _; lEND KeyFunction;
$ C) h8 F, e4 b+ E% ~+ PARCHITECTURE arc OF debounce_v IS
( A2 Y, S) @4 I- H4 T9 s1 wSIGNAL currently_state : STD_LOGIC_VECTOR(2 downto 0);
& ]8 x) \8 ^" usignal pb_reg,debounce_counting,debounce_end : std_logic;# c4 U$ L' p0 Q7 j8 ^
signal debounce_counter : STD_LOGIC_VECTOR(15 downto 0);
8 f4 H/ E4 S* W$ ^4 q) _2 P/ c+ M O* Z8 ?" h/ ?7 v0 W
constant debounce_time : STD_LOGIC_VECTOR(15 downto 0):= "0000000000000000";) }$ _+ f) r: h
BEGIN
6 e; G6 r5 g+ z$ m4 A8 R7 O5 U) r& m0 s/ n! |% {% W' d$ H
--============================================================ U: Y% Z9 c' P7 ?8 z& ?! h
-- get key push state. ( active high)
: b4 _ y2 o+ j: m5 Z--============================================================
& h7 t- E P: y; D$ A4 u PROCESS (CLK,RSTn,PB,pb_reg,debounce_counting,debounce_end)- u$ P7 o1 S N
BEGIN- h2 c4 |; R: O [) L
if( RSTn = '0') then
+ D7 l. p7 ?: J! M pb_reg <= 1;3 l8 k( Q, n' ~& N, h5 ~1 b
elsif( CLK 'event and CLK ='1')then+ l! K7 G0 w" z) [& c
if( PB='1' and pb_reg ='0')then
- }, C- r7 k; |% Y" F: O debounce_counting <= '1';6 @5 W% a$ i- C8 `' U% q; r
elsif( debounce_end = '1')then
D. U' R: B" W debounce_counting <= '0'; Z* w3 X& E# w! X( f+ q
else
5 n9 b% S, P( b, y9 H+ M& ~ debounce_counting <= debounce_counting;( J1 Q6 `9 `3 {/ z5 L
end if;
4 y9 O( T4 W" I8 [ pb_reg <= PB;
, O0 ^6 _7 i; m+ |. \( \ end if; |
|