异步FIFO

yummy 阅读:292 2022-04-27 20:38:24 评论:0

FIFO在硬件上是一种地址依次自增的Simple Dual Port RAM,按读数据和写数据工作的时钟域是否相同分为同步FIFO和异步FIFO,其中同步FIFO是指读时钟和写时钟为同步时钟,常用于数据缓存和数据位宽转换;异步FIFO通常情况下是指读时钟和写时钟频率有差异,即由两个异步时钟驱动的FIFO,由于读写操作是独立的,故常用于多比特数据跨时钟域处理。

FIFO数据宽度:FIFO一次读写的数据位宽。

FIFO存储深度:FIFO可存储的固定位宽数据的个数。

读时钟:在每个读时钟的边沿来临时读数据。

写时钟:在每个写时钟的边沿来临时写数据。

读指针:总是指向下一个将要被写入的单元,复位时,指向第1个单元。

写指针:总是指向当前要被读出的数据,复位时,指向第1个单元。

满标志:FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出。

空标志:FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读出。

二进制FIFO指针的考虑

将一个二进制的计数值从一个时钟域同步到另一个时钟域的时候很容易出现问题,因为采用二进制计数器时所有位都可能同时变化,在同一个时钟沿同步多个信号的变化会产生亚稳态问题。而使用格雷码只有一位变化,因此在两个时钟域间同步多个位不会产生问题。所以需要一个二进制到gray码的转换电路,将地址值转换为相应的gray码,然后将该gray码同步到另一个时钟域进行对比,作为空满状态的检测。

格雷码域如何判断空与满。 

判断读空时:需要读时钟域的格雷码rgray_next和被同步到读时钟域的写指针rd2_wp每一位完全相同;

判断写满时:需要写时钟域的格雷码wgray_next和被同步到写时钟域的读指针wr2_rp高两位不相同,其余各位完全相同;

由于是异步FIFO的设计,读写时钟不一样,在产生读空信号和写满信号时,会涉及到跨时钟域的问题,如何解决? 

解决方法: 加两级寄存器同步 + 格雷码(目的都是消除亚稳态)














————————————————

原文链接:https://blog.csdn.net/alangaixiaoxiao/article/details/81432144


原文链接:https://blog.csdn.net/qq_40807206/article/details/109555162


本文 zblog模板 原创,转载保留链接!网址:https://xn--zqqs03dbu6a.cn/?id=41

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。