Vivado AXI4-Stream Data FIFO 配置与仿真记录

AXI4-Stream Data FIFO 这个核不复杂,真正常踩坑的地方也不是接口本身,而是参数一多,第一次配的时候很容易把几个'看起来差不多'的选项混在一起。下面按实际配置顺一遍,顺手把仿真里能看出来的行为也记下来。
**FIFO depth(FIFO 深度)**定义的是能缓存多少个 data word。
存储资源的消耗不是只看深度,真正的占用还是深度乘上 TDATA 宽度。这个地方经常被忽略:你把深度翻倍,资源不一定只是线性变化,位宽一大,BRAM/LUTRAM 的选择也会跟着变。
**Memory type(存储器类型)**设为 Auto。
- Auto:交给 Vivado 自动选实现方式。小 FIFO 通常会走分布式 RAM/LUTRAM,大一点就更倾向 BRAM。
- Block RAM:强制用 BRAM。
- Distributed RAM:强制用 LUTRAM。
- UltraRAM:给 UltraScale+ 这类大容量场景用。
**Independent clocks(独立时钟)**设为 No。
也就是同步 FIFO,写端和读端共用 s_axis_aclk。这种配置最省事,资源开销也更小,时序上没那么多额外问题。只有真的跨时钟域,才去开 Yes。
**CDC sync stages(跨时钟域同步级数)**保持默认 3,这项在同步 FIFO 下是灰的,不会起作用。
**Enable packet mode(启用包模式)**设为 No。
普通流模式下,只要 FIFO 里有数据,读端就会尽量往外吐。开了包模式以后,核会等到收到 TLAST 才开始输出整包数据。这个模式的意义很明确:避免包在中途被拆开,但代价就是延迟更高。不是所有场景都值得开。
ACLKEN conversion mode 维持 None。
**Enable ECC(启用 ECC 校验)**设为 No。这个选项主要是给可靠性更敏感的场景留的,开了会多吃一些逻辑资源。
**TDATA width(bytes)**设为 1,也就是 8 bit。
这意味着每个时钟周期传 1 字节。对纯验证 FIFO 行为来说,这个宽度最直观,也方便看波形。
Enable TSTRB 设为 No。
Enable TKEEP 设为 No。
Enable TLAST 也设为 No。
这里的选择其实很朴素:当前只想验证连续数据流,没必要把包边界、字节有效位这些边带信号都打开。如果后面要做帧级处理,再补 TLAST 就行。
TID / TDEST / TUSER width 都设为 0。
这些边带信息不参与当前测试,关掉后端口也会更干净。

写入侧我把几个状态信号都打开了,主要是为了看 FIFO 到底什么时候开始吃紧。
Enable write data count 设为 Yes,生成 axis_wr_data_count,它会告诉你当前 FIFO 里已经写进去了多少个 data word。这个信号用来判断剩余空间,比单看 TREADY 更直观。
Enable almost full 设为 Yes,生成 almost_full。它在 FIFO 只剩下一个写入位置时拉高,比真正写满提前一点报警。实际写流控的时候,这种提前量很有用,不然等 掉下去再停,前级经常已经多发了一拍。






