异步FIFO

当写指针超过最后的FIFO地址时,写指针将使未使用的MSB(Most Significant Bit的缩写,指最高有效位)递增,同时将其余的位设置为零,如图1所示(FIFO已经回环并翻转指针的MSB位)。

如果两个指针的MSB相同,则意味着两个指针都回环了相同的次数。

使用n位指针,其中(n-1)是访问整个FIFO存储器缓冲区所需的地址位数,将写时钟域的写指针同步到读时钟域,当两个指针(包括MSB)相等时,FIFO为空。 将读时钟域的读指针同步到写时钟域,当两个指针(MSB除外)相等时,FIFO就会满(面试陷阱:请各位童鞋思考为什么是这样,反之是否可以)。

尝试将二进制指针值从一个时钟域同步到另一个时钟域是有问题的,因为n位指针的每个位可以同时改变。例如,二进制数中的7-> 8是0111->1000,所有位都改变了,实际中可能出现的情形有16种,即0111-> 1000的变化可能出现0111-> 1001、0111->1011等(请童鞋们思考原因哦,这是Cisco 19年的面试题)。

 

  格雷码的最大优势是任何两个相邻字之间的代码距离只有1(在n位码的递增变化中只有1位可以变化)。

回到之前二进制数中的7-> 8变化的例子,二进制数变化为0111->1000,此时使用了格雷码的变化是0100->1100,即只有最高位发生了变化。使用了格雷码后的递增变化可能的情形有2种,即0100->1100或0100->0100,异常情形为0100->0100。异常情形为指针未发生正常跳变,带来的影响为判断空满状态时出现了“假空”或者“假满”。

假设写指针为为7->8跳转,读指针为6->7跳转。写指针由于异常情形出现了7->7的跳转,将写指针同步到读时钟域,读写指针都指向7,出现了“假空”。“假满”与之类似,不再赘述。“假空”和“假满”的出现降低了FIFO的性能,但是避免了亚稳态的问题,是可以接受的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值