1 /********************************************
2 ** **
3 ** 按键消抖模块 **
4 ** **
5 ********************************************/
6
7 module key_filter(clk,key_in,key_out );
8
9 input clk;
10 input [3:0] key_in;
11 output [3:0] key_out;
12
13 reg [3:0] key_out;
14
15 reg [19:0] count;
16
17 always @ (posedge clk)
18 begin
19 if(key_in != 4'b1111) //判断是否有键按下
20 begin
21 count <= count+1'b1;//当检测到有键按下,计数器加1
22 key_out <= 4'b1111;//此时延时尚未达到,所以输出为高
23
24 if(count>=20'd1000000)
25 begin
26 count<=20'd1000001;//当达到延时200us(50MHZ)时,锁存key-count值
27 key_out <= key_in;//此时延时达到200us,输出为低
28 end
29 end
30 else
31 begin
32 key_out <= 4'b1111;//当没有键按下时, 输出为高
33 count <= 1'b0;//计数器清0
34 end
35
36 end
37
38
39
40 endmodule