Bootstrap

AXI-Stream Data FIFO接口学习

1.接口描述

AXI-Stream Data FIFO接口与普通的FIFO方案基本差不多,只是写数据端为AXI-stream从接口,读书节端为AXI-stream主接口。

2.与普通FIFO的差异

相同点:二者都是先入先出,写入多少,读出多少。
不同点:AXI-Stream Data FIFO可以通过TLAST 信号指示数据节点,同时还可以通过TKEEP和TSTRB信号指示读写数据各个字节的性质和有效性。
AXI-Stream Data FIFO的读写端口最少需要TDATA ,TVALID,TREADY 这三个信号,可选择的添加TKEEP,TLAST,TSTRB信号,本文选择了TKEEP,TLAST信号。单次传输字节数为4byte。

3.写接口信号分析

  1. 接口初始化状态
portValue
TVALID1’b0
TKEEP4’b0000
TLAST1’b0
TDATA无关
TREADY1’b0
  1. 开始写入数据
    在这里插入图片描述
    如上图,外部的TVALID信号拉高,FIFO接收到该信号之后将 TREADY 信号拉高,同时TKEEP 信号各bit全部为1,表示各字节有效,完成握手,开始将数据写入FIFO中。其中还有TLAST 信号,该信号是用来区分数据段的,每段数据流的最后一个数据需要拉高,不限制数据流的长度,可以是一个数据,也可以是多个数据。
  2. 停止写入数据
    外部的TVALID信号拉低即可实现。
  3. 写满判定
    TREADY 信号拉低。

4.读端口信号分析

  1. FIFO为空时

读端口信号如下

portValue
TVALID1’b0
TKEEP4’b0000
TLAST1’b0
TDATA无关
TREADY1’b0

其中TKEEP的所有位为0表示通过AXI-stream接口读出的所有字节数据无效。
在这里插入图片描述

FIFO不为空时

portValue
TVALID1’b1 -> 1’b1
TKEEP4’b0000 -> 4’b1111
TLAST1’b0
TDATA读指针指向的FIFO数据
TREADY1’b0

其中TKEEP的所有位由0变为1表示通过AXI-stream接口读出的所有字节数据有效。
TVALID信号拉高,表示外部电路可以通过AXI-stream接口从FIFO中读出数据了。
在这里插入图片描述

读FIFO数据

portValue
TVALID1’b1 -> 1’b0
TKEEP4’b1111
TLAST1’b0
TDATA读指针指向的FIFO数据
TREADY1’b0 -> 1’b1

5.一次完整的读写操作

在这里插入图片描述

  1. 写操作描述:
    首先将TVALID信号拉高,然后握手成功,写入5个数据,写入两次。第一次写入时,TKEEP=1,也就是只有第一个字节数据有效,第二次是所有字节有效。
  2. 读操作描述:
    可以发现,在写入第个数据之后,读端口的TKEEP信号就变成了第一个数据对应的TKEEP信号,同时TVALID信号拉高。
    在要读数据时,首先将TREADY信号拉高,然后握手成功,连续读出数据,在读出第5个数据的时候,TLAST信号拉高,也就是将第一次写入的数据全部读出来了,然后继续读出数据,到第10个数据时,TLAST信号再次拉高,同时读端口的TVALID信号变低了,也就是FIFO为空了。

总结:如果仅仅只有TDATA ,TVALID,TREADY 这三个信号,那么AXI-Stream Data FIFO与普通的FIFO完全一样。如果增加了TKEEP,TLAST,TSTRB这三个信号,这些信号可以理解成单独写入了一个并行的FIFO中,写入的是什么样,读出的也是什么样。

;