//****************************************// |
// 作 者:绯红姜梦 |
// 日 期:2022、6、1 |
// QQ :2943115420 |
// QQ交流群:689408654 |
// 功 能:按键消抖 |
// author :crimson ginger dream |
// date :2022/6/1 |
// QQ :2943115420 |
// QQ group:689408654 |
// function:press to deshake |
//****************************************// |
module shake_u( |
input clk , |
input rstn , |
input key , |
output shape |
); |
//parameter delay=45; //仿真使用 |
parameter delay=999999; //下开发板使用 |
reg [20:0]t20ms; |
reg [ 1:0]key_d; |
reg [ 1:0]state; |
always@(posedge clk) |
key_d <= {key_d[0],key}; |
always@(posedge clk or negedge rstn) |
begin |
if(!rstn)begin |
state <= 0; |
end else begin |
case(state) |
0: state <= (key_d == 2 ) ? 1 : 0; |
1: state <= (t20ms >= delay) ? 2 : 1; |
2: state <= (key_d == 1 ) ? 3 : 2; |
3: state <= (t20ms >= delay) ? 0 : 3; |
default:begin |
state <= 0; |
end |
endcase |
end |
end |
always@(posedge clk or negedge rstn) |
begin |
if(!rstn)begin |
t20ms <= 0; |
end else if(state==1 || state==3)begin |
t20ms <= t20ms+1; |
end else begin |
t20ms <= 0; |
end |
end |
assign shape = (state==3 && t20ms>=delay) ? 1 : 0; |
endmodule |