目录
一、FIFO存储器概念及解释
FIFO( First Input First Output)简单说就是指先进先出。
FIFO存储器是系统的缓冲环节,如果没有FIFO存储器,整个系统就不可能正常工作,它主要有几方面的功能:
1)对连续的数据流进行缓存,防止在进机和存储操作时丢失数据;
2)数据集中起来进行进栈和存储,可避免频繁的总线操作,减轻CPU的负担;
3)允许系统进行DMA操作,提高数据的传输速度。这是至关重要的一点,如果不采用DMA操作,数据传输将达不到传输要求,而且大大增加CPU的负担,无法同时完成数据的存储工作。
与普通存储器的区别:没有外部读写地址线,只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。
二、FIFO主要用途
FIFO一般用于不同时钟域之间的数据传输,比如FIFO的一端是AD数据采集,另一端是计算机的PCI总线,两端处于不同时钟域,在两个不同的时钟域间就可以采用异步FIFO来作为数据缓冲。
另外FIFO也可以用于不同宽度的数据接口的位宽匹配,例如单片机位8位数据输出,而DSP可能是16位数据输入,在单片机与DSP连接时就可以使用FIFO来达到数据匹配。
三、FIFO重要参数与输入输出端口
FIFO的宽度:THE WIDTH,它指的是FIFO一次读写操作的数据位,其数据位,也就是宽度是可以自己定义的。
FIFO的深度:THE DEEPTH,它指的是FIFO可以存储多少个N位的数据(如果宽度为N)。如一个8位的FIFO,若深度为8,它可以存储8个8位的数据。
满标志:FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出(overflow)。
空标志:FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读出(underflow)。
读时钟:读操作所遵循的时钟,在每个时钟沿来临时读数据。
写时钟:写操作所遵循的时钟,在每个时钟沿来临时写数据。
读指针:指向下一个读出地址。读完后自动加1。
写指针:指向下一个要写入的地址的,写完自动加1。
写使能:指写操作有效,往FIFO写入数据。
读使能:指读操作有效,从FIFO读出数据。
输入数据:指写使能控制信号有效时写入FIFO的数据。
输出数据:指读使能控制信号有效读出FIFO的数据。
复杂一点的FIFO还可以设计多个标志位,如
将满标志:指设置一个将满阈值(接近指针最大值),指针计数达到该标志置1,表示即将写满,目的防止FIFO工作频率过高时写满时来不及停止导致overflow上溢出。
将空标志:指设置一个将空阈值(接近0),指针计数达到该标志置1,表示即将读空,目的防止FIFO工作频率过高时读空时来不及停止导致underflow下溢出。
上溢出overflow:指FIFO满了还继续写入数据。
下溢出underflow:指FIFO空了还继续读出数据。
读写指针其实就是读写的地址,只不过这个地址不能任意选择,而是连续的。
四、FIFO的种类
根据FIFO工作的时钟域,可以将FIFO分为同步FIFO和异步FIFO。同步FIFO是指读时钟和写时钟为同一个时钟(同步时钟)。在时钟沿来临时同时发生读写操作。异步FIFO是指读写时钟不一致,读写时钟是互相独立的。
五、FIFO设计的关键
FIFO设计的关键在于怎样判断FIFO的空/满状态。为了保证数据正确的写入或读出,而不发生溢出或读空的状态出现,必须保证FIFO在满的情况下,不能进行写操作。在空的状态下不能进行读操作。怎样判断FIFO的满/空就成了FIFO设计的核心问题。在设计时再详细讨论。
参考:先入先出队列_百度百科