FPGA零基础:一文带你详解FIFO:种类、IP配置、应用
FIFO是一种先进先出的存储器,在Vivado中提供多种类型。常见的是Native模式,可分为同步(单时钟)和异步(双时钟)FIFO。配置时需选择接口类型、数据位宽和深度等参数。应用时可通过半空/半满标志控制读写操作:写状态机在计数器小于半满值时写入,读状态机在计数器大于半空值时读取。另外,也可直接用非满/非空信号控制读写时序。FIFO常用于数据缓冲和跨时钟域传输。
一、FIFO全名
FIRST IN FIRST OUT (先入先出)。顾名思义,FIFO是一个数据具有先进先出的存储器。
二.FIFO种类
在vivado软件的IP catalog搜索FIFO时候,会出来很多FIFO类型

(1)AXI4-Stream FIFO 是提供对与其他IP连接的AXI4-Stream接口的内存映射访问。
(2)AXI4-Stream Data FIFO 支持 AXI4-Stream 协议,具备packet 包传输模式。
(3)AXI Data FIFO 就是数据FIFO 功能较为单一,接口为Stream接口
(4)FIFO Generator 支持 Native 模式,AXI Memory Mapped 模式 AXI Steam 模式功能比较齐全。通常在没有AXI时候就使用Native模式。

其中,最常见的就是FIFO的Native模式,可以设置为同步异步FIFO。
同步FIFO仅有一个时钟输入,所有信号都与这一个时钟信号有关。

异步FIFO有写端口和读端口分别有独立的时钟。相关的写信号都同步在读时钟下,所有相关的读信号都同步在读时钟下。

三、FIFO的IP配置
1.Basic配置
Interface type:Native 模式、AXI Memory Mapped 模式、 AXI Steam 模式。
通常在没有AXI时候就使用Native模式。
common和Independent代表同步和异步,如果需要读写同步就选择common,读写异步有顺序选择异步。
其余不用修改设置

2.Native Ports
StandardFIFO需要读使能后一 个时钟输出才有效。
一般选择First Word Fall Through 这样写入的数据,会先在读端口准备好。
写位宽由输入的数据位宽决定,写深度取决于需要缓存数据的个数,读数据位宽取决于个人需要读取多少位宽,读数据宽度由上述三者自动确定,不需要设置。
其余设置尽量保持相同即可。

3.Status Flags
almost full 和 almost empty flag表示FIFO的满信号和空信号,选上之后可以不用。

其余配置默认即可。
四、FIFO的应用
1.半空、半满控制读写FIFO
半空是针对读FIFO计数器而言,半满是针对写FIFO计数器而言。例如FIFO输入32bit深度1024;输出128bit深度256,这里的半空值就是128,半满值就是512。
例如
写状态机,每次写出512bit数据:
状态0:当写入FIFO计数器小于512则进入状态1
状态1:当连续写入FIFO512个数据后,再次进入状态0等待 读状态机的设计,每次读出128bt数据。
读状态机设计,每次读出128bit数据:
状态0:当读FIFO计数器大于128则进入状态1
状态1:连续读出FIFO128个数据后,再次进入状态0等待(如果有问题,可以私信作者,分享代码给你)
2.标志信号控制FIFO的读写
(1)当FIFO非满的时候写。
(2)当FIFO非空的时候读。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)