AXI Protocol_Burst Address
Burst Address(Bus地址)
1. Burst 地址
2. Byte lane
本节提供确定突发内传输的地址和字节选通(byte lane)的方法。方程使用以下变量:
- Start_Address:由主机发出的起始地址。
- Number_Bytes :每次数据传输的最大字节数。
- Data_Bus_Bytes:数据总线中字节选通的数目 。
- Aligned_Address :起始地址的对齐版本 。
- Burst_Length :一次突发内数据传输的总数。
- Address_N :传输N的地址。对于突发中的第一次传输,N = 1 。
- Wrap_Boundary:WRAP突发内的最低地址。
- Lower_Byte_Lane:传输中最低地址字节的字节选通。
- Upper_Byte_Lane:传输中最高寻址字节的字节选通。
- INT(x) :x的舍入整数值。
1. Burst 地址
-
这些方程确定了一个突发内的传输地址:
Start_Address = AxADDR
Number_Bytes = 2 ^ AxSIZE
Burst_Length = AxLEN + 1
Aligned_Address = (INT(Start_Address / Number_Bytes)) × Number_Bytes -
突发中第一次传输的地址: Address_1 = Start_Address
-
对于INCR突发和地址没有wrapped的WRAP突发,在突发中第一次传输之后的任何传输的地址: Address_N = Aligned_Address + (N – 1) × Number_Bytes
-
对于WRAP突发,Wrap_Boundary变量定义了WRAP边界: Wrap_Boundary = (INT(Start_Address / (Number_Bytes × Burst_Length)))× (Number_Bytes × Burst_Length)
-
对于WRAP突发,如果Address_N = Wrap_Boundary + (Number_Bytes × Burst_Length),则:
- 当前传输地址: Address_N = Wrap_Boundary
- 后续传输地址: Address_N = Start_Address + ((N - 1) × Number_Bytes) - (Number_Bytes× Burst_Length)
2. Byte lane
-
在突发中第一次传输使用的字节选通:
- 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
-
在一次突发中第一次传输之后所有传输使用的字节选通:
- 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))
-
Transaction container描述了在该事务中可以访问的所有字节,如果地址对齐并且strobes有效:
Container_Size = Number_Bytes x Burst_Length -
对于INCR bursts:
- Container_Lower = Aligned_Address
- Container_Upper = Aligned_Address + Container_Size
-
对于WRAP bursts:
- Container_Lower = Wrap_Boundary
- Container_Upper = Wrap_Boundary + Container_Size
[参考资料] IHI0022H_c_amba_axi_protocol_spec
【注】:个人学习笔记,如有错误,望不吝赐教,这厢有礼了~~~