|
網路上有些Debounce程式你可以參考9 m7 t+ q. D; h* B! `) j+ t
" o& U5 r3 I7 @" D$ S
///////////////////////////////////////////////////////////////////////////////
- T+ d/ Y8 q7 ]3 U( S! k9 J9 z//
$ X$ m2 d0 j- K// Pushbutton Debounce Module 2 t( j' r4 G! X) _$ N
//
# \ b: Z y" g' T3 N+ c///////////////////////////////////////////////////////////////////////////////$ p; k9 n- Q: L2 R; x/ P: H
module debounce (reset, clk, noisy, clean);, q2 Z: j: ]7 W5 r. B
input reset, clk, noisy;
2 L* e m$ y1 Y output clean;* R2 w0 h% J% W) _; t- s
& P: z( q# |3 o, o4 K
parameter NDELAY = 650000;
. f# _7 L$ ~9 X8 ^ parameter NBITS = 20;
1 I3 q% Q/ @# g% } S8 G4 r4 u3 G# X# B( O! I% S: x
reg [NBITS-1:0] count;
& T' I9 J% O+ d$ o* Z |) ~ reg xnew, clean;) f' B4 b' m2 t, p. b
+ v- E8 i# n5 _3 ]+ V always @(posedge clk)
$ A: J2 h' m3 @2 C6 g* k( o" z if (reset) begin xnew <= noisy; clean <= noisy; count <= 0; end( R0 U4 j2 R% w# T. i, D
else if (noisy != xnew) begin xnew <= noisy; count <= 0; end
+ P5 O1 v; D) O, T else if (count == NDELAY) clean <= xnew;
$ N( Z p3 O; v7 t' l$ I! a8 f$ [ else count <= count+1;
4 v/ q* f' X/ n( B, j, Y$ p z9 {8 Z! G) {9 @$ b: z$ l4 y0 b* u: q
endmodule |
|