Skip to content

AMBA AXI · Module 6

AxPROT, AxQOS & AxREGION

Decode the AXI system attributes — AxPROT (privilege/secure/instruction protection), AxQOS (4-bit quality-of-service priority), and AxREGION (region identifier), and where each is set and consumed.

Three more address-channel signals carry system policy rather than transfer geometry: AxPROT (protection — privilege, security, instruction-vs-data), AxQOS (a quality-of-service priority hint), and AxREGION (a region identifier that lets one slave port serve several address regions). Like AxLOCK/AxCACHE, they don't change the data or the address — they tell the system how to police, prioritize, and decode the access. A defining trait here: some of these are driven not by the original manager but by the interconnect (AxREGION especially). This chapter decodes all three and pins down who sets each and who acts on it.

1. Three System Attributes

SignalWidthCarries
AxPROT3 bitsProtection: privileged/unprivileged, secure/non-secure, instruction/data
AxQOS4 bitsQuality-of-service priority identifier (arbitration hint)
AxREGION4 bitsRegion identifier (up to 16 logical regions per slave port)

All three ride the address handshake (AWPROT/ARPROT, AWQOS/ARQOS, AWREGION/ARREGION) and are constant for the transaction. They are optional to act on — a simple slave can ignore AxQOS/AxREGION and a non-secure-unaware slave can ignore AxPROT — but in a real SoC they drive access control, arbitration, and slave-side decode.

2. AxPROT — Protection

AxPROT is a 3-bit field, one bit per protection axis:

Bit01
AxPROT[0]UnprivilegedPrivileged
AxPROT[1]SecureNon-secure
AxPROT[2]DataInstruction

Note the inverted sense of bit 1: AxPROT[1] = 0 means secure, = 1 means non-secure. This is the AXI integration point for TrustZone: a secure slave (or a TZ-aware interconnect/memory controller) checks AxPROT[1] and rejects a non-secure access to a secure region (returning a SLVERR/DECERR-style response). AxPROT[0] distinguishes privileged (OS/kernel) from unprivileged (user) accesses, and AxPROT[2] flags an instruction fetch vs a data access (a hint — 0/data is the safe default for ambiguous cases).

AxPROT bit 0 privileged/unprivileged, bit 1 secure/non-secure with 0 meaning secure, bit 2 instruction/data.[0] Privilege0 unpriv · 1 privileged[1] Security0 SECURE · 1 non-secure(TrustZone)[2] Type0 data · 1 instruction12
Figure 1 — AxPROT's three protection bits. Bit 0: privileged vs unprivileged. Bit 1: secure vs non-secure (note the inverted sense — 0 = secure), the TrustZone integration point. Bit 2: instruction vs data. A protection-aware slave or interconnect uses these to permit or reject the access.

3. AxQOS — Quality of Service

AxQOS is a 4-bit quality-of-service identifier — a priority hint the interconnect can use when arbitrating between competing managers. The spec deliberately does not mandate its meaning: by convention a higher value indicates a higher-priority transaction, and 4'b0000 means the access is not participating in any QoS scheme (the default). It is purely advisory — a slave needn't honor it, and it carries no ordering or correctness guarantee; it only influences arbitration, never the result.

Typical use: a latency-sensitive manager (a display controller that must not underflow) drives a high AxQOS so the interconnect's arbiter favors its requests over a bulk DMA engine's lower-QoS traffic during contention. Because it's just an arbitration weight, getting it wrong degrades performance/latency, never functional correctness.

Two managers drive AxQOS values into an interconnect arbiter; higher QoS is favored under contention, but QoS is advisory and does not affect correctness.Display ctrlAxQOS=1111 (high)Bulk DMAAxQOS=0001 (low)Interconnectarbiterfavors higher QoS undercontentionMemoryresult unaffected by QoS12
Figure 2 — AxQOS as a 4-bit priority identifier feeding interconnect arbitration. By convention higher = higher priority, 0000 = not participating. It is advisory: the arbiter may favor high-QoS managers under contention, but QoS never changes the data or guarantees ordering — only which request wins arbitration.

4. AxREGION — Region Identifier

AxREGION is a 4-bit identifier that lets a single slave interface present up to 16 logical regions without the slave having to re-decode the high address bits. The interconnect decodes the address and drives AxREGION so that the slave can use it as a pre-decoded "which of my regions is this?" selector.

The classic case: one peripheral exposes several address ranges (say, a register block at one offset and a buffer at another) that all map to the same physical slave port. Instead of every region re-running address decode, the interconnect decodes once and tags the transaction with AxREGION; the slave switches on AxREGION directly. All accesses with a given AxREGION value must lie within a single contiguous address region. Crucially, AxREGION is generated by the interconnect, not the original manager — the manager just issues an address.

The interconnect decodes the address and drives AxREGION; one slave port serves multiple logical regions selected by AxREGION.Managerissues address onlyInterconnectdecodes addr → drivesAxREGIONRegion 0AxREGION=0 (registers)Region 1AxREGION=1 (buffer)Region 2AxREGION=2 (FIFO)12
Figure 3 — AxREGION. The interconnect decodes the address once and tags the transaction with a region identifier; a single slave port then serves multiple logical regions by switching on AxREGION instead of re-decoding the address. AxREGION is interconnect-generated — the manager only supplies the address.

5. Who Sets Each, Who Acts on It

The key mental model is the producer/consumer split — and that the interconnect, not just the manager, is a producer here:

AxPROT manager-set, slave/TrustZone enforced; AxQOS manager-set, arbiter advisory; AxREGION interconnect-generated, slave-consumed.enforcesadvisesselectsAxPROT (manager)Protection-awareslave /TrustZoneenforcesAxQOS (manager /IC remap)Arbiter —advisorypriority onlyAxREGION(interconnect)Slave —pre-decodedregion selector
Figure 4 — producers and consumers. AxPROT is set by the manager and enforced by protection-aware slaves / TrustZone logic. AxQOS is set by the manager (or remapped by the interconnect) and consumed by the arbiter as an advisory priority. AxREGION is generated by the interconnect from the address decode and consumed by the slave as a pre-decoded region selector.

6. Common Misconceptions

7. Debugging Insight

8. Verification Insight

9. Interview Questions

10. Summary

AxPROT, AxQOS, and AxREGION are system-policy qualifiers on the address channel — protection, priority, and region decode — that never touch the data or address. AxPROT (3 bits) encodes privilege ([0]), security ([1], inverted: 0=secure — the TrustZone hook), and instruction/data ([2]), enforced by protection-aware slaves. AxQOS (4 bits) is an advisory priority identifier (higher = higher priority by convention, 0000 = not participating) consumed by the interconnect arbiter — it affects performance, never correctness, and may be remapped by the interconnect. AxREGION (4 bits) is an interconnect-generated region identifier letting one slave port serve up to 16 logical regions without re-decoding the address.

The unifying lesson is the producer/consumer split: the manager sets AxPROT (and a baseline AxQOS), but the interconnect is itself a producer — it generates AxREGION and may remap AxQOS. Their bugs read as access-denied (AxPROT, watch the inverted secure bit), missed deadlines (AxQOS), or wrong-region routing (AxREGION, look at the interconnect) — never as corrupted data. Next: AxUSER and the user-defined sideband signals — the escape hatch the spec leaves open, and the interoperability risk it carries.

11. What Comes Next

You've decoded the system attributes; next, the user-defined escape hatch:

Previous: 6.4 — AxLOCK & AxCACHE. For the broader protocol catalog, see the AMBA family overview doc.