This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

AXI Wrap Bursts

In case of wrapped bursts, we need to calculate first the Aligned_Address, using:

Suppose start address is 55, assuming 32 - bit bus, burst length of 4

Aligned_Address = (INT(Start_Address / Number_Bytes) ) * Number_Bytes;

The value is :: 52 or 56 i.e. do we have round to lower or upper value.

Then we calculate the wrap boundary, using
Wrap_Boundary = ((INT(Start_Address / (Number_Bytes * Burst_Length))) * (Number_Bytes * Burst_Length);

What does this wrap boundary actually indicate,
1. The address from where wrapping will take place.
2. The address value after wrap.


Also, if anyone can let me know in a step-wise manner how the address are calculated using the same scenario above, would be great.

Hope to see the replies soon.
Parents
  • Note: This was originally posted on 1st July 2009 at http://forums.arm.com

    As I mentioned before, your example is not a valid AXI transfer - it can never happen.

    The formula in the spec if for calculating the Aligned address in the wrap, not for aligning the start address - that must be aligned by the master making the access.

    For a 4-byte beat your start address must be 4-byte aligned. 55 is not. To repeat what I said before:

    [snip]
    Start_Address needs to be aligned on the beat-size, so for a 32-bit beat it needs 4-byte aligned, 16-bit beat needs to be 2-byte aligned, etc. In this case your start address (55) is not a valid Start_Address for a 32-bit beat - ..., 52, 56, 60, 64, ... would be OK for example.
    [/snip]

    However, assuming a start address of 56 the following calculation would apply:

    Burst Len = 32-bit beat * 4 beats = 16 bytes

    Aligned address:
    = INT(56 / 16) * 16
    = INT(3.5) * 16
    = 3 * 16
    = 48

    Wrap boundary:
    = highest byte accessed in burst
    = 48 + 16 -1
    = 63

    Access Pattern:
    = 56, 60, 48, 52
Reply
  • Note: This was originally posted on 1st July 2009 at http://forums.arm.com

    As I mentioned before, your example is not a valid AXI transfer - it can never happen.

    The formula in the spec if for calculating the Aligned address in the wrap, not for aligning the start address - that must be aligned by the master making the access.

    For a 4-byte beat your start address must be 4-byte aligned. 55 is not. To repeat what I said before:

    [snip]
    Start_Address needs to be aligned on the beat-size, so for a 32-bit beat it needs 4-byte aligned, 16-bit beat needs to be 2-byte aligned, etc. In this case your start address (55) is not a valid Start_Address for a 32-bit beat - ..., 52, 56, 60, 64, ... would be OK for example.
    [/snip]

    However, assuming a start address of 56 the following calculation would apply:

    Burst Len = 32-bit beat * 4 beats = 16 bytes

    Aligned address:
    = INT(56 / 16) * 16
    = INT(3.5) * 16
    = 3 * 16
    = 48

    Wrap boundary:
    = highest byte accessed in burst
    = 48 + 16 -1
    = 63

    Access Pattern:
    = 56, 60, 48, 52
Children
No data