APB Series — APB-02: Signal Descriptions — VLSI Trainers
APB Series · APB-02

Signal Descriptions

Every signal on the AMBA APB interface — source, width, version introduced, and exactly what each signal does and when it must be valid. From PCLK and PRESETn through to the APB5 user and parity signals.

📋 Signal Overview and Notation

APB signals have a consistent naming convention. Understanding the convention tells you what a signal does before you even look it up.

Some signals have a fixed width (PWRITE is always 1 bit). Others are parameterised by properties. When a property value is zero, the corresponding signal is not present on the interface. This is how APB handles optional signals — they simply don’t exist on interfaces that don’t need them.

APB Signal Properties — Width Parameters ADDR_WIDTH PADDR width (max 32 bits) DATA_WIDTH PWDATA/PRDATA (8, 16 or 32 bits) USER_REQ_WIDTH PAUSER (max 128 bits, APB5) USER_DATA_WIDTH / USER_RESP_WIDTH PWUSER/PRUSER / PBUSER (APB5)
Figure 1 — APB interface properties that control signal widths. If a property is zero, the associated signal is absent.

Clock and Reset

PCLK — Clock

Source: system clock controller  |  Width: 1 bit  |  APB2+

PCLK is the clock for the entire APB domain. Every APB signal — from both the Requester and Completer — is sampled on the rising edge of PCLK. There are no asynchronous APB signals. All setup and hold timing requirements are defined relative to PCLK rising edge.

The APB clock domain may run slower than the main system bus (AXI/AHB). The APB bridge handles the clock domain crossing internally — from the software perspective, APB transfers always complete synchronously to PCLK.

PRESETn — Reset

Source: system bus reset  |  Width: 1 bit  |  APB2+

PRESETn is the active-LOW reset signal. It is normally connected directly to the system bus reset. When PRESETn is asserted (LOW), the APB interface is held in its reset state:

PRESETn can be asserted asynchronously but must be deasserted synchronously. The deassertion (LOW→HIGH transition) must be synchronous to PCLK to avoid metastability in the peripherals’ reset logic.

📋 Core APB2 Signals

These signals exist in every APB implementation from the original APB2 (2003) onwards. Every APB peripheral must have all of these signals.

APB2 Core Signal Flow — Requester to Completer Requester (APB Bridge) PCLK ────────────────► PRESETn ─────────────► PADDR ───────────────► PSELx ───────────────► PENABLE ─────────────► PWRITE ──────────────► PWDATA ──────────────► Completer (APB Peripheral) ◄─────────── PRDATA Shared Bus Signals PADDR → address PSELx → select PENABLE → phase PWRITE → direction PWDATA → write data PRDATA ← read data
Figure 2 — APB2 core signal flow. All control and data signals except PRDATA flow from Requester to Completer. PRDATA is driven by the Completer during read cycles.

PADDR — Address

Source: Requester  |  Width: ADDR_WIDTH (up to 32 bits)  |  APB2+

The APB address bus. Must be valid when PSELx is asserted and must remain stable throughout both the Setup and Access phases (including all wait state cycles). PADDR indicates a byte address. An unaligned address is permitted but the result is UNPREDICTABLE — a Completer may use the unaligned address, align it, or signal an error.

APB has a single address bus shared between reads and writes. Unlike AXI, there is no separate read address channel and write address channel.

PSELx — Select

Source: Requester  |  Width: 1 bit per Completer  |  APB2+

There is one PSELx signal per Completer. The Requester (APB bridge) asserts the appropriate PSELx to select the target peripheral for the current transfer. Only one PSELx is asserted at a time — the bridge decodes PADDR to determine which peripheral owns the addressed register and asserts only that peripheral’s PSELx.

PSELx being asserted marks the start of the Setup phase. It must remain asserted throughout the entire transfer (Setup + Access + all wait states).

PENABLE — Enable

