Peripherals

This section documents the main peripherals integrated within the System Management Controller (SMC). These peripherals provide essential I/O and communication capabilities for the OCAH system, supporting various protocols and interfaces required for system operation and external connectivity.

Table 1 summarizes the key peripherals, their communication protocols, and default instance counts:

Table 1. SMC Peripheral Summary
Peripheral Description Protocol Instances

Mailbox

FIFO-based bidirectional communication channels for inter-processor or inter-chiplet communication.

AXI4-Lite

32

System Timer OCTS

64-bit timer for multi-chiplet time synchronization with PRIMARY/SECONDARY modes.

APB4/AXI4-Lite

1

eFuse

Secure access to One-Time Programmable (OTP) memory with layered security architecture.

APB4/AXI4-Lite

1

UART 16550

Industry-standard UART with enhanced FIFO capabilities and comprehensive interrupt support.

AXI4-Lite

4

Log Engine

DMA-based logging system for efficient transfer of log messages to UART interface.

AXI4-Lite

4

I2C

Full I2C/SMBus/PMBus communication controller supporting both controller and target modes.

AXI4-Lite

3

I3C

CHIPS Alliance i3c-core with an OCAH AXI4-Lite wrapper. Integration verification remains a work in progress.

AXI4-Lite

6

AVSBus Controller

Adaptive voltage scaling communication controller for managing voltage rails and power conditions.

APB4/AXI4-Lite

1

GPIO

General Purpose Input/Output with dual-mode operation and comprehensive interrupt system (63 bonded + 4 unbonded).

AXI4-Lite

67

Telemetry Receiver

Hardware component for decoding and processing telemetry data from multi-chiplet systems.

AXI4-Lite

3

Reset Unit

Reset control and synchronization, deals with SMC resets (core, primary), subsystem (chiplet) resets, and the cool reset sequence.

AXI4-Lite

1

SMC Misc

Wrapper for miscellaneous registers: scratch registers, chip config and NDM reset.

AXI4-Lite

1

PWM

OpenTitan pulse-width modulator with per-channel duty cycle and blink parameters.

AXI4-Lite

1

1. UART and Log Engine Wrapper Registers

The wrapper maps include the UART and log-engine control registers and their composed register banks. Offsets are relative to each wrapper’s base address.

UART Wrapper Address Map

Wrapper address map instantiating the per-UART log-engine blocks.

Register Arrays:

  • uart_log_engine_wrap[4].uart_log_engine_ctrl.CTRL: 4 registers, base 0x0, stride 0x400
  • uart_log_engine_wrap[4].uart.RBR: 4 registers, base 0x100, stride 0x400
  • uart_log_engine_wrap[4].uart.IER: 4 registers, base 0x104, stride 0x400
  • uart_log_engine_wrap[4].uart.IIR: 4 registers, base 0x108, stride 0x400
  • uart_log_engine_wrap[4].uart.LCR: 4 registers, base 0x10C, stride 0x400
  • uart_log_engine_wrap[4].uart.MCR: 4 registers, base 0x110, stride 0x400
  • uart_log_engine_wrap[4].uart.LSR: 4 registers, base 0x114, stride 0x400
  • uart_log_engine_wrap[4].uart.MSR: 4 registers, base 0x118, stride 0x400
  • uart_log_engine_wrap[4].uart.SCR: 4 registers, base 0x11C, stride 0x400
  • uart_log_engine_wrap[4].uart.ECR: 4 registers, base 0x120, stride 0x400
  • uart_log_engine_wrap[4].uart.ITR: 4 registers, base 0x124, stride 0x400
  • uart_log_engine_wrap[4].log_engine.CTRL: 4 registers, base 0x200, stride 0x400
  • uart_log_engine_wrap[4].log_engine.LOG_REGION_SIZE: 4 registers, base 0x204, stride 0x400
  • uart_log_engine_wrap[4].log_engine.LOG_REGION_ADDR: 4 registers, base 0x208, stride 0x400
  • uart_log_engine_wrap[4].log_engine.LOG_WRITE_ADDR: 4 registers, base 0x210, stride 0x400
  • uart_log_engine_wrap[4].log_engine.INTR_STATUS: 4 registers, base 0x214, stride 0x400
  • uart_log_engine_wrap[4].log_engine.INTR_ENABLE: 4 registers, base 0x218, stride 0x400
  • uart_log_engine_wrap[4].log_engine.INTR_TEST: 4 registers, base 0x21C, stride 0x400
  • uart_log_engine_wrap[4].log_engine.LOG_CTRL[16]: 64 registers, base 0x240 (uart_log_engine_wrap x4 stride 0x400, LOG_CTRL x16 stride 0x4)

Register List:

Table 2. UART Wrapper Address Map register list
AddressNameAccessDescription
0x0 - 0xC00uart_log_engine_wrap[4].uart_log_engine_ctrl.CTRLRWControl Register
0x100 - 0xD00uart_log_engine_wrap[4].uart.RBRRReceiver Buffer Register
0x104 - 0xD04uart_log_engine_wrap[4].uart.IERRWInterrupt Enable Register
0x108 - 0xD08uart_log_engine_wrap[4].uart.IIRRInterrupt Identification Register
0x10C - 0xD0Cuart_log_engine_wrap[4].uart.LCRRWLine Control Register
0x110 - 0xD10uart_log_engine_wrap[4].uart.MCRRWModem Control Register
0x114 - 0xD14uart_log_engine_wrap[4].uart.LSRRLine Status Register
0x118 - 0xD18uart_log_engine_wrap[4].uart.MSRRModem Status Register
0x11C - 0xD1Cuart_log_engine_wrap[4].uart.SCRRWScratch Register
0x120 - 0xD20uart_log_engine_wrap[4].uart.ECRRWExtended Control Register
0x124 - 0xD24uart_log_engine_wrap[4].uart.ITRRWInterrupt Test Register
0x200 - 0xE00uart_log_engine_wrap[4].log_engine.CTRLRWControl Register
0x204 - 0xE04uart_log_engine_wrap[4].log_engine.LOG_REGION_SIZERWLog Region Size Register
0x208 - 0xE08uart_log_engine_wrap[4].log_engine.LOG_REGION_ADDRRWLog Region Address Register
0x210 - 0xE10uart_log_engine_wrap[4].log_engine.LOG_WRITE_ADDRRWLog Write Address Register
0x214 - 0xE14uart_log_engine_wrap[4].log_engine.INTR_STATUSRWInterrupt Status Register
0x218 - 0xE18uart_log_engine_wrap[4].log_engine.INTR_ENABLERWInterrupt Enable Register
0x21C - 0xE1Cuart_log_engine_wrap[4].log_engine.INTR_TESTWInterrupt Test Register
0x240 - 0xE7Cuart_log_engine_wrap[4].log_engine.LOG_CTRL[16]RWLog Control Register

