async_fifo实现与注意要点

  1. 目录

    async_fifo结构说明

    为什么使用格雷码

    空满判断标志

    假空假满

    注意事项


    async_fifo结构说明

和同步fifo一样,中间是双口的ram,左右两个模块分别是读写地址的产生和判断空满信号。比如在FIFO wptr &waddr模块中产生ram的地址信号waddr,然后将waddr这个二进制编码的地址信号转换为格雷码来进行跨时钟域处理(注意,二进制编码转换格雷码是组合逻辑,组合逻辑的输出不能直接的进行跨时钟域,因为毛刺会影响跨时钟域的结果,需要将组合逻辑的输出放到寄存器中,之后再进行跨时钟域的处理)。在读时钟域下的rq2_wptr信号与原来的写时钟域的下的rptr信号来进行空状态的判断,以上是从写时钟域到读时钟域下的操作,从读时钟域到写时钟域同理。

为什么使用格雷码

使用格雷码的根本原因就是就算跨时钟域的时候,出现了亚稳态,整个fifo的功能也不会出现错误。比如用二进制的waddr来进行跨时钟域,比如waddr从7到8的变化(0111->1000),raddr此时处于6的位置,跨时钟域的时候,寄存器会随机的取到中间状态的一个值,所以在rq2_wptr处得到的结果可能是2,此时raddr是6,相当于fifo存就存到了2,读却读到了6,这样会使fifo的功能错误。如果使用格雷码,waddr从7到8的变化(0100->1100),中间就涉及到了一个值的变化,就算出现亚稳态,不是1100就是0100,是1100的话,正好功能正确,如果是0100的话,不影响fifo的读,最多可能出现fifo的假空判断,不会出现fifo功能的错误,即读大于写(读指针指向当前的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值