跳转到主要内容

AXI-Stream代码详解

judy 提交于

作者:碎碎思,来源:<span id="profileBt"><a href="https://mp.weixin.qq.com/s?__biz=Mzg4ODA5NzM1Nw==&mid=2247488002&idx=1&…微信公众号</a></span>

<strong>AXI-Stream代码详解</strong>

AXI4-Stream跟AXI4的区别在于AXI4-Stream没有ADDR接口,这样就不涉及读写数据的概念了,只有简单的发送与接收说法,减少了延时,允许无限制的数据突发传输规模。AXI4-Stream的核心思想在于流式处理数据。
<center><img src="http://xilinx.eetrend.com/files/2020-11/%E5%8D%9A%E5%AE%A2/100058507-11…; alt=""></center>
<p align="center"><strong>图 4‑58 AXI-Stream Interface</strong></p>

<strong>全局信号</strong>

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

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

<strong>主机(master)控制的信号</strong>

3.TVALID 握手信号

4.TDATA 数据信号线

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

6.TKEEP TDATA的内容修饰符,用于指示是此字节是否为有效字节,和TSTRB配合使用。如下表。xilinx封装的ip中不使用此信号,所以默认为1。
<center><img src="http://xilinx.eetrend.com/files/2020-11/%E5%8D%9A%E5%AE%A2/100058507-11…; alt=""></center>

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

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

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

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

<strong>从机(slave)控制的信号</strong>

11.TREADY 握手信号

一个AXI-stream传输的时序图:
<center><img src="http://xilinx.eetrend.com/files/2020-11/%E5%8D%9A%E5%AE%A2/100058507-11…; alt=""></center>
<p align="center"><strong>图4‑59 AXI-stream example</strong></p>

<strong>AXI4-stream主从交互仿真</strong>

lvivado创建工程,添加代码。

l编写仿真tb文件。

下图是AXI4-stream主从交互的时序图。
<center><img src="http://xilinx.eetrend.com/files/2020-11/%E5%8D%9A%E5%AE%A2/100058507-11…; alt=""></center>
<p align="center"><strong>图4‑60 AXI4-stream主从交互的时序图</strong></p>

其中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