Register Details:

uart_log_engine_wrap[4].uart_log_engine_ctrl.CTRL

Table 3. uart_wrap.uart_log_engine_wrap[4].uart_log_engine_ctrl.CTRL fields
BitsFieldAccessResetDescription
31:1Reserved--Reserved
0UART_ENRW0x0UART Enable. The hardware LSIO request of the UART's RX, TX, RTS and CTS
pads: while set, the UART owns their data and direction. While clear, the UART
keeps running, but its pads follow the GPIO data and direction selection like
any pad without a hardware request, so TX and RTS do not reach the pins unless
software forces LSIO selection.

uart_log_engine_wrap[4].uart.RBR

Table 4. uart_wrap.uart_log_engine_wrap[4].uart.RBR fields
BitsFieldAccessResetDescription
31:8Reserved--Reserved
7:0DATAR RMOD0x0Received Data. Contains a received character. If FIFOs are enabled, this field
points to the bottom of the RX FIFO. Otherwise, this field points to a single-
byte Receiver Buffer Register.

uart_log_engine_wrap[4].uart.IER

Table 5. uart_wrap.uart_log_engine_wrap[4].uart.IER fields
BitsFieldAccessResetDescription
31:5Reserved--Reserved
4EFEIRW0x0Enable FIFO Error Interrupt.
3EDSSIRW0x0Enable (Delta Status of) Modem Status Interrupt.
2ELSIRW0x0Enable (Receiver) Line Status Interrupt.
1ETBEIRW0x0Enable Transmitter Buffer Empty (Transmitter Holding Register Empty)
Interrupt.
0ERBFIRW0x0Enable Receiver Buffer Full (Received Data Ready) Interrupt.

uart_log_engine_wrap[4].uart.IIR

Table 6. uart_wrap.uart_log_engine_wrap[4].uart.IIR fields
BitsFieldAccessResetDescription
31:8Reserved--Reserved
7:6FIFOS_ENABLEDR0x0FIFOs Enabled:
* `0x0` - FIFOs are disabled
* `0x3` - FIFOs are enabled
5:4Reserved--Reserved
3:1INTERRUPT_IDR0x0Interrupt ID:
* `0x7` - FIFO Error Interrupt (priority 0)
* `0x3` - Receiver Line Status Interrupt (priority 1)
* `0x6` - Reception Timeout Interrupt (priority 2)
* `0x2` - Received Data Ready Interrupt (priority 3)
* `0x1` - Transmitter Holding Register Empty Interrupt (priority 4)
* `0x0` - Modem Status Interrupt (priority 5)
0INTERRUPT_PENDINGR0x1Interrupt Pending. Active-low.

uart_log_engine_wrap[4].uart.LCR

Table 7. uart_wrap.uart_log_engine_wrap[4].uart.LCR fields
BitsFieldAccessResetDescription
31:8Reserved--Reserved
7DLABRW0x0Divisor Latch Access Bit. If set, allows access to the `DLL` and `DLM` registers
when accessing addresses `0x0` and `0x4`, respectively. If unset, allows access
to the `THR`, `RBR`, and `IER` registers. `IIR` and `FCR` are accessible
regardless of this bit.
6SET_BREAKRW0x0Set Break. If set, forces the `tx_o` output to `0` to cause a break condition
on the receiving UART.
5STICK_PARITYRW0x0Stick Parity. If set, forces the transmit and received parity bits to be `0` if
even parity is selected and `1` if odd parity is selected.
4EPSRW0x0Even Parity Select:
* `1` - even parity
* `0` - odd parity
3PENRW0x0Parity Enable.
2STBRW0x0Stop Bits:
* `0` - 1 stop bit.
* `1` - 2 stop bits. The transmitter always sends 2 stop bits; with 5-bit
words the receiver checks only the first.
1:0WLSRW0x0Word Length Select:
* `0x0` - 5 bits per character
* `0x1` - 6 bits per character
* `0x2` - 7 bits per character
* `0x3` - 8 bits per character

uart_log_engine_wrap[4].uart.MCR

Table 8. uart_wrap.uart_log_engine_wrap[4].uart.MCR fields
BitsFieldAccessResetDescription
31:6Reserved--Reserved
5LINE_LOOPBACKRW0x0Line Loopback. If set, the `rx_i` input is internally connected to the
`tx_o` output.
4LOOPRW0x0System Loopback. If set, the transmitter is internally connected to the
receiver. The `tx_o` output is set to `1`.
3OUT2RW0x0User Output 2. Writing to this bit drives the `out2_no` in the opposite
polarity.
2OUT1RW0x0User Output 1. Writing to this bit drives the `out1_no` in the opposite
polarity.
1RTSRW0x0Request to Send. Writing to this bit drives the `rts_no` output in the opposite
polarity.
0DTRRW0x0Data Terminal Ready. Writing to this bit drives the `dtr_no` output in the
opposite polarity.

uart_log_engine_wrap[4].uart.LSR

Table 9. uart_wrap.uart_log_engine_wrap[4].uart.LSR fields
BitsFieldAccessResetDescription
31:8Reserved--Reserved
7ERROR_IN_RCVR_FIFOR0x0Error in Receiver FIFO. When set, indicates that the receiver FIFO or (RBR in
non-FIFO mode) has the parity, framing, or break error. In other words, at
least one of the PE, FE, and BI bits is set.
6TEMTR0x1Transmitter Empty. When set, indicates that the transmitter shift register and
the transmitter FIFO (or THR in non-FIFO mode) are empty.
5THRER0x1Transmitter Holding Register Empty. When set, indicates that the TX FIFO (or
THR in non-FIFO mode) is empty. Clearing the Transmitter Holding Register Empty
Interrupt does NOT clear this bit.
4BIR RC0x0Break Interrupt. When set, indicates that the `rx_i` input is `0` for an entire
frame's time (start + data + parity + stop bits). In FIFO mode, this bit set
when the character reaches the top of the receiver FIFO. In non-FIFO mode, this
bit is set when the character enters the RBR. This bit triggers the Receiver
Line Status Interrupt.
3FER RC0x0Framing Error. When set, indicates that the received character is missing a
stop bit. In FIFO mode, this bit is set when the character reaches the top of
the FIFO. In non-FIFO mode, this bit is set when the character enters the RBR.
This bit triggers the Receiver Line Status Interrupt.
2PER RC0x0Parity Error. When set, indicates that the character at the top of the receiver
FIFO (or RBR in non-FIFO mode) has a parity error. This bit triggers the
Receiver Line Status Interrupt.
1OER RC0x0Overrun Error. When set, indicates that the RX FIFO was full when a new
character was received; the new character is dropped. This bit sets only in
FIFO mode: in non-FIFO mode a new character overwrites an unread character in
the RBR without setting it. This bit triggers the Receiver Line Status
Interrupt.
0DRR0x0Data Ready. When set, indicates that the RX FIFO (or RBR in non-FIFO
mode) contains data.

