Skip to content

AMBA AXI · Module 6

AxBURST

The AXI burst-type signal — FIXED, INCR, and WRAP — what each does to the address between beats, and the use case for each (FIFO ports, memory, cache-line fills).

The last chapter sized a transfer; AxBURST says how its address steps from beat to beat. It's a 2-bit field with three types — FIXED, INCR, and WRAP — and each maps to a distinct real use: FIXED for a single peripheral/FIFO port, INCR for sequential memory (the workhorse), and WRAP for cache-line fills. Because only AxADDR (the start) is sent on the bus, AxBURST (with AxSIZE) is what tells the subordinate how to compute every later beat's address. This chapter explains the encoding and the behavior of each type; the exact per-beat address arithmetic (and the 4KB-boundary rule) is Module 7.

1. AxBURST — How the Address Steps

AxBURST is a 2-bit field on the address channel (AWBURST/ARBURST):

AxBURSTTypeAddress between beats
2'b00FIXEDStays the same every beat
2'b01INCRIncrements by the beat size (2^AxSIZE)
2'b10WRAPIncrements, then wraps at an aligned boundary
2'b11reserved

AxBURST works with AxSIZE and AxLEN: AxSIZE gives the step (bytes per beat), AxLEN gives how many beats, and AxBURST gives the pattern of stepping. From AxADDR plus these three, the subordinate derives every beat's address — the manager never sends them individually.

AxBURST FIXED keeps the same address each beat, INCR increments by the beat size, and WRAP increments then wraps at an aligned boundary.FIXED (00)same address every beatINCR (01)address += 2^AxSIZE eachbeatWRAP (10)increment, then wrap at aboundary12
Figure 1 — the three burst types. FIXED keeps the same address every beat (one location, repeatedly). INCR increments the address by the beat size each beat (sequential). WRAP increments but wraps back at an aligned boundary (cache-line fills). AxBURST sets the pattern; AxSIZE sets the step; AxLEN sets the count.

2. FIXED — Same Address Every Beat

A FIXED burst keeps AxADDR constant for all beats — every beat targets the same address. It's for accessing a single location repeatedly: most often a peripheral's data port / FIFO, where you push or pull multiple beats to one register address and the device's internal pointer advances, not the bus address.

FIXED bursts are limited to 16 beats maximum. They're the right choice when the target is a port, not a memory range — e.g., draining a UART RX FIFO or streaming to a peripheral's TX register. Using INCR there would walk the address off the single port into neighboring registers; FIXED holds it in place.

3. INCR — Incrementing (the Workhorse)

An INCR burst increments the address by the beat size (2^AxSIZE) on each beat, so successive beats target consecutive locations. It's the overwhelmingly common type — sequential reads/writes to memory: instruction fetches, DMA block transfers, cache line writes, frame buffers. INCR supports the full burst-length range (1–256 beats in AXI4), so it's how large, contiguous transfers move efficiently.

For AxADDR=A and beat size S, the beat addresses are A, A+S, A+2S, A+3S, …. There's no wrap and no fixed cap (beyond 256), and the start is normally aligned to S. INCR is what you reach for unless you specifically need FIXED's single-port behavior or WRAP's cache-line semantics.

4. WRAP — Increment, Then Wrap (Cache Lines)

A WRAP burst increments like INCR but wraps back to an aligned lower boundary when it reaches the top of an aligned region. Its purpose is cache-line fills with critical-word-first: a CPU that misses on a word in the middle of a cache line can request that word first (low latency to the data it needs), and the burst wraps around to fetch the rest of the line.

WRAP has strict rules: the length must be 2, 4, 8, or 16 beats (not arbitrary), and AxADDR must be aligned to the beat size. The wrap boundary is the total burst size (beats × 2^AxSIZE), aligned. So a 4-beat WRAP of 4-byte beats starting at 0x34 covers the 16-byte region 0x30–0x3F: it goes 0x34, 0x38, 0x3C, then wraps to 0x30. The critical word (0x34) came first; the line filled completely.

5. Address Progression Compared

The three types side by side make the difference concrete. Take AxADDR=0x34, AxSIZE=2 (4 bytes/beat), AxLEN=3 (4 beats):

