FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

AXIのWRAPバースト転送について理解を深める (2. 具体例での確認)

AXIのWRAPバースト転送について、あまり理解が深くなかったため、改めて勉強してみることにした。

msyksphinz.hatenablog.com


具体例で考えていく

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

では、各転送におけるアドレスの変化を見ていこう。

  1. 最初の転送(Address_0)は開始アドレスそのものである。

    • Address_0 = 0x14
  2. 2番目の転送(Address_1)は4バイト進む。

    • Address_1 = 0x18
  3. 3番目の転送(Address_2)も同様に4バイト進む。

    • Address_2 = 0x1C
  4. 4番目の転送(Address_3)では、Wrap_Boundary + 総転送サイズ(0x10 + 16B = 0x20)に到達するため、アドレスが折り返される。

    • Address_3 = 0x10

このように、アドレスが0x20に到達する直前で折り返しが発生し、0x10から再開されることが分かる。