原理
按键做为基本的人机输入接口,在很多电子设计中都能见到,由于机械特性,在按键按下或松开的时候,按键输入值是有抖动的,无论按下去是多平稳,都难以消除抖动,按键消抖方式有很多,本实验主要是通过FPGA计时来消抖。实验中设计了一个计数器,当按键输入有变化时,计时器清零,否则就累加,直到加到一个预定值(例如10ms),就认为按键稳定,输出按键值,这样就得到以后没有抖动的按键值。由于在很多地方需要用到按键下降沿或上升沿的检测,按键消抖模块直接集成了上升沿和下降沿检测的功能。
模块
顶层模块
module key_debounce(
//Differential system clocks
input sys_clk_p,
input sys_clk_n,
input rst_n,
input key,
output [3:0] led
);
wire sys_clk;
wire button_negedge; //Key falling edge
wire[3:0] count;
assign led = ~count;
IBUFDS sys_clk_ibufgds
(
.O (sys_clk ),
.I (sys_clk_p ),
.IB (sys_clk_n )
);
ax_debounce#(.FREQ(200)) ax_debounce_m0
(
.clk (sys_clk),
.rst (~rst_n),
.button_in (key),
.button_posedge (),
.button_negedge (button_negedge),
.button_out ()
);
count_m10 count10_m0(
.clk (sys_clk),
.rst_n (rst_n),