0.什么是FIFO
FIFO(First In First Out,即先入先出),是一种数据缓冲器,用来实现数据先入先出
的读写方式。在FPGA里,FIFO主要是用作缓存,可应用于多比特数据做跨时钟域转换,与RAM、ROM不同,FIFO没有读写的地址线,FIFO遵循着“先入先出”的原则:数据按顺序写入 FIFO,先被写入的数据同样在读取的时候先被读出。
1.同步FIFO(SCFIFO)
SCFIFO 的读写为同一时钟,应用在同步时钟系统中。它的作用一般是做交互数据的一个缓冲,就像一个buffer一样。
2.异步FIFO(DCFIFO)
DCFIFO 的读写时钟是不同的,有别于同步FIFO,是异步数据传输时常用的存储器,多bit数据异步传输时,无论是从快时钟域到慢时钟域,还是从慢时钟域到快时钟域,都可以使用FIFO处理。
3.FIFO的主要参数(以异步FIFO为例)
在vivado里搜索FIFO的IP核,在FIFO Generator里建立一个异步FIFO时可以看到FIFO的主要参数有:
write width:写宽度
write depth:写深度
wr_clk:写时钟
wr_en:写使能
full:满标志
read width:读宽度
read depth:读深度
rd_clk:读时钟
rd_en:读使能
emtpy:空标志
同时可以根据自己选择,选择增加其它的参数:
almost full flag:几乎满标志
almost empty flag:几乎空标志
write acknowledge:写确认标志(报告写操作成功)
overflow:溢出标志
valid flag:有效标志
underflow flag:下溢标志(我的理解是overflow是写入导致的写溢出、underflow 是读导致的读溢出)
write data count:FIFO内剩余的数据个数(基于写时钟)
read data count:FIFO内剩余的数据个数(基于读时钟)
4.FIFO设计的关键
“ 产生可靠的 FIFO 读写指针和生成 FIFO“空”/“满”状态标志。”