边沿检测和异步复位



reference : http://www.cnblogs.com/funny-xiaomao/archive/2012/06/20/2556202.html

最近要应付考试,还要准备六级,学FPGA的时间自然就少了。考完六级就好了,不过貌似这次可能又过不了了。这几天做了下边沿检测和异步复位同步释放的实验。突然觉得那么不好理解的东西现在觉得还蛮有意思的。

    边沿检测。以前做按键消抖的时候,使用边沿检测总觉得相当费解,原因是没有想到去看RTL图,总是在纠结代码。现在看着图,感觉蛮好理解了。利用寄存器打一拍,然后再和最初的输入做比较。就是当前值和前一时刻的值进行比较,前一时刻即为寄存器输出的值。如果当前时刻值为高,前一时刻置为低,说明发生了上升沿跳变;当前时刻值为低,前一时刻为高,则发生了下降沿跳变。( 寄存器打一拍,相当于把 clk_det往后延迟一个时钟周期再赋值给clkdet1)

再看看代码,就更清楚了

注释掉的部分是用寄存器打了两拍的代码,其实没有本质区别。




 

  异步复位同步释放。复位操作是异步的,不需要等待时钟信号。而释放复位信号的时候,即rst_n2的输出,就需要等待时钟信号了。也算是异步信号同步化吧。(同步释放指什么?怎么算是对信号同步释放,此处应是信号的非复位输出,只与clk有关系)

    RTL图可以很清晰的解释异步复位同步释放的概念,还有上面代码表达的意思。

    如果加入了锁相环之后呢,当然就比上面的麻烦一点了。比如下面这个,复位信号同步之后接入pll的aerset,经过pll的locked和之前同步的复位信号进行与操作,然后再进行同步,就得到了最后的系统复位信号了。

     至于代码也不过是反复的用异步复位,同步释放而已。

     这次终于把边沿检测异和步复位同步释放给弄明白了。很多时候我觉得做完一个实验之后并不能马上明白其中的道理,就需要想一段时间,然后在某个时刻再去做一做,想一想,就会恍然大悟,原来这么简单,只是需要再重复一次,再多想一下。










  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值