6.3.7 · D5Interconnects, Buses & SoC
Question bank — AXI - AMBA on-chip protocols
True or false — justify
The five AXI channels can each carry a transfer in the same clock cycle.
True — the channels are physically separate wire bundles with their own VALID/READY pairs, so AW, W, B, AR and R can all handshake on the very same rising edge with no contention.
AXI is just a faster version of APB with wider wires.
False — APB is unpipelined and single-transaction; AXI's whole point is independent address/data channels, outstanding transactions and out-of-order completion. Width is the least of the differences.
A read transaction needs a separate response channel like writes do.
False — for reads the data is the response: each read data beat on the R channel carries an RRESP status field, so no sixth channel is needed.
Once a master asserts VALID it may lower it next cycle if it changes its mind.
False — VALID must stay high until the transfer completes (VALID and READY both high on a rising edge). Dropping it early would deadlock the handshake and violate the protocol.
READY is allowed to be asserted before its matching VALID.
True — a slave may pre-assert READY while waiting; the transfer simply happens on the cycle when VALID also becomes high. Only VALID has the "hold until transfer" rule, not READY.
Transactions with different IDs are guaranteed to complete in issue order.
False — different IDs may complete in any order (that's the point of IDs). Only transactions sharing the same ID are guaranteed ordered.
An INCR burst and a WRAP burst of the same length move the same number of bytes.
True — length (beat count) and size (bytes/beat) determine byte count; INCR vs WRAP only changes which addresses are hit, not how many beats occur.
A FIXED burst is useless because it reads the same address repeatedly.
False — that's exactly its purpose: draining a FIFO/peripheral register (e.g. a UART RX buffer) where each read pops new data from one fixed address.
Bursts make a single 4-byte transfer cheaper.
False — bursts amortize the address cost over many beats; a lone single-beat transfer gets no amortization ( is paid in full). Bursts only win when .
Spot the error
"To boost throughput, the master keeps VALID high but the slave never asserts READY, so data flies through."
Error — no transfer occurs until both VALID and READY are high on the same edge. With READY stuck at 0, nothing transfers; the channel is stalled, not fast.
"We use a 3-bit ARID field, giving us up to 3 outstanding read transactions."
Error — a -bit ID gives distinct tags, so 3 bits allow outstanding, not 3. The count is the number of ID values, not the bit width.
"For a memory array read we should use a WRAP burst so addresses go 0x1000, 0x1004, 0x1008…"
Error — sequentially rising addresses that don't roll over are an INCR burst. WRAP is for when the address must fold back at a boundary (cache-line fills), not for open-ended array scans.
"Write data can arrive on the W channel before the master has even sent the address on AW."
Not necessarily an error, but the claim that it's forbidden is wrong — AXI does not force AW before W; W data may lead, lag, or align with its AW address as long as they share the AWID. (The B response, however, only comes after the write commits.)
"A slow UART on the bus stalls the CPU's DRAM read, because it's a shared bus."
Error — AXI is not a single shared time-slot bus. Independent channels plus transaction IDs let the fast DRAM read complete without waiting behind the slow peripheral.
"Same-ID reordering is fine because the data is identical anyway."
Error — same ID implies a possible dependency (e.g. a pointer write before a payload write). Reordering same-ID transactions could break memory consistency, which is exactly why the spec forbids it.
Why questions
Why does AXI split address and data into separate channels instead of sending them together?
Because address traffic is tiny compared to data, and decoupling lets a master pipeline: issue address N+1 while data N is still streaming, so address bandwidth and data bandwidth scale independently.
Why does a write need its own B (response) channel while a read does not?
A write's success is only known after the slave commits the buffered data, which happens later than the last W beat — so the acknowledgement must be a separate, later signal. A read's success rides along inside the returning R data.
Why must VALID stay asserted until the transfer completes?
If VALID could drop while READY was still low, the two sides could keep missing each other or the initiator could abandon a half-offered transfer — a deadlock/loss hazard. Holding VALID guarantees eventual coincidence and forward progress.
Why do transaction IDs prevent head-of-line blocking?
Without IDs, responses must return in issue order, so one slow access (DRAM) freezes every later fast one. IDs let each response be matched to its request independently, so a fast SRAM read (different ID) can overtake a stalled DRAM read.
Why does burst overhead approach as beat count grows?
The single address cost is spread over beats, giving per-transfer overhead ; as the term vanishes and only the unavoidable data time remains.
Why is a central arbiter not needed for the AXI handshake itself?
The VALID/READY coincidence rule is fully local between one master and one slave — each pair negotiates its own transfer, so flow control is distributed and scales to many endpoints (see 6.3.01-bus-architectures-and-topologies for the contrast with arbitrated shared buses).
Edge cases
What happens on a zero-length… trap: can an AXI burst have 0 beats?
No — burst length encodes at least one beat (AXI4 length field 0 means one beat, not zero). Every valid transaction transfers at least one data beat, so there is no "empty" transfer.
If a master issues two reads with the same ID to a fast SRAM and a slow DRAM, which returns first?
The one issued first must return first, regardless of speed, because same-ID transactions are ordered. If the slow one was issued first, the fast one waits behind it — the price of same-ID ordering.
A WRAP burst of 4 beats starting at 0x100 (4-byte size) — what is the address sequence?
0x100, 0x104, 0x108, 0x10C, then it wraps back to 0x100 for continuation. The wrap boundary is aligned to (beats × size), so it folds at the 16-byte block edge rather than running off.
What if VALID and READY are both asserted but there is no rising clock edge yet?
No transfer — the handshake requires the coincidence to be sampled at a rising ACLK edge. AXI is a synchronous protocol; levels between edges don't move data.
Master supports 16 outstanding transactions but issues a 17th before any complete — what happens?
It must stall (hold the new VALID low or wait) until an outstanding transaction retires, since only tags (here 16) can be in flight; there is no free ID to label the 17th.
A read and a write to the same address are outstanding at once — does AXI guarantee ordering between them?
No — read and write channels are independent and unordered relative to each other by default. Ordering across the two must be enforced by the master (or coherency logic, see 6.3.04-memory-coherence-protocols), not assumed from AXI alone.
Recall Fastest self-test
The single sharpest AXI trap ::: Confusing "different ID = reorderable" with "same ID = ordered"; and remembering that VALID (not READY) is the signal that must be held until transfer.