Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutContactPrivacyTerms
Skip to lesson

Course contents

  • How to Use This Course
  • Reading Paths
  • Concept Map
  • How to Read the Diagrams
  • Part 0: What Is a Protocol?10
  • Part 1: Timing and Clocking11
  • Part 2: Encoding and Framing12
  • Part 3: Handshakes13
  • Part 4: Flow Control17
  • Part 5: Transactions19
  • Part 6: Concurrency and Performance17
  • Part 7: Ordering13
    • Why Ordering Matters
    • Ordering Scopes
    • The Point of Serialisation
    • Early and Final Acknowledgement
    • Fences and Barriers
    • Ordering Tables
    • Relaxed and ID-Based Ordering
    • Same-Address Hazards
    • Interrupt and Data Ordering
    • Memory Consistency Models
    • Ordering Across Bridges
    • Protocols Compared: Ordering
    • Drills: Ordering
  • Part 8: Sharing and Arbitration12
  • Part 9: Deadlock and Liveness13
  • Part 10: Reliability and Recovery20
  • Part 11: Bring-Up and Link Management10
  • Part 12: Power8
  • Part 13: Shared State and Coherence9
  • Part 14: Security and Isolation7
  • Part 15: Specifying and Verifying11
  • Part 16: Protocols Dissected17
  • Part 17: Capstones5
  • Part 18: Interview Preparation6
Loading lesson

‹Part 7: Ordering
  1. Topics
  2. First Principles of Hardware Protocols
  3. Part 7: Ordering
  4. Early and Final Acknowledgement

Part 7 · Ordering · Senior (S)

Early and Final Acknowledgement

A write response can mean "a buffer accepted it" or "it reached its destination". What each promises, when early acknowledgement is safe, and how a requester gets the stronger promise when it needs it.

On this page

    Note

    Level: Senior (S) · Answers: In what order do results become visible?

    Before this: The Point of Serialisation, Transaction Attributes

    A driver writes "power down" to a device's control register, receives the write response, and switches off the device's clock. The device never powers down cleanly. The write response had come from a buffer in the interconnect, not from the device, and the write was still in that buffer when the clock stopped. The driver read the response as "done". It meant "accepted".

    What does a write response actually promise, and how does a requester get the promise it needs?

    The obvious answer, and why it breaks

    The obvious meaning of a write response is that the write has happened at its target. For many writes, waiting for that is wasteful: memory writes can be accepted by a nearby buffer and finished later, saving a long round trip (lesson 6.13). So many fabrics answer early, from the first buffer that takes responsibility for the write. Both meanings are useful; trouble starts when the requester assumes the stronger one and gets the weaker.

    The idea: early and final acknowledgement

    Early acknowledgement

    Final (end-to-end) acknowledgement

    Sent by

    A buffer on the way (interconnect, bridge, write buffer)

    The target, or the point of serialisation (lesson 7.3)

    Promises

    The write is accepted and will be done; later writes the protocol orders with it (its ordering domain) will not overtake it

    The write has reached its destination and is visible to later accesses

    Latency

    Short

    A full round trip

    Errors

    Reported later, elsewhere, or not at all

    Reported in the response

    Safe for

    Normal memory, where nobody depends on exactly when it lands

    Device registers, power and clock control, anything followed by an action outside the path

    With an early acknowledgement, the requester continues while the write is still on its way; with a final one, it continues only after the target has the data.

    How a requester gets the promise it needs

    • Mark the write so buffers may not answer early: a non-bufferable attribute (lesson 5.12) makes the response come from the target.

    • Follow up with a read from the same target, on a path where reads cannot overtake earlier writes; the read's data cannot return until the write has landed (lesson 5.7).

    • Use a fence or barrier that waits for earlier writes to complete at their destinations (lesson 7.5).

    An early acknowledgement does not remove the protocol's ordering rules, and it does not add any. A buffer that answers early must keep in order exactly the writes the specification says are ordered; writes the specification leaves unordered may still overtake each other inside or after it. So "same requester, same path" is not enough to make data-then-flag safe. The specification has to say which writes form an ordering domain. In AXI, that depends on the ID, the addresses and the memory type: writes with the same ID to overlapping addresses, or to Device memory in the same peripheral region, are observed in order. Two Normal-memory writes to different addresses are not ordered by sharing an ID, and writes with different IDs are not ordered at all.

    • Safe: the producer writes the data, waits for that write's response, then writes the flag. The response may come early from a buffer, because the buffer may give it only from a point where any later access to that address will see the data.

    • Not safe: the producer issues data and flag back to back, to different Normal-memory addresses, relying on the shared path. Both get early responses. The flag may become visible first, and the consumer reads stale data.

    Before relying on any data-then-flag sequence, find three things in the specification: which writes share an ordering domain (ID, address, memory type, channel), what each buffer or memory attribute allows, and what a response promises about visibility. If any of these is missing, use one of the three methods above.

    How real protocols chose

    Protocol

    What a write response means

    AXI

    For a bufferable write, the response may come from an intermediate point; for a non-bufferable write, from the final destination. The AxCACHE attribute decides.

    PCI Express

    Memory writes are posted, so there is no response at all; a read from the same device, which may not pass the earlier posted writes, confirms they arrived.

    DCLink

    Every WR's CPL comes from R after the write is performed (step 4).

    What breaks

    The opening story: the device's control register was mapped as bufferable, so the power-down write was acknowledged early, and the clock was stopped with the write still in a buffer. The fix was to map device registers as non-bufferable, so the response came from the device itself; a read-back of the register before stopping the clock would also have worked.

    Why this matters

    Senior lens. For every write that is followed by an action outside its own path (stopping a clock, signalling another agent, entering a power state, triggering hardware by a sideband wire), ask what the response the code waits for actually promises. If it can come from a buffer, the action can overtake the write. Make such writes non-bufferable, or add a read-back or fence.

    Interview

    Asked: "When the write response arrives, is the data in memory?"

    Weak answer: Yes, that's what the response means.

    Strong answer: Not necessarily. If the write was bufferable, an interconnect buffer may have answered early: the response means the write was accepted and won't be overtaken by later writes the protocol orders with it, such as same-ID writes to the same address in AXI, not that it reached memory. For a non-bufferable write the response comes from the destination. If I need to know it landed, I make it non-bufferable, read back from the same target, or use a fence that waits for completion.

    Follow-ups: (1) What does an early acknowledgement still guarantee? (2) How does a read-back confirm a posted write?

    Check yourself A driver writes a command and then rings a doorbell through a different bridge. Both writes were acknowledged early. Can the doorbell arrive first?

    Yes: early acknowledgements order writes only along their own path; different paths can reorder. Use the same path, a read-back, or a fence.

    Check yourself What must a buffer that acknowledges early still guarantee?

    That the write will eventually be performed, and that later writes in the same ordering domain, as the specification defines it (in AXI: ID, address overlap and memory type), will not overtake it. It promises nothing about writes outside that domain, even on the same path.

    Key takeaways

    • A write response may mean "accepted" (early) or "arrived" (final); attributes decide which.

    • Early acknowledgement is safe for memory; device registers and writes followed by outside actions need final acknowledgement.

    • Get the stronger promise with a non-bufferable write, a read-back from the same target, or a fence.

    Keep going

    Next: Lesson 7.5, Fences and Barriers. Forcing order on demand: what a fence does in hardware, and what it costs.

    Related topics

    • Part 7 overview: Ordering

    Previous

    107 / 234

    Next: Fences and Barriers

    Up next

    Up nextFences and Barriers

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Why Ordering Matters
    • Ordering Scopes
    • Ordering Tables