判断是否空_使用gray码进行编码,如何判断异步FIFO空满?是否有漏洞?

前言:如果使用二进制编码,FIFO的空满状态下的指针都是相同的,区别是前者发生在复位操作时,或当读地址读出FIFO中最后一个字,然后读地址追上了写地址; 后者当写指针转了一圈,折回来(wrapped around)又追上了读指针,已经读过的地址空间再次被写地址写入。

相关文章:

不是诗人:第三章 同步电路与跨时钟域电路设计_ FIFO空满信号生成机制与深度设计方法​zhuanlan.zhihu.com

gray码进行编码,如何判断FIFO空满?

1、二进制下区分满状态和空状态的方法:

在地址中添加一个额外的位(extra bit),当写指针增加并越过最后一个FIFO地址时,就将写指针这个未用的MSB加1,其他位回零。对读指针进行同样的操作。此时,对于深度为

的FIFO,需要的读/写指针位宽为(n+1)位。

满:如果两个指针的MSB不同,而其他位相同,说明写指针比读指针多折回了一次;如r_addr = 0000,而w_addr = 1000为满。

空:如果两个指针的MSB相同,则说明两个指针折回的次数相等。其余位相同,说明为空

2、若使用gray码进行同步,如何判断空满?

:依据两者完全相等,包括MSB

: 必须同时满足以下3条:

05230252d9921e66b308d232e2ae53ab.png
  • 写指针(wptr)和同步过来的读指针(rptr)的MSB不相等,因为wptr必须必rptr多折回一次。(同二进制编码)
  • 写指针(wptr)和同步过来的读指针(rptr)的次高位(第三个bit位)不相等,如上图位置7和位置15,转化位二进制对应的时0111和1111。二进制下的111相等,代表同一位置。
  • 剩下的其余位完全相同,即第二个bit位和第一个bit位,如图中的位置6和位置14,位置5和位置13

空满标志的判断方法是否有漏洞?

1、判断空满机制

  • rptr同步两个“wclk”后,在wclk时钟域与wptr进行比较,生成full信号
  • wptr同步两个“rclk”后,在rclk时钟域与rptr进行比较,生成empty信号

2、空满机制分析

假设读写时钟频率接近

939f7420098bca942b46e11c8d3a3c86.png
  • 上图rptr同步两个"wclk"后,在wclk时钟域与wptr进行比较,比较相同,符合条件,生成full信号。
  • 但在rptr和wptr进行比较时, rptr已经更新为5.当FIFO认为自己满的时候,读地址又从里面读走了两个数据,即FIFO并没有真正的满

因此:

  • 对于full信号的生成机制,同步后的读地址一定是小于或者等于当前的读地址,所以此时判断FIFO为满不一定是真满,这样更保守;
  • Empty信号的机制同样成立,“空”时,不一定是真“空”

3、总结

异步FIFO通过比较读写地址进行满空判断,但是读写地址属于不同的时钟域,所以在比较之前需要先将读写地址进行同步处理,此机制保证了FIFO在空满极限情况下,依然留有余量,存在一定的冗余空间以防写满溢出读空多读的情况。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值