实验三:按键消抖

首先将按键消抖功能分成了两个模块,电平检查模块和10ms延迟模块。电平检测模块用来检测按键信号的变化(是否被按下),10ms延迟模块用来稳定电平检查模块的输入,进而稳定按键信号,防止其抖动而产生的信号跳变而影响输出。

设计思路:

    1.当电平检测模块检查到按键被按下(输入由高电平变为低电平),则拉高H2L_Sig电平,然后拉低。

2.10ms延迟模块,检测到H2L_Sig高电平,则对其进行10ms过滤,拉高输出。

3.当按键被释放,电平检测模块会拉高L2H_Sig电平,然后拉低。

4.10ms延迟模块,检测到L2H_Sig高电平,则对其进行10ms过滤,拉低输出。

电平检测模块:

1.需要一个100us的计数器,用来检测电平的输入,当输入电平信号持续时间等于100us,则电平检测模块接收这个信号的输入,然后给出相应的输出信号,这其中需要定义一个使能信号isEn,控制整个电平检测模块的输出,当输入电平信号持续时间满足要求时,isEn信号被置位,电平检测模块输出被使能,由于计数器模块不是用来产生一个固定的时间,在电平检测模块输出被使能的同时,计数器的数值可以不用复位。

2.对电平检测模块进行初始化,由于电平检测模块的功能是监测电平信号的跳变,因此,对于电平的变化需要两个信号来判断。

高电平到低电平:

H2L_F1存储当前输入引脚的电平信号Pin_In;

H2L_F2存储H2L_F1引脚的电平信号,即上一个时间段Pin_In的电平信号。

通过这两个信号(H2L_F1,H2L_F2)的运算,我们得到输入信号由高电平到低电平的跳变情况的计算式,然后直接反应到电平检测模块的输出上。

time

H2L_F1

H2L_F2

H2L_Sig

initial

1

1

0(初始化,输入引脚没有电平变化,则此信号结果为0)

T1

0

1

1(电平从高电平变为低电平,则此信号的结果为1)

T2

0

0

0(输入引脚的电平持续为低电平,输入信号没有从高到低的跳变,则此信号结果为0)

推导得出:H2L_Sig=(!H2L_F1)&H2L_F2;

低电平到高电平:

L2H_F1存储当前输入引脚的电平信号Pin_In;

L2H_F2存储L2H_F1引脚的电平信号,即上一个时间段Pin_In的电平信号。

通过这两个信号(L2H_F1,L2H_F2)的运算,我们得到输入信号由低电平到高电平的跳变情况的计算式,然后直接反应到电平检测模块的输出上。

time

L2H_F1

L2H_F2

L2H_Sig

initial

0

0

0(初始化,输入引脚没有电平变化,则此信号结果为0)

T1

1

0

1(电平从低电平变为高电平,则此信号的结果为1)

T2

1

1

0(输入引脚的电平持续为高电平,输入信号没有从低到高的跳变,则此信号结果为0)

推导得出:L2H_Sig=L2H_F1&(!L2H_F2);

10ms延时模块:

    1.10ms顾名思义需要有10ms的计数模块,计数器模块采用1ms+10ms架构,即先用计数器产生标准的1ms,然后当1ms计数完成后,10ms计数器加1,相当于一个进位。与先前控制LED灯不同的是,此计数模块引入了一个isCount量,用来控制整个计数器的计数。

    2.case结构,本人对于case模块的理解:通常用于多输入模块,需要处理的情况较多,但每种情况的处理方法清晰,固定。在使用case结构的过程中,通常(case0:)作为一个选择项,与菜单类似,它是通往其它case(case1:,case2:,casen:)的入口,同时本人也体会到使用此种结构的好处在于每当执行完其它case(case1:,case2:,casen:),都可以设定case(i),i=0来使其复位,回到最初的选择模式中。

