AXI stream协议详细分析说明

AXI stream简介

AXI4-Stream是一种标准协议接口,可用于芯片内部的数据流传输,不同于内存数据传输相关协议,AXI4-Stream没有与数据流相关的地址,它只是一个数据流,尤其可以用于高速大数据应用,比如视频数据流,相比较AXI4AXI4-Lite,不限制突发长度。AXI主要面对内存映射,AXI-Lite主要是简化的AXI,比如用于配置一些寄存器。

Byte 类型

Byte类型定义和一些控制信号相关,AXI-Stream定义了三种Byte数据类型:

  • 普通字节(Data byte):传输源需要传输到目的地的有效信息
  • 位置字节(Position byte):标定Data byte在数据流中的位置
  • 无效字节(Null byte):顾名思义,没有意义的数据

stream术语

  • Transfer:基于TVALIDTREADY握手协议的传输
  • Packet:一组通过AXI4-Stream接口传输的数据,类似于AXI4的突发
  • Frame:在AXI4-Stream中最大的Byte组合,内包含整数个Packets
  • Data Stream:一系列单独Byte传输或者一系列Packets

接口说明

name

描述

ACLK

时钟源

全局时钟信号,时钟上升沿采样

ARESETn

复位源

全局复位信号,低有效

TVALID

传输

表示主机驱动有效数据

TREADY

接收

表示从机能接受有效数据

TDATA[(8n-1):0]

传输

传输数据,位宽为整数个Byte

TSTRB[(n-1):0]

传输

表示关联数据为Position byte还是Data byte

TKEEP[(n-1):0]

传输

区分Null bytes,如反断言,那么对应Byte可以删除

TLAST

传输

表示包的边界

TID[(i-1):0]

传输

数据Stream ID,表示不同数据流

TDEST[(d-1):0]

传输

Data Stream提供路由信息

TUSER[(u-1):0]

传输

用户可定义的边带信息

n:数据位宽,单位为byte

i:TID位宽,单位为bit,建议最大为8bits

d:TDEST位宽,单位为bit,建议最大为4bits

u:TUSER位宽,单位为bit,建议为n的整数倍

数据传输过程(握手过程)

两个信号TVALID和TREADY定义了握手过程,TVALID表示主机开始驱动有效数据,TREADY表示从机可以接收有效数据,当两者都被断言,那么数据传输开始。TVALID可以先于或后于TREADY断言,也可以同时断言。下面给出三种情况的时序图,ACLK标注箭头的上升沿为传输开始处。

AXI stream协议详细分析说明_第1张图片                                                                 AXI stream基本传输过程

控制信号说明

字节限定符(Byte qualifiers)

AXI4-Stream定义了两个字节限定符:

TKEEP:区分对应byte是否需要保留传输到接收方,即判断是否为Null byte

TSTRB:区分对应byte为data byte还是position byte

每个TKEEP和TSTRB的bit位都对应数据的一个byte,如 TKEEP[x]对应数据 TDATA[(8x+7):8x] , TSTRB[x]对应数据TDATA[(8x+7):8x]。

TKEEP

如果Tkeep被置为高电平,表示关联的数据byte必需被传输到目的地,如果为低,那么表示对应byte为null byte,可以将该byte从数据流中删除。Tkeep全被置为低也属于协议允许的合法操作。在TLAST被置为高前,Tkeep也可以阻止全部被置为低。对主从来讲,标准没有强制要求他们具有处理null data的能力,但interconnect要有相关能力。

TSTRB

        当TKEEP被断言,TSTRB用来表示区分data byte 和 position byte,当TSTRB为高,则byte为data byte,反之为position byte。下表为TKEEP和TSTRB组合意义:

AXI stream协议详细分析说明_第2张图片

 

数据包边界(Packet boundaries)

        数据包就是一组bytes的组合,与传输packet相关的信号有TID,TDEST,和TLAST,这里我们主要谈TLAST,TLAST反断言时表示另一个传输可以进行,断言时表示一个包的边界,断言时也是共享总线可以进行仲裁的有效点。但并不是说,仲裁就一定要在此处,但这个信号确实可以保持有效点连续传输。

        对于packet开始的边界,标准也没有明确的定义,但可以通过复位后第一次出现置位TID和TDEST来判定,也可通过,先前包传输后的第一次传输出现置位TID和TDEST来判定。对TID和TDEST来说,一个包内的所有bytes都应该来自同一个源以及去同一个目的地,所以,一个包内的TID和TDEST数值应当一致。也要注意,不同包是不支持重新组的。

源和目的信号(Source and destination signaling)

TID:提供一个流ID,用于区分不同streams传输通过同一个接口

TDEST:为数据streams提供粗略的路由信息

内部互联(interconnect)可以操作TID和TDEST信号,任何对这两个信号的操作必须不同流的TID和TDEST不一样。

你可能感兴趣的:(AMBA,fpga开发,arm)