uart_log_engine_wrap[4].uart.MSR

Table 10. uart_wrap.uart_log_engine_wrap[4].uart.MSR fields
BitsFieldAccessResetDescription
31:8Reserved--Reserved
7DCDR0x0Data Carrier Detect. This bit reflects the `dcd_ni` input in the opposite
polarity, so it reads `1` while a carrier is detected.
6RIR0x0Ring Indicator. This bit reflects the `ri_ni` input in the opposite polarity, so
it reads `1` while the remote modem signals an incoming call.
5DSRR0x0Data Set Ready. This bit reflects the `dsr_ni` input in the opposite polarity,
so it reads `1` while the remote modem is connected and ready.
4CTSR0x0Clear to Send. This bit reflects the `cts_ni` input in the opposite polarity, so
it reads `1` while the remote device is ready to receive data.
3DDCDR RC0x0Delta Data Carrier Detect. When set, indicates that the `DCD` bit has changed
since the last time this register was read. This bit triggers the Modem Status
Interrupt.
2TERIR RC0x0Trailing Edge Ring Indicator. When set, indicates that the `RI` bit has changed
from a `1` to a `0`. This bit triggers the Modem Status Interrupt.
1DDSRR RC0x0Delta Data Set Ready. When set, indicates that the `DSR` bit has changed since
the last time this register was read. This bit triggers the Modem Status
Interrupt.
0DCTSR RC0x0Delta Clear to Send. When set, indicates that the `CTS` bit has changed since
the last time this register was read. This bit triggers the Modem Status
Interrupt.

uart_log_engine_wrap[4].uart.SCR

Table 11. uart_wrap.uart_log_engine_wrap[4].uart.SCR fields
BitsFieldAccessResetDescription
31:8Reserved--Reserved
7:0SCRRW0x0Scratch. Holds user data.

uart_log_engine_wrap[4].uart.ECR

Table 12. uart_wrap.uart_log_engine_wrap[4].uart.ECR fields
BitsFieldAccessResetDescription
31:2Reserved--Reserved
1:0RCVR_TRIGGER_MS2BRW0x0Receiver FIFO Trigger Level Most Significant 2 Bits. To configure the least
significant 2 bits, use the `FCR.RCVR_TRIGGER` register field. The
configurations for the trigger levels are:
* `0x0` - 1 character
* `0x1` - 4 characters
* `0x2` - 8 characters
* `0x3` - 14 characters
* `0x4` - 32 characters
* `0x5` - 64 characters
* `0x6` - 128 characters
* `0x7` - 256 characters
* `0x8` - 512 characters
* `0x9` - 1024 characters
* `0xA` - 2048 characters
* `0xB` - 4096 characters
The Received Data Ready interrupt asserts while the receive FIFO holds
at least the selected number of characters. A level above the receive
FIFO depth, and any combined value above `0xB`, never asserts it.

uart_log_engine_wrap[4].uart.ITR

Table 13. uart_wrap.uart_log_engine_wrap[4].uart.ITR fields
BitsFieldAccessResetDescription
31:6Reserved--Reserved
5TRTIRW0x0Test Reception Timeout Interrupt. Writing a `1` forces the interrupt and
writing `0` releases it.
4TFEIRW0x0Test FIFO Error Interrupt. Writing `1` forces the interrupt and writing `0`
releases it.
3TDSSIRW0x0Test (Delta Status of) Modem Status Interrupt. Writing `1` forces the
interrupt and writing `0` releases it.
2TLSIRW0x0Test (Receiver) Line Status Interrupt. Writing `1` forces the interrupt and
writing `0` releases it.
1TTBEIRW0x0Test Transmitter Buffer Empty (Transmitter Holding Register Empty) Interrupt.
Writing `1` forces the interrupt and writing `0` releases it.
0TRBFIRW0x0Test Receiver Buffer Full (Received Data Ready) Interrupt. Writing `1` forces
the interrupt and writing `0` releases it.

uart_log_engine_wrap[4].log_engine.CTRL

Table 14. uart_wrap.uart_log_engine_wrap[4].log_engine.CTRL fields
BitsFieldAccessResetDescription
31:1Reserved--Reserved
0ENRW0x0Log Engine Enable. When set, enables the Log Engine. When cleared, the engine
stops fetching and writing, discards buffered log data and resets transfer
progress. Configuration and pending LOG_LEN values are retained, so a pending
entry restarts from the start of its slot when the engine is enabled again.
Clearing does not wait for outstanding bus responses.

uart_log_engine_wrap[4].log_engine.LOG_REGION_SIZE

Table 15. uart_wrap.uart_log_engine_wrap[4].log_engine.LOG_REGION_SIZE fields
BitsFieldAccessResetDescription
31:20Reserved--Reserved
19:0LOG_REGION_SIZERW0x0Log region size in bytes. Supported values are at most 512 KiB and aligned
to 128 bytes (16 slots times the 8-byte fetch beat). If software programs a
larger value, RTL clamps the effective region to 512 KiB. For a value that is
not 128-byte aligned, RTL divides the effective region among the 16 slots and
rounds each slot's transferable capacity down to complete 8-byte fetch beats.
A requested LOG_LEN above that capacity is clamped to the capacity.

uart_log_engine_wrap[4].log_engine.LOG_REGION_ADDR

Table 16. uart_wrap.uart_log_engine_wrap[4].log_engine.LOG_REGION_ADDR fields
BitsFieldAccessResetDescription
63:56RESERVEDR0x0Reserved. Reads as zero; writes are ignored.
55:32LOG_REGION_ADDR_HIRW0x0Log Region Start Address High. Contains fabric address bits [55:32].
31:0LOG_REGION_ADDR_LORW0x0Log Region Start Address Low.

uart_log_engine_wrap[4].log_engine.LOG_WRITE_ADDR

