学习特权同学按键消抖实验课程的一点看法

最近看了特权同学09年录的FPGA视频学习课程,其中讲到第9课——按键消抖实验课程,有些体会、迷茫和感受,记录一下。首先,特权同学介绍了边沿检测法,我也总结学习一下;其次,对特权同学课程中的例子谈一下自己的理解,因为一开始自己丝毫看不懂,在网上搜索到的各种解释都和特权同学说的、注释的没有什么区别,我自己还是没理解透彻,于是自己边仿真、边看rtl视图,边啃代码,终于明白了一些,但竟在网上无人提起自己所想的东西,也许是自己想错了呢,记录下来先。


首先,总结一下边沿检测法

这个方法一开始在测航天一家单位的FPGA软件时,审代码见到过,当时自己就没理解没吃透,今天特权同学一讲顿时醒悟,看来这个方法在工程实践中经常用到。

边沿检测法的目的就是要检测某一信号或数据从1跳变为0的一拍,最终结果为维持一个clk的高脉冲信号。

边沿检测采用二级寄存器方法实现。例如对data信号进行边沿检测:首先,data被送入reg1中,在下一个clk时,reg1中的数据被存入reg2,即reg2中的数据始终比reg1中的数据晚一个始终。那么,采用reg1中的数据取反,然后和reg2中的数据相与,结果会是:当reg1中的数据由1→0时,与的结果为一个时钟的高脉冲。

示例代码:

reg a;

reg a_r;

always @(posedge clk)

    a_r<=a;

wire b=(~a)&a_r;

则b仅会在a由1→0时变为1个clk宽度的高脉冲信号,其余时候均为低电平。


第二,谈谈特权同学按键消抖实验代码

以下代码为按键消抖实验代码(摘自网络)

//说明:当三个独立按键的某一个被按下后,相应的LED被点亮;
//        再次按下后,LED熄灭,按键控制LED亮灭

module sw_debounce(
            clk,rst_n,
            sw1_n,sw2_n,sw3_n,
               led_d1,led_d2,led_d3
            );

input   clk;    //主时钟信号,50MHz
in
  • 8
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值