Skip to content

AMBA AXI · Module 11

TVALID, TREADY & TDATA

The core AXI4-Stream signals — TVALID/TREADY handshake and TDATA payload. The four handshake states, the stability and no-retraction rules, full-rate throughput vs backpressure/starvation bubbles, and how it mirrors the AXI VALID/READY handshake.

AXI4-Stream's core is just three signals: TVALID, TREADY, and TDATA. The handshake is the same VALID/READY mechanism as memory-mapped AXI (Module 3) — a transfer happens on a clock edge when both TVALID and TREADY are high — now governing a one-way data pipe. This chapter details the stream handshake: the four states, the stability and no-retraction rules that keep data intact, and how full-rate throughput degrades into bubbles under backpressure or starvation. If you know the AXI handshake, this is that knowledge applied to the stream — but it's worth nailing precisely, because in a streaming protocol the handshake is essentially the whole thing.

1. The Three Signals

  • TVALID — driven by the source; asserted when the source has a valid data word on TDATA to transfer.
  • TREADY — driven by the sink; asserted when the sink can accept a word this cycle.
  • TDATA — the payload, driven by the source; the stream's actual content. Width is implementation-defined (typically a multiple of 8 bits).

A transfer occurs on the rising clock edge when both TVALID and TREADY are high — one TDATA word moves from source to sink. That's the entire core mechanism: the source offers data (TVALID), the sink accepts it (TREADY), and when they agree, a word flows.

Four handshake states: both high transfer, TVALID-only backpressure, TREADY-only starvation, both low idle.TVALID=1, TREADY=1TRANSFER (word moves)TVALID=1, TREADY=0backpressure (source waits)TVALID=0, TREADY=1starvation (sink waits)TVALID=0, TREADY=0idle12
Figure 1 — the four handshake states. Both high → transfer (a word moves). TVALID high, TREADY low → backpressure (source waits, data held). TVALID low, TREADY high → starvation (sink waits, no data). Both low → idle. A transfer happens only in the both-high state — identical to AXI's VALID/READY.

2. The Rules — Stability and No Retraction

The handshake carries the same correctness rules as AXI (Module 3), now on the stream:

  • No TVALID-on-TREADY dependency. The source must not wait to see TREADY before asserting TVALIDTVALID may not combinationally depend on TREADY. (The sink may wait for TVALID before TREADY, or assert TREADY early — "pre-ready.") This asymmetry prevents handshake deadlock.
  • Hold stable until accepted. Once the source asserts TVALID, it must keep TVALID high and hold TDATA (and all payload signals) stable until the transfer completes (the cycle TREADY is also high). No retracting the offer, no changing the data mid-offer.
  • No transfer without both. A word moves only when both are high on a clock edge. If TREADY is low, the source waits (holding data); if TVALID is low, the sink waits (no data to take).

Violating stability corrupts the stream (the sink may sample changing data); retracting TVALID before acceptance loses or duplicates a word. These are the identical pitfalls as the AXI handshake — the stream just has one such handshake instead of five channels' worth.

Source asserts TVALID independent of TREADY, holds data stable until TREADY, transfer occurs when both high.TREADY=1Source has dataAssert TVALID +drive TDATA(independent ofTREADY)Hold TVALID + TDATAstable until TREADYBoth high →transfer, nextword
Figure 2 — the handshake rules. TVALID must not depend on TREADY (no deadlock); once TVALID is asserted, TDATA and TVALID must stay stable until TREADY completes the transfer (no retraction, no mid-offer data change). A word transfers only when both are high. These are the same VALID/READY rules as memory-mapped AXI.

3. On the Wire — Transfers and Bubbles

Data flows at full rate when both signals stay high; backpressure (TREADY low) or starvation (TVALID low) inserts bubbles:

stream-transfer — transfers with backpressure and starvation bubbles

8 cycles
D0 transfers, then a backpressure cycle holds D1 until TREADY returns, then a starvation cycle with TVALID low, then D2 and D3 transfer.data flows; bubbles where one side not readyboth high → D0 transfersboth high → D0 transfe…TREADY=0: backpressure, hold D1TREADY=0: backpressure…TVALID=0: starvation bubbleTVALID=0: starvation b…aclktvalidtreadytdataXD0D1D1XD2D3Xt0t1t2t3t4t5t6t7
Figure 3 — stream-transfer: TVALID/TREADY/TDATA flow. D0 transfers when both are high; then TREADY drops (backpressure) so D1 is held stable until TREADY returns and D1 transfers; then TVALID drops (starvation — no data) inserting a bubble; then D2 and D3 transfer back-to-back. A word moves only on a both-high cycle; bubbles are cycles where one side isn't ready.

4. Throughput — Full Rate and Bubbles

The throughput consequence is direct: when both TVALID and TREADY stay high every cycle, the stream moves one word per cycle — full rate, the maximum the link can carry. Any cycle where one side isn't ready is a bubble (no transfer):

  • Backpressure bubble (TREADY low) — the sink can't keep up (its buffer is full, or it's busy). The source holds its data and stalls.
  • Starvation bubble (TVALID low) — the source has no data (it's waiting on its own upstream). The sink waits idle.

So a stream's sustained throughput equals the slower of the producer's data-supply rate and the consumer's accept rate — exactly like a pipe limited by its narrowest point. To hit full rate, both sides must sustain a word every cycle; buffering (FIFOs) between stages smooths bursty producers/consumers so a momentary stall on one side doesn't bubble the whole pipeline. This is the streaming form of the same throughput reasoning as AXI's handshake and outstanding-transaction discussions — but here it's purely about keeping both handshake signals high.

Both high gives full rate; TREADY low is backpressure bubble; TVALID low is starvation bubble; throughput equals the slower side.Both highfull rate: 1 word/cycleTREADY lowbackpressure bubbleTVALID lowstarvation bubble12
Figure 4 — throughput. Both signals high every cycle = full rate (one word/cycle). A TREADY-low cycle is a backpressure bubble (sink can't keep up); a TVALID-low cycle is a starvation bubble (source has no data). Sustained throughput equals the slower side; FIFOs between stages absorb momentary stalls to keep the pipe full.

5. Common Misconceptions

6. Debugging Insight

7. Verification Insight

8. Interview Questions

9. Summary

The AXI4-Stream core is TVALID (source has data), TREADY (sink can accept), and TDATA (the payload) — a transfer happens when both TVALID and TREADY are high on a clock edge, the same VALID/READY mechanism as memory-mapped AXI (Module 3). The four states are transfer (both high), backpressure (TREADY low), starvation (TVALID low), and idle (both low). The correctness rules are identical to AXI: TVALID must not depend on TREADY (deadlock avoidance), and once asserted the source must hold TVALID and TDATA stable until accepted (no retraction, no mid-offer change). Violations cause deadlock or stream corruption.

Throughput is one word per cycle when both stay high; any cycle where one side isn't ready is a bubble (backpressure or starvation), so sustained rate equals the slower side — and FIFOs/skid buffers between stages absorb momentary mismatches to keep a pipeline full. Because the stream protocol is essentially this handshake plus payload, getting it airtight under all flow patterns (full rate, backpressure, starvation, random interleavings) is most of stream verification, and the debug taxonomy mirrors AXI's handshake exactly (stuck→dependency, corruption→stability, lost/dup→transfer-condition, slow→bubbles). Next: TLAST — how a stream is framed into packets.

10. What Comes Next

You've got the core handshake; next, framing the stream:

Previous: 11.1 — The AXI4-Stream Mental Model. Related: Valid/Ready Handshake — the memory-mapped handshake this mirrors. For the broader protocol catalog, see the AMBA family overview doc.