如何用verilog语言实现按键按一次是开始,再按一次是暂停

2019-07-15 21:17发布

按键是按下后自动弹起的 没法根据按键的高低电平判断按键是开始状态还是暂停状态 这个应该怎么实现按键两种状态的判断呢 求解
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
钟哥30
2019-07-16 19:23
本帖最后由 钟哥30 于 2017-11-13 09:16 编辑
无影000 发表于 2017-11-10 18:19
module control_cnt(clk_100hz,reset,on_off,pause);
input clk_100hz,reset,on_off;
output reg pause;

首先在第一个always里面你已经做了复位信号发生时状态机切换处理了第二个里面就不用再写关于复位状态切换了,你这样看上去有点累赘了。
其次你这个on_off就是连接的那个按键吧,若按键默认连接的就是高电平,你这个pause结果不就是一个方波嘛你看啊,上电完成初始化后,你写的应该是处于on状态机,然后检测on_off电平状态为1的话状态机调到off状态并且pause == 1,然后下一个clk在off状态机里面继续检测on_ff为1的话又跳会on状态并且paus == 0,如果按键默认上拉至高电平,不是无论你有没有操作按键,你的pause都在高低电平之间进行切换,产生一个方波嘛,怎么适合你的需求了,可以采用边沿检测的方式实现你的功能的,当边沿检测发生了,并且判断当前状态跳转值下一个状态否则维持当前状态。
图片是我对你那程序的一个仿真,你看我只是吧on_ff一直拉高,是不是pause就是一个周期性的方波。On_ff为高模拟的是你的按键默认接高电平或者你的按键是按键下去为高点平状态,但是我长按 该按键,所以我认为按键这样要么延时消抖处理要么边沿检测吧(我推荐边沿,可以在上边边沿检测处多定义几级寄存器然后级联就可以做到误操作排除了)
pause.png

一周热门 更多>