Table 17. uart_wrap.uart_log_engine_wrap[4].log_engine.LOG_WRITE_ADDR fields
BitsFieldAccessResetDescription
31:0LOG_WRITE_ADDRRW0x0Log Write Address. This is the address where the log data is written to.

uart_log_engine_wrap[4].log_engine.INTR_STATUS

Table 18. uart_wrap.uart_log_engine_wrap[4].log_engine.INTR_STATUS fields
BitsFieldAccessResetDescription
31:5Reserved--Reserved
4LOG_WRITE_ERRRW1C0x0Log Write Error Interrupt. Asserted when the bus for writing log data returns
an error.
3:1Reserved--Reserved
0LOG_FETCH_ERRRW1C0x0Log Fetch Error Interrupt. Asserted when the bus for fetching log data returns
an error.

uart_log_engine_wrap[4].log_engine.INTR_ENABLE

Table 19. uart_wrap.uart_log_engine_wrap[4].log_engine.INTR_ENABLE fields
BitsFieldAccessResetDescription
31:5Reserved--Reserved
4LOG_WRITE_ERRRW0x0Log Write Error Interrupt Enable.
3:1Reserved--Reserved
0LOG_FETCH_ERRRW0x0Log Fetch Error Interrupt Enable.

uart_log_engine_wrap[4].log_engine.INTR_TEST

Table 20. uart_wrap.uart_log_engine_wrap[4].log_engine.INTR_TEST fields
BitsFieldAccessResetDescription
31:5Reserved--Reserved
4LOG_WRITE_ERRW 1P0x0Log Write Error Interrupt Test. Writing `1` forces the interrupt.
3:1Reserved--Reserved
0LOG_FETCH_ERRW 1P0x0Log Fetch Error Interrupt Test. Writing `1` forces the interrupt.

uart_log_engine_wrap[4].log_engine.LOG_CTRL[16]

Table 21. uart_wrap.uart_log_engine_wrap[4].log_engine.LOG_CTRL[16] fields
BitsFieldAccessResetDescription
31:16Reserved--Reserved
15:0LOG_LENRW0x0Log Length. Writing a nonzero value representing the log length in bytes to this field
starts the log transfer process. The field holds the requested length until the
transfer completes, when hardware clears it to zero; it is not a remaining-byte
counter. There are 16 copies of this register, each representing
a log entry. The log entries go through round robin arbitration.

UART Log Engine Control Address Map

Top-level enable register for the UART log-engine block.

Register List:

Table 22. UART Log Engine Control Address Map register list
AddressNameAccessDescription
0x0CTRLRWControl Register

Register Details:

CTRL

Table 23. uart_log_engine_ctrl.CTRL fields
BitsFieldAccessResetDescription
31:1Reserved--Reserved
0UART_ENRW0x0UART Enable. The hardware LSIO request of the UART's RX, TX, RTS and CTS
pads: while set, the UART owns their data and direction. While clear, the UART
keeps running, but its pads follow the GPIO data and direction selection like
any pad without a hardware request, so TX and RTS do not reach the pins unless
software forces LSIO selection.

UART Log Engine Wrapper Address Map

Composes the UART 16550 core, log engine, and their control registers for one UART instance.

Register Arrays:

  • LOG_CTRL[16]: 16 registers, base 0x240, stride 0x4

Register List:

Table 24. UART Log Engine Wrapper Address Map register list
AddressNameAccessDescription
0x0uart_log_engine_ctrl.CTRLRWControl Register
0x100RBRRReceiver Buffer Register
0x104IERRWInterrupt Enable Register
0x108IIRRInterrupt Identification Register
0x10CLCRRWLine Control Register
0x110MCRRWModem Control Register
0x114LSRRLine Status Register
0x118MSRRModem Status Register
0x11CSCRRWScratch Register
0x120ECRRWExtended Control Register
0x124ITRRWInterrupt Test Register
0x200log_engine.CTRLRWControl Register
0x204LOG_REGION_SIZERWLog Region Size Register
0x208LOG_REGION_ADDRRWLog Region Address Register
0x210LOG_WRITE_ADDRRWLog Write Address Register
0x214INTR_STATUSRWInterrupt Status Register
0x218INTR_ENABLERWInterrupt Enable Register
0x21CINTR_TESTWInterrupt Test Register
0x240 - 0x27CLOG_CTRL[16]RWLog Control Register

Register Details:

uart_log_engine_ctrl.CTRL

Table 25. uart_log_engine_wrap.uart_log_engine_ctrl.CTRL fields
BitsFieldAccessResetDescription
31:1Reserved--Reserved
0UART_ENRW0x0UART Enable. The hardware LSIO request of the UART's RX, TX, RTS and CTS
pads: while set, the UART owns their data and direction. While clear, the UART
keeps running, but its pads follow the GPIO data and direction selection like
any pad without a hardware request, so TX and RTS do not reach the pins unless
software forces LSIO selection.

RBR

Table 26. uart_log_engine_wrap.RBR fields
BitsFieldAccessResetDescription
31:8Reserved--Reserved
7:0DATAR RMOD0x0Received Data. Contains a received character. If FIFOs are enabled, this field
points to the bottom of the RX FIFO. Otherwise, this field points to a single-
byte Receiver Buffer Register.

IER

Table 27. uart_log_engine_wrap.IER fields
BitsFieldAccessResetDescription
31:5Reserved--Reserved
4EFEIRW0x0Enable FIFO Error Interrupt.
3EDSSIRW0x0Enable (Delta Status of) Modem Status Interrupt.
2ELSIRW0x0Enable (Receiver) Line Status Interrupt.
1ETBEIRW0x0Enable Transmitter Buffer Empty (Transmitter Holding Register Empty)
Interrupt.
0ERBFIRW0x0Enable Receiver Buffer Full (Received Data Ready) Interrupt.

IIR

Table 28. uart_log_engine_wrap.IIR fields
BitsFieldAccessResetDescription
31:8Reserved--Reserved
7:6FIFOS_ENABLEDR0x0FIFOs Enabled:
* `0x0` - FIFOs are disabled
* `0x3` - FIFOs are enabled
5:4Reserved--Reserved
3:1INTERRUPT_IDR0x0Interrupt ID:
* `0x7` - FIFO Error Interrupt (priority 0)
* `0x3` - Receiver Line Status Interrupt (priority 1)
* `0x6` - Reception Timeout Interrupt (priority 2)
* `0x2` - Received Data Ready Interrupt (priority 3)
* `0x1` - Transmitter Holding Register Empty Interrupt (priority 4)
* `0x0` - Modem Status Interrupt (priority 5)
0INTERRUPT_PENDINGR0x1Interrupt Pending. Active-low.

