按键抖动:目前开发板常用的按键所用开关基本都为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在按下和释放的瞬间都会伴随有一连串的抖动。当按下一次按键,我们可能会在任意的时间点检测到不同的电平状态。同时我们按键按下以及抖动都是随机,不可测。那么按下一次按键的时候,抖动可能就会被误以为按下多次按键。
按键消抖的目的:消除我们在实验中,由抖动带给我们的影响。
module key_fillter(
input clk,
input rst_n,
input key_in,
output reg key_out
);
parameter TIME_DELAY = 1_000_000;
reg [19:0] cnt ;
wire add_cnt;
wire end_cnt;
wire nedge ;
reg cnt_flag ;
reg key_r0 ;
reg key_r1 ;
reg key_r2 ;
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
key_r0 <= 1'd1;
key_r1 <= 1'd1;
key_r2 <= 1'd1;
end
else begin
key_r0 <= key_in;
key_r1 <= key_r0;
key_r2 <=