异步fifo_浅谈数字电路设计中的异步FIFO(一)

随着芯片技术的发展,人们总想在芯片里面实现更多的功能,添加不同的模块,所以导致设计的规模越来越大,在同一颗芯片内部,时钟网络也越来越复杂,往往有很多个时钟同时存在,并且需要在不同的工作模式下,进行时钟切换。这种多时钟域带来一个设计的难点,就是如何设计异步时钟之间的接口电路。

2a63e637bc4df02c01d3cf2a4b686fc8.png

我们都知道,信号在不同时钟域之间进行传输的时候,非常容易出现亚稳态(亚稳态的问题,今天先不细谈,可以简单的认为,亚稳态会导致寄存器采集到的数据错误)。

根据信号的分类,单比特信号多比特信号,发送时钟域接收时钟域的快慢关系的不同,会有不同的解决亚问题的办法(后面会写文章详谈)。

在这些方法中,异步FIFO(First In First Out)是解决这个问题一种简便、快捷的解决方案。使用异步FIFO可以在两个不同时钟域之间,方便地传输实时数据。所以异步FIFO在网络接口、图像处理等领域, 得到了非常广泛的应用。

a446f8e9f8698a9da2ee6785478d09a8.png

异步FIFO概念

异步FIFO是一种可以实现异步读写操作,先进先出(First In First Out)的电路,通常被使用在数据传输接口的部分,用来存储、缓冲数据,解决在两个异步时钟之间的数据传输问题。

在异步电路中,因为两个时钟之间的周期和相位之间,完全相互独立,所以在数据发送,采集过程中,有很大的概率,会发生数据丢失或者过采样问题(发送时钟域为快时钟,接受时钟域为慢时钟,出现丢失数据情况,发送时钟域为慢时钟,接受时钟域为快时钟,出现数据过采样情况)。

异步FIFO设计

FIFO的存储介质为一块双端口RAM,可以同时进行读写操作。

  • 在写时钟域部分,由写地址控制逻辑,产生写地址和写控制信号;
  • 在读时钟域部分,由读地址控制逻辑,产生读地址和读控制信号;
  • 在空/满标志位控制部分,通过比较读写地址,产生空/满标志位。

设计异步FIFO有两个难点:

  1. 如何同步异步信号,抑制亚稳态的发生。
  2. 如何正确地设计空、满标志位的控制电路。
a31225e6f384184d7bde5f7697458f63.png
  • 抑制亚稳态的发生

理论上讲,亚稳态是不可能完全消除的,只能通过技术手段,将发生的概率降低到可接受的范围之内。一般通过以下两种方式,来达到降低亚稳态发生概率的目的。

  1. 写地址/读地址用格雷码进行编码。因为格雷码具有,每次只变化一比特的特点,所以在数据变化过程中,可以有效地降低亚稳态的产生概率。
  2. 采用触发器来同步异步输入信。一般我们认为使用两级触发器,就可以将出现亚稳态的概率,降低到一个可以接受的程度(有研究证明,再采用更多级数的触发器,降低概率有限)。

小结

今天我们聊了异步FIFO的概念,和在进行FIFO设计中要注意的第一个问题。第二个空满标志位的产生问题,因为比较复杂且比较关键,所以后面会再写一篇文章详细介绍。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值