对异步FIFO的全面理解

什么是异步FIFO?

FIFO是一种先进先出的数据缓冲器,与普通的存储器相比,没有外部地址线,其内部地址线自加1,因此FIFO只能顺序写入顺序读出。

异步FIFO的意思就是FIFO的读写时钟是异步的,因此可用于两个不同时钟系统之间的数据传输。

异步FIFO的组成及原理

异步FIFO主要有四个部分,读写时钟、读写指针、读写数据、空满标志。

复位的时候,读写指针都为0,读指针总是指向要读的位置,读完自加1,写指针总是指向要写的下一个位置,写完自加1。当写指针越过FIFO的最后一个地址,折回来赶上读指针时,说明此时FIFO写满了,当读指针越过FIFO的最后一个地址,折回来赶上写指针时,说明此时FIFO读空了。

由于空满的判断条件都是写指针等于读指针,因此为了区分是写满状态还是读空状态,还需要在读写指针前加一位最高位。使读写指针在越过最后一个地址时,这个最高位加1。这样,初始时,读写指针的最高位都是0。当写指针越过FIFO最后一个地址时,写指针的最高位为1,而读指针的最高位还是0,此时,除了最高位不一样,读写指针其它位都一样,这种情况代表写满。当读指针也越过最后一个地址时,读指针的最高位为1,此时读写指针的所有位,包括最高位都相等,这种情况代表读空。

由于读写指针的比较要在同一个时钟下进行,因此还存在指针跨时钟域的问题,如果指针用的自然码编码,则在跨时钟域时不同位的变化可能不是同时发生,导致出现了一些中间状态,对指针比较产生影响。如果用格雷码编码,一次只有一个位变化,这样即使采错了,也只是出现当前编码或前一个编码,不会出现其他状态(?为什么就没关系了)。因此指针采用格雷码编码。

回到刚才的自然码判断空满,读写指针全等时表示空,除最高位相反,其它相等表示满,即

0111--0111  空

0111--1111  满

若是转成格雷码,上面两个例子对应的就是

0100--0100  空

0100--1000  满

所以格雷码下判断空满的条件是全等表示空,最高位和次高位相反,其它位相等表示满。

 

 

 

 

 

 

参考文章:

https://blog.csdn.net/alangaixiaoxiao/article/details/81432144

http://bbs.eetop.cn/thread-857651-1-1.html?_dsign=1ad959fa

https://blog.csdn.net/dongdongnihao_/article/details/79859520

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值