//按键消抖模块代码
module key_debounce
(
//input
input sys_clk,
input sys_rst_n,
input key,
//output 需要赋值 reg
output reg key_value, //按键消抖后的数据
output reg key_flag //按键数据有效信号
);
//reg define
reg [19:0] delay_count; //计数延时
reg key_reg;
//**************************************
//** main code
//**************************************
always @(posedge sys_clk or negedge sys_rst_n)
begin
if(!sys_rst_n) //如果复位
begin
key_reg <=1'b1;
delay_count<=20'd0;
end
else
begin
key_reg <=key;
if(key_reg!=key)
delay_count<=20'd1000_000;
else if(key_reg==key)
begin
if(delay_count>20'd0)
delay_count<=delay_count-1'b1;
else
delay_count<=20'd0;
end
end
end
always @(posedge sys_clk or negedge sys_rst_n)
begin
if(!sys_rst_n)
begin
key_flag<=1'b0;
key_value<=1'b1;
end
else
begin
if(delay_count==20'd1)
begin
key_flag<=1'b1;
key_value<=key;
end
else
begin
key_flag<=1'b0;
key_value<=key_value;
end
end
end
endmodule