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
| Signal | Width | Carries |
|---|---|---|
AxPROT | 3 bits | Protection: privileged/unprivileged, secure/non-secure, instruction/data |
AxQOS | 4 bits | Quality-of-service priority identifier (arbitration hint) |
AxREGION | 4 bits | Region 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:
| Bit | 0 | 1 |
|---|---|---|
AxPROT[0] | Unprivileged | Privileged |
AxPROT[1] | Secure | Non-secure |
AxPROT[2] | Data | Instruction |
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).
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.
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.
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:
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:
- 6.6 — AxUSER & Sideband Signals (coming next) — user-defined sideband signals and the integration/interoperability risks they carry.
- 6.7 — WSTRB Write Strobes (coming soon) — byte-lane strobes, alignment, and sparse writes.
Previous: 6.4 — AxLOCK & AxCACHE. For the broader protocol catalog, see the AMBA family overview doc.