LCR

Table 29. uart_log_engine_wrap.LCR fields
BitsFieldAccessResetDescription
31:8Reserved--Reserved
7DLABRW0x0Divisor Latch Access Bit. If set, allows access to the `DLL` and `DLM` registers
when accessing addresses `0x0` and `0x4`, respectively. If unset, allows access
to the `THR`, `RBR`, and `IER` registers. `IIR` and `FCR` are accessible
regardless of this bit.
6SET_BREAKRW0x0Set Break. If set, forces the `tx_o` output to `0` to cause a break condition
on the receiving UART.
5STICK_PARITYRW0x0Stick Parity. If set, forces the transmit and received parity bits to be `0` if
even parity is selected and `1` if odd parity is selected.
4EPSRW0x0Even Parity Select:
* `1` - even parity
* `0` - odd parity
3PENRW0x0Parity Enable.
2STBRW0x0Stop Bits:
* `0` - 1 stop bit.
* `1` - 2 stop bits. The transmitter always sends 2 stop bits; with 5-bit
words the receiver checks only the first.
1:0WLSRW0x0Word Length Select:
* `0x0` - 5 bits per character
* `0x1` - 6 bits per character
* `0x2` - 7 bits per character
* `0x3` - 8 bits per character

MCR

Table 30. uart_log_engine_wrap.MCR fields
BitsFieldAccessResetDescription
31:6Reserved--Reserved
5LINE_LOOPBACKRW0x0Line Loopback. If set, the `rx_i` input is internally connected to the
`tx_o` output.
4LOOPRW0x0System Loopback. If set, the transmitter is internally connected to the
receiver. The `tx_o` output is set to `1`.
3OUT2RW0x0User Output 2. Writing to this bit drives the `out2_no` in the opposite
polarity.
2OUT1RW0x0User Output 1. Writing to this bit drives the `out1_no` in the opposite
polarity.
1RTSRW0x0Request to Send. Writing to this bit drives the `rts_no` output in the opposite
polarity.
0DTRRW0x0Data Terminal Ready. Writing to this bit drives the `dtr_no` output in the
opposite polarity.

LSR

Table 31. uart_log_engine_wrap.LSR fields
BitsFieldAccessResetDescription
31:8Reserved--Reserved
7ERROR_IN_RCVR_FIFOR0x0Error in Receiver FIFO. When set, indicates that the receiver FIFO or (RBR in
non-FIFO mode) has the parity, framing, or break error. In other words, at
least one of the PE, FE, and BI bits is set.
6TEMTR0x1Transmitter Empty. When set, indicates that the transmitter shift register and
the transmitter FIFO (or THR in non-FIFO mode) are empty.
5THRER0x1Transmitter Holding Register Empty. When set, indicates that the TX FIFO (or
THR in non-FIFO mode) is empty. Clearing the Transmitter Holding Register Empty
Interrupt does NOT clear this bit.
4BIR RC0x0Break Interrupt. When set, indicates that the `rx_i` input is `0` for an entire
frame's time (start + data + parity + stop bits). In FIFO mode, this bit set
when the character reaches the top of the receiver FIFO. In non-FIFO mode, this
bit is set when the character enters the RBR. This bit triggers the Receiver
Line Status Interrupt.
3FER RC0x0Framing Error. When set, indicates that the received character is missing a
stop bit. In FIFO mode, this bit is set when the character reaches the top of
the FIFO. In non-FIFO mode, this bit is set when the character enters the RBR.
This bit triggers the Receiver Line Status Interrupt.
2PER RC0x0Parity Error. When set, indicates that the character at the top of the receiver
FIFO (or RBR in non-FIFO mode) has a parity error. This bit triggers the
Receiver Line Status Interrupt.
1OER RC0x0Overrun Error. When set, indicates that the RX FIFO was full when a new
character was received; the new character is dropped. This bit sets only in
FIFO mode: in non-FIFO mode a new character overwrites an unread character in
the RBR without setting it. This bit triggers the Receiver Line Status
Interrupt.
0DRR0x0Data Ready. When set, indicates that the RX FIFO (or RBR in non-FIFO
mode) contains data.

MSR

Table 32. uart_log_engine_wrap.MSR fields
BitsFieldAccessResetDescription
31:8Reserved--Reserved
7DCDR0x0Data Carrier Detect. This bit reflects the `dcd_ni` input in the opposite
polarity, so it reads `1` while a carrier is detected.
6RIR0x0Ring Indicator. This bit reflects the `ri_ni` input in the opposite polarity, so
it reads `1` while the remote modem signals an incoming call.
5DSRR0x0Data Set Ready. This bit reflects the `dsr_ni` input in the opposite polarity,
so it reads `1` while the remote modem is connected and ready.
4CTSR0x0Clear to Send. This bit reflects the `cts_ni` input in the opposite polarity, so
it reads `1` while the remote device is ready to receive data.
3DDCDR RC0x0Delta Data Carrier Detect. When set, indicates that the `DCD` bit has changed
since the last time this register was read. This bit triggers the Modem Status
Interrupt.
2TERIR RC0x0Trailing Edge Ring Indicator. When set, indicates that the `RI` bit has changed
from a `1` to a `0`. This bit triggers the Modem Status Interrupt.
1DDSRR RC0x0Delta Data Set Ready. When set, indicates that the `DSR` bit has changed since
the last time this register was read. This bit triggers the Modem Status
Interrupt.
0DCTSR RC0x0Delta Clear to Send. When set, indicates that the `CTS` bit has changed since
the last time this register was read. This bit triggers the Modem Status
Interrupt.

SCR

Table 33. uart_log_engine_wrap.SCR fields
BitsFieldAccessResetDescription
31:8Reserved--Reserved
7:0SCRRW0x0Scratch. Holds user data.

ECR

Table 34. uart_log_engine_wrap.ECR fields
BitsFieldAccessResetDescription
31:2Reserved--Reserved
1:0RCVR_TRIGGER_MS2BRW0x0Receiver FIFO Trigger Level Most Significant 2 Bits. To configure the least
significant 2 bits, use the `FCR.RCVR_TRIGGER` register field. The
configurations for the trigger levels are:
* `0x0` - 1 character
* `0x1` - 4 characters
* `0x2` - 8 characters
* `0x3` - 14 characters
* `0x4` - 32 characters
* `0x5` - 64 characters
* `0x6` - 128 characters
* `0x7` - 256 characters
* `0x8` - 512 characters
* `0x9` - 1024 characters
* `0xA` - 2048 characters
* `0xB` - 4096 characters
The Received Data Ready interrupt asserts while the receive FIFO holds
at least the selected number of characters. A level above the receive
FIFO depth, and any combined value above `0xB`, never asserts it.

