Security Processor (SEP) Integration
The Security Processor (SEP) is the Root of Trust for the chiplet, providing a physically isolated execution environment for security-critical services such as secure boot, lifecycle control, device attestation, cryptographic acceleration, and key management. This section provides practical integration procedures for adopters integrating the SEP as part of the SMU or as a standalone out-of-context IP.
For detailed architectural documentation about the SEP internal design, refer to the dedicated documentation located in the SEP reference manual. The SEP hardware overview and interconnect fabric are described in the SEP Overview and Interconnect sections.
1. Module Overview
The module in sep.sv provides the complete SEP functionality with logic-level
interfaces. Technology-specific components — SRAM, ROM, and eFuse shims — are
instantiated by the adopter outside SEP, following the same vendor-neutral
philosophy used for the SMC.
Separately, SEP exposes interfaces for supplementary peripherals an adopter may add on rather than substitute: an external TRNG and an additional SPI controller. These are not technology-specific — SEP contains its own entropy source and SPI host — so the interfaces exist to supplement what SEP already provides, and may be left unused.
When integrated inside the SMU, the SEP’s external interfaces are passed through
the SMU boundary with a sep_ prefix.
2. Clock and Reset Requirements
The SEP requires two clock inputs. Connect clk_i to the primary system clock
driving all SEP internal logic. Connect clk_wdt_i to a 200 kHz clock source
for the watchdog timer; this clock must be independent of the system clock so
that the WDT can detect system clock failures.
The primary reset rst_ni follows the standard active-low, asynchronous
assertion / synchronous deassertion convention. The dbg_rstb_i input provides
a separate reset for the EL2 CPU debug module. The wdt_rst_ni input receives
the watchdog reset generated by the SMC reset unit. The SEP outputs
wdt_timer_rst_req_o when the WDT triggers a reset request.
3. AXI Interfaces
The SEP connects to the system through three AXI paths. The smn_outbound_axi
master interface allows SEP firmware to access system resources outside the SEP
domain, such as SMC registers or external memory. The smn_inbound_axi slave
interface accepts requests from system masters requiring access to SEP-managed
resources. System masters must access SEP register regions with single-beat
transactions. The sep_ext_to_smc_axi output provides a dedicated AXI path for
SEP-to-SMC transactions, connecting to the SMC’s sep_axi_in port.
An additional AXI extension port (axi_extension_axi) enables adopters to
attach custom peripherals to the SEP interconnect fabric without modifying the
SEP core. When unused, tie the response input to return DECERR.
4. Memory Interfaces
All SEP memory macros are instantiated externally and connected through
dedicated request/response interfaces. The sep_cpu_tcm interface provides
tightly-coupled memory (ICCM and DCCM) for the VeeR EL2 CPU. The sep_sram
interface connects scratch SRAM used for firmware data. The sep_boot_rom
interface provides the BL0 ROM containing the first-stage bootloader.
The crypto subsystem requires additional memory interfaces.
sep_crypto_pka_imem_sram and sep_crypto_pka_dmem_sram connect to the OTBN
public key accelerator instruction and data memories respectively.
km_rom_mem and km_sram_mem connect to the Key Manager’s dedicated ROM and
SRAM macros. The KM SRAM must assert rvalid at least one cycle after the cycle
in which it grants a read; a registered-read macro meets this.
abr_mem connects the Adams Bridge working SRAM. On an idle cycle (re low),
ABR expects the channel’s read data to return 0 the following cycle.
SEP_ABR_SRAM_LATENCY must equal the macros' native registered-read latency
(default 1). Word-write channels are full-word we / re / address / data.
sig_z and pk carry one-bit-per-byte wstrobe; map those to the macros'
byte-write enables. SEP_ABR_MASKING_EN (default 1) selects 2-share DOM:
thirteen 1R1W macros versus nine, plus a second NTT. This changes ABR internal
behavior (sequencing, SCA, memory topology), not merely throughput. Give the
same value to SEP and to the SRAM instances. When it is 0, do not instantiate
the four masked coefficient banks; their response fields read as 0.
5. Cryptographic Subsystem Connections
The SEP includes an internal entropy source that requires a ring-oscillator
sample clock connected to entropy_rosc_sample_clk_i. This clock must be
asynchronous to clk_i and typically runs between 100 and 400 MHz.
5.1. External TRNG
For adopters providing an external TRNG, the ext_trng_axil AXI-Lite interface
connects to the external TRNG’s control registers, while the ext_trng_axis
AXI-Stream interfaces carry entropy data. The ext_trng_irq_i input is routed
to the PIC.
SEP decodes the 4 kB TRNG aperture (0x1091_7000 - 0x1091_7FFF) as a single
window and forwards every access on ext_trng_axil. It does not decode offsets
inside that window: the endpoint is an adopter-defined IP.
The adopter must perform the intra-aperture decode. An address that owns no
register must return an error response and must not alias onto a live register.
When no external TRNG is connected, terminate ext_trng_axil with a DECERR
slave.
The TRNG path reaches ext_trng_axil through an AXI4-to-AXI-Lite conversion
(64-to-32 downsizer and burst splitter). An errored read returns the slave’s
response verbatim. A single-beat write does too, so a DECERR slave answers
both an errored read and an errored write with DECERR. A write the splitter
breaks into more than one beat is reported as SLVERR when an earlier fragment
erred and the last fragment is OKAY. An adopter whose endpoint returns DECERR
for an unowned offset sees that code on a single-beat access.
6. eFuse and Lifecycle
SEP has its own eFuse bank. Instantiate a separate SHIM and physical eFuse bank;
do not share the SMC’s. The SHIM contract is the
eFuse Interface. On sep.sv, connect
efuse_bank_ctrl_* and efuse_shim_command_*. Through the SMU those ports
appear as sep_efuse_bank_ctrl_* and sep_efuse_shim_command_*. The SEP SHIM
control CSRs sit at the base of sep_external; see the
SHIM control address window. SEP
routes a burst on its first address, so a burst that begins in that window
carries its later beats to the SHIM. An address that owns no SHIM register must
return SLVERR and must not alias onto a live register.
SEP senses this bank after its own reset. Watch sep_fuse_sense_done_o.
On sep.sv, drive smc_fuse_sense_done_i from the SMC so firmware can
see when the SMC fabric is out of reset; the SMU wires that input
internally.
Lifecycle and test-mode ports on sep.sv, and what to do with them.
Behaviour is in the Technical Reference Manual, not here.
-
secure_tm_req_isignals a request to enter secure test mode. SEP latches it intosecure_tm_owhen fuse sensing completes, or at cold-reset release if SEC_DIS is already asserted. Secure test mode forces a no-secret, no-fuse-program configuration; it is not an authorization bit. See Test Mode Entry andsecure_tmand the Secure Scan Chain in the TRM.secure_tm_ois also an SMU output. -
security_disable_ois the SEC_DIS token-match result (emergency A0 unlock). Onsep.sv, route it to SMCsep_security_disable_i; the SMU does that internally. See Security Disable in the TRM. -
lc_state_ois the differentially encoded LC_STATE shadow.lc_sigint_err_ois the decode integrity error (fail-closed). Both are SMU outputs. See Life Cycle Controller in the TRM. -
dbg_disable_ois the typed per-path debug/test disable vector (active-high: 1 = path disabled). Onsep.sv, route it to DTPdbg_disable_i; the SMU does that internally. -
lcc_demote_state_1_o/lcc_demote_state_2_oare differentially encoded in-field debug demotion. They leave the SMU for adopter lifecycle logic and are not connected to the SMC. See in-field debug demotion in the TRM. -
sep_fuse_dft_disable_o/smc_fuse_dft_disable_ogate DFT-inserted OTP access. Leave them open if no such path is inserted. They are SMU outputs.
OTP debug AXI-Lite (axil_sep_otp_jtag) is connected to the DTP inside
the SMU; when CFG.SEP=0 the SMU instantiates an AXI-Lite error slave on
that path.
7. SPI Host Interface
The SEP provides a SPI host controller through the sep_io_spi interface,
supporting standard, dual and quad modes. The controller’s own interrupt leaves
the module as the irq field of sep_io_spi_req_o, so no separate interrupt
output is needed.
7.1. SEP SPI Host Pin Assignment
When the SMU is built with the SEP, the SMU drives the SMC SPI port
(spi_*_i of smc.sv) from sep_io_spi_req_o and returns the data-pad
inputs to the SEP in sep_io_spi_rsp_i.sd. The SMC places these signals on
GPIO 0-10 and 54. Inside smc.sv, no register selects another SPI source for
these pads.
| GPIO | Function | SEP SPI host source |
|---|---|---|
0-3 |
SPI.DATA[0-3] |
Lane n drives |
4-7 |
SPI.DATA[4-7] |
Not driven. Output disabled, input disabled. |
8 |
SPI.CS |
|
9 |
SPI.CLK |
|
10 |
SPI.DQS |
Not driven. Output disabled, input disabled. |
54 |
SPI DQS Loopback |
Not driven. Output disabled, input disabled. |
In standard mode, SPI.DATA[0] is the host output (COPI) and SPI.DATA[1] is the host input (CIPO).
The SMC holds the SPI function select of these pads on whenever the SMU has
the SEP. A pad follows the SEP SPI host once it is out of cold reset and while
its GPIO DATA_CTRL.lsio_disable is clear; setting lsio_disable returns the
pad to register control. A pad shim outside smc.sv can also hand a pad to a
second function with its CONTROL.hw2_ovrd.
On SPI.CS, SPI.CLK and SPI.DATA[0-3], the pad input is enabled only while the
host does not drive that pad. The host drives a data lane only while chip
select is asserted, and drives no pad until software sets its
CONTROL.OUTPUT_EN. Until then SPI.CS is undriven, so its level comes from the
pad pull; the GPIO pin table recommends a pull-up.
8. Bring-Up Considerations
The SEP boot sequence begins after the SMC completes fuse sensing and releases the SEP reset. The SEP BL0 ROM FW verifies the BL1 software image using non-volatile public keys before transferring control. Feature controls derived from secure boot authentication and lifecycle state govern what operations are permitted after boot.
The jtag_id_i input
must be tied to an appropriate constant in the top-level integration. A
rst_vec_i port exists on tb_top.sv for DV reset vector injection; it is not
present on sep.sv itself and requires no integration tie-off.
9. SEP Port Interface
The SEP exposes interfaces for clocks, resets, JTAG debug, CPU control, memory macros, AXI bus connections, cryptographic subsystem, eFuse, lifecycle, SPI host, and mailbox. The following table defines all SEP top-level ports.
The generated module and port pages are in the TRM under RTL Modules Reference. This table keeps each port’s connection and tie-off default.
| Interface Name | Type | Direction | Width | Description | Connection | Default value (if applicable) |
|---|---|---|---|---|---|---|
|
|
Input |
1 |
Primary SEP clock. All SEP internal logic operates synchronously to this clock. |
System clock |
N/A |
|
|
Input |
1 |
200 kHz clock for watchdog timer. |
Low-frequency clock source |
N/A |
|
|
Input |
1 |
Primary reset (active low). Asynchronous assertion, synchronous deassertion. |
System reset |
N/A |
|
|
Input |
1 |
EL2 debugger reset (active low). |
JTAG debug infrastructure |
N/A |
|
|
Input |
1 |
Watchdog timer reset from SMC (active low). |
SMC reset unit |
N/A |
|
|
Output |
1 |
WDT reset request output. Triggers memory interface reset in |
SEP wrapper |
N/A |
|
|
Input |
1 |
JTAG test clock. |
JTAG pads (via DTP STAP) |
N/A |
|
|
Input |
1 |
JTAG test mode select. |
JTAG pads (via DTP STAP) |
N/A |
|
|
Input |
1 |
JTAG test data in. |
JTAG pads (via DTP STAP) |
N/A |
|
|
Input |
1 |
JTAG test reset (active low). |
JTAG pads (via DTP STAP) |
N/A |
|
|
Output |
1 |
JTAG test data out. |
JTAG pads (via DTP STAP) |
N/A |
|
|
Output |
1 |
JTAG test data out enable. |
JTAG pads (via DTP STAP) |
N/A |
|
|
Input |
- |
OTP debug AXI-Lite request from JTAG. |
DTP |
Tie to '0 if unused |
|
|
Output |
- |
OTP debug AXI-Lite response to JTAG. |
DTP |
N/A |
|
|
Input |
1 |
Async halt request from MPC. |
Debug controller |
Tie to '0 if unused |
|
|
Input |
1 |
Async run request from MPC. |
Debug controller |
Tie to '0 if unused |
|
|
Input |
1 |
Run/halt selection after reset. |
Debug controller |
1’b1 |
|
|
Input |
1 |
Async halt request to CPU. |
Debug controller |
Tie to '0 if unused |
|
|
Input |
1 |
Async restart request to CPU. |
Debug controller |
Tie to '0 if unused |
|
|
Input |
1 |
DFT/scan test-enable. Drives clock-gater test ports and AXI cell test inputs. |
Test controller |
1’b0 |
|
|
Input |
1 |
Scan reset (active-low). Bypasses reset synchronizers during DFT. |
Test controller |
1’b1 |
|
|
Input |
1 |
Boot sequence completion qualified to |
SMC-qualified boot done or external synchronizer |
1’b1 |
|
|
Input |
1 |
Enables DMI accesses to the core debug module (addresses 0x00-0x4F). Tied high at SMU; TAP access is already lifecycle-gated. |
Debug infrastructure |
1’b1 |
|
|
Input |
1 |
Enables DMI accesses to an external uncore aperture (addresses 0x50+). Unused: the core debug module AXI master already reaches the SEP fabric. |
Debug infrastructure |
Tie to '0 if unused |
|
|
Output |
1 |
DMI uncore access enable. |
Debug infrastructure |
N/A |
|
|
Output |
1 |
DMI uncore write enable. |
Debug infrastructure |
N/A |
|
|
Output |
|
DMI uncore address. |
Debug infrastructure |
N/A |
|
|
Output |
|
DMI uncore write data. |
Debug infrastructure |
N/A |
|
|
Input |
|
DMI uncore read data. |
Debug infrastructure |
N/A |
|
|
Output |
1 |
DMI active indicator. |
Debug infrastructure |
N/A |
|
|
Output |
- |
CPU trace output for debug. |
Trace infrastructure |
N/A |
|
|
Input |
- |
VeeR lockstep controls: disable corruption detection, and error-injection enable. Inert unless the core is built with |
Chip-level RAS control |
Tie to '0 if unused |
|
|
Output |
- |
VeeR lockstep status: corruption detected. Reads 0 unless the core is built with |
Chip-level RAS aggregation |
N/A |
|
|
Input |
|
JTAG ID value. |
Configuration tie-off |
N/A |
|
|
Input |
1 |
Timer interrupt. |
Internal timer |
Tie to '0 if unused |
|
|
Input |
1 |
Software interrupt. |
Software IRQ source |
Tie to '0 if unused |
|
|
Input |
|
External interrupt sources for PIC. |
External IRQ sources |
Tie to '0 if unused |
|
|
Output |
- |
CPU tightly-coupled memory (TCM) request (ICCM + DCCM). |
SRAM macros |
N/A |
|
|
Input |
- |
CPU TCM response. |
SRAM macros |
N/A |
|
|
Output |
- |
Scratch SRAM request. |
SRAM macros |
N/A |
|
|
Input |
- |
Scratch SRAM response. |
SRAM macros |
N/A |
|
|
Output |
- |
Boot ROM (BL0) request. |
ROM macro |
N/A |
|
|
Input |
- |
Boot ROM (BL0) response. |
ROM macro |
N/A |
|
|
Output |
- |
SMN outbound AXI request (system bus master). |
SMN fabric |
N/A |
|
|
Input |
- |
SMN outbound AXI response. |
SMN fabric |
N/A |
|
|
Input |
- |
SMN inbound AXI request (system bus slave). |
SMN fabric |
Tie to '0 if unused |
|
|
Output |
- |
SMN inbound AXI response. |
SMN fabric |
N/A |
|
|
Output |
- |
SEP-to-SMC AXI request. Dedicated path for SEP to access SMC resources. |
SMC |
N/A |
|
|
Input |
- |
SEP-to-SMC AXI response. |
SMC |
N/A |
|
|
Input |
1 |
Ring-oscillator sample clock for entropy source (async vs |
Ring oscillator |
N/A |
|
|
Output |
- |
OTBN PKA instruction memory SRAM request. |
SRAM macro |
N/A |
|
|
Input |
- |
OTBN PKA instruction memory SRAM response. |
SRAM macro |
N/A |
|
|
Output |
- |
OTBN PKA data memory SRAM request. |
SRAM macro |
N/A |
|
|
Input |
- |
OTBN PKA data memory SRAM response. |
SRAM macro |
N/A |
|
|
Output |
- |
External TRNG AXI-Lite passthrough request (to |
External TRNG shim |
N/A |
|
|
Input |
- |
External TRNG AXI-Lite passthrough response. |
External TRNG shim |
N/A |
|
|
Input |
|
External TRNG AXI-Stream request array (from |
External TRNG shim |
N/A |
|
|
Output |
|
External TRNG AXI-Stream response array. |
External TRNG shim |
N/A |
|
|
Input |
1 |
External TRNG interrupt (routed to PIC). |
External TRNG shim |
Tie to '0 if unused |
|
|
Output |
- |
Key Manager ROM memory request. |
ROM macro |
N/A |
|
|
Input |
- |
Key Manager ROM memory response. |
ROM macro |
N/A |
|
|
Output |
- |
Key Manager SRAM memory request. |
SRAM macro |
N/A |
|
|
Input |
- |
Key Manager SRAM memory response. |
SRAM macro |
N/A |
|
|
Output |
- |
eFuse bank control AXI-Lite request. |
eFuse shim |
N/A |
|
|
Input |
- |
eFuse bank control AXI-Lite response. |
eFuse shim |
N/A |
|
|
Output |
- |
eFuse command interface request. |
eFuse shim |
N/A |
|
|
Input |
- |
eFuse command interface response. |
eFuse shim |
N/A |
|
|
Output |
|
Lifecycle demote state output 1. Exported at SMU boundary; not currently connected to SMC. |
SMU external port |
N/A |
|
|
Output |
|
Lifecycle demote state output 2. Exported at SMU boundary; not currently connected to SMC. |
SMU external port |
N/A |
|
|
Output |
- |
SPI host controller request. |
SPI pad interface |
N/A |
|
|
Input |
- |
SPI host controller response. |
SPI pad interface |
N/A |
|
|
Output |
|
Lifecycle state output (differentially encoded). Routed to SMC and the SMU external output; debug-disable control to DTP is via |
SMC, SMU external |
N/A |
|
|
Output |
- |
Typed debug-disable struct routed by SMU to DTP debug-disable control. |
SMU → DTP |
N/A |
|
|
Output |
1 |
Gate for the DFT-inserted access path into the SEP OTP, composed as Case 3 AND |
Adopter DFT insertion |
Leave open if no path is inserted |
|
|
Output |
1 |
Gate for the DFT-inserted access path into the SMC OTP, composed as Case 2 AND |
Adopter DFT insertion |
Leave open if no path is inserted |
|
|
Output |
1 |
Lifecycle signal integrity error. |
SMU |
N/A |
|
|
Output |
1 |
Security disable output. |
SMU |
N/A |
|
|
Output |
1 |
Secure test mode output. |
SMU |
N/A |
|
|
Output |
|
Mailbox interrupt outputs to SMC. |
SMC interrupt aggregator |
N/A |
|
|
Input |
1 |
SMC fuse sense done indication. |
SMC |
N/A |
|
|
Output |
1 |
SEP fuse sense done output. |
System integration |
N/A |
|
|
Input |
- |
Secure test mode request. |
GPIO padring / tie-off |
N/A |
|
|
Output |
- |
AXI extension port request for adopter peripheral expansion. |
Adopter peripherals |
N/A |
|
|
Input |
- |
AXI extension port response. |
Adopter peripherals |
Tie to DECERR if unused |
|
|
Input |
|
SMC global base address for outbound address translation. |
System configuration |
N/A |
|
|
Input |
|
SMC region size for outbound address translation. |
SMC |
N/A |
|
|
Output |
1 |
Key Manager unrecoverable error. |
RAS / error handling |
N/A |
|
|
Output |
1 |
Key Manager recoverable error. |
RAS / error handling |
N/A |
|
|
Output |
|
External debug observation bus. |
Debug infrastructure |
N/A |