Files
ciciec2026_loongson/rtl/ip/confreg/key_debounce.v
2026-04-12 22:20:18 +08:00

40 lines
1.2 KiB
Verilog
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
module key_debounce(
input sys_clk, //外部时钟20M
input key, //外部按键输入
output wire key_out //按键消抖后的数据
);
//reg define
reg [31:0] delay_cnt; //延时计数
reg key_reg;
reg key_value = 1'b1;
//*****************************************************
//** main code
//*****************************************************
always @(posedge sys_clk ) begin
key_reg <= key;
if(key_reg != key) //一旦检测到按键状态发生变化(有按键被按下或释放)
delay_cnt <= 32'd400000; //给延时计数器重新装载初始值(计数时间为 20ms
else if(key_reg == key) begin //在按键状态稳定时,计数器递减,开始 20ms 倒计时
if(delay_cnt > 32'd0)
delay_cnt <= delay_cnt - 1'b1;
else
delay_cnt <= delay_cnt;
end
end
always @(posedge sys_clk ) begin
if(delay_cnt == 32'd1) begin //当计数器递减到 1 时,说明按键稳定状态维持了 20ms
key_value <= key; //并寄存此时按键的值
end
else begin
key_value <= key_out;
end
end
assign key_out = key & key_value ;
endmodule