一、FIFO简单讲解
-
FIFO的本质是双口RAM, 先进先出,可以同时读写。
-
重要参数:
1.fifo深度(简单来说就是需要存多少个数据)
2.fifo位宽(每个数据的位宽) -
FIFO有同步和异步两种,同步即读写时钟相同,异步即读写时钟不相同
- 1.同步FIFO作为数据缓存,例如信号采集的多通道设计系统,各个通道产生有效数据的时机完全时外部时间决定的,这时若两个通道同时有了数据,那就可以用FIFO先缓存一下,在更高的层次设计FIFO的扫查模块来分批进行数据上传。
- 2.异步FIFO可以解决跨时钟域数据传输的问题,在应用时需根据实际情况考虑好fifo深度即可。
-
本文主要涉及异步FIFO的设计。
二、总体设计思路
顶层设计思路如下,主要包括双端口的RAM(通过读写控制模块可以等效为FIFO)、读写控制模块、读写指针同步模块:
- FIFO:作为存储单元,接收读地址和写地址,写入数据,写使能信号;
- 写控制模块:在写时钟域时钟的控制下,产生写地址和写满信号;
接收读控制模块发来的读指针与本模块的写指针进行对比,发出满信号,当FIFO写满后full信号拉高,写地址不再增加,即不能继续向FIFO写入数据;送出写指针到读控制模块; - 读控制模块:在目的时钟域时钟的控制下,产生读地址;接收写控制模块发来的写指针与本模块的读指针进行对比,发出读空信号,当FIFO读空后empty信号拉高,读地址不再增加,即不能继续从FIFO读出数据;送出读指针到写控制模块;
三、设计要点解析
-
1、读空信号如何产生?写满信号如何产生?
- 读空信号:复位的时候,读指针和写指针相等,读空信号有效(这里所说的指针其实就是读地址、写地址)。当读指针赶上写指针的时候,写指针等于读指针意味着最后一个数据被读完,此时