|
網路上有些Debounce程式你可以參考
/ f% P1 m& r" I# n8 l9 L
! m' Z: x8 _% I# d+ T///////////////////////////////////////////////////////////////////////////////% m; }; u9 {3 i+ f& r& G
//
3 E* R: C$ ]+ ]: j: K// Pushbutton Debounce Module
1 f/ x& ^4 j3 C+ m7 K, m//+ j6 i9 B" ^, d; c+ c: w: R
///////////////////////////////////////////////////////////////////////////////
: j9 {3 n: n/ l! c2 W- K, I" dmodule debounce (reset, clk, noisy, clean);' C. u& K' u! l. o6 g3 a
input reset, clk, noisy; ]' _" D) S. B z
output clean;$ l+ P. E; g- g0 v$ G, K1 D+ ]& y
0 k% }4 {+ {% M1 n parameter NDELAY = 650000;: m4 K: n8 e/ H4 `( _% m' j
parameter NBITS = 20;
" w7 }- K \8 I( [% L A: _% h( L5 S" S l' R) ]6 j4 z7 O
reg [NBITS-1:0] count;" j7 S4 B, n; U
reg xnew, clean;( D) i! y8 s* \/ O# P/ o
! z2 u" h M- d+ Y$ s/ o0 t; q
always @(posedge clk)( t+ O1 h) u! k: F9 q$ a- w
if (reset) begin xnew <= noisy; clean <= noisy; count <= 0; end
4 Q0 R. Z1 Z& x7 I, n$ F8 ^- m else if (noisy != xnew) begin xnew <= noisy; count <= 0; end
7 s% |1 {( u% _$ o' L. [ else if (count == NDELAY) clean <= xnew;
$ b3 T6 s) p Z% z2 ~$ G# \) k; B else count <= count+1; O: m; E+ q: G1 ^
' y- |* V) t& k! _endmodule |
|