备战秋招[五]-异步FIFO

本文详细探讨了异步FIFO(先进先出)的设计,重点在于如何处理异步时钟域中的信号同步和满空状态的检测。介绍了同步与异步FIFO指针的区别,强调了异步FIFO在设计时的挑战,如二进制和格雷码指针的使用,以及满标志和空标志的生成。此外,还讨论了格雷码计数器在不同设计风格中的应用,以及异步FIFO在不同时钟速度下的行为。文章提供了FIFO设计的关键细节,旨在确保设计的安全性和准确性。
摘要由CSDN通过智能技术生成

欢迎关注个人公众号摸鱼范式

异步FIFO

参考资料为Clifford E. Cummings的论文。

1.0 摘要

异步FIFO是一种FIFO设计,数据从一个时钟域进入到FIFO,在另一个时钟域读取数据,并且两个时钟域是异步。

异步FIFO的用于将数据从一个时钟域安全准确地传递到另一个时钟域。

设计异步FIFO的方法有很多,其中也有很多错误的设计方法。这些不正确的设计方法,在90%的时间内都能够正确运行,而大多数正确的设计方法能够保证在99%的时间中能够正确运行。不幸的是,在99%以上的时间中都能正常工作的FIFO也具有设计缺陷,这些缺陷通常最难检测和调试(如果你很幸运地在产品出厂前就注意到了此错误),或者诊断和召回的代价很高(直到产品由不满意的客户掌握之前才发现)。

本文讨论了一种FIFO设计风格,以及进行异步FIFO设计时必须考虑的重要细节。

下文将“异步FIFO”简称为“ FIFO”

2.0 传递多个异步信号

将多个信号从一个时钟域同步到另一个时钟域,并确保所有的信号都同步到新时钟域中的同一时钟周期这是一个关键问题。 FIFO在设计中用于将多位数据从一个时钟域安全地传递到另一个时钟域。 通过一个时钟域中的控制信号将数据存入FIFO缓存中,并通过来自第二时钟域的控制信号将数据从同一FIFO缓存的另一个端口中读取并删除。 看上去,设计FIFO似乎很容易。

FIFO设计的难点在于生成FIFO指针以及FIFO上的满和空状态确定。

2.1 同步FIFO指针

对于同步FIFO设计(在同一时钟域中执行FIFO读写操作),一种实现方式是对FIFO的写入和读取次数进行计数,递增(以FIFO写入但不读取) ),递减(在FIFO读取但无写入时)或保持(无写入和读或同时进行写入和读取操作)FIFO计数值。 当FIFO计数器达到预定的最大值时,FIFO为满,而当FIFO计数器为零时,FIFO为空。

不幸的是,对于异步FIFO设计,不能使用增减FIFO填充计数器,因为将需要两个不同的异步时钟来控制计数器。 异步FIFO设计的满状态和空状态,必须通过比较写指针和读指针确定。

2.2 异步FIFO指针

为了理解FIFO设计,需要了解FIFO指针是如何工作的。写指针总是指向下一个要写的字;因此,在复位时,两个指针都设置为零,这也恰好是下一个要写入的FIFO字位置。在FIFO写入操作中,将数据写入指针所指向的位置,然后将写指针递增以指向要写入的下一个位置。同样,读取指针始终指向要读取的当前FIFO字。再次复位时&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值