异步FIFO格雷码及同步相关问题?

零、前言

关于异步FIFO如何设计请参考之前的一篇文章:手写异步FIFO。

关于异步FIFO的空满现象可以参考:你真的理解异步FIFO读写中的空满现象吗?

一、格雷码的作用

格雷码的每两个相邻码字只有1bit的变化,将多bit的地址转换成对应的格雷码然后进行跨时钟域的传递,就可以直接使用两级flop进行同步。并且由于只有一个bit变化,那么即使采样错误也只有一种错误的可能,也即1变成了0或者0变成了1,不会出现其他各种不稳定的状态。降低了亚稳态发生的概率,以及发生逻辑冒险的概率及其带来的影响

而且应用到异步FIFO的地址指针中,采样到的只有一个bit不同的错误值,其实也是正确的。例如在使用格雷码时,假设写指针从001->011,那么在读时钟域采样到的写指针的值只可能是001->001->011, 或者001->011->011,而不会出现除了这两个值以外的值。如果采样到011,那么采样是正确的;如果采样到001,其实也就是和读时钟域上一次同步到的写指针的值是一样的,最多只是出现假空现象,这是不影响FIFO的正常工作的。

二、如果现在同步到读时钟域的格雷码写指针是011,而写时钟快很多,写时钟域的格雷码写指针已经发生变化:011→010→110,在读时钟域这边,就需要直接同步110,那么,读时钟域的格雷码写指针就会从011变为110,第0位和第2位都发生变化,这会在采样时造成影响吗?

可以参考这篇文章:跨时钟域传输的黄金搭档:异步FIFO与格雷码

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

耐心的小黑

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

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

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

打赏作者

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

抵扣说明:

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

余额充值