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

博客探讨了在FPGA中实现按键消抖时,阻塞赋值与非阻塞赋值的区别。通过一个简单的消抖电路实例,解释了非阻塞赋值可能导致的延迟问题,并阐述了为何在特定情况下需要使用阻塞赋值以确保逻辑正确同步。
摘要由CSDN通过智能技术生成

按键消抖在单片机上的实现是非常简单的,检测到输入变化后延时一段时间继续检测,在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值