FPGA学习笔记-按键消抖
按键按下到稳定之前有一定时间的抖动若不消除这部分抖动容易导致按键不灵敏。

抖动时间的长短由按键的机械特性决定因此需要通过延时的方法来消抖只在中间稳定的某一时刻取一个使能值就可以很好的去抖。

实现在按键按下的10ms左右取一个尖峰信号作为按键按下的标准就可以消除抖动,举例使用按键控制一个led灯的亮灭。
//代码实现
`timescale 1ns / 1ps
module key(
input sysclk,
input rst_n,
input key,
output reg led
);
parameter data=50_000_0;//芯片晶振10毫秒需要的次数
reg [18:0] cnt;//计时器
wire key_flag;//尖峰信号
//按键按下10毫秒计时器
always@(posedge sysclk or negedge rst_n)
begin
if (!rst_n)
cnt<=0;
else if (key == 0)//按键按下的时候
begin
if (cnt == data-1)//计满10毫秒之后保持
cnt<=cnt;
else
cnt=cnt+1;
end
else
cnt<=0;
end
//取稳定时候的尖峰信号
assign key_flag = (cnt == data-2)?1:0;//三目运算符
//当按键按下的尖峰信号为1的时候led灯取反
always@(posedge sysclk or negedge rst_n)
begin
if (!rst_n)
led<=0;
else if (key_flag)
led<=~led;
else
led<=led;
end
endmodule