|
網路上有些Debounce程式你可以參考& g: N2 \, p% u, |5 m) J
5 z7 n' h2 i! `* w* _- ~5 Y
///////////////////////////////////////////////////////////////////////////////& q, V6 C9 j1 F! V; S; x% F
//8 H7 z" }( z2 {) Z* u4 A
// Pushbutton Debounce Module
d1 z+ w1 m% i u//
y- C% B' @9 w6 R///////////////////////////////////////////////////////////////////////////////
1 W& P: O9 b* E& E! ]/ j7 a6 Gmodule debounce (reset, clk, noisy, clean);
$ D) k2 q) m8 [& k input reset, clk, noisy;- {4 Y4 m4 ~& t' U) @- h: M+ x
output clean;1 b. H0 ^: r1 S
; }/ Z; q5 S9 z2 A' w/ Y parameter NDELAY = 650000;/ z; {6 F1 ?) x8 H8 i& [4 z
parameter NBITS = 20;
. I$ U5 h" F; J/ t3 L* h5 }" Y( W# N3 _( Q) K+ e
reg [NBITS-1:0] count;
. U$ ]: f5 A, N: w reg xnew, clean;
1 s h U5 d5 R* T$ D
) ^0 `! H. C: J; @ always @(posedge clk)
3 }, ?9 s- N& Z6 A: g3 f p1 \6 V if (reset) begin xnew <= noisy; clean <= noisy; count <= 0; end7 l/ O. M# v! Z! t t4 ?2 |1 w
else if (noisy != xnew) begin xnew <= noisy; count <= 0; end
3 ]" {( f6 V3 y" b2 S" I else if (count == NDELAY) clean <= xnew;# W$ X p) W0 a* T; n4 S) e
else count <= count+1;- [6 S0 n# V, T& t( u, v. {
% \9 b8 A6 @; E. f# J4 c. ~- Nendmodule |
|