一、FIFO 简介
1、概念
FPGA使用的FIFO一般指的是对数据的存储具有先进先出特性的一个缓存器,常被用于数据的缓存或者高速异步数据的交互,也即所谓的跨时钟域信号传递。它与FPGA内部的RAM和ROM的区别是没有外部读写地址线,采取顺序写入数据,顺序读出数据的方式。
可以分为单时钟FIFO和双时钟FIFO。
单时钟FIFO: 单时钟FIFO具有一个独立的时钟端口clock,因此所有的输入输出信号都同步于clock信号。单时钟FIFO常用于同步时钟的数据缓存。
双时钟FIFO: 写端口和读端口分别有独立的时钟,所有与写相关的信号都是同步于写时钟wrclk,所有与读相关的信号都是同步于读时钟rdclk。双时钟FIFO常用于跨时钟域的数据信号的传递。
2、常用参数
FIFO的宽度:一次读写操作的数据位N
FIFO的深度::FIFO可以存储宽度为N位的数据的个数。
空标志:FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读出。
满标志:FIFO已满或将要写满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出。
读时钟:读FIFO是遵循的时钟,上升沿有效。
写时钟:写FIFO时遵循的时钟,上升沿有效。
3、读入写出顺序
1、写数据:当wrempty(写空)有效且wrfull(写满)无效时,wrreq(写请求)置位,过一个周期开始写数据。
2、写满时:wrfull(写满)有效,过三个周期,rdfull(读满)有效;
过一个周期,读请求信号有效,开始读数据。开始读数据后,wrfull(写满)信号失效。
3、读空时:rdempty(读空)信号有效,过两个周期,wrempty(写空)信号有效;过一个周期上升沿到来,写请求信号有效,然后开始写数据。
FIFO IP核 内部机制
1、读空FIFO时,读空信号rdempty先拉高,过两个时钟周期后写空信号wrempty才拉高,这是由FIFO内部结构决定的,并且在写请求信号wrreq拉高后的第4个时钟周期读空信号rdempty才拉低。
2、写满FIFO时:写满信号wrfull拉高3个时钟周期后,读满信号rdfull才有效,并且在读请求信号rereq拉高后的第4个时钟周期写满信号wrfull才拉低。