13 / 24 · Concept
Acceptance events and stability during stalls
Assign source and sink responsibilities and preserve stalled payloads.
Lessons are free to read. Enroll to save your learning progress.
A transfer requires both signals at an edge
Valid promises that the source has a payload to offer. Ready promises that the sink can accept one at the current edge. A rising edge with both signals high transfers exactly one transaction. Payload includes every companion field, such as tag, operation, or address. A valid signal held high can mean one stalled item or a sequence of items transferring on consecutive ready edges.
When valid is high and ready is low, keep valid and the complete payload stable. Our contract allows only reset or an explicit flush to cancel that obligation. If a source waits for ready before asserting valid while a sink waits for valid before asserting ready, both can wait forever. Offer a prepared item independently of ready. These handshake and stability principles are documented in Arm's AMBA AXI specification, section A3. This small stream is not an implementation of the complete AXI interface.
| Edge | valid | ready | Payload | Transfer |
|---|---|---|---|---|
| 0 | 1 | 0 | tag4,y9 | None |
| 1 | 1 | 0 | tag4,y9 | None |
| 2 | 1 | 1 | tag4,y9 | tag4 once |
| 3 | 1 | 1 | tag5,y12 | tag5 once |
| 4 | 0 | 1 | Irrelevant | None |
Tag4 must remain unchanged through the stall. After its edge-2 transfer, the source may present tag5. Ready alone at edge 4 does not create a transaction. Counting valid alone can lose inputs; reading data alone can duplicate outputs.
These rules assume one clock domain. They do not solve clock-domain crossing or metastability. Count accepted inputs and delivered outputs from their respective handshakes. Without reset, accepted minus delivered must equal internal outstanding work. Queue accepted tags and remove them only on delivery. Combine that accounting with stalled-payload checks to detect loss, duplication, and identity changes even when arithmetic values happen to match.
Try it yourself
Valid is high on four edges in the table. How many transfers occur, and which tags transfer? Which rule is violated if y changes to 10 at edge 1?
Read the explanation
Two transfers occur, tags 4 and 5 at edges 2 and 3. Changing y at edge 1 violates payload stability for the transaction stalled at edge 0.