For start 0x34 with 4-byte beats over 4 beats: FIXED stays 0x34; INCR goes 0x34, 0x38, 0x3C, 0x40; WRAP goes 0x34, 0x38, 0x3C, then wraps to 0x30.FIXED0x340x340x340x34INCR0x340x380x3C0x40WRAP0x340x380x3C↩ 0x3012
Figure 2 — beat addresses for each burst type (AxADDR=0x34, 4-byte beats, 4 beats). FIXED: 0x34 every beat. INCR: 0x34, 0x38, 0x3C, 0x40 (straight up). WRAP: 0x34, 0x38, 0x3C, then wraps to 0x30 (filling the 16-byte line 0x30–0x3F, critical word 0x34 first). Same start and size, three different address sequences.

On the address channel itself, only AxADDR and AxBURST are driven; the beat addresses are derived as the data beats transfer:

axburst-types — INCR address progression (derived)

9 cycles
The address handshake carries AxADDR 0x34, AxBURST INCR, AxSIZE 2; four data beats transfer and the derived beat address steps 0x34, 0x38, 0x3C, 0x40.INCR: +4 each beatone AxADDR sent; AxBURST=INCRone AxADDR sent; AxBUR…beat addresses derived, not bussedbeat addresses derived…aclkaxaddrX0x340x34XXXXXXaxburstXINCRINCRXXXXXXbeat# (derived)XXX0x340x380x3C0x40XXdataXXXD0D1D2D3XXt0t1t2t3t4t5t6t7t8
Figure 3 — axburst-types on the bus (INCR example). The address handshake carries AxADDR=0x34, AxBURST=INCR, AxSIZE=2 (4-byte beats); only that one address is sent. As the four data beats transfer, the effective beat address (derived, not bussed) steps 0x34, 0x38, 0x3C, 0x40. For WRAP it would wrap to 0x30 on the last beat; for FIXED it would stay 0x34.

6. Choosing a Burst Type

Each type maps to a use, and the choice follows the target's nature:

A single peripheral port or FIFO uses FIXED; sequential memory uses INCR; a cache-line fill uses WRAP.What is thetarget?Single port /FIFO (onelocation)FIXEDSequential memoryINCR (default)Cache-line fill(critical wordfirst)WRAP
Figure 4 — burst type by use case. A single port/FIFO (one address, many beats) → FIXED. Sequential memory (consecutive addresses) → INCR, the default for almost all memory traffic. A cache-line fill needing critical-word-first → WRAP. The target's nature picks the burst type.

7. Common Misconceptions

8. Debugging Insight

9. Verification Insight

10. Interview Questions

11. Summary

AxBURST is the 2-bit field that says how the address steps between beats, working with AxSIZE (the step) and AxLEN (the count) so the subordinate can derive every beat's address from the single AxADDR. FIXED (00) holds the address constant — for single ports/FIFOs (≤16 beats); INCR (01) increments by 2^AxSIZE — the workhorse for sequential memory (1–256 beats); WRAP (10) increments then wraps at an aligned boundary — for critical-word-first cache-line fills (length 2/4/8/16, aligned start). 2'b11 is reserved.

The choice follows the target: a port wants FIXED, memory wants INCR, a cache fill wants WRAP — and using the wrong type produces telltale symptoms (FIXED-as-INCR scatters data across registers; INCR-as-FIXED collapses it to one address). Debug "wrong address" bugs by deriving the per-beat sequence from AxBURST/AxADDR/AxSIZE and comparing to where data landed; verify all three types with address-sequence checks and WRAP legality assertions. Next: AxID, the transaction identifier that routes and orders traffic.

12. What Comes Next

You know how the address steps; next, how transactions are identified and ordered:

  • 6.3 — AxID (coming next) — transaction-ID semantics and how IDs route and order traffic.
  • 6.4 — AxLOCK & AxCACHE (coming soon) — the lock (exclusive) and cache/memory-attribute encodings.

Previous: 6.1 — AxADDR, AxLEN & AxSIZE. For the broader protocol catalog, see the AMBA family overview doc.