ITR

Table 35. uart_log_engine_wrap.ITR fields
BitsFieldAccessResetDescription
31:6Reserved--Reserved
5TRTIRW0x0Test Reception Timeout Interrupt. Writing a `1` forces the interrupt and
writing `0` releases it.
4TFEIRW0x0Test FIFO Error Interrupt. Writing `1` forces the interrupt and writing `0`
releases it.
3TDSSIRW0x0Test (Delta Status of) Modem Status Interrupt. Writing `1` forces the
interrupt and writing `0` releases it.
2TLSIRW0x0Test (Receiver) Line Status Interrupt. Writing `1` forces the interrupt and
writing `0` releases it.
1TTBEIRW0x0Test Transmitter Buffer Empty (Transmitter Holding Register Empty) Interrupt.
Writing `1` forces the interrupt and writing `0` releases it.
0TRBFIRW0x0Test Receiver Buffer Full (Received Data Ready) Interrupt. Writing `1` forces
the interrupt and writing `0` releases it.

log_engine.CTRL

Table 36. uart_log_engine_wrap.log_engine.CTRL fields
BitsFieldAccessResetDescription
31:1Reserved--Reserved
0ENRW0x0Log Engine Enable. When set, enables the Log Engine. When cleared, the engine
stops fetching and writing, discards buffered log data and resets transfer
progress. Configuration and pending LOG_LEN values are retained, so a pending
entry restarts from the start of its slot when the engine is enabled again.
Clearing does not wait for outstanding bus responses.

LOG_REGION_SIZE

Table 37. uart_log_engine_wrap.LOG_REGION_SIZE fields
BitsFieldAccessResetDescription
31:20Reserved--Reserved
19:0LOG_REGION_SIZERW0x0Log region size in bytes. Supported values are at most 512 KiB and aligned
to 128 bytes (16 slots times the 8-byte fetch beat). If software programs a
larger value, RTL clamps the effective region to 512 KiB. For a value that is
not 128-byte aligned, RTL divides the effective region among the 16 slots and
rounds each slot's transferable capacity down to complete 8-byte fetch beats.
A requested LOG_LEN above that capacity is clamped to the capacity.

LOG_REGION_ADDR

Table 38. uart_log_engine_wrap.LOG_REGION_ADDR fields
BitsFieldAccessResetDescription
63:56RESERVEDR0x0Reserved. Reads as zero; writes are ignored.
55:32LOG_REGION_ADDR_HIRW0x0Log Region Start Address High. Contains fabric address bits [55:32].
31:0LOG_REGION_ADDR_LORW0x0Log Region Start Address Low.

LOG_WRITE_ADDR

Table 39. uart_log_engine_wrap.LOG_WRITE_ADDR fields
BitsFieldAccessResetDescription
31:0LOG_WRITE_ADDRRW0x0Log Write Address. This is the address where the log data is written to.

INTR_STATUS

Table 40. uart_log_engine_wrap.INTR_STATUS fields
BitsFieldAccessResetDescription
31:5Reserved--Reserved
4LOG_WRITE_ERRRW1C0x0Log Write Error Interrupt. Asserted when the bus for writing log data returns
an error.
3:1Reserved--Reserved
0LOG_FETCH_ERRRW1C0x0Log Fetch Error Interrupt. Asserted when the bus for fetching log data returns
an error.

INTR_ENABLE

Table 41. uart_log_engine_wrap.INTR_ENABLE fields
BitsFieldAccessResetDescription
31:5Reserved--Reserved
4LOG_WRITE_ERRRW0x0Log Write Error Interrupt Enable.
3:1Reserved--Reserved
0LOG_FETCH_ERRRW0x0Log Fetch Error Interrupt Enable.

INTR_TEST

Table 42. uart_log_engine_wrap.INTR_TEST fields
BitsFieldAccessResetDescription
31:5Reserved--Reserved
4LOG_WRITE_ERRW 1P0x0Log Write Error Interrupt Test. Writing `1` forces the interrupt.
3:1Reserved--Reserved
0LOG_FETCH_ERRW 1P0x0Log Fetch Error Interrupt Test. Writing `1` forces the interrupt.

LOG_CTRL[16]

Table 43. uart_log_engine_wrap.LOG_CTRL[16] fields
BitsFieldAccessResetDescription
31:16Reserved--Reserved
15:0LOG_LENRW0x0Log Length. Writing a nonzero value representing the log length in bytes to this field
starts the log transfer process. The field holds the requested length until the
transfer completes, when hardware clears it to zero; it is not a remaining-byte
counter. There are 16 copies of this register, each representing
a log entry. The log entries go through round robin arbitration.

2. PWM Registers

The pulse-width modulator has one output per channel; the count is smc_config_pkg::NumPwmOutputs. The PWM wrapper map places the OpenTitan PWM registers at offset 0x000 and the pad-control register CTRL at offset 0x800. CTRL.PAD_EN holds one bit per channel: while bit i is set, channel i drives GPIO pad 59+i (pads 59 to 62 for four channels), with the pad output enabled and its input disabled; while it is clear the pad is ordinary software GPIO. PAD_EN resets to 0. It does not start the channel; PWM_EN does. A claimed pad whose channel is off (PWM_EN[i] 0) drives the idle level selected by INVERT. The pad’s own DATA_CTRL.lsio_disable vetoes the claim, so the pad stays under register control. Setting the pad’s DATA_CTRL.lsio_select also routes channel i to the pad, as it does for the other LSIO pads. Other offsets in the wrapper answer DECERR. Offsets are relative to the PWM base address.

PWM Wrapper Address Map

Wrapper address map instantiating the PWM register block and its pad control.

Register Arrays:

  • PWM_PARAM[4]: 4 registers, base 0x14, stride 0x4
  • DUTY_CYCLE[4]: 4 registers, base 0x24, stride 0x4
  • BLINK_PARAM[4]: 4 registers, base 0x34, stride 0x4

Register List:

Table 44. PWM Wrapper Address Map register list
AddressNameAccessDescription
0x0ALERT_TESTW-
0x4REGWENRW-
0x8CFGRW-
0xCPWM_ENRW-
0x10INVERTRW-
0x14 - 0x20PWM_PARAM[4]RW-
0x24 - 0x30DUTY_CYCLE[4]RW-
0x34 - 0x40BLINK_PARAM[4]RW-
0x800CTRLRWControl Register

