FIFO学习

文章介绍了异步FIFO的基本原理,包括其宽度、深度、满标志和空标志等参数。重点讨论了在多码突变的格雷码和异步时钟域中的亚稳态现象。使用格雷码可以降低跨时钟域同步时出现亚稳态的风险,虽然可能出现假空或假满的情况,但不会导致功能错误。
摘要由CSDN通过智能技术生成

参考:FPGA: 异步fifo介绍[1]-基本原理(含verilog代码_哔哩哔哩_bilibili

FIFO:first in first out先入先出算法

异步FIFO是指在读写指针时采用不同的时钟域。

FIFO的常见参数

FIFO的宽度:即FIFO一次读写操作的数据位;
FIFO的深度:指的是FIFO可以存储多少个N位的数据(如果宽度为N)。
满标志:FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出(overflow)。
空标志:FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读出(underflow)。
读时钟:读操作所遵循的时钟,在每个时钟沿来临时读数据。
写时钟:写操作所遵循的时钟,在每个时钟沿来临时写数据

 如上图异步时钟控制读写指针运行移动,根据状态(写满/读空)不断交替激活/沉默读写指针。

eg:空FIFO时状态空先写入知道写满状态,沉默写指针、激活读指针,直到读空;激活写指针、沉默读指针,直到写满。

主要是有两个问题

1.对于多码突变(eg:1011→1100)的green码

 2.异步时钟域的跨时钟域处理问题

参考链接:【读书笔记】Verilog的亚稳态现象和跨时钟域处理方法_verilog 亚稳态_xlinxdu的博客-CSDN博客

1.对于多码突变(eg:1011→1100)的格雷码

其重要特征是一个数变为相邻的另一个数时,只有一个数据位发生跳变。

首位格雷码直接下取,第二位格雷码是二进制第一位与第二位的异或

        亚稳态是在时钟跳变的时,寄存器采样到一个逻辑0和逻辑1参考电压的中间值,这是亚稳态的概念。而亚稳态经过一段时间逐渐恢复成逻辑0或1,而具体会成为0还是1这件事是无法预测的。说回来,出现亚稳态的原因根源是被采样信号在时钟沿发生了跳变。一般情况下,同步时钟在保证setup和hold的情况下不会出现亚稳态(这也同步时钟不需要转格雷码的原因),而异步时钟相位关系无法设定,有可能同步前的信号正好在目标时钟沿跳变,有概率出现亚稳态,使用格雷码降低这种概率。一旦格雷码在跳变时也出现亚稳态,因为亚稳态最终也会恢复成逻辑0或1嘛,所以亚稳态后的格雷码相比于跳变前也可能会出现两种情况:正常跳变或者没有跳变。对于正常跳变,当然不会对结果产生任何影响;对于非正常跳变也就是格雷码没有跳变,会使被同步的指针更加保守,而可能加剧假空或者假满的程度,但不会造成功能错误,这也是选择用格雷码跨时钟的重要原因。

 2.异步时钟域的跨时钟域同步问题

这里和亚稳态与打两拍概念相关,下次想明白在写笔记

单比特流文件:打两拍

多比特流文件:FIFO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值