AXI传输数据结(write strobes)

参考博文:http://blog.sina.com.cn/s/blog_8367f7e30102ydkw.html

AXI 协议是基于burst 传输,master 每次向slave发送burst的第一个byte位传输控制信息和地址信息,slave必须按照burst的传输规则计算出地址。

burst 传输必须不能越过4KB 地址接界线,这样是为了防止一个burst越过两个slave边界,这样也限制了一个slave必须支持的地址增量。

4.1.1 burst 长度:

ARLEN[7:0]:读传输的burst 长度;

AWLEN[7:0]:写传输的burst 长度;

AxLEN代表ARLEN[7:0]和AWLEN[7:0]。

AXI3 的burst 长度为:AxLEN[3:0]+1;

AXI4 的burst 长度为:AxLEN[7:0]+1;提供了INCR burst类型额外的burst 长度。

AXI burst 使用规则限制:

  • l  wrapping burst 中,burst 长度必须是2,4,8,16;
  • l  一个burst 长度不能越过4KB 地址边界;
  • l  burst 传输不可以提前终止;

没有component 可以提前终止burst。然而,为了减少写burst传输数据个数,master 可以通过关闭所有写strobe的方式关闭更多的写操作,在这种情况下,master 必须计算出burst传输需要保持传输的个数。在读burst中,master可以丢弃读数据,但是master也必须计算出burst传输中所有传输的个数。

丢弃读数据在读敏感设备中可能导致数据丢失,比如FIFO。master必须用一个burst长度来匹配传输数据所需长度。

4.1.2 burst 传输的size

每一个burst传输中数据按照byte一拍一拍传输:

ARSIZE [2:0]:读传输;

AWSIZE[2:0]:写传输;

AxSIZE代表ARSIZE和AWSIZE。

burst size编码:

AXIprotocol学习记录(4)——AXI传输数据结构

传输的大小必须不能超过每次传输相关器件的数据宽度。

4.1.3 burst 类型

AXI 协议定义三种burst 类型:

FIXED:

  • l  burst 传输中每次传输的地址相同;
  • l  burst 中所有拍的有效byte line是固定的,然而这些byte line中,真正有WSTRB的byte在burst中每一拍都不同。

INCR:

增量burst。burst中每次传输的地址比前一个变大,增量跟传输的大小相关。例如,一个4byte大小的burst传输,地址比前一个地址加四。

WRAP:

循环 burst 和增量burst相类似,除非高位地址被限制,会循环到低位地址。

循环burst的限制:

  • l  起始地址必须包含每次传输的大小;
  • l  burst 长度必须是2,4,8,16;

循环burst的特性:

  • l  burst传输中的最低位地址用于计算所有数据传输的地址,burst每次传输的大小*burst传输的个数,这个地址也就是循环边界;
  • l  增量burst中每次传输的地址增量相同,然而地址增量是循环边界+所有传输数据大小,地址循环在循环边界之内;
  • l  burst中,第一个传输地址可能大于循环边界,这样导致所有循环burst 的第一个地址大于循环边界;

burst类型主要用于cache line通道。

burst类型定义信号:

ARBURST [1:0]:读传输;

AWBURST[1:0]:写传输;

AxBURST代表ARBURST和AWBURST。

AxBURST编码规则:
AXIprotocol学习记录(4)——AXI传输数据结构

4.1.4 burst地址

AXIprotocol学习记录(4)——AXI传输数据结构

AXIprotocol学习记录(4)——AXI传输数据结构
 

burst通用等式定义:

AXIprotocol学习记录(4)——AXI传输数据结构

burst 第一个传输的地址:

AXIprotocol学习记录(4)——AXI传输数据结构

增量burst和循环burst每次传输地址计算:

AXIprotocol学习记录(4)——AXI传输数据结构

循环burst中循环地址边界计算:

AXIprotocol学习记录(4)——AXI传输数据结构

循环burst中地址达到最大时候的转换:

AXIprotocol学习记录(4)——AXI传输数据结构

burst第一次传输byte line的计算方法:

AXIprotocol学习记录(4)——AXI传输数据结构

burst传输其他byte line计算方法:

AXIprotocol学习记录(4)——AXI传输数据结构
传输数据:
AXIprotocol学习记录(4)——AXI传输数据结构

4.2 读写数据结构

4.2.1 write strobes ——写跳变

WSTRB[n:0]信号为高代表对应数据线包含有效信息,每次写8bit数据对应一个strobe,因此WSTRB[n]对应WDATA[(8n)+7:(8n)]。

master 必须确保strobe 为高的时候,对应byte line 只含有效数据。

当WVALID为低时,write strobe 可以为任何值,尽管协议要求为低或者保持前一个数值。

4.2.2 narrow transfer——窄传送

当master 发送数据位宽小于数据总线位宽时,地址和控制信息决定哪一个byte line 将会发送:

增量和循环burst 传输中,不同的byte line用在同一个burst传输中的不同位;

固定burst 中,相同的byte lane用在每一位;
AXIprotocol学习记录(4)——AXI传输数据结构

图3-8中:

  • l  burst 发送五次;
  • l  起始地址为0;
  • l  每次发送8bit;
  • l  发送数据总线宽带为32bit;
  • burst 类型为增量burst;AXIprotocol学习记录(4)——AXI传输数据结构

4.2.3 byte invariance ——byte 不变

在单个memory 空间,为了控制固定位数数据结构,AXI协议使用byte-invariance的位数方案。

4.3 读写响应数据结构

AXI 协议中读写传送提供响应方式:

  • l  读传输中响应从slave 发出,通过读数据通道;RRESP[1:0]
  • l  写传输中响应信息通过写响应通道返回;BRESP[1:0]

信号:BRESP[1:0]

响应有以下几种:

OKAY:普通访问成功。响应条件包括:

  • l  一次普通访问成功;
  • l  一次优先访问失败;
  • l  优先访问一个不支持优先访问的slave;

OKAY 响应是大多数传输的响应。

EXOKAY:优先访问成功。

SLVERR:slave error。访问已经成功到达slave,但是slave 希望返回一个error 条件给初始master 的时候使用。为了简化系统检测和debug,协议要求错误响应只用于单个普通的错误条件,包括:

  • l  FIFO或者buffer向上溢出或者向下溢出时;
  • l  不支持传输的大小;
  • l  写访问只读的区域;
  • l  slave 中的超时;
  • l  访问被关闭或者掉电的区域;

DECERR:decode error。一般典型使用在内部互联结构,指示发送地址没有slave。

如果内部互联不能成功解码slave地址,必须返回DECERR响应。协议要求内部互联线路都有一个默认的slave,这些默认的slave返回DECERR响应。

AXI 协议要求传输中所有数据完成传输,即使一个错误的条件,任何器件得到的DECERR响应必须符合对应请求。

解码如下:

AXIprotocol学习记录(4)——AXI传输数据结构

在写传输中,一个完整的burst 对应一个response,而不是每次传输都有response。

在读传输中,slave 可能在一个burst中不同的传输中指定不同的response。比如,一个burst读取16次,slave可能在15个中回复OKEY,一个回复SLVERR。

协议要求发送数据必须确定,即使一个错误标志。比如,一次读操作slave有8次传输,但是slave有一个错误条件,这样slave必须发送8次数据传输,每次返回一个错误响应。

posted @ 2018-11-04 16:30  大海在倾听  阅读(10154)  评论(0编辑  收藏  举报