Register Details:

ALERT_TEST

Table 45. pwm_wrap.ALERT_TEST fields
BitsFieldAccessResetDescription
31:1Reserved--Reserved
0fatal_faultW0x0Write 1 to trigger one alert event of this kind.

REGWEN

Table 46. pwm_wrap.REGWEN fields
BitsFieldAccessResetDescription
31:1Reserved--Reserved
0REGWENRW0C0x1When true, all writable registers can be modified.
When false, they become read-only. Defaults true, write
zero to clear. This can be cleared after initial
configuration at boot in order to lock in the supplied
register settings.

CFG

Table 47. pwm_wrap.CFG fields
BitsFieldAccessResetDescription
31CNTR_ENRW0x0Assert this bit to enable the PWM phase counter.
Clearing this bit disables and resets the phase counter.
30:27DC_RESNRW0x7Phase Resolution (logarithmic). All duty-cycle and phase
shift registers represent fractional PWM cycles, expressed in
units of 2^-16 PWM cycles. Each PWM cycle is divided
into 2^(DC_RESN+1) time slices, and thus only the (DC_RESN+1)
most significant bits of each phase or duty cycle register
are relevant.
26:0CLK_DIVRW0x8000Sets the period of each PWM beat to be (CLK_DIV+1)
input clock periods. Since PWM pulses are generated once
every 2^(DC_RESN+1) beats, the period between output
pulses is 2^(DC_RESN+1)*(CLK_DIV+1) times longer than the
input clock period.

PWM_EN

Table 48. pwm_wrap.PWM_EN fields
BitsFieldAccessResetDescription
31:4Reserved--Reserved
3:0ENRW0x0Write 1 to this bit to enable PWM pulses on the
corresponding channel.

INVERT

Table 49. pwm_wrap.INVERT fields
BitsFieldAccessResetDescription
31:4Reserved--Reserved
3:0INVERTRW0x0Write 1 to this bit to invert the output for each channel,
so that the corresponding output is active-low.

PWM_PARAM[4]

Table 50. pwm_wrap.PWM_PARAM[4] fields
BitsFieldAccessResetDescription
31BLINK_ENRW0x0Enables blink (or heartbeat). If cleared, the output duty
cycle will remain constant at DUTY_CYCLE.A. Enabling this
bit causes the PWM duty cycle to alternate between
DUTY_CYCLE.A and DUTY_CYCLE.B
30HTBT_ENRW0x0Modulates blink behavior to create a heartbeat effect. When
HTBT_EN is set, the duty cycle increases (or decreases)
linearly from DUTY_CYCLE.A to DUTY_CYCLE.B and back, in
steps of (BLINK_PARAM.Y+1), with an increment (decrement)
once every (BLINK_PARAM.X+1) PWM cycles.

When HTBT_EN is cleared, the standard blink behavior applies,
meaning that the output duty cycle alternates between DUTY_CYCLE.A for
(BLINK_PARAM.X+1) pulses and DUTY_CYCLE.B for
(BLINK_PARAM.Y+1) pulses.
29:16Reserved--Reserved
15:0PHASE_DELAYRW0x0Phase delay of the PWM leading edge, in units of 2^(-16) PWM
cycles. The leading edge will be the rising edge of the output
signal unless the corresponding INVERT bit is set.

DUTY_CYCLE[4]

Table 51. pwm_wrap.DUTY_CYCLE[4] fields
BitsFieldAccessResetDescription
31:16BRW0x7FFFThe target duty cycle for PWM output, in units
of 2^(-16)ths of a pulse cycle. The actual precision is
however limited to the (DC_RESN+1) most significant bits.
This setting only applies when blinking, and determines
the target duty cycle.
15:0ARW0x7FFFThe initial duty cycle for PWM output, in units
of 2^(-16)ths of a pulse cycle. The actual precision is
however limited to the (DC_RESN+1) most significant bits.
This setting applies continuously when not blinking
and determines the initial duty cycle when blinking.
Table 52. pwm_wrap.BLINK_PARAM[4] fields
BitsFieldAccessResetDescription
31:16YRW0x0This blink-rate timing parameter has two different
interpretations depending on whether or not the heartbeat
feature is enabled. If heartbeat is disabled, a blinking
PWM will pulse at duty cycle B for (Y+1) pulse cycles
before returning to duty cycle A. If heartbeat is enabled
the duty cycle will increase (or decrease) by (Y+1) units
every time it is incremented (or decremented).
15:0XRW0x0This blink-rate timing parameter has two different
interpretations depending on whether or not the heartbeat
feature is enabled. If heartbeat is disabled, a blinking
PWM will pulse at duty cycle A for (X+1) pulse cycles before
switching to duty cycle B. If heartbeat is enabled
the duty cycle will start at duty cycle A, but
will be incremented (or decremented) every (X+1) cycles.
In heartbeat mode is enabled, the size of each step is
controlled by BLINK_PARAM.Y.

CTRL

Table 53. pwm_wrap.CTRL fields
BitsFieldAccessResetDescription
31:4Reserved--Reserved
3:0PAD_ENRW0x0PWM Pad Function Select, one bit per channel. When bit i is set, the integration routes channel i's output to its pad. Does not start the channel; PWM_EN starts and stops each channel's waveform.

Pulse Width Modulator

Transmission of pulse-width modulated output signals with adjustable duty cycle

Register Arrays:

  • PWM_PARAM[4]: 4 registers, base 0x14, stride 0x4
  • DUTY_CYCLE[4]: 4 registers, base 0x24, stride 0x4
  • BLINK_PARAM[4]: 4 registers, base 0x34, stride 0x4

Register List:

Table 54. Pulse Width Modulator register list
AddressNameAccessDescription
0x0ALERT_TESTW-
0x4REGWENRW-
0x8CFGRW-
0xCPWM_ENRW-
0x10INVERTRW-
0x14 - 0x20PWM_PARAM[4]RW-
0x24 - 0x30DUTY_CYCLE[4]RW-
0x34 - 0x40BLINK_PARAM[4]RW-

Register Details:

ALERT_TEST

Table 55. pwm.ALERT_TEST fields
BitsFieldAccessResetDescription
31:1Reserved--Reserved
0fatal_faultW0x0Write 1 to trigger one alert event of this kind.

REGWEN

Table 56. pwm.REGWEN fields
BitsFieldAccessResetDescription
31:1Reserved--Reserved
0REGWENRW0C0x1When true, all writable registers can be modified.
When false, they become read-only. Defaults true, write
zero to clear. This can be cleared after initial
configuration at boot in order to lock in the supplied
register settings.

