摸鱼记录 Day_13 (=^▽^=)
1. 今日摸鱼任务
以按键消抖为例,学习状态机分析(=^▽^=) |
小梅哥视频:15A 基于状态机的按键消抖原理与状态转移图_哔哩哔哩_bilibili
学习资料:02_【逻辑教程】基于HDL的FPGA逻辑设计与验证教程V3.4【产品资料】【Zynq开发板】小梅哥ACZ702开发板全套资料下载 - ACZ702开发板 - 芯路恒电子技术论坛 - Powered by Discuz!
2. 按键消抖原理
按键的硬件结构如图1:

EDA 扩展板所载的均为贴片按键,原理图如图2:

由原理图可以看出,按键未按下时 IO
口为高电平,按键按下时则变为低电平,因此系统即可通过检测 IO 的电平来判断按键的状态。
从图1中可以看到按键存在一个(3)反作用弹簧,因此当按下或者松开时均会产生额外的物理抖动,物理抖动便会产生电平的抖动。

按键从按下再到松开的过程中,其电平变化如图4,上为理想波形输出,下为实际波形输出。
产生的抖动次数以及间隔时间均是不可预期的,这就需要通过滤波来消除抖动可能对外部其他设备造成的影响。一般情况下抖动的总时间会持续 20ms 以内。
这种抖动,可以通过硬件电路或者逻辑设计的方式来消除,也可以通过软件的方式完成。
其中硬件电路消除抖动适用于按键数目较少的场合。
3. 按键状态分析
IDLE | 空闲态,高电平,等待按键按下 |
FILTER0 | 按键按下消抖,持续20ms低电平认为按键按下,否则回到IDLE |
DOWN | 按键按下,低电平,等待按键释放 |
FILTER1 | 按键释放消抖,持续20ms高电平认为按键释放IDLE,否则回到DOWN |
4. 状态转移标志
nedge_key | 按键检测到下降沿 |
cnt_20 | 20ms计数器,设 需要计数到N |
pedge_key | 按键检测到上升沿 |
5. 状态转移分析
当前状态 | 下一状态 | 转移条件 |
IDLE | IDLE | nedge_key == 0 |
FILTER0 | nedge_key == 1 | |
FILTER0 | IDLE | pedge_key == 1 |
FILTER0 | pedge_key == 0 && cnt_20 < N 计数状态 | |
DOWN | pedge_key == 0 && cnt_20 >= N | |
DOWN | DOWN | pedge_key == 0 |
FILTER1 | pedge_key == 1 | |
FILTER1 | DOWN | nedge_key == 1 |
FILTER1 | nedge_key == 0 && cnt_20 < N 计数状态 | |
IDLE | nedge_key == 0 && cnt_20 >= N |
//未安装Visio将就一下啦~
//好啦,摸鱼结束哩 (=^▽^=)