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编码:
传输的大小必须不能超过每次传输相关器件的数据宽度。
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。
burst 第一个传输的地址:
增量burst和循环burst每次传输地址计算:
循环burst中循环地址边界计算:
循环burst中地址达到最大时候的转换:
burst第一次传输byte line的计算方法:
burst传输其他byte line计算方法:
传输数据:
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用在每一位;图3-8中:
- l burst 发送五次;
- l 起始地址为0;
- l 每次发送8bit;
- l 发送数据总线宽带为32bit;
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响应必须符合对应请求。
解码如下:
在写传输中,一个完整的burst 对应一个response,而不是每次传输都有response。
在读传输中,slave 可能在一个burst中不同的传输中指定不同的response。比如,一个burst读取16次,slave可能在15个中回复OKEY,一个回复SLVERR。
协议要求发送数据必须确定,即使一个错误标志。比如,一次读操作slave有8次传输,但是slave有一个错误条件,这样slave必须发送8次数据传输,每次返回一个错误响应。