【重拾FPGA】由按键消抖观察到的阻塞赋值和非阻塞赋值的区别

按键消抖在单片机上的实现是非常简单的,检测到输入变化后延时一段时间继续检测,在FPGA上也可以运用相似的原理,延时采用计数方式。

注:此消抖方法并不是最优化的,本文并不主讲消抖,而是讲在消抖过程中发现的阻塞赋值和非阻塞赋值的区别

本文使用的按键消抖中,有四个重要的寄存器和一个wire型变量:

output reg key_state;  //寄存新的key状态
output reg key_state_pre;  //寄存上一个key状态
	
output reg key_delay_state;  //寄存计数值满后的key状态
output reg key_delay_state_pre;  //寄存计数值满后的上一个key状态
	
wire key_negedge;   //检测key是否出现下降沿,其值为 key_negedge = key_state_pre&(~key_state)
		    //为1时出现下降沿,即按下,为0时没按下,或为一直按下,或为弹起

消抖原理如下:

首先判断按键是否按下(出现下降沿)

always@(posedge clk or negedge rst_n)   //key状态读取模块
begin
    if(!rst_n)
    begin
	key_state <= 1;
	key_state_pre <= 1;
    end
		
    else
    begin
	key_state <= key;  //key_state为当前key值
	key_state_pre <= key_state;   //key_state_pre为上一个周期key值
    end
end
assign key_negedge
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值