Verilog HDL那些事_建模篇笔记(实验三:按键消抖)的更多相关文章

  1. Verilog HDL那些事_建模篇笔记(实验一,实验二)

    实验一:永远的流水灯 扫描频率配置为100Hz,即是说扫描周期为10ms.这里需要注意的是扫描周期的概念.流水灯嘛,顾名思义,扫描周期指的是流水灯扫一轮所需要的时间.听到说周期,就应该想到在建模的时候 ...

  2. Verilog HDL那些事_建模篇笔记(实验九:VGA驱动)

    1.了解VGA协议 VGA协议有5个输入信号,列同步信号(HSYNC Signal),行同步信号(VSYNC Signal),红-绿-蓝,颜色信号(RGB Signal). 一帧屏幕的显示是由行从上至 ...

  3. Verilog HDL那些事_建模篇笔记(实验八:键盘解码)

    1.PS2接口与协议时序图 对于PS2的接口来说,需要额外关注的是PIN5与PIN1,一个是时钟,一个是数据.PS2协议对数据的移位是“CLOCK下降沿”有效,其CLOCK的频率通常在10KHz左右. ...

  4. Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)

    1.同步动态扫描 多个数码管的显示采用的是同步动态扫描方法,同步动态扫描指的是:行信号和列信号同步扫描,是一种并行操作. 2.数码管驱动电路实现思路      如果要求数码管显示我们想要的数字,首先需 ...

  5. 【黑金教程笔记之004】【建模篇】【Lab 03 消抖模块之一】—笔记

    设计思路: (1)       一旦检测到按键资源按下(从高电平到低电平),“电平检测模块”就会拉高H2L_Sig电平,然后拉低. (2)       “10ms延迟模块”检测到H2L_Sig高电平, ...

  6. 【黑金教程笔记之005】【建模篇】【Lab 04 消抖模块之二】—笔记

    实验四和实验三的区别在于输出.实验三是检测到由高到低的电平变化时就拉高输出,检测到由低到高的电平变化时就拉低输出.而实验四检测到由高到低的电平变化时产生一个100ms的高脉冲.当检测到由低到高的电平变 ...

  7. FPGA学习笔记(八)—— 状态机设计实例之独立按键消抖

    ###### [该随笔中部分内容转载自小梅哥] ######### 独立按键消抖自古以来在单片机和FPGA中都是个不可避免的问题,首先,解释一下什么叫做按键抖动,如图,按键在按下和松开的那个瞬间存在大 ...

  8. 按键消抖-----verilog

    实际系统中常用的按键大部分都是轻触式按键,如下图所示.该按键内部由一个弹簧片和两个固定触点组成,当弹簧片被按下,则两个固定触点接通,按键闭合.弹簧片松开,两个触点断开,按键也就断开了.根据这种按键的机 ...

  9. fpga Verilog hdl 按键消抖 部分程序讲解

    module debounce(clk_in,rst_in,key_in,key_pulse,key_state); input clk_in;//system clock input rst_in; ...

随机推荐

  1. C++调用V8与JS交互

    C++访问JS函数 C++部分: /** * COMPILE foo.js AT THE FIRST COMMAND PROMPT TO RUN foo.js */ #include <v8.h ...

  2. codeforces 723D(DFS)

    题目链接:http://codeforces.com/problemset/problem/723/D 题意:n*m的矩阵中,'*'代表陆地,'.'代表水,连在一起且不沿海的水形成湖泊.问最少填多少块 ...

  3. Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path 解决办法

    返回数据解析错误 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT ...

  4. 《深入浅出Node.js》第7章 网络编程

    @by Ruth92(转载请注明出处) 第7章 网络编程 Node 只需要几行代码即可构建服务器,无需额外的容器. Node 提供了以下4个模块(适用于服务器端和客户端): net -> TCP ...

  5. CSS3 transition效果 360度旋转 旋转放大 放大 移动

    效果一:360°旋转 修改rotate(旋转度数) * { transition:All 0.4s ease-in-out; -webkit-transition:All 0.4s ease-in-o ...

  6. 苹果Home键恢复(无工具篇)

    无工具法: 弹指神功.用手指轻轻弹Home,过了一阵子后可能会出现白色污垢,其后再重覆“弹”,直至正常为止.(亲测可用) 软件调试法.首先,打开任意一款应用程序,按住电源开关几秒钟,直到屏幕出现滑动关 ...

  7. Hive自定义函数的学习笔记(1)

    前言: hive本身提供了丰富的函数集, 有普通函数(求平方sqrt), 聚合函数(求和sum), 以及表生成函数(explode, json_tuple)等等. 但不是所有的业务需求都能涉及和覆盖到 ...

  8. uart启示2_异步操作的bug

    发现代码中的隐藏bug真的是一件令人振奋的事情,当然也会疲倦那么一下午! 这个bug只有在一种在一个2604计数周期的一种情况下发生,所以即使是大量的仿真,未必也会发现的了,只有在以后的设计过程中,遇 ...

  9. Java异常简介

    异常指异于常态,和正常情况不一样,有错误出现.阻止当前方法或作用域执行的问题,称之为异常. Java中所有的与异常有关的类都继承于Throwable类,Throwable类有两个儿子,一个是Error ...

  10. 【引】runtime全解析,P2:关于Class 和 MetaClass

    几个基本的概念: id,id的定义是,typedef struct objc_object { Class isa;} *id; id是指向struct objc_object的一个指针.这个意思是, ...