AMBA AXI · Module 7
Narrow & Unaligned Transfers
AXI narrow transfers (AxSIZE below the bus width, where active byte lanes rotate with the address) and unaligned start addresses (which produce a partial first beat) — the byte-lane mapping, why they matter, and how to handle them.
Two situations make an AXI burst's byte handling more intricate than "every beat fills the bus": narrow transfers (where AxSIZE is smaller than the data bus, so each beat uses only some byte lanes) and unaligned starts (where AxADDR isn't aligned to the transfer size, so the first beat is partial). Both are legal and common, and both come down to one question per beat: which byte lanes carry valid data? This chapter answers that — the lane rotation of narrow transfers, the partial first beat of unaligned starts, and the address-to-lane mapping that governs both. It's the conceptual setup for the strobe-progression detail in Chapter 7.8.
1. Narrow Transfers — Fewer Lanes, Rotating
A narrow transfer has AxSIZE smaller than the data bus width, so Number_Bytes = 2^AxSIZE is less than the bus's byte count. Each beat moves only Number_Bytes bytes, occupying just some of the byte lanes — and because INCR's address increments by Number_Bytes each beat, which lanes are active rotates as the burst proceeds.
Example: a 32-bit bus (4 byte lanes) doing 1 byte/beat (AxSIZE = 0), INCR from 0x00. Beat 0 → address 0x00 → lane 0; beat 1 → 0x01 → lane 1; beat 2 → 0x02 → lane 2; beat 3 → 0x03 → lane 3. The single active lane walks across the bus. With 2 bytes/beat (AxSIZE = 1) it would alternate lanes [1:0] then [3:2]. The active lane(s) are always those the current address selects within the bus word.
2. Unaligned Transfers — The Partial First Beat
An unaligned transfer has AxADDR not aligned to the transfer size. From the addressing rules (Chapter 7.5), beat 1 uses Start_Address (the unaligned address) while beats 2+ use Aligned_Address. The consequence: the first beat is partial — it transfers only the bytes from the unaligned offset up to the next size-aligned boundary, using only the upper byte lanes from that offset. After that, the progression snaps to aligned addresses and every later beat is a full Number_Bytes transfer.
Example: a 4-byte/beat INCR from 0x02 on a 32-bit bus. Aligned_Address = 0x00. Beat 0 is at 0x02 but transfers only bytes at lanes 2–3 (the bytes 0x02–0x03, up to the 4-byte boundary at 0x04); beat 1 is at 0x04 (full, lanes 0–3); and so on. So the unaligned offset is "consumed" by a partial leading beat, after which the burst is aligned.
3. The Byte-Lane Mapping
Both behaviors come from one mapping: which byte lanes a beat uses are determined by its address modulo the bus width and its transfer size. For a beat at Address on a bus of Data_Bus_Bytes:
lower byte lane =
Address − (INT(Address / Data_Bus_Bytes) × Data_Bus_Bytes)— i.e.,Address mod Data_Bus_Bytesthe beat occupies
Number_Byteslanes starting there (clipped to the aligned boundary for a partial beat).
So: the address mod bus width picks the starting lane; the transfer size sets how many lanes; and alignment determines whether the beat is full or clipped. Narrow transfers make Number_Bytes small (few lanes, rotating as the address steps); unaligned starts make the first beat's lane span start mid-word and clip at the boundary. Reads work identically — the subordinate places valid bytes on the lanes the address selects, and the manager takes them from there.
4. A Narrow Transfer on the Wire
A narrow write — 1 byte/beat on a 32-bit bus, INCR from 0x00 — shows the active lane (via WSTRB) walking across the bus beat by beat:
narrow-transfer — 1 byte/beat INCR write, WSTRB walking across lanes
6 cycles5. Why They Matter — and the Efficiency Cost
Narrow and unaligned transfers exist because real systems need them: a narrow transfer arises when a master or peripheral has a data path smaller than the interconnect's, or when software does sub-word accesses (a byte/halfword store); an unaligned transfer arises whenever a buffer or structure isn't size-aligned (common with packed data, software memcpy of arbitrary pointers, or byte-oriented protocols).
Both are legal but carry an efficiency cost: a narrow transfer uses only part of the bus each beat, wasting bandwidth (a 1-byte/beat burst on a 64-bit bus uses 1/8 of the available width); an unaligned start spends a partial beat on the leading remainder. High-performance paths therefore prefer aligned, full-width transfers — but the protocol fully supports the narrow/unaligned cases, and the hardware must handle them correctly, because they will occur.
6. Common Misconceptions
7. Debugging Insight
8. Verification Insight
9. Interview Questions
10. Summary
Narrow and unaligned transfers are about one thing: which byte lanes a beat uses. A narrow transfer (AxSIZE below the bus width) moves only 2^AxSIZE bytes per beat, occupying a subset of lanes that rotates as the address increments (1 byte/beat on a 32-bit bus walks lanes 0→1→2→3). An unaligned start (AxADDR not size-aligned) makes the first beat partial — it transfers only from the offset up to the aligned boundary, on the upper lanes — after which beats snap to Aligned_Address and run full-width. Both follow the single mapping: starting lane = Address mod Data_Bus_Bytes, count = Number_Bytes, clipped if partial.
They're legal and necessary (narrow peripherals, sub-word accesses, unaligned buffers) but cost bandwidth, so high-performance paths prefer aligned full-width. Their bugs are wrong-lane / partial-beat errors — bytes in the wrong positions, visible only on sub-word/odd-address accesses — and the cure for both debug and verification is a byte-accurate, lane-aware model that places each beat's bytes on exactly the address-selected lanes. Next: strobe behavior in bursts — how WSTRB concretely evolves across these narrow and unaligned beats, completing the picture.
11. What Comes Next
You've got the lane mechanics; next, the strobes that express them:
- 7.8 — Strobe Behavior in Bursts (coming next) — how
WSTRBevolves beat-by-beat across narrow and unaligned bursts, tying lanes, addresses, and strobes together.
Previous: 7.6 — The 4KB Boundary Rule. Related: 7.5 — Burst Address Calculation for the per-beat addresses, and 6.7 — WSTRB Write Strobes for the strobe basics. For the broader protocol catalog, see the AMBA family overview doc.