1.传输结构
1.1地址结构
AXI协议是基于突发的。主机通过驱动传输过程中控制信息和地址的第一个字节地址开始每一次向从机进行突发传输,在这个传输过程中,从机要计算传输的地址。一次突发传输不能超过4KB的地址边界。
1.2突发长度
突发长度由以下指定:
- ARLEN[7:0],针对读传输
- AWLEN[7:0], 针对写传输
AXI3支持1到16的突发长度。AXI4除此之外,还拓展支持INCR突发长度从1到256。
AXI3规定突发长度定义如下:
Burst_Length = AxLEN[3:0] + 1
AXI4规定突发长度定义如下:
Burst_Length = AxLEN[7:0] + 1
1.3突发大小
每一次数据传输最大的数据字节,可以被下面信号指定:
- ARSIZE[2:0],对于读传输
- AWSIZE[2:0],对于写传输
1.4 突发类型
AXI协议定义了三种突发类型:
1.4.1 FIXED
- 突发中每次传输的地址都是相同的
- 有效的字节通道对于突发中的所有节拍都是恒定的。但是,在这些字节通道,具有断言的WSTRB的实际字节对于突发中的每个节拍可能不同。
1.4.2 INCR
在递增突发中,突发中每次传输的地址是的增量上次传输的地址。增量值取决于传输的大小。对于
例如,大小为四个字节的突发中每次传输的地址是前一个地址加上四.
1.4.3 WRAP
环绕突发类似于递增突发,不同之处在于地址环绕到较低的地址(如果达到地址上限)。环绕突发有以下几个限制:
- 起始地址必须与每次传输的大小对齐
- 突发长度必须是2,4,8或16
- 突发使用的最低地址与要传输的数据的总大小对齐,
即到((突发中每个传输的大小)×(突发中传输的数量))。这地址定义为换行边界 - 每次传输后,地址以与INCR突发相同的方式递增。然而如果这个递增的地址是((换行边界)+(要传输的数据的总大小))则地址环绕到环绕边界
- 突发中的第一次传输可以使用高于换行边界的地址,subject适用于包装突发的限制。这意味着地址对任何
第一个地址高于环绕边界的WRAP突发
1.5 突发地址
Start_Adress = AxADDR
Number_Bytes = 2 ^ AxSIZE
Burst_Length = AxLEN + 1
Aligned_Address = (INT(Start_Adress / Number_Bytes) ) x Number_Bytes
Address_1 = Start_Address
对于INCR和WRAP突发,在第一个地址传输后,其他的地址:
Address_N = Aligned_Address + (N - 1) x Number_Bytes.
对于WRAP突发,边界如下定义:
Wrap_Boundary = (INT(Start_Address / (Number_Bytes × Burst_Length)))
× (Number_Bytes × Burst_Length).
对于WRAP burst, 如果 Address_N = Wrap_Boundary + (Number_Bytes × Burst_Length), 那么:
• 当前地址:
— Address_N = Wrap_Boundary
• 后续地址:
— Address_N = Start_Address + ((N – 1) × Number_Bytes) – (Number_Bytes × Burst_Length).
对于第一个传输的lanes:
• Lower_Byte_Lane = Start_Address – (INT(Start_Address / Data_Bus_Bytes)) × Data_Bus_Bytes
• Upper_Byte_Lane = Aligned_Address + (Number_Bytes – 1) –
(INT(Start_Address / Data_Bus_Bytes)) × Data_Bus_Bytes.
对于后续的lanes:
• Lower_Byte_Lane = Address_N – (INT(Address_N / Data_Bus_Bytes)) × Data_Bus_Bytes
• Upper_Byte_Lane = Lower_Byte_Lane + Number_Bytes – 1.
数据传输:
• DATA((8 × Upper_Byte_Lane) + 7 : (8 × Lower_Byte_Lane)).