|
網路上有些Debounce程式你可以參考
( c% ]8 j$ p4 a% F, C5 u/ V& d% ]- i8 S9 B
///////////////////////////////////////////////////////////////////////////////
3 U7 p- R5 T- X& ?4 @- A1 f) j/ }//
) Y; b) N% y& H; m, P6 V- M+ x// Pushbutton Debounce Module
/ T" n. Q" F m& l% {& d) {//% l9 `; m1 \" @3 [( V6 I
///////////////////////////////////////////////////////////////////////////////; m: N: _( Y1 o O2 C
module debounce (reset, clk, noisy, clean);$ R$ i- U; J% r% J: J- c$ y, n
input reset, clk, noisy;, o" c0 D! e( W* S0 F) e* |
output clean;
% c" x. h) Y9 H/ l) r
" g% V4 q2 ~6 R9 o/ g6 E" b parameter NDELAY = 650000;
/ _+ C3 j1 Q. ], [( O; E parameter NBITS = 20;
9 [, a6 T4 F6 Z& X2 u6 z/ R3 m* ~2 }6 u1 ^4 T" Q; t
reg [NBITS-1:0] count;# g5 M, e& j c, O. n5 ]3 @
reg xnew, clean;
p5 a, u5 t! B; h2 n3 u, {* m
, L' n, W; C }$ n+ V always @(posedge clk)- q! Y K1 u" O1 A& w
if (reset) begin xnew <= noisy; clean <= noisy; count <= 0; end1 U& e/ O" [& `* x, ~ N7 U
else if (noisy != xnew) begin xnew <= noisy; count <= 0; end2 u- E& p, M% ?" n
else if (count == NDELAY) clean <= xnew;
4 h0 H! M! ^' w9 N& _ else count <= count+1;7 Y9 F7 a2 @1 d- |5 [
1 }, {7 j! [7 R2 Z( o: T% |* j \endmodule |
|