跨时钟域设计四之异步FIFO(附代码)

本文详细探讨了异步FIFO的设计问题,包括二进制实现指针的潜在问题,同步指针对满标志的影响,格雷码在解决这些问题上的应用,以及如何生成空满标志。此外,还提供了相关的代码实现示例。
摘要由CSDN通过智能技术生成

异步FIFO

  • 二进制实现指针的问题
  • 同步指针的影响
  • 格雷码实现指针
  • 空满标志的产生
  • 代码实现

1.二进制实现指针的问题

由于空满标志的产生,需要比较写指针与读指针是否相等。而写指针在写时钟域下,读指针在读时钟域下,两者比较需要通过同步器进行。时钟二进制计数器实现指针,可能会导致取样错误。

比如,计数器从FF跳转到00,其中每一位都发生了翻转,虽然能通过同步计数器避免亚稳态,但是仍然能得到不相关的取样值。如果同步时钟上升沿在FF向00转换的中间位置到来,就可能将8位二进制数的任何取样并同步到新的时钟域中。

2.同步指针的影响

图1.FIFO满时序

 wtr_clk在t4上升沿时,wr_ptr与rd_ptr相等产生full标志。由于同步rd_ptr指针的影响,同步到wtr_clk时钟域的rd_ptr_sync在延后两个时钟周期t6、t7才发生变化,取消full标志。但实际在t6周期,fifo就未满。这虽然阻止数据写入的周期,但是对数据的准确性是无害的。

图2、FIFO空时序

与满时序类似,在FIFO空是也只会阻止对FIFO进一步的读访问。 

3.用格雷码实现指针

将格雷值转换为二进制值,根据条件递增二进制值,将二进制值转化成格雷码,将计数器的最终格雷值保存到寄存器中。

  • 6
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值