Tutorials

Protocols

Learn More

Every AXI transaction reports a result. Write transactions report on the B channel, and read transactions report on the R channel. Atomic transactions can have both write and read responses because they use both response paths.

Write response

Write responses are carried on the B channel using BRESP. A normal write transaction has one Completion response, which reports the result of the transaction after the write request and required write data have been accepted. Some optional features can add a second write response, so BCOMP is used when the interface must identify which response is the Completion response.

SignalWidthDefaultPurpose
BRESPBRESP_WIDTHOKAYReports the result of a transaction that uses the write channels.
BCOMP1HIGHMarks the Completion response when an interface can return more than one write response.
PropertyValuesDefaultNotes
BRESP_WIDTH0, 2, 320 means BRESP is absent and treated as OKAY. A 3-bit response is required for Untranslated_Transactions v2/v3 or WriteDeferrable_Transaction = True.

BCOMP appears only when a feature can produce two write responses, such as persistence-related cache maintenance behavior or Memory Tagging Extension behavior. If BCOMP is present, one response transfer for every write-channel transaction must assert it.

BRESPLabelMeaning
0b000OKAYNon-exclusive write succeeded. For an exclusive write, OKAY means the exclusive update failed.
0b001EXOKAYExclusive write succeeded. Only legal for an exclusive write.
0b010SLVERRRequest reached an endpoint, but the endpoint could not complete it successfully. The location might not be fully updated.
0b011DECERRRequest did not reach a valid writable endpoint, commonly because the address decoded to an invalid target.
0b100DEFERWriteDeferrable transaction could not be serviced now. The location is not updated.
0b101TRANSFAULTTranslation fault for a request using PRI flow.
0b110ReservedDo not use.
0b111UNSUPPORTEDWriteDeferrable transaction type is not supported by the target. The location is not updated.

For a beginner, the main rule is: BRESP is one response for the write transaction, not one response per write data beat. If a burst has four W transfers, the transaction still normally completes with one B response.

Read response

Read responses are carried on RRESP with every read data transfer. This is different from writes: there is no separate read-response-only channel. Each accepted R beat carries both data and response status.

SignalWidthDefaultPurpose
RRESPRRESP_WIDTHOKAYReports the result of the read transfer. It must be valid whenever RVALID is asserted.
PropertyValuesDefaultNotes
RRESP_WIDTH0, 2, 320 means RRESP is absent and treated as OKAY. A 3-bit response is required for Prefetch, Untranslated v2/v3, or Shareable cache response support.
RRESPLabelData validity and meaning
0b000OKAYNon-exclusive read completed and read data is valid. For an exclusive read, this means the Subordinate does not support exclusive accesses.
0b001EXOKAYExclusive read succeeded. Only legal for an exclusive read.
0b010SLVERRContained error for this location, such as unsupported size, FIFO overrun, or powered-down function. Read data is not valid.
0b011DECERRNon-contained decode error, commonly an invalid address. Read data is not valid.
0b100PREFETCHEDRead data is valid and came from a prefetched source.
0b101TRANSFAULTTranslation fault for a request using PRI flow. Read data is not valid.
0b110OKAYDIRTYRead data is valid and Dirty with respect to memory. Only legal for a ReadShared response.
0b111ReservedDo not use.

The RRESP value can differ from beat to beat in the same read transaction. Even if one beat reports an error, the Subordinate must still return all read data transfers indicated by Length. For response values where read data is not valid, the Manager might still sample RDATA, so a Subordinate must not rely on the response code to hide sensitive data.

DECERR has an extra consistency property because Managers might inspect only one beat to detect a decode error.

Consistent_DECERRDefaultMeaning
TrueNoDECERR is returned for every read data transfer, or for no read data transfers, in each cache line of data.
FalseYesDECERR can appear on any number of read data transfers.
Manager Consistent_DECERRSubordinate FalseSubordinate True
FalseCompatibleCompatible
TrueNot compatible; a DECERR beat could be missedCompatible

Subordinate Busy indicator

The optional Busy indicator lets a Subordinate report its current activity level while returning a transaction response. It is not a replacement for READY, and it does not cancel the response. It is feedback to help the Manager tune future behavior, such as issuing fewer speculative requests when a shared resource is becoming full.

Busy is useful when a Subordinate contains a shared resource, such as a memory controller, last-level cache, request queue, or internal scheduling structure. The value can represent queue depth, read-side pressure, write-side pressure, or whether a component is using more or less than its allocated share. The exact meaning is implementation-defined, but the encoding always follows the idea that larger values mean busier.

PropertyDefaultMeaning
Busy_Support = TrueNoThe interface includes Busy indicator signals.
Busy_Support = FalseYesBusy is not supported.
SignalWidthDefaultUsed withMeaning
BBUSY20b00B channel responseCurrent Subordinate activity level for a write response.
RBUSY20b00R channel responseCurrent Subordinate activity level for a read response.

For a multi-beat read, RBUSY must be valid on every read data transfer and can change from beat to beat. For a write transaction with multiple write responses, BBUSY is meaningful on the response where BCOMP is asserted. For other write responses, Busy is not applicable. For Atomic transactions that produce both write and read responses, BBUSY and RBUSY are expected, but not required, to carry the same value.

One typical interpretation is:

Busy valueMeaningPossible Manager behavior
0b00Not busyManager can increase speculative requests.
0b01Optimally busyManager can keep the current issue rate.
0b10Quite busyManager can reduce speculative requests.
0b11Very busyManager can heavily reduce speculative requests.

Busy support is interoperable even when only one side implements it, because the signal can be left unused or tied to the default value.

Manager Busy_SupportSubordinate FalseSubordinate True
FalseCompatibleCompatible; Busy outputs are left unconnected.
TrueCompatible; Busy inputs are tied to the default value.Compatible