关于FPGA设计中的亚稳态问题

文章探讨了在处理按键输入时可能出现的亚稳态问题,以及如何通过两级寄存器同步来消除这一问题。在按键下降沿检测中,使用四寄存器移位寄存器能确保信号稳定,即使存在0111或1111的状态,也能在后续时钟周期正确检测到下降沿,但可能会延迟一个时钟周期。此外,文中提到其他如FIFO和异步复位同步释放的解决方案将在后续笔记中进一步阐述。
摘要由CSDN通过智能技术生成

一、描述

涉及到按键的应用时,常见操作是提取变化边沿,但按键输入信号这样的异步信号有一定的几率不满足寄存器的建立保持时间,就会出现亚稳态现象。在同步低速域信号到高速域时,常见的就是两级寄存器寄存,以达到尽可能消除亚稳态的作用。之前的笔记中关于按键检测操作如下图,明显地,直接将按键的物理输入key_in赋值给key_reg0,这样key_reg0发生振荡或者稳定在0、1都是有可能的,后面直接用key_reg0用于边沿判断明显是不安全的。

解决思路是:在对边沿进行判断时,先用两级寄存器对key_in信号进行同步消除亚稳态。再用两级寄存器对优化后的信号进行寄存判断。检测下降沿模型如下:

代码操作:就是四个寄存器组成的移位寄存器。

疑惑:刚接触这个概念的时候,有一点疑惑。在按键下降沿没来的时候四个寄存器的都是1,一旦某个瞬间在时钟沿检测到按键的下降沿上,经过稳定后,key_in_r[0]的信号可能不能反映真是的按键意图0,而是可能稳定在0或1,四个寄存器有两种状态,0111或1111,当为0111时,这种情况有种歪打正着的感觉,传递到后两级寄存器后是可以正常检测出下降沿的,但1111这样的情况就检测不到了,这样后续的检测不是失去了可靠性了吗?

在后来,仔细画图理解每个细节之后,发现如果是0111这种情况那是最好,如果是1111的话也是可以的,在紧跟其后的一个时钟采集下,会检测到按键下降沿之后的常态0,这样一级级传递下去也是可行的,只不过检测到下降沿会比正常情况要延迟一个时钟周期。细节看下图:

结果是显然的!

二、总结

  • 理解了可能由于按键输入引起的亚稳态问题。

  • 掌握了处理这种类型亚稳态的基本方法。

  • 还有一些其他情况引起的亚稳态的解决方案涉及到FIFO、异步复位同步释放的内容,会在之后的笔记中记录。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李亚有鸭梨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值