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):
AxBURST | Type | Address between beats |
|---|---|---|
2'b00 | FIXED | Stays the same every beat |
2'b01 | INCR | Increments by the beat size (2^AxSIZE) |
2'b10 | WRAP | Increments, then wraps at an aligned boundary |
2'b11 | reserved | — |
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.
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):
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 cycles6. Choosing a Burst Type
Each type maps to a use, and the choice follows the target's nature:
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.