如何设计一个对按键信号进行计数的计数器?

电子说

1.2w人已加入

描述

实验任务: 本实验中要设计一个对按键信号(key_in)进行计数的计数器。

实验原理 整个实验电路包含四个模块:

① erzp模块完成按键消抖功能,默认抖动时间为10MS;

② detect_module模块用于检测按键信号的下降沿,当检测到下降沿后,输出一个时钟周期的高电平。

③ get_state模块:将按键信号转换成状态信号,当按键按下后,状态转换0→1→0→1→……..。

④ cnt10模块:完成对按键信号进行计数。clk:系统时钟,cnt_en:计数使能(1:计数,0:暂停),cnt_single:计数信号,rst_n:复位信号,updown_state:加1计数或减1计数控制(1:加1计数,0:减1计数)。data:计数结果输出。

源代码撰写:

erzp****模块:

默认抖动时间最多为10ms,框1与框2的功能就是,计数当前电平若处于一直处于低电平就key_low一直自加1 ,一旦不是低电平了key_low就清0.高电平key_hign同理。当key_low或key_hign当前计数到了10ms,说明当前已经过了抖动状态。并且输出当前消抖后的对应电平。

计数器

detect_module****模块:

这里主要是利用了一个寄存器,让上一个时钟状态的按键状态和当前的对比,不一样说明有了边缘变化。

计数器

get_state****模块:

计数器

cnt10****模块:

计数器

原理图绘制顶层文件流程:

1.将以上四个.v文件依次转换为电路器件,生成BSF文件如右图所示

计数器

计数器

2.建立一个顶层原理图bdf(后建立的要设为顶层,与项目工程名称一致。)

计数器

计数器

在原理图中可以放置器件,可以看到刚刚生产的器件。并按逻辑进行连接。并修改对应端口名。完成之后,为了之后仿真,可以转成.v文件。

计数器

计数器

计数器

生成如图所示:以后也可将此项目作为整个调用的器件,生成BSF文件

计数器

计数器

计数器

RTL视图:

计数器

测试代码撰写: 测试时,需将原理图移除,将转化的.V文件加进来。

计数器

测试结果

计数器

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分