AXIのWRAPバースト転送について、あまり理解が深くなかったため、改めて勉強してみることにした。
具体例で考えていく
WRAPバースト転送の動作を、具体的な数値を使って理解していこう。以下のような条件で考えてみる。
Start_Address = 0x14 Number_Bytes = 2 ^ 2 = 4B Burst_Length = 3 + 1 = 4
この条件では、総転送サイズは以下のように計算される。 - 総転送サイズ = Number_Bytes × Burst_Length = 4B × 4 = 16B
Wrap Boundaryは以下のように計算される。 - Wrap_Boundary = (INT(Start_Address / (Number_Bytes × Burst_Length))) × (Number_Bytes × Burst_Length) - = (INT(0x14 / 16B)) × 16B - = 0x10
では、各転送におけるアドレスの変化を見ていこう。
最初の転送(Address_0)は開始アドレスそのものである。
- Address_0 = 0x14
2番目の転送(Address_1)は4バイト進む。
- Address_1 = 0x18
3番目の転送(Address_2)も同様に4バイト進む。
- Address_2 = 0x1C
4番目の転送(Address_3)では、Wrap_Boundary + 総転送サイズ(0x10 + 16B = 0x20)に到達するため、アドレスが折り返される。
- Address_3 = 0x10
このように、アドレスが0x20に到達する直前で折り返しが発生し、0x10から再開されることが分かる。