参考博文: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的限制: