2014-3-12 FPGA学习-按键消抖

生性愚钝,现在才终于明白FPGA的按键消抖原理。

先贴一段别人的代码:

dule key_debounce(sys_clk          ,
sys_rstn         ,
key_in           ,
led_out
);
//输入输出信号
input               sys_clk          ;
input               sys_rstn         ;
input               key_in           ;
output              led_out          ;
//寄存器定义
reg                 led_out          ;
reg      [19:0]     delay_cnt        ;
wire                key_scan         ;
wire                key_low          ;
reg                 key_samp         ;
reg                 key_samp_r       ;
reg                 key_rst          ;
reg                 key_rst_r        ; 
//逻辑部分 
always@(posedge sys_clk or negedge sys_rstn)        
begin
if(!sys_rstn)
key_samp<=1'b1;
else
key_samp<=key_in;
end
always@(posedge sys_clk or negedge sys_rstn)        
begin
if(!sys_rstn)
key_samp_r<=1'b1;
else
key_samp_r<=key_samp;
end
assign key_scan=key_samp_r&(~key_samp);


always@(posedge sys_clk or negedge sys_rstn) 
begin
if(!sys_rstn)
delay_cnt<=20'h0;
else if(key_scan)
delay_cnt<=20'h0;
else
delay_cnt<=delay_cnt+1'b1;
end
always@(posedge sys_clk or negedge sys_rstn)        
begin
if(!sys_rstn)
key_rst<=1'b1;
else if(delay_cnt==20'hfffff)
key_rst<=key_in;
end
always@(posedge sys_clk or negedge sys_rstn)        
begin
if(!sys_rstn)
key_rst_r<=1'b1;
else
key_rst_r<=key_rst;
end
assign key_low=key_rst_r&(~key_rst);
//
always@(posedge sys_clk or negedge sys_rstn) 
begin
if(!sys_rstn)
led_out<=1'b1;
else if(key_low)
led_out<=~led_out;
else
led_out<=led_out;
end
endmodule



FPGA的按键消抖,就是用脉冲边沿检测法,若有下降沿,则产生一个周期的高电平;然后这个高电平再去清零20ms的计数器;同时在这20ms期间,不对key进行采样,所以key不管是这一周期还是上一周期都是1;当20ms过去后开始采样,若按下,则key = 0,而前一周期key = 1,利用边沿检测,得到一个周期的高电平信号,进行按键程序。

脉冲边沿检测就是利用非阻塞,将上一周期和这一周期的值进行运算:

边沿检测    =       上一周期          &     (~本周期)                    下降沿检测                   

边沿检测 = (~上一周期)   &   本周期      上升沿检测



over

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FPGA按键控制LED的原理是通过按键在按下和释放过程中的动信号,确保按键的稳定性和可靠性。在FPGA中,按键的输入信号经过模块进行处理。 模块首先将所有按键输入信号进行逻辑与操作,得到一个综合的按键信号。然后,将该按键信号的值锁存到寄存器中,以便进行后续的处理。在锁存的过程中,按键信号的采样频率与基准时钟一致。 通过对锁存的按键信号进行处理,可以获得按键信号的上升沿和下降沿标志位。这些标志位可以用来检测按键的按下和释放动作。当检测到按键的上升沿时,可以触发相应的操作,例如控制LED的状态改变。当检测到按键的下降沿时,也可以触发相应的操作。 通过模块的处理,可以有效地按键在按下和释放过程中的动信号,确保按键的稳定性和可靠性。这样,就可以实现FPGA按键控制LED的功能。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [学习笔记——按键与LED开关实例(FPGA)](https://blog.csdn.net/quanqueen/article/details/113483665)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [FPGA 按键控制灯亮灭(按键)](https://blog.csdn.net/qq_65274042/article/details/129130506)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值