异步fifo常用于跨时钟域之间的数据传输,其可以实现数据的存储,也可以处理异步时钟数据传输的亚稳态问题。异步fifo的设计其关键点:通过格雷码对内部读写指针进行编码,然后比较产生空满标志,以维护fifo的正常工作。
很多人在面试时被问到为什么异步fifo中需要用到格雷码,可能大部分的答案是格雷码可以消除亚稳态。这种回答比较模糊,今天我们就针对这个来深入探讨一下。如下图所示:
push信息产生的连续写指针wpt, 通过同步后,在rclk域与rpt进行比较,以产生rclk域的empty信号。empty信号用于控制读操作,以避免在fifo为空时仍然进行读操作而导致的错误,并影响后续所有的fifo读操作。
pop 信息产生的连续读指针rpt, 通过同步后,在wclk域与wpt进行比较,以产生wclk域的full信号。full信号用于控制写操作,以避免在fifo为满时仍然进行写操作而导致的错误,并影响后续的所有的fifo写操作。
异步时钟产生的亚稳态发生在不同时钟域信号wpt和rpt的比较上。对于多bit的读写指针信号,在跨时钟域传输时会存在bit之前不同延时导致的毛刺,比如写地址在从0111到1000转换时4条地址线都会跳变,这样在写地址同步到读时钟域后得到的写地址可能是0000-1111的某个值,因此本来wpt = rpt的情况变成了wpt > rpt的情况,本来应该出现空状态,因为亚稳态导致未被发现,读操作继续进行,从而影响了整个fifo的功能。
我们知道,格雷码编码的连续数值之间只有1bit会发生变化,这种特性其实不能消除异步时钟数据传输出现的亚稳态。假设格雷码编码的写地址从001(2)-> 011(3),读时钟域同步出错,写地址为001->001,也就是地址没有跳变,此时用这个错误的写地址与读地址进行比较,出现虚假的空标志,但这种虚空只是提前阻止了后续的读操作,不会发生读空的情况,因此不会影响后续的操作及整个fifo的功能。同样对于读地址同步到写时钟域时也会出现虚满的情况,这种虚空和虚满,不会影响fifo的功能,因此gray码保证的是在出现亚稳态的情形下,fifo依然能够正常的工作。
华为正在打造最大“光储直柔”近零碳园区—安托山基地
安全光栅使用说明详解
呼兰在线细数智能居家办公槽点
用“芯”助力家电能效与安全,国民技术亮相青岛家电学术年会
全面屏手机实力种草,iPhone8,三星s8,三星note8齐上榜!
异步FIFO-格雷码
手机直连卫星宽带,离我们还有多远?
QLED, Mini LED, Micro LED 技术解析
维信诺(广州)全柔AMOLED模组生产线点亮
2020年我国工业机器人完成产量237068台
三星计划全面提高DDR5产量,过去一个月上涨5-10%
小米mix2时候上市?小米真旗舰并非小米6,小米mix2搭载骁龙835+4K屏+6GB+IP68防水即将上市
着陆雷达系统的性能与可靠性决定着“毅力号”探测车能否安全登陆火星表面
国产CPU的发展现状分析
浅析拆卸KUKA机器人2轴平衡配重V1
什么是漏磁变压器_漏磁变压器的工作原理
MG-LINK Mini蓝牙串口通讯模块
国芯思辰 | PB85RS128可用于无人机数据存储,助力各行业优化升级
一文了解FDM 3D打印机堵头原因
台积电2021年第一季度营收将再创新高