Skip to content

AMBA AXI · Module 14

Avoiding Partial Transactions

How a reset mid-burst leaves partial/orphaned AXI transactions that corrupt state — the hazard at master, interconnect, and slave — and the prevention: global simultaneous reset or graceful quiesce-then-reset.

Reset returns an AXI interface to quiescent (Chapter 14.3) — but what about transactions that were in flight when reset hit? A reset mid-burst leaves a partial transaction: write beats sent but no WLAST/B, or read beats returned but no RLAST — and the persistent state around it (partially-written memory, dangling tracker entries, half-full FIFOs) can be left inconsistent. Because reset is asynchronous to transaction boundaries, it can interrupt at any point. This chapter covers the hazard (where partial transactions corrupt state), the transaction FSM and reset, and the two prevention strategies: global simultaneous reset (everyone forgets together) or graceful quiesce-then-reset (drain first).

1. The Partial-Transaction Hazard

A burst is a multi-beat sequence; if reset hits partway through, the transaction is neither completed nor cleanly cancelled at the protocol level — both ends just go to reset. The danger is persistent state that doesn't reset cleanly or was already partially committed:

  • Slave side: a write burst with some W beats applied but not all — memory partially written (some bytes updated, some not); or an outstanding-transaction tracker left with a dangling entry expecting beats that never come.
  • Interconnect: dangling outstanding-tracking entries, ID-routing state left mid-transaction, or a FIFO holding a partial burst — inconsistent CDC/routing state.
  • Master side: logic waiting for a B/R response that was abandoned (though reset clears the master too, so this self-resolves if reset is global).

The root issue: reset is asynchronous to transaction boundaries, so it can land mid-burst, and any state that survives reset (memory contents, or logic/FIFOs not properly reset) is left in a half-updated, inconsistent condition. A partial write to memory is the worst case — it's a real data-corruption, not just a protocol hiccup.

Reset mid-burst orphans beats: slave memory partially written + dangling tracker, interconnect dangling state + partial FIFO, master awaiting a lost response.Reset mid-burstasynchronous toboundariesSlavememory partial-written,dangling trackerInterconnectdangling outstanding/ID,partial FIFOMasterawaiting lost B/RresponseInconsistent statepartial write = datacorruption12
Figure 1 — the partial-transaction hazard. A reset mid-burst leaves orphaned beats: at the slave, memory partially written and a dangling tracker entry; at the interconnect, dangling outstanding/ID state and a FIFO with a partial burst; at the master, a response never arriving. Reset is asynchronous to transaction boundaries, so persistent state (especially partially-written memory) is left inconsistent.

2. On the Wire — Reset Mid-Burst

A write burst interrupted by reset before WLAST / the B response:

reset-mid-burst — a write burst abandoned by reset before WLAST

8 cycles
A write burst sends D0, D1, D2; ARESETn asserts mid-burst, forcing WVALID low; WLAST never asserts and no B response returns — the burst is abandoned, leaving memory partially written.burst in progress (D0–D2, no WLAST yet)RESET → burst abandonedreset mid-burst: no WLAST, no Breset mid-burst: no WL…quiescent — but memory partially writtenquiescent — but memory…aclkaresetnwvalidwdataD0D1D2XXXXXwlastXXt0t1t2t3t4t5t6t7
Figure 2 — reset-mid-burst: a write burst (D0, D1, D2 …) interrupted when ARESETn asserts mid-burst. WLAST is never reached and no B response is returned — the burst is abandoned. The VALIDs are forced low by reset; on release the interface is quiescent, but any beats already applied to memory left it partially written. The transaction was neither completed nor protocol-cancelled.

3. The Transaction FSM and Reset

A transaction is a small state machine — idle → active (address + data beats) → response → idle — and reset can strike in any state:

