【代码】verilog之:按键消抖
/*--------------------------------------------------------------------------------------
-- Filename ﹕ show_ctrl.v
-- Author ﹕tony-ning
-- Description ﹕按键消抖
-- Called by ﹕Top module
-- Revision History ﹕15-10-16
-- Revision 1.0
-- Company ﹕
-- Copyright(c) All right reserved
---------------------------------------------------------------------------------------*/ module debounce_module
(
CLK, //采集时钟,40Hz
RSTn, //系统复位信号
BUTTON_IN, //按键输入信号
BUTTON_OUT //消抖后的输出信号
);
input CLK;
input RSTn;
input BUTTON_IN;
output BUTTON_OUT; reg key_reg1,key_reg2,key_out;
reg [:]count2; always @( posedge CLK)//CLK 50M
begin
count2<=count2+;
if(count2==)
begin
key_reg1<=BUTTON_IN;
count2<=;
end
key_reg2<=key_reg1;
key_out<=key_reg2&(!key_reg1);
end assign BUTTON_OUT = key_out; endmodule
此模块存在一个时钟匹配问题,下个接口按键动作只需要一个时钟脉冲,可此处产生的是10ms的脉冲
/*--------------------------------------------------------------------------------------
-- Filename ﹕ show_ctrl.v
-- Author ﹕tony-ning
-- Description ﹕按键消抖
-- Called by ﹕Top module
-- Revision History ﹕15-10-16
-- Revision 1.0
-- Company ﹕
-- Copyright(c) All right reserved
---------------------------------------------------------------------------------------*/
module debounce_module
(
CLK, //采集时钟,40Hz
RSTn, //系统复位信号
BUTTON_IN, //按键输入信号
BUTTON_OUT //消抖后的输出信号
);
input CLK;
input RSTn;
input BUTTON_IN;
output BUTTON_OUT;
reg [:]cnt;//分频计数器
reg CLK40HZ;//分频时钟
reg BUTTON_IN_Q, BUTTON_IN_2Q, BUTTON_IN_3Q; always@(posedge CLK ) //时钟分频
begin
if(!RSTn)
cnt<=;
else if(cnt=='d312_499) //产生40Hz时钟脉冲
begin
cnt<=;
CLK40HZ<=~CLK40HZ;//40hz时钟输出
end
else begin
cnt<=cnt+;
end
end always @(posedge CLK40HZ or negedge RSTn)
begin
if(~RSTn)
begin
BUTTON_IN_Q <= 'b1;
BUTTON_IN_2Q <= 'b1;
BUTTON_IN_3Q <= 'b1;
end
else
begin
BUTTON_IN_Q <= BUTTON_IN;
BUTTON_IN_2Q <= BUTTON_IN_Q;
BUTTON_IN_3Q <= BUTTON_IN_2Q;
end
end wire BUTTON_OUT = BUTTON_IN_2Q | BUTTON_IN_3Q;
endmodule
此模块想用状态机写,但仍有问题
/*--------------------------------------------------------------------------------------
-- Filename ﹕ show_ctrl.v
-- Author ﹕tony-ning
-- Description ﹕按键消抖
-- Called by ﹕Top module
-- Revision History ﹕15-10-16
-- Revision 1.0
-- Company ﹕
-- Copyright(c) All right reserved
---------------------------------------------------------------------------------------*/ module debounce_module
(
CLK, RSTn, KEY_set,KEY_add,Pin_set, Pin_add
); input CLK;
input RSTn;
input KEY_set;
input KEY_add;
output Pin_set;
output Pin_add; reg p='b0;//按键状态
reg [:]cntt;
reg k1f1,k1f2;//KEY_set上升沿检测
reg k2f1,k2f2;//KEY_add上升沿检测 parameter s_wait='b0;//等待按键状态
parameter s_delay='b1;//按下延时状态 assign Pin_set=k1f2&!k1f1;//读取按键下降沿
assign Pin_add=k2f2&!k2f1; always @ ( posedge CLK or negedge RSTn )//按键消抖状态机
if( !RSTn )
begin
cntt <= 'd0;
p <= s_wait;
end
else case(p)
s_wait: begin
k1f1<=KEY_set;//记录按键值
k1f2<=k1f1; k2f1<=KEY_add;
k2f2<=k2f1; if(Pin_set| Pin_add)//当按下,切换到延时并按键只输出一个时钟脉冲
begin
p<=s_delay;
k1f1<=;
k1f2<=; k2f1<=;
k2f2<=;
end
end
s_delay:if(cntt=='d249_999) //延时T=10ms
begin
cntt<=;
p<=s_wait;
end
else begin
cntt<=cntt+;
end endcase endmodule
【代码】verilog之:按键消抖的更多相关文章
- fpga Verilog hdl 按键消抖 部分程序讲解
module debounce(clk_in,rst_in,key_in,key_pulse,key_state); input clk_in;//system clock input rst_in; ...
- 按键消抖-----verilog
实际系统中常用的按键大部分都是轻触式按键,如下图所示.该按键内部由一个弹簧片和两个固定触点组成,当弹簧片被按下,则两个固定触点接通,按键闭合.弹簧片松开,两个触点断开,按键也就断开了.根据这种按键的机 ...
- 强化版按键消抖Verilog实现
介绍:按键的物理结构导致了会有抖动现象的出现,判断按键是否真正按下,需要把抖动的部分滤波.根据经验可知,抖动一般在20ms内,所以常规的消抖方法是从变化沿出现时刻开始,延时20ms后判断按键的状态.这 ...
- Verilog HDL那些事_建模篇笔记(实验三:按键消抖)
实验三:按键消抖 首先将按键消抖功能分成了两个模块,电平检查模块和10ms延迟模块.电平检测模块用来检测按键信号的变化(是否被按下),10ms延迟模块用来稳定电平检查模块的输入,进而稳定按键信号,防止 ...
- FPGA学习笔记(八)—— 状态机设计实例之独立按键消抖
###### [该随笔中部分内容转载自小梅哥] ######### 独立按键消抖自古以来在单片机和FPGA中都是个不可避免的问题,首先,解释一下什么叫做按键抖动,如图,按键在按下和松开的那个瞬间存在大 ...
- 09B-独立按键消抖实验02——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的: 1.复习按键的设计 2.用模块化设计的方式实现每次按下按键0,4个LED显示状态以二进制加法格式加1,每次按下按键1,4个LED显示状态以二进制加法格式减 ...
- 09A-独立按键消抖实验01——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的: 1.复习状态机的设计思想并以此为基础实现按键消抖 2.单bit异步信号同步化以及边沿检测 3.在激励文件中学会使用随机数发生函数$random 4.仿真模 ...
- 基于FPGA的数字秒表(数码管显示模块和按键消抖)实现
本文主要是学习按键消抖和数码管动态显示,秒表显示什么的,个人认为,拿FPGA做秒表真是嫌钱多. 感谢 感谢学校和至芯科技,笔者专业最近去北京至芯科技培训交流了一周.老师的经验还是可以的,优化了自己的代 ...
- 按键消抖——task任务和仿真平台搭建
一.按键抖动原理 按键抖动原理:按键存在一个反作用弹簧,因此当按下或者松开时均会产生额外的物理抖动,物理抖动会产生电平的抖动. 消抖方法:一般情况下,抖动的总时间会持续20ms以内,按下按键后,等20 ...
随机推荐
- Linux系统巡检常用命令
# uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostn ...
- PowerDesigner15.1给自定义架构表字段添加MS_Description出错
原因:系统函数sp_addextendedproperty 的第3个参数(用户名) 应该是Schema.但PD在生成的时候却是’user’ 解决方法 在PDM时.DataBase >> E ...
- 纯CSS实现帅气的SVG路径描边动画效果(转载)
本文转载自: 纯CSS实现帅气的SVG路径描边动画效果
- Redhat 7使用CentOS 7的Yum网络源
由于redhat 的更新包只对注册的用户生效,所以需要自己手动更改成CentOS 的更新包,CentOS几乎和redhat是一样的,所以无需担心软件包是否可安装,安装之后是否有问题,另外CentOS公 ...
- REST实战:SeverClient项目+RESTful理论
理解一个新的技术,无疑就是使用它了,下面我们就通过一个可执行的demo来展现REST的原理和使用. 一 Demo 1.1 服务器端 1 主程序MainServer.java负责启动一个REST服务组件 ...
- nodejs学习笔记
这里有一段废话,我写了又删,删了又写,反复了十来次,最后还是把它删除了.不用想了,那是一段牢骚话兼有煽情意思. 好了,还是把我学习nodejs的笔记记录下来吧,一来复习巩固,加深印象,二来自己实践中出 ...
- getopt解析命令行参数一例:汇集多个服务器的日志
高效工作的一个诀窍就是尽可能自动化, 简便化. 比如, 公司里, 要搜索多个集群下的应用日志来排查问题, 需要使用 pssh: pssh -i -h api_hangzhou.iplist " ...
- Android DrawerLayout Plus 增强版抽屉菜单
DrawerLayout是官方提供的侧滑菜单,相比SliddingMenu,它更加轻量级.默认情况下,DrawerLayout可以设置左侧或者右侧滑出菜单.如下, xml布局: <!-- & ...
- SqlCommandBuilder的讨论
之前也看过别人的解释,总感觉解释的不太理想,当然我自己的解释我尽量解释理想点,SqlCommandBuilder 是提供给外界对数据库的反操作的,如果只是对数据库的一个提取的话,那么用下面的代码足以 ...
- jQuery 添加元素
jQuery 添加元素 1.append 在被选元素的结尾插入内容 $(document).ready(function(){ $("button").click(function ...