AXI是基于BURST传输的。
burst 传输必须不能越过4KB 地址接界线。
AXI4 的burst 长度为:AxLEN[7:0]+1;
master 可以通过关闭写strobe的方式关闭更多的写操作,
每一个burst传输中数据按照byte一拍一拍传输:
每个transfer中,字节数为2**AxSIZE[2:0],例如,
每个transfer,传输字节数为4,那么AxSIZE[2:0]==3’h2,
每个transfer,传输字节数为8,那么AxSIZE[2:0]==3’h3,
传输的大小必须不能超过每次传输相关器件的数据宽度。
例如对于WDATA,如果位宽为32,那么每个transfer,传输字节数不超过4。
AXI 协议定义三种burst 类型:
FIXED:burst 传输中每次传输的地址相同;burst 中所有拍的有效byte line是固定的,然而这些byte line中,真正有WSTRB的byte在burst中每一拍都不同。
INCR:burst中每次传输的地址比前一个变大,增量跟传输的大小相关。例如,一个4byte大小的burst传输,地址比前一个地址加四。
WRAP:长度必须是2,4,8,16; 起始地址必须包含每次传输的大小。高位地址被限制,会循环到低位地址。
AxBURST代表TYPE。
2‘b00:FIXED。
2’b01:INCR,
2’b10:WRAP,
2’b11: reserved.
xRESP表示TYPE。
2’b00:OKAY,
2’b01:EXOKAY,
2’b10:SLVERR,
2’b11:DECERR。
在写传输中,一个完整的burst 对应一个response,而不是每次传输都有response。
在读传输中,slave 可能在一个burst中不同的传输中指定不同的response。比如,一个burst读取16次,slave 可能在15个中回复OKEY,一个回复SLVERR。
协议要求发送数据必须确定,即使一个错误标志。比如,一次读操作slave有8次传输,但是slave有一个错误条件,这样slave必须发送8次数据传输,每次返回一个错误响应。
计算方式;
Start_Address=AxADDR,
Number_Bytes=2**AxSIZE,
Burst_Length=AxLEN+1,
Aligned_Addr=(INT(Start_Address/Number_Bytes))xNumber_Bytes。//INT表示向下取整。
Address_N=Aligned_Address+(N-1)xNumber_Bytes,
Wrap_Boundary=(INT(Start_Address/(Number_Bytes x Burst_Length)))x(Number_Bytes x Burst_Length)