Idle to Active on transaction start, Active to Done on completion, Done to Idle; reset from Active abandons the burst (partial state risk).AW/AR accepted →beatsWLAST/RLAST + B/Rtransaction completeRESET mid-burst →ABANDON (partial!)Idle(quiescent)Active (addr + data beats)Active(addr +…Done(response)
Figure 3 — the transaction FSM with reset. Normal flow: Idle → Active (AW/AR accepted, data beats) → Done (WLAST/RLAST + B/R response) → Idle. Reset can hit in any state; from Active it abandons the burst mid-flight (the partial-transaction risk — beats sent, no WLAST/response, possible partial memory write). The FSM resets to Idle cleanly, but persistent side effects (partial writes) are the hazard reset alone doesn't undo.

The FSM itself resets cleanly to Idle from any state — that's straightforward. The problem is the side effects already committed in the Active state: beats already written to memory, a tracker entry already allocated, a FIFO already partially filled. Resetting the FSM forgets the control state, but doesn't undo a partial memory write or guarantee a downstream FIFO is flushed. So "reset to Idle" makes the interface quiescent but can leave persistent state inconsistent — which is exactly what the prevention strategies address.

4. Prevention — Global Reset or Quiesce-Then-Reset

Two strategies prevent partial-transaction corruption:

  • Global simultaneous reset (the standard): reset the master, interconnect, and slave together as one system event. Since everyone goes to Idle and forgets all transaction state at once, there's no "half" — no side waiting for a response, no dangling tracker, no FIFO mismatch. The partial memory write may still have happened, but it's understood that a reset discards all in-flight work and the system reinitializes from a known state (e.g., reloads/reinitializes memory regions as needed). This is the common case: reset is a coordinated system-wide event, not a localized one.
  • Graceful quiesce-then-reset: when you need to reset without corrupting persistent state (e.g., a partial-system reset, or to safely reconfigure), first quiesce — stop issuing new transactions and wait for all outstanding ones to complete (every B/R received, every burst finished with LAST) — then assert reset. This guarantees no transaction is in flight when reset hits, so there's no partial state. It requires a quiesce mechanism (a "stop and drain" handshake) and costs the drain time, but it's the safe way to reset a subsystem mid-operation.

The key principle: AXI has no per-transaction abort — you cannot cleanly cancel a single in-flight burst (the only "abort" is reset, which is all-or-nothing). So either reset everything together (global — accept that in-flight work is discarded and reinitialize) or drain first (quiesce — no in-flight work to corrupt). Never reset part of the system mid-burst and expect the rest to be consistent.

Global reset resets everyone together; quiesce-then-reset drains outstanding first; never partially reset mid-burst.system resetgraceful/partialavoidNeed to resetGlobal: resetmaster+IC+slavetogether (forgetall)Graceful: stopissuing → drainoutstanding →resetNever: resetpart mid-burst(partial state)
Figure 4 — prevention. Global simultaneous reset (standard): reset master + interconnect + slave together so everyone forgets in-flight state at once — no dangling/mismatched state, system reinitializes from known state. Graceful quiesce-then-reset: stop issuing, wait for all outstanding to complete (drain), then reset — no in-flight transaction to corrupt. AXI has no per-transaction abort, so reset everything together or drain first; never reset part mid-burst.

5. Common Misconceptions

6. Debugging Insight

7. Verification Insight

8. Interview Questions

9. Summary

A reset mid-burst leaves a partial transaction — beats sent without WLAST/B or RLAST — abandoned neither completed nor protocol-cancelled, because reset is asynchronous to transaction boundaries. The hazard is persistent state left inconsistent: a slave's partially-written memory (real data corruption), dangling outstanding-tracker entries, half-filled FIFOs, and mid-transaction interconnect/ID state. Resetting the transaction FSM forgets the control state but doesn't undo these committed side effects — which is the actual danger.

Prevention is one of two strategies, because AXI has no per-transaction abort: global simultaneous reset (reset master + interconnect + slave together so everyone forgets coherently — no dangling control state, though a partial memory write must be reinitialized) or graceful quiesce-then-reset (stop issuing, drain all outstanding to completion, then reset — nothing in flight to corrupt, preserving state). Never reset part of the system mid-burst. Verify by injecting reset at every point in a burst under heavy outstanding load and confirming clean recovery and persistent-state consistency — the realistic "reset while busy" case that quiescent-reset tests miss, and a frequent source of silicon field failures. Next: CDC handshake safety — the rules that keep VALID/READY safe across domains.

10. What Comes Next

You've got partial-transaction safety; next, the handshake CDC rules:

  • 14.5 — CDC Handshake Safety (coming next) — the rules that keep the VALID/READY handshake safe across clock domains, closing out the clock-domain module.

Previous: 14.3 — Reset Sequencing. Related: 7.1 — Burst Length, Size & Beats for burst structure, and 8.5 — Interconnect Implications for the outstanding state that goes dangling. For the broader protocol catalog, see the AMBA family overview doc.