Skip to content

AMBA AXI · Module 7

Strobe Behavior in Bursts

How WSTRB evolves beat-by-beat across an AXI burst — full strobes for aligned beats, rotating strobes for narrow transfers, a partial first beat for unaligned starts, and constant strobes for FIXED.

This chapter completes Module 7 by tying three threads together — the per-beat addresses (Chapter 7.5), the active byte lanes (Chapter 7.7), and the write strobes (WSTRB, Chapter 6.7) — into one picture: how the strobes change beat by beat across a burst. For an aligned full-width burst the answer is boring (every beat is all-ones), but the moment a burst is narrow or unaligned, WSTRB evolves from beat to beat in exactly the pattern the lane mapping dictates. Seeing that progression concretely is what makes byte-accurate write handling click — and it's where a lot of real RTL and verification bugs live.

1. The Per-Beat Strobe Rule

There is one rule, applied independently to every beat: WSTRB[n] = 1 exactly when byte lane n is within that beat's valid byte range. The valid range is the lane span from Chapter 7.7 — starting lane Address mod Data_Bus_Bytes, spanning Number_Bytes lanes, clipped at the aligned boundary for a partial beat. So the strobes for a beat are simply the visible form of which lanes that beat addresses.

Because each beat has its own address (per the burst type), each beat has its own strobe pattern. The strobes are therefore a per-beat quantity that can change every beat — and tracking how they change across the burst is "strobe behavior."

strobe-progression — unaligned INCR write, partial first beat then full

6 cycles
A 3-beat unaligned write: WSTRB is 1100 on beat 0 (lanes 2-3), then 1111 on beats 1 and 2, WLAST on the third.partial (1100) then full (1111)beat 0 @ 0x02 → lanes 2–3 (1100)beat 0 @ 0x02 → lanes …beats 1–2 full (1111), WLASTbeats 1–2 full (1111),…aclkwvalidwreadywstrbX11001111111111111111wdataXD0D1D2D2D2wlastt0t1t2t3t4t5
Figure 1 — strobe-progression: an unaligned INCR write (4 bytes/beat, 32-bit bus, start 0x02, 3 beats). Beat 0 at 0x02 is partial — only lanes 2–3 valid → WSTRB=1100; beats 1–2 are aligned and full → WSTRB=1111. The strobes change beat-to-beat to match each beat's addressed lanes; the leading partial beat absorbs the unaligned offset.

2. Strobe Patterns by Case

The same rule produces a distinct progression for each situation:

CaseStrobe progression (32-bit bus example)
Aligned, full-width INCR1111, 1111, 1111, … — every beat all-ones
Narrow (1 byte/beat) INCR0001, 0010, 0100, 1000, … — single lane rotating with the address
Narrow (2 byte/beat) INCR0011, 1100, 0011, 1100, … — lane pair alternating
Unaligned (4B/beat from 0x02)1100, 1111, 1111, … — partial first beat, then full
FIXED (4B/beat)1111, 1111, 1111, … — same lanes each beat (address constant)

The aligned full-width case is trivial; narrow makes the strobes rotate (because the active lane(s) move with the incrementing address); unaligned makes the first beat partial; FIXED keeps the pattern constant because the address never moves. WRAP follows the wrapped addresses (the strobe pattern tracks the wrapping lane positions). A burst can combine cases — a narrow and unaligned burst has both a partial leading beat and rotating lanes.

Aligned full 1111; narrow rotates 0001 0010 0100 1000; unaligned 1100 then 1111; FIXED constant.Aligned full-width1111 · 1111 · 1111Narrow 1-byte0001 · 0010 · 0100 · 1000Unaligned1100 · 1111 · 1111FIXEDconstant each beat12
Figure 2 — strobe patterns by case on a 32-bit bus. Aligned full-width: 1111 every beat. Narrow 1-byte: a single 1 walking across the lanes. Unaligned: a partial first beat (1100) then 1111. FIXED: a constant pattern since the address doesn't move. Each is the same per-beat lane rule applied to that burst's addresses.

3. Deriving a Beat's Strobes

The derivation chains the Module 7 pieces in order:

Beat address to starting lane and count to clipped lane span to WSTRB, optionally masked for sparse writes.Beat address(7.5 rule)Lane span = Addressmod bus,Number_BytesClip if partial(unaligned edge)WSTRB = thoselanes (mask forsparse)
Figure 3 — deriving a beat's WSTRB. Compute the beat address (burst-type rule, 7.5), reduce to a starting lane (Address mod Data_Bus_Bytes) and lane count (Number_Bytes), clip a partial beat at the aligned boundary, then set WSTRB to those lanes — optionally further masked for a sparse write. Lanes, addresses, and strobes are three views of the same computation.

The optional last step: a master may further deassert strobes within the addressed range for a genuinely sparse write (writing only some of the addressed bytes). But the addressed lane span is the maximum — a beat must never assert a strobe outside the lanes its address/size select. That over-assertion is the classic protocol violation.

4. Why This Closes the Loop

Strobe behavior is where the whole of Module 7 becomes observable on the wire. The address calculation (7.5) tells you where each beat goes; the lane mapping (7.7) tells you which lanes that implies; and WSTRB (6.7) is how the write side expresses it every beat. A subordinate writes exactly the strobed bytes (Chapter 6.7), so if any link in that chain is wrong — wrong address, wrong lanes, wrong strobes — the bytes land in the wrong place. Getting the strobe progression right is therefore the practical proof that the burst machinery is correct end to end.

Address calculation feeds lane mapping feeds WSTRB feeds the subordinate committing strobed bytes.Address (7.5)where each beatgoesLanes (7.7)which lanesWSTRB (6.7)per-beat strobesSubordinatecommits strobedbytes12
Figure 4 — the closed loop. Address calculation (7.5) → lane mapping (7.7) → WSTRB (6.7) → the subordinate commits exactly the strobed bytes. The strobe progression is the observable output of the whole burst model; a defect anywhere in the chain shows up as wrong-position bytes, which the strobes make visible.

5. Common Misconceptions

6. Debugging Insight

7. Verification Insight

8. Interview Questions

9. Summary

Strobe behavior is the per-beat application of one rule — WSTRB[n] = 1 iff lane n is in the beat's valid range (Address mod Data_Bus_Bytes, spanning Number_Bytes, clipped if partial) — across a whole burst. For aligned full-width (and FIXED) the pattern is constant (1111 / same lanes); for narrow bursts it rotates with the address (0001, 0010, 0100, 1000); for unaligned starts the first beat is partial (1100 then 1111); for WRAP it tracks the wrapped lanes. A master may sub-mask within the addressed range (sparse write) but must never strobe outside it.

This closes Module 7: the strobe progression is the observable output of the address (7.5) → lane (7.7) → strobe (6.7) chain, so verifying it beat-by-beat against a golden, lane-aware model — paired with a byte-accurate reference memory — validates the entire burst model at once and catches rotation, clip, and over-assert bugs that aligned full-width traffic hides. With bursts, addressing, boundaries, and strobes fully covered, Module 8 turns to a higher-level capability: outstanding transactions — issuing multiple transactions before earlier ones complete, the key to AXI's latency-hiding throughput.

10. What Comes Next

You've completed the burst model; Module 8 raises the abstraction to concurrency:

Previous: 7.7 — Narrow & Unaligned Transfers. Related: 7.5 — Burst Address Calculation and 6.7 — WSTRB Write Strobes — the two models this chapter ties together. For the broader protocol catalog, see the AMBA family overview doc.