Source: Requester  |  Width: 1 bit  |  APB2+

PENABLE distinguishes the Setup phase from the Access phase. It is deasserted during Setup (first cycle) and asserted during Access (second and subsequent cycles). The combination PSELx=1, PENABLE=0 means Setup phase. PSELx=1, PENABLE=1 means Access phase.

PENABLE is deasserted at the end of every transfer, even in back-to-back transfers between the same peripheral.

PWRITE — Direction

Source: Requester  |  Width: 1 bit  |  APB2+

Indicates the direction of the transfer. HIGH = write (Requester writes to Completer). LOW = read (Completer drives PRDATA to Requester). Must remain stable throughout the transfer.

PWDATA — Write Data

Source: Requester  |  Width: DATA_WIDTH (8, 16, or 32 bits)  |  APB2+

The write data bus, driven by the Requester when PWRITE is HIGH. Must be valid throughout both phases and all wait states. Not required to be valid during read transfers (when PWRITE=0), but the spec recommends driving it to zero when unused.

PRDATA — Read Data

Source: Completer  |  Width: DATA_WIDTH (same as PWDATA)  |  APB2+

The read data bus, driven by the selected Completer when PWRITE is LOW. Must be valid by the end of the Access phase (i.e., before the cycle in which PREADY goes HIGH and the transfer completes). The Completer must ensure PRDATA is stable when PSEL, PENABLE, and PREADY are all HIGH.

PWDATA and PRDATA must be the same width. The spec requires DATA_WIDTH to apply to both buses. An 8-bit peripheral uses 8-bit PWDATA and 8-bit PRDATA. A 32-bit peripheral uses 32-bit PWDATA and 32-bit PRDATA. You cannot mix widths on the same interface.

📋 APB3 Signals — PREADY and PSLVERR

APB3 added two signals that make peripherals much more practical to implement: PREADY allows variable-latency responses, and PSLVERR allows error reporting.

PREADY — Ready

Source: Completer  |  Width: 1 bit  |  Default (if absent): tie to 1  |  APB3+

PREADY is used by the Completer to extend the transfer duration. While PREADY is LOW during the Access phase, the transfer is frozen — all signals must remain stable and no state change occurs in either Requester or Completer.

APB2 peripherals always have PREADY tied HIGH. A peripheral without PREADY always completes in exactly two cycles (one Setup + one Access). When connecting an APB2 peripheral to an APB3+ bridge, tie the PREADY input of the bridge to 1 for that peripheral’s slot. The default value for PREADY in the signal table is 0b1 for exactly this reason.

PSLVERR — Transfer Error

Source: Completer  |  Width: 1 bit  |  Default (if absent): tie to 0  |  APB3+

PSLVERR allows the Completer to signal that the transfer completed with an error. PSLVERR is only valid during the last cycle of the transfer — when PSELx, PENABLE, and PREADY are all HIGH simultaneously. Its value at any other time must be ignored by the Requester.

Key behavioural rules for PSLVERR:

📋 APB4 Signals — PPROT and PSTRB

PPROT[2:0] — Protection Type

Source: Requester  |  Width: 3 bits  |  Default (if absent): 3’b000  |  APB4+

PPROT carries three independent protection attributes, one per bit:

BitNameLOW (0)HIGH (1)
PPROT[0]PrivilegeNormal accessPrivileged access
PPROT[1]SecuritySecure accessNon-secure access
PPROT[2]TypeData accessInstruction access

PPROT must be valid when PSELx is asserted and must remain stable throughout the transfer. The primary use is PPROT[1] for secure/non-secure gating — peripherals in the secure world can reject transactions with PPROT[1]=1 (non-secure).

PPROT is optional on both Requester and Completer. If the Requester has PPROT but the Completer does not, the signal is simply not connected — the Completer has no access protection and accepts all transactions. If the Completer has PPROT inputs but the Requester does not, compatibility requires that fixed protection attributes be functionally correct (i.e., tie PPROT to the appropriate default).