CFG

Table 57. pwm.CFG fields
BitsFieldAccessResetDescription
31CNTR_ENRW0x0Assert this bit to enable the PWM phase counter.
Clearing this bit disables and resets the phase counter.
30:27DC_RESNRW0x7Phase Resolution (logarithmic). All duty-cycle and phase
shift registers represent fractional PWM cycles, expressed in
units of 2^-16 PWM cycles. Each PWM cycle is divided
into 2^(DC_RESN+1) time slices, and thus only the (DC_RESN+1)
most significant bits of each phase or duty cycle register
are relevant.
26:0CLK_DIVRW0x8000Sets the period of each PWM beat to be (CLK_DIV+1)
input clock periods. Since PWM pulses are generated once
every 2^(DC_RESN+1) beats, the period between output
pulses is 2^(DC_RESN+1)*(CLK_DIV+1) times longer than the
input clock period.

PWM_EN

Table 58. pwm.PWM_EN fields
BitsFieldAccessResetDescription
31:4Reserved--Reserved
3:0ENRW0x0Write 1 to this bit to enable PWM pulses on the
corresponding channel.

INVERT

Table 59. pwm.INVERT fields
BitsFieldAccessResetDescription
31:4Reserved--Reserved
3:0INVERTRW0x0Write 1 to this bit to invert the output for each channel,
so that the corresponding output is active-low.

PWM_PARAM[4]

Table 60. pwm.PWM_PARAM[4] fields
BitsFieldAccessResetDescription
31BLINK_ENRW0x0Enables blink (or heartbeat). If cleared, the output duty
cycle will remain constant at DUTY_CYCLE.A. Enabling this
bit causes the PWM duty cycle to alternate between
DUTY_CYCLE.A and DUTY_CYCLE.B
30HTBT_ENRW0x0Modulates blink behavior to create a heartbeat effect. When
HTBT_EN is set, the duty cycle increases (or decreases)
linearly from DUTY_CYCLE.A to DUTY_CYCLE.B and back, in
steps of (BLINK_PARAM.Y+1), with an increment (decrement)
once every (BLINK_PARAM.X+1) PWM cycles.

When HTBT_EN is cleared, the standard blink behavior applies,
meaning that the output duty cycle alternates between DUTY_CYCLE.A for
(BLINK_PARAM.X+1) pulses and DUTY_CYCLE.B for
(BLINK_PARAM.Y+1) pulses.
29:16Reserved--Reserved
15:0PHASE_DELAYRW0x0Phase delay of the PWM leading edge, in units of 2^(-16) PWM
cycles. The leading edge will be the rising edge of the output
signal unless the corresponding INVERT bit is set.

DUTY_CYCLE[4]

Table 61. pwm.DUTY_CYCLE[4] fields
BitsFieldAccessResetDescription
31:16BRW0x7FFFThe target duty cycle for PWM output, in units
of 2^(-16)ths of a pulse cycle. The actual precision is
however limited to the (DC_RESN+1) most significant bits.
This setting only applies when blinking, and determines
the target duty cycle.
15:0ARW0x7FFFThe initial duty cycle for PWM output, in units
of 2^(-16)ths of a pulse cycle. The actual precision is
however limited to the (DC_RESN+1) most significant bits.
This setting applies continuously when not blinking
and determines the initial duty cycle when blinking.
Table 62. pwm.BLINK_PARAM[4] fields
BitsFieldAccessResetDescription
31:16YRW0x0This blink-rate timing parameter has two different
interpretations depending on whether or not the heartbeat
feature is enabled. If heartbeat is disabled, a blinking
PWM will pulse at duty cycle B for (Y+1) pulse cycles
before returning to duty cycle A. If heartbeat is enabled
the duty cycle will increase (or decrease) by (Y+1) units
every time it is incremented (or decremented).
15:0XRW0x0This blink-rate timing parameter has two different
interpretations depending on whether or not the heartbeat
feature is enabled. If heartbeat is disabled, a blinking
PWM will pulse at duty cycle A for (X+1) pulse cycles before
switching to duty cycle B. If heartbeat is enabled
the duty cycle will start at duty cycle A, but
will be incremented (or decremented) every (X+1) cycles.
In heartbeat mode is enabled, the size of each step is
controlled by BLINK_PARAM.Y.

PWM Control Address Map

Per-channel pad-function select for the PWM outputs.

Register List:

Table 63. PWM Control Address Map register list
AddressNameAccessDescription
0x0CTRLRWControl Register

Register Details:

CTRL

Table 64. pwm_ctrl.CTRL fields
BitsFieldAccessResetDescription
31:4Reserved--Reserved
3:0PAD_ENRW0x0PWM Pad Function Select, one bit per channel. When bit i is set, the integration routes channel i's output to its pad. Does not start the channel; PWM_EN starts and stops each channel's waveform.

3. Peripheral Parameter Settings

The SMC sets peripheral parameters at instantiation from smc_config_pkg, smc_pkg, and the padring package; these are the authoritative sources. Most values match the IP defaults, but the following differ from the default documented in the IP’s own section.

Table 65 compares the SMC parameter overrides with each peripheral’s default values.

Table 65. SMC Peripheral Parameter Overrides
Peripheral Parameter IP default SMC value

Mailbox

smc_pkg::NumMailboxes

2

32

Mailbox

smc_pkg::MailboxDepth

8

2

I2C

smc_config_pkg::I2cTargetRxFifoDepth

268

64

I3C

smc_config_pkg::NumI3c

2

6

GPIO

MAX_TRANS (threaded from the smc module parameter)

32

2

GPIO

INPUT_BY_DEFAULT (per instance, from smc_padring_pkg::DefaultDirectionMap)

input on all

input on 60 of 67 GPIOs, output on the remaining 7

UART 16550

smc_config_pkg::UartTxFifoDepth

16

32

UART 16550

smc_config_pkg::UartRxFifoDepth

16

32

PWM

smc_config_pkg::NumPwmOutputs (channels)

6

4

The SMC I2C instances keep the IP default of 64 entries for the controller TX (FMT), controller RX and target TX FIFOs, so with the target RX override all four FIFOs of each instance hold 64 entries, and FMTLVL, RXLVL, TXLVL and ACQLVL read 64 when their FIFO is full.

The System Timer OCTS takes no parameters. The eFuse overrides only bus widths and interface types. The Log Engine, AVSBus Controller, and Telemetry Receiver are configured explicitly through smc_config_pkg, but at values equal to their IP defaults.