一、FIFO概念
先进先出,是一种组织和操作数据结构的方法。在硬件应用中,FIFO一般由一些读写指针,存储和控制的逻辑组成。
二、xilinx中生成的FIFO的存储类型
(1)shift register FIFO : 移位寄存器FIFO,这种很少用,因为FPGA内部的移位寄存器资源很少。
(2)build in FIFO :内嵌FIFO,使用专用的控制信号线(如满信号、空信号等)+BRAM资源生成FIFO,可以理解为一种内部集成的FIFO。
(3)block ram FIFO :使用可编程逻辑块CLB资源+BRAM生成的存储空间。
(4)distributed ram FIFO :通过LUT资源生成的存储空间。
( independent clocks :异步时钟 common clock:同步时钟 )
一般选择standard fifo就可以了 ,毕竟数据需要一个稳定的过程。
1个BRAM是36K,60个就是60*36K
同步fifo和异步fifo的主要区别:
在于这里的配置信息
在异步fifo中,存在异步复位和同步复位。
1、异步复位:勾选enable reset synchronization ,读写端实现异步复位,在例化fifo ip 后,只会出现一个异步reset。
异步复位:rst信号最好持续3个及以上的时钟周期(读写时钟不同时,按更慢的时钟算)。当rst信号被写数据端时钟的上升沿检测到后,需要3个写时钟才能完成正确的复位同步。而full(满),almost full(将满), prog full(可编程满)信号在异步复位信号被拉低后5个写时钟周期后才会被拉低,开始正常接收写操作。在此期间,full(满),almost full (将满),prog full (可编程满)信号都被拉高,来保证在复位状态时没有写操作的发生。一般复位信号结束后可以等待多余30-60个时钟周期再读写。
2、同步复位:不勾选enable reset synchronization,例化fifo ip核后会出现两个在各自时钟域同步的reset(信号wr_rst/rd_rst)
同步复位:在各自的时钟域下,信号都是相对同步的,所以不需要额外的同步逻辑。同步复位也需要至少持续一个周期(各自时钟域下)。为了避免发生不可预料的结果,在复位时不要进行任何读写的操作。当读操作复位早于写操作复位时,从复位(读操作)开始到复位(写操作)结束,不进行任意读写操作。如果读操作复位和写操作复位顺序交换,即写操作复位早于读操作复位,从复位(写操作)开始到复位(读操作)结束,不进行任意读写操作。
tips:RAM和FIFO的主要区别是在于地址,RAM之所以被称为随机存储器就在于我们可以随时用RAM的地址去存储一些东西,ROM也是随时可以从地址中去读取一些数据,但是FIFO(first in first out)是没有地址线的。