PSTRB — Write Strobe

Source: Requester  |  Width: DATA_WIDTH/8 bits  |  APB4+

PSTRB enables sparse write data transfers — writing to only some byte lanes of a wide data bus. There is one PSTRB bit per 8-bit data lane: PSTRB[n] corresponds to PWDATA[(8n+7):(8n)].

PSTRB[3:0] for a 32-bit bus: bit 3 → bytes[31:24], bit 2 → bytes[23:16], bit 1 → bytes[15:8], bit 0 → bytes[7:0]. A full-word write has PSTRB=4’b1111. A byte write to the LSB has PSTRB=4’b0001.

📋 APB5 Signals — PWAKEUP, User Signals, PNSE

PWAKEUP — Wake-up

Source: Requester  |  Width: 1 bit  |  APB5

PWAKEUP indicates any activity associated with the APB Requester interface. It is designed to be routed to a clock controller so that peripherals and their clock domains can be powered up before a transfer begins.

Critical requirements for PWAKEUP:

PNSE — Realm Management Extension

Source: Requester  |  Width: 1 bit  |  Property: RME_Support=True  |  APB5 RME

PNSE extends PPROT[1] to create a four-value physical address space selector. Combined with PPROT[1]:

PNSEPPROT[1]Physical Address Space
00Secure
01Non-secure
10Root
11Realm

PNSE is only present when RME_Support=True and only on APB5 interfaces. If present, PPROT must also be present. PNSE must be valid when PSELx is asserted.

User Signals — PAUSER, PWUSER, PRUSER, PBUSER

APB5   All user signals are optional. If the associated width property is zero, the signal is absent.

SignalSourceMax WidthValid WhenPurpose
PAUSERRequester128 bitsPSELx asserted, same in Setup and AccessUser-defined request attribute — attached to the address/control phase
PWUSERRequesterDATA_WIDTH/2PSELx and PWRITE asserted, same in Setup and AccessUser-defined write data attribute
PRUSERCompleterDATA_WIDTH/2PSELx, PENABLE, PREADY asserted and PWRITE=0User-defined read data attribute
PBUSERCompleter16 bitsPSELx, PENABLE, PREADY assertedUser-defined response attribute
User signals should generally not be used. The spec explicitly recommends against them unless necessary. Because the APB protocol does not define the function of user signals, two components using the same user signals in incompatible ways cannot interoperate. Use them only when no standard APB signal covers the requirement and document the usage precisely.

📋 APB5 Parity Check Signals

APB5 defines a complete set of parity check signals for safety-critical applications (ISO 26262, IEC 61508). Each check signal provides odd parity coverage for one or more payload signals. They are present only when the Check_Type interface property is set to Odd_Parity_Byte_All.

Parity rules:

Check SignalSignals CoveredWidthCheck Enable Condition
PADDRCHKPADDR⌈ADDR_WIDTH/8⌉PSEL
PCTRLCHKPPROT, PWRITE, PNSE1PSEL
PSELxCHKPSELx1PRESETn
PENABLECHKPENABLE1PSEL
PWDATACHKPWDATADATA_WIDTH/8PSEL & PWRITE
PSTRBCHKPSTRB1PSEL & PWRITE
PREADYCHKPREADY1PSEL & PENABLE
PRDATACHKPRDATADATA_WIDTH/8PSEL & PENABLE & PREADY & !PWRITE
PSLVERRCHKPSLVERR1PSEL & PENABLE & PREADY
PWAKEUPCHKPWAKEUP1PRESETn
PAUSERCHKPAUSER⌈USER_REQ_WIDTH/8⌉PSEL
PWUSERCHKPWUSER⌈USER_DATA_WIDTH/8⌉PSEL & PWRITE
PRUSERCHKPRUSER⌈USER_DATA_WIDTH/8⌉PSEL & PENABLE & PREADY & !PWRITE
PBUSERCHKPBUSER⌈USER_RESP_WIDTH/8⌉PSEL & PENABLE & PREADY

