AXI-Stream代码详解

作者:碎碎思,来源:OpenFPGA微信公众号

AXI-Stream代码详解

AXI4-Stream跟AXI4的区别在于AXI4-Stream没有ADDR接口,这样就不涉及读写数据的概念了,只有简单的发送与接收说法,减少了延时,允许无限制的数据突发传输规模。AXI4-Stream的核心思想在于流式处理数据。

图 4‑58 AXI-Stream Interface

全局信号

1.ACLK 全局时钟信号,在上升沿时对信号采样。所有的输入信号都通过上升沿采集,所有的输出信号都在上升沿时变化。

2.ARESETn 全局复位信号,低电平有效。在复位期间,所有的xxVALID信号必须复位为低电平。其他的信号可以是任意值。

主机(master)控制的信号

3.TVALID 握手信号

4.TDATA 数据信号线

5.TSTRB TDATA的内容修饰符,用于指示是数据字节还是位置字节。初学者默认为1即可.

6.TKEEP TDATA的内容修饰符,用于指示是此字节是否为有效字节,和TSTRB配合使用。如下表。xilinx封装的ip中不使用此信号,所以默认为1。

7.TLAST 置高表示本次流传输中的最后一个数据。

8.TID 表示不同数据流的数据流标识符。xilinx封装的ip中没有此信号。

9.TDEST 用于提供路由信息,xilinx封装的ip中没有此信号。

10.TUSER AXI4协议留给用户自定义的。xilinx封装的ip中没有此信号。

从机(slave)控制的信号

11.TREADY 握手信号

一个AXI-stream传输的时序图:

图4‑59 AXI-stream example

AXI4-stream主从交互仿真

lvivado创建工程,添加代码。

l编写仿真tb文件。

下图是AXI4-stream主从交互的时序图。

图4‑60 AXI4-stream主从交互的时序图

其中AXI-stream一般的数据传输过程如下:

1、首先slave将TREADY信号拉高,表示自己可以接收信号。

2、当master将TDATA,TKEEP,TUSER准备就绪之后,将TVALID拉高,传输开始。

3、其中TKEEP满足TKEEP[x] is associated with TDATA[(8x+7):8x],当其被拉高时表示这段数据必须传输到目的地。TSTRB表示该段信息是否有效。TUSER可以在传递时捎带用户信息。具体接口参照使用的AXI-stream接口器件,并非所有支持AXI-stream接口的器件都含有以上接口,其中的一些接口是可选的而不是必需的。

4、直到master将TLAST拉高,TVALID拉低,传输结束。

代码在这里:

链接:https://pan.baidu.com/s/1FprBYZ37FP-deT38pWzSwg

提取码:open