Verilog HDL那些事_建模篇笔记(实验三:按键消抖)

实验三:按键消抖

首先将按键消抖功能分成了两个模块,电平检查模块和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来使其复位,回到最初的选择模式中。

时间: 2024-08-09 14:45:51

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

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

实验一:永远的流水灯 扫描频率配置为100Hz,即是说扫描周期为10ms.这里需要注意的是扫描周期的概念.流水灯嘛,顾名思义,扫描周期指的是流水灯扫一轮所需要的时间.听到说周期,就应该想到在建模的时候需要写计数器模块,这个计数器模块应该是神一般的独立存在,独立运行.每隔10ms复位一次,复位后又重新开始计数. 实验二:闪耀灯和流水灯 闪耀灯涉及到闪耀频率,流水灯涉及到扫描频率的概率.这里先区分一下闪耀频率和扫描频率的概念.闪耀频率对应闪耀周期,闪耀周期是针对于单个LED灯而言的,即是指LED灯亮

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

1.同步动态扫描 多个数码管的显示采用的是同步动态扫描方法,同步动态扫描指的是:行信号和列信号同步扫描,是一种并行操作. 2.数码管驱动电路实现思路      如果要求数码管显示我们想要的数字,首先需要写一个数据接收模块,这个模块接收数据之后需要做什么样的处理呢?这时候我们会想到两个数码管,其中一个显示十位数字,另一个显示各位数字,即把这个数据的十位传给其中一个数码管,各位数字传给另一个数码管来显示.这样我们就会明确了:数据接收模块需要将接收的数据进行拆分,分别输出其十位数据与个位上的数据 程序

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

设计思路: (1)       一旦检测到按键资源按下(从高电平到低电平),“电平检测模块”就会拉高H2L_Sig电平,然后拉低. (2)       “10ms延迟模块”检测到H2L_Sig高电平,就会利用10ms过滤H2L_Sig,拉高输出. (3)       当按键被释放,“电平检测模块”会拉高L2H_Sig电平,然后拉低. (4)       “10ms延迟模块”检测到L2H_Sig就会利用10ms过滤L2H_Sig然后拉低输出. 模块: 1 /********************

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

实验四和实验三的区别在于输出.实验三是检测到由高到低的电平变化时就拉高输出,检测到由低到高的电平变化时就拉低输出.而实验四检测到由高到低的电平变化时产生一个100ms的高脉冲.当检测到由低到高的电平变化时,只有消抖操作. 模块: 1 /*********************************************************** 2 module name: detect_module.v 3 function: detect pin's level change 4 5

JavaWeb01-HTML篇笔记(三)

1.1 案例四:网站的首页的显示:1.1.1 需求:网站的首页的设计:1.1.2 分析:1.1.2.1 技术分析:[HTML的表格标签]<table><tr><td></td><td></td></tr></table>属性:width :表格宽度height :表格高度border :边框align :表格水平位置: left center right<td>的属性: colspan="

JavaWeb03-HTML篇笔记(三)

1.1.1 总结:1.1.1.1 JS中的BOM对象: ? Window alert(); --弹出对话框 setInterval(); setTimeout(); clearInterval(); clearTimeout(); confirm(); --弹出一个确认窗口 prompt(); --弹出一个可输入的对话框 open(); --打开一个新窗口? Navigator :包含的是浏览器的信息.? Screen:用来获得屏幕信息:? History:浏览器的历史对象:? Location

JavaWeb04-HTML篇笔记(三)

1.1 案例二:表格隔行换色的案例:1.1.1 需求:对数据的表格进行隔行换色的显示效果,使用JQuery完成该效果.1.1.2 分析:1.1.2.1 技术分析:[JQuery的选择器] 基本过滤选择器: odd : even :[JQuery中添加和移除样式] 如果样式没有事先定义,可以使用css方法为奇数行或者偶数行设置背景颜色. 如果已经在css文件中事先将样式定义完成了,不能使用css方法了.使用JQ中的CSS类中的方法: addClass(); removeClass();1.1.2.

JavaWeb05-HTML篇笔记(三)

1.1 案例三:使用BootStrap布局首页1.1.1 需求:1.1.2 分析:1.1.2.1 技术分析:[BootStrap的组件和JS的插件]1.1.2.2 步骤分析:[步骤一]:定义一个外层div元素[步骤二]:定义里层8个div[步骤三]:为每层中的div添加元素.1.1.3 代码实现: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <!-- 根据设备宽度,调整缩

【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二:按键模块① - 消抖

实验二:按键模块① - 消抖 按键消抖实验可谓是经典中的经典,按键消抖实验虽曾在<建模篇>出现过,而且还惹来一堆麻烦.事实上,笔者这是在刁难各位同学,好让对方的惯性思维短路一下,但是惨遭口水攻击 ... 面对它,笔者宛如被甩的男人,对它又爱又恨.不管怎么样,如今 I'll be back,笔者再也不会重复一样的悲剧. 按键消抖说傻不傻说难不难.所谓傻,它因为原理不仅简单(就是延迟几下下而已),而且顺序语言(C语言)也有无数不尽的例子.所谓难,那是因为人们很难从单片机的思维跳出来 ... 此外,