📋 Signal Validity Rules

The APB spec (Appendix A) defines exactly when each signal must be valid. This is the complete ruleset:

Signal Validity Conditions Always Valid PSELx, PWAKEUP (valid at all times after reset) Valid when PSELx is HIGH PADDR, PPROT, PNSE, PENABLE, PWRITE PAUSER, PSTRB, PWDATA (active write lanes) PWUSER (write only) (must be stable from Start of Setup through end of Access) Valid when PSELx and PENABLE both HIGH PREADY Valid when PSELx, PENABLE, PREADY all HIGH PRDATA (read transfers only: PWRITE=0) PSLVERR PRUSER (read only) PBUSER (this is the transfer completion cycle) Recommendation Signals not required to be valid should be driven to zero (prevents floating signals and eases debug)
Figure 3 — Signal validity conditions. Signals in each group must be driven correctly from the moment their condition becomes true and must hold stable until the condition is no longer true.

📋 Complete Interface Diagram

Complete APB5 Interface — All Signals by Version Requester (APB Bridge) Completer (Peripheral) APB2 — Core (Mandatory) PCLK Clock — all signals sampled on rising edge PRESETn Active-LOW reset PADDR Address bus — up to 32 bits — byte address PSELx Select — one per Completer, marks Setup phase start PENABLE Enable — HIGH during Access phase PWRITE Direction — 1=Write, 0=Read PWDATA Write data — 8, 16, or 32 bits PRDATA Read data — 8, 16, or 32 bits (Completer drives) APB3 — Optional (tie defaults if absent) PREADY Ready — extends transfer when LOW (default tie HIGH) PSLVERR Transfer error — valid only when PSEL+PENABLE+PREADY=1 (default tie LOW) APB4 — Optional PPROT[2:0] Protection type PSTRB[DATA_W/8-1:0] Write byte-lane enables APB5: PWAKEUP · PNSE · PAUSER · PWUSER (Req→Comp) | PRUSER · PBUSER (Comp→Req) | 14 parity CHK signals
Figure 4 — Complete APB5 interface. Each row is one signal with its direction arrow. Blue = APB2 core (Requester→Completer). Blue reversed = PRDATA (Completer→Requester). Orange = APB3. Green = APB4. Purple = APB5 summary.

📋 Quick Reference Table

SignalSourceWidthVersionMandatory?Description
PCLKClock1APB2YesClock — all signals sampled on rising edge
PRESETnSystem1APB2YesActive-LOW reset
PADDRRequester≤32 bitsAPB2YesByte address bus
PSELxRequester1 per CompleterAPB2YesPeripheral select — one per Completer
PENABLERequester1APB2YesAccess phase indicator
PWRITERequester1APB2YesDirection: 1=write, 0=read
PWDATARequester8/16/32APB2YesWrite data bus
PRDATACompleter8/16/32APB2YesRead data bus
PREADYCompleter1APB3Optional (tie 1)Ready — extends transfer when LOW
PSLVERRCompleter1APB3Optional (tie 0)Transfer error — valid only at completion
PPROT[2:0]Requester3APB4OptionalProtection: privilege, security, type
PSTRBRequesterDATA_W/8APB4OptionalWrite byte-lane enables
PWAKEUPRequester1APB5OptionalGlitch-free activity indicator for clock gating
PNSERequester1APB5 RMEConditionalRealm Management Extension — Root/Realm selector
PAUSERRequester≤128 bitsAPB5OptionalUser request attribute
PWUSERRequester≤DATA_W/2APB5OptionalUser write data attribute
PRUSERCompleter≤DATA_W/2APB5OptionalUser read data attribute
PBUSERCompleter≤16 bitsAPB5OptionalUser response attribute
Scroll to Top