概述
FIFO按时钟可分为:异步FIFO、同步FIFO。
定义
同步FIFO:读时钟和写时钟都相同的FIFO。同步FIFO内部没有异步处理,因此结构简单,资源占用较少。
异步FIFO:读时钟和写时钟可以不同的FIFO。异步FIFO内部有专门的异步处理电路,处理读和写信号的交互(打两拍之类的电路),因为异步FIFO结构复杂,占用资源较大。
建议
如果时钟相同,就选同步FIFO,如果不同就选异步FIFO。下面就是FIFO IP核的选择。common clock就是同步fifo,independent clocks就是异步FIFO。
在xinlinx的IP核中FIFO生成器核心是一个完全验证的首出内存队列,用于任何需要有序存储和检索的应用程序,实现高性能和区域优化设计。该核心为所有的FIFO配置提供了一个优化的解决方案,并在使用最小的资源的同时提供了最大的性能(高达500 MHz)。该核心支持本机接口FIFOs、AXI内存映射接口FIFOs和AXI4-流接口FIFOs。AXI内存映射和AXI4-流接口FIFO来自于本地接口FIFO。有三种AXI内存映射接口样式可选。
以下是AXI-STREAM接口的FIFO时序图:
wr_clk输入写时钟:写域上的所有信号都与此时钟同步。
输入数据输入:写入FIFO时使用的输入数据总线。
wr_en输入写入启用:如果FIFO未满,则断言此信号会导致数据(在din上)被写入FIFO。
满输出满标志:当断言时,该信号表示FIFO已满。当FIFO满时,写入请求被忽略,在FIFO满时启动写入不会对FIFO的内容造成破坏。
wr_rst输入写重置:同步到写时钟。当断言时,将初始化写时钟域的所有内部指针和标志。
almost full:当断言时,这个信号表示在FIFO满之前只能再执行一次写入。
prog_full (1)输出可编程满:当FIFO中的单词数大于或等于断言阈值时,将确认此信号。当FIFO中的单词数小于否定阈值时,则取消断言。
wr_data_count [d:0]输出写入数据计数:此总线表示写入FIFO的单词数。计数保证永远不会少报FIFO中的单词数,以确保您永远不会溢出FIFO。此行为的例外情况是,当一个写操作发生在wr_clk/ clk的上升边缘时,该写操作将只反映在下一个上升时钟边缘的wr_data_count上。如果D小于log2(FIFO深度)-1,总线通过删除最小显著位来截断。注意:当启用了非对称端口宽度选项时,wr_data_count也可用于使用通用时钟块基于RAM的FIFO的超尺度设备。
wr_ack输出写入确认:此信号表示在前一个时钟周期中的写入请求(wr_en)成功。
溢出:此信号表示在前一个时钟周期中的写入请求(wr_en)被拒绝,因为FIFO已满。溢出FIFO不会破坏FIFO的内容。
输入可编程全阈值:此信号用于输入断言和取消断言可编程满(prolg_full)标志的阈值。在复位期间,可以在电路中动态地设置该阈值。您可以选择将断言和否定阈值设置为相同的值(使用完全否定阈值),也可以独立地控制这些值(使用完全断言和完全否定阈值)。