AMBA AXI · Module 14
Reset Sequencing
AXI reset discipline — ARESETn behavior, the rule that all VALID signals must be low during reset and the first VALID comes after deassertion, the asynchronous-assert/synchronous-deassert technique, and reset coordination across clock domains.
Every AXI interface has a reset, ARESETn (active-low), that brings it to a known quiescent state. Reset seems simple, but it has specific protocol rules (all VALIDs low during reset; the first VALID only after deassertion) and a timing discipline (asynchronous assert, synchronous deassert) that, if violated, cause metastability and spurious transactions. And in a multi-clock system (Chapter 14.1–14.2), reset must be coordinated across domains. This chapter covers ARESETn behavior, the reset protocol rules, the async-assert/sync-deassert technique and why it's necessary, and cross-domain reset coordination.
1. ARESETn and the Reset Rules
ARESETn is AXI's active-low reset. While it's asserted (low), the interface must be quiescent — no transactions in progress. The protocol rules:
- All
VALIDsignals must be driven LOW during reset —AWVALID,WVALID,BVALID,ARVALID,RVALIDare all deasserted. No channel is offering a transfer. - The earliest a
VALIDmay assert is at a rising clock edge afterARESETnis high. So no transaction starts during reset or at the exact deassertion edge — the interface waits at least until the first clock edge with reset released. - Other signals are don't-care during reset. Address, data, and control values needn't be defined while reset is asserted (only the
VALIDs must be low); they become meaningful only when a transaction is actually issued after reset.
So reset's protocol contract is narrow but firm: VALIDs low while reset, first VALID after release. This guarantees both sides come out of reset with no phantom transaction in flight — the interface starts clean.
reset-deassert — VALID low during reset, first VALID after deassertion
8 cycles2. Asynchronous Assert, Synchronous Deassert
The standard reset timing discipline is asynchronous assertion, synchronous deassertion:
- Asynchronous assert: reset can be applied immediately (asynchronously), without waiting for a clock edge — so the design enters reset right away (important for power-up or emergency reset, when the clock may not even be running). Flops have an async reset input that forces them to the reset state regardless of the clock.
- Synchronous deassert: reset must be released synchronously — the deassertion is aligned to (synchronized to) the clock so that all flops exit reset on the same clock edge. This requires a small reset synchronizer (the incoming async reset is asserted async but its release is passed through flops clocked by the destination clock).
Why this combination? Asserting async is safe (forcing everything to a known state has no race). But releasing async is dangerous: if reset deasserts arbitrarily close to a clock edge, some flops might sample the release and exit reset this cycle while others exit next cycle (metastability on the reset signal itself, or skew) — leaving the logic in an inconsistent state. Synchronizing the deassertion ensures a clean, simultaneous exit. This is the universal reset discipline, and AXI's ARESETn follows it.
3. Why It Matters — Clean Start, No Phantom Transactions
The two disciplines together guarantee a clean start. Consider what goes wrong without them:
- If
VALIDs weren't forced low during reset: a stale or randomVALIDcould make the other side think a transaction is in progress as reset releases — a phantom transaction with garbage address/data. The "VALIDs low during reset" rule prevents this — the interface is definitively idle. - If reset deasserted asynchronously: flops exit reset on different edges, so (for example) the logic driving
AWVALIDmight come out of reset a cycle before the logic drivingAWADDR— assertingVALIDwith an undefined address, or the receiver might seeVALIDwhile still partly in reset. The synchronous deassert ensures everything exits together, so the first transaction is well-formed.
So the rules and discipline jointly ensure: at reset release, both sides are simultaneously idle and consistent, and the first transaction is clean (well-formed, no phantom). This is why reset isn't an afterthought — getting it wrong produces spurious transactions or metastable startup, which are nasty intermittent bugs. Reset is also generally a full-interface (often full-system) event: any in-flight transactions are abandoned (the spec returns the interface to quiescent), so reset isn't used mid-operation to cancel a single transaction.
4. Reset Across Clock Domains
In a multi-clock system (Chapters 14.1–14.2), reset must be handled per domain and coordinated:
- Per-domain synchronization: each clock domain has its reset synchronized to its own clock (async-assert/sync-deassert in that domain), because a single reset signal crossing into multiple domains must be released cleanly relative to each domain's clock — you can't share one synchronous deassertion across asynchronous clocks.
- Coordination for bridges: an async AXI bridge (Chapter 14.2) spans two domains, with FIFO pointers and state in each. Its reset must be coordinated so the bridge initializes consistently — e.g., the FIFO is empty and both pointers are reset before either side starts issuing, and the two domains' resets overlap appropriately so no half-reset state lets a transaction through. A common discipline is to assert reset to both domains together and release each synchronously to its own clock, ensuring the bridge is fully quiescent before either side resumes.
So cross-domain reset is "one logical reset, synchronized into each domain, coordinated so shared structures (bridges/FIFOs) come up consistent." Mishandling it — releasing one domain's reset while the other is still resetting, or initializing FIFO pointers inconsistently — causes startup glitches or corrupted CDC structures. Reset coordination is part of the bridge/clock-converter design (Chapter 12.7).
5. Common Misconceptions
6. Debugging Insight
7. Verification Insight
8. Interview Questions
9. Summary
AXI reset is governed by ARESETn (active-low) with firm protocol rules and a timing discipline. The rules: all VALIDs must be low during reset (the interface is quiescent — no phantom transaction), and the first VALID may assert only at a rising edge after ARESETn is high (no transaction overlaps the release); other signals are don't-care during reset. The discipline is asynchronous assert, synchronous deassert: reset applies immediately (safe — forcing a known state, works even without a clock), but its release is synchronized to the clock (via a reset synchronizer) so all flops exit reset on the same edge — avoiding the metastability/skew of an async release that would leave the logic inconsistent (and could assert VALID with an undefined address).
Together these guarantee a clean start: both sides simultaneously idle and consistent, with a well-formed first transaction. Across clock domains, reset is synchronized per domain (you can't share one synchronous release across async clocks) and coordinated for spanning structures (async bridges/FIFOs must initialize consistently). Crucially, reset deassertion is a CDC problem — the async reset release is a single-bit crossing synchronized like any control signal (Chapter 14.1) — so its correctness is structural, verified by static CDC analysis (metastable release is invisible to functional sim). Reset bugs (phantom transactions, metastable startup, corrupted bridge init) are intermittent and startup-specific, so the discipline is designed in. Next: avoiding partial transactions — how reset mid-burst corrupts state and how to prevent it.
10. What Comes Next
You've got reset discipline; next, the mid-burst reset hazard:
- 14.4 — Avoiding Partial Transactions (coming next) — how a reset mid-burst corrupts state and how to prevent partial/orphaned transactions.
- 14.5 — CDC Handshake Safety (coming soon) — the rules that keep
VALID/READYsafe across domains.
Previous: 14.2 — Asynchronous AXI Bridges. Related: 14.1 — AXI Across Clock Domains for the CDC/synchronizer foundation, and 12.7 — Clock & Reset in Interconnect for reset in the fabric. For the broader protocol catalog, see the AMBA family overview doc.