smc_peripherals

Aggregate SMC peripherals, eFuse, and pad-facing I/O.

Instantiates the peripheral CSR crossbar and its clock-domain crossings, the padring and GPIOs, UART, I2C, I3C, telemetry receivers, AVSBus controller, eFuse wrapper, system timer, misc registers and the SMC reset unit. The SPI controller is outside this module: its signals only pass through the padring to the SPI pads. Returns UART/GPIO interrupts, the gated I3C clock, and debug buses.

EFUSE_SHIM_SIZE is the vendor eFuse shim CSR carve-out at the base of the opaque smc_external window. Each peripheral clock-gate enable stops its clock when high and steers that peripheral's crossbar leg into an error slave, so an access to a gated peripheral completes with SLVERR and read data 0xBADCAB1E instead of stalling. The DTP CSR, smc_external, eFuse shim and JTAG eFuse AXI-Lite ports each pass through an axi_cut.

Parameters

Table 1. Parameters
NameTypeDefaultDescription
MAX_TRANSint unsigned2Maximum outstanding transactions of the padring GPIO demux and of each GPIO interface.
EFUSE_SHIM_SIZEint unsigned'h4Vendor eFuse shim CSR block carved off the base of the smc_external window; literal because the open smc_external map is opaque. Passed to the peripheral crossbar.

Ports

Table 2. Ports
NameDirectionTypeDescription
clk_ref_iinputlogicReference clock for the reset unit, the AVSBus controller and the peripheral CDC.
clk_smc_iinputlogicSMC core clock for the peripheral crossbar and the SMC-clock peripherals.
clk_periph_iinputlogicPeripheral clock for the UART, I2C, I3C and AVSBus register interfaces.
test_en_iinputlogicDFT test-mode enable, active-high; bypasses the peripheral clock gates and selects the scan reset.
scan_rst_niinputlogicDFT scan reset, active-low, used in place of functional resets while test_en_i is high.
clk_telemetry_iinputlogicTelemetry clock, gated by tel_cg_en_i before it reaches the telemetry receivers.
rst_telemetry_niinputlogicTelemetry-domain reset, active-low, for the telemetry receivers' ATB FIFOs.
i3c_cg_en_iinputlogicStops the I3C peripheral clock when high; synchronized to the peripheral clock. I3C accesses answer SLVERR while high.
avs_cg_en_iinputlogicStops the AVSBus controller peripheral and reference clocks when high. AVSBus accesses answer SLVERR while high.
i2c_cg_en_iinputlogicStops the I2C peripheral clock when high. I2C accesses answer SLVERR while high.
uart_cg_en_iinputlogicStops the UART peripheral clock when high. UART accesses answer SLVERR while high.
tel_cg_en_iinputlogicStops the telemetry receivers' gated SMC and telemetry clocks when high. Telemetry accesses answer SLVERR while high.
axil_peripherals_req_iinputsmc_pkg::smc_axil_32_32_req_tRequest from the local crossbar into the peripheral crossbar.
axil_peripherals_resp_ooutputsmc_pkg::smc_axil_32_32_resp_tResponse to the local crossbar.
axil_log_engine_req_ooutputsmc_pkg::smc_axil_56_64_req_tLog-engine fetch request from the UART, moved onto the SMC clock.
axil_log_engine_resp_iinputsmc_pkg::smc_axil_56_64_resp_tLog-engine fetch response on the SMC clock.
axil_dtp_csr_req_ooutputsmc_pkg::smc_axil_32_32_req_tDTP CSR request with its address rebased to zero at the DTP control window.
axil_dtp_csr_resp_iinputsmc_pkg::smc_axil_32_32_resp_tDTP CSR response.
smc_external_req_ooutputsmc_pkg::smc_axil_32_32_req_tRequest for the part of the smc_external window above the eFuse shim carve-out.
smc_external_resp_iinputsmc_pkg::smc_axil_32_32_resp_tResponse from the smc_external window.
axil_smc_otp_jtag_req_iinputsmc_pkg::smc_axil_32_32_req_tJTAG request into the eFuse wrapper, filtered by lifecycle state.
axil_smc_otp_jtag_resp_ooutputsmc_pkg::smc_axil_32_32_resp_tResponse to the JTAG eFuse access path.
lsio_interface_select_ooutputlogic [smc_pkg::NumGpioWraps-1:0]LSIO select per pad from the padring, high where a peripheral function claims the pad.
pad2core_iinputlogic [smc_pkg::NumGpioWraps-1:0]Value received from each GPIO pad.
core2pad_ooutputlogic [smc_pkg::NumGpioWraps-1:0]Value driven onto each GPIO pad.
pad2core_en_ooutputlogic [smc_pkg::NumGpioWraps-1:0]Input enable of each GPIO pad.
core2pad_en_ooutputlogic [smc_pkg::NumGpioWraps-1:0]Output enable of each GPIO pad.
spi_enable_iinputlogicHands the SPI pads to the external SPI host, active-high.
spi_clk_iinputlogicSerial clock from the external SPI host, driven onto the SPI clock pad.
spi_txd_iinputlogic [7:0]Transmit data from the external SPI host, one bit per data pad.
spi_cs_n_iinputlogicChip select from the external SPI host, active-low.
spi_cs_oe_n_iinputlogicOutput enable for the chip-select pad, active-low.
spi_cs_ie_n_iinputlogicInput enable for the chip-select pad, active-low.
spi_clk_ie_n_iinputlogicInput enable for the SPI clock pad, active-low.
spi_clk_oe_n_iinputlogicOutput enable for the SPI clock pad, active-low.
spi_dqs_ie_n_iinputlogicInput enable for the data-strobe pad, active-low.
spi_dqs_oe_n_iinputlogicOutput enable for the data-strobe pad, active-low; the pad drives zero when enabled.
spi_dq_ie_n_iinputlogic [7:0]Input enables for the data pads, active-low, one bit per data pad.
spi_dq_oe_n_iinputlogic [7:0]Output enables for the data pads, active-low, one bit per data pad.
spi_rxd_ooutputlogic [7:0]Receive data sampled from the data pads, to the external SPI host.
spi_rxds_ooutputlogicRead data strobe sampled from the data-strobe pad, used in DDR mode.
spi_mem_rebar_oepad_iinputlogicOutput enable for the SPI DQS loopback pad, active-high.
spi_mem_rebar_opad_iinputlogicData driven onto the SPI DQS loopback pad.
spi_mem_rebar_iepad_iinputlogicInput enable for the SPI DQS loopback pad, active-high.
spi_mem_rebar_ipad_ooutputlogicValue sampled from the SPI DQS loopback pad.
telemetry_atdata_iinputtelemetry_receiver_pkg::telemetry_data_t [smc_config_pkg::NumTelemetryReceivers-1:0]ATB trace data per telemetry receiver.
telemetry_atid_iinputtelemetry_receiver_pkg::atb_id_t [smc_config_pkg::NumTelemetryReceivers-1:0]ATB trace source ID per receiver.
telemetry_atready_ooutputlogic [smc_config_pkg::NumTelemetryReceivers-1:0]ATB ready from each receiver.
telemetry_atvalid_iinputlogic [smc_config_pkg::NumTelemetryReceivers-1:0]ATB data valid per receiver.
telemetry_afvalid_ooutputlogic [smc_config_pkg::NumTelemetryReceivers-1:0]ATB flush request from each receiver.
telemetry_afready_iinputlogic [smc_config_pkg::NumTelemetryReceivers-1:0]ATB flush acknowledge per receiver.
lc_state_iinputlogic [2*smc_pkg::LcStateWidth-1:0]Differentially encoded lifecycle state, used by the eFuse JTAG access filter and reported in chip_config.
lc_sigint_err_ooutputlogicIntegrity error from the differential decode of lc_state_i, active-high.
chiplet_is_primary_iinputlogicMakes the system timer drive the timer sync pads when high and follow them when low.
timer_count_ooutputlogic [63:0]Live 64-bit system timer count.
system_timer_octs_credits_debug_ooutputlogic [8:0]Current system timer credit count.
system_timer_octs_credits_left_debug_ooutputlogicHigh while system timer credits remain.
fuse_bank_ctrl_req_ooutputsmc_pkg::smc_axil_32_32_req_tRequest to the vendor eFuse shim CSRs.
fuse_bank_ctrl_resp_iinputsmc_pkg::smc_axil_32_32_resp_tResponse from the vendor eFuse shim CSRs.
boot_stall_jtag_ovrd_iinputlogicReplaces the boot-stall pad value with boot_stall_jtag_val_i when high.
boot_stall_jtag_val_iinputlogicBoot-stall value used while the JTAG override is set.
boot_stall_processed_ooutputlogicBoot stall synchronized to the SMC clock and made sticky: once low it stays low until the next primary reset; while high it holds fuse_reset_n_o low.
efuse_shim_command_req_ooutputsmc_efuse_pkg::fuse_command_req_tFuse sense and program command request to the shim state machine.
efuse_shim_command_resp_iinputsmc_efuse_pkg::fuse_command_resp_tFuse command response from the shim state machine.
ext_boot_seq_done_iinputlogicExternal boot sequence done, active-high; the eFuse wrapper holds its released reset until it is set.
ext_boot_seq_done_qual_ooutputlogicext_boot_seq_done_i synchronized to clk_smc_i and held set until cold reset.
sep_security_disable_iinputlogicSecurity disable from the SEP eFuse controller, active-high; skips automatic fuse sensing and releases the shadow registers without it.
fuse_reset_n_ooutputlogicEfuse Released Reset. Fuse sensing done && external boot sequence done (includes memory repair and shadow reg override being complete) - the rest of SMC can now boot. Held low while the boot stall is set.
fuse_reset_n_delayed_ooutputlogicfuse_reset_n_o after 16 SMC clock pipe stages reset by the primary reset.
fuse_sense_done_ooutputlogicFuse sensing done. High once shadow-register loading from the fuses completes.
shadow_regs_ooutputsmc_efuse_pkg::efuse_map_teFuse shadow-register contents; zero until fuse sensing completes unless sep_security_disable_i is set.
ndmreset_request_iinputlogic [smc_config_pkg::CpuClusterCount-1:0]Asynchronous NDM reset request from each external CPU cluster; synchronized to the SMC clock and raised as a peripheral interrupt.
ndmreset_process_ooutputlogic [smc_config_pkg::CpuClusterCount-1:0]Firmware response to each cluster's NDM reset request, from the NDMRESET_PROCESS register.
powergood_iinputlogicPowergood, active-high; while low the reset unit holds the cold, primary and warm resets.
rst_cold_niinputlogicCold reset, active-low, deglitched and extended in the reset unit.
rst_cool_niinputlogicCool reset from the pin, active-low, deglitched in the reset unit into the primary reset.
rst_cold_stable_ref_clk_nooutputlogicDe-glitched and extended cold reset, active-low, synchronized to the reference clock.
powergood_stable_ooutputlogicPowergood from the reset unit: falls with powergood_i and rises 32 reference clock cycles after it.
rst_ext_wdt_niinputlogicSEP watchdog reset, active-low; drives the watchdog reset in the reset unit and, once synchronized, a peripheral interrupt.
smc_wdt_first_timeout_iinputlogicFirst-stage SMC watchdog timeout, passed to the reset unit.
smc_wdt_second_timeout_iinputlogicSecond-stage SMC watchdog timeout; asserts the watchdog reset in the reset unit.
cfg_flr_pf_active_iinputlogicPCIe function-level reset request, active-high; starts the reset unit's isolation and cool reset sequence.
isolate_req_ooutputlogic [31:0]Per-subsystem isolation requests from the reset unit, raised by its registers, the isolate pin or the function-level reset sequence.
skip_mem_repair_ooutputlogicAsserted during a function-level reset to skip memory repair and MBIST.
ss_reset_complete_iinputlogic [31:0]Per-subsystem reset complete acknowledgments, synchronized to the SMC clock in the reset unit.
ss_config_ooutputlogic [31:0]Per-subsystem configuration bits written through the reset-unit SS_CONFIG register; cleared by primary reset.
ss_reset_ctrl_ooutputsmc_reset_unit_pkg::reset_ctrl_tPer-subsystem cold and warm resets, hold controls and force-to-reference-clock select; the resets are not synchronized to the subsystem clock.
rst_primary_ref_clk_nooutputlogicPrimary reset (cold, cool and function-level reset combined), active-low, synchronized to the reference clock.
rst_primary_smc_clk_nooutputlogicPrimary reset, active-low, synchronized to the SMC clock; resets the peripheral crossbar and SMC-clock peripherals.
rst_warm_smc_clk_nooutputlogicWarm reset (primary, watchdog and fuse reset combined), active-low, synchronized to the SMC clock.
rst_wdt_smc_clk_nooutputlogicWatchdog reset from the SEP watchdog or the second-stage SMC watchdog timeout, active-low, synchronized to the SMC clock.
rst_primary_periph_clk_nooutputlogicPrimary reset, active-low, synchronized to the peripheral clock.
sync_irq_ooutputlogicGlobal sync bit set by software through the reset-unit SYNC_REG register.
jtag_reset_ctrl_iinputsmc_pkg::jtag_smc_reset_ctrl_tJTAG override selects and values for the fuse, cold, cool, warm and per-subsystem resets, in the TCK domain.
sep_mailbox_interrupts_iinputlogic [7:0]SEP mailbox interrupts, placed on peripheral interrupt bits 7:0.
axi_hang_irq_iinputlogicOR of the smc_base AXI hang detectors, placed on peripheral interrupt bit 30.
peripheral_interrupts_ooutputlogic [31:0]Peripheral interrupt vector to the SMC interrupt controller: SEP mailbox, telemetry, NDM reset, I3C, UART, AVSBus, I2C, SEP watchdog, eFuse locked-field, GPIO and AXI hang sources.
gpio_interrupt_ooutputlogic [smc_pkg::NumGpioWraps-1:0]Per-GPIO interrupt from the padring, on the SMC clock.
uart_interrupt_ooutputlogic [smc_config_pkg::NumUart-1:0]Per-UART interrupt on the peripheral clock, without the error and log-engine sources.
i3c_dat_mem_src_iinputi3c_pkg::dat_mem_src_t [smc_config_pkg::NumI3c-1:0]Read data from each I3C device address table memory.
i3c_dat_mem_sink_ooutputi3c_pkg::dat_mem_sink_t [smc_config_pkg::NumI3c-1:0]Request to each I3C device address table memory.
i3c_dct_mem_src_iinputi3c_pkg::dct_mem_src_t [smc_config_pkg::NumI3c-1:0]Read data from each I3C device characteristics table memory.
i3c_dct_mem_sink_ooutputi3c_pkg::dct_mem_sink_t [smc_config_pkg::NumI3c-1:0]Request to each I3C device characteristics table memory.
i3c_rlt_mem_src_iinputi3c_pkg::rlt_mem_src_t [smc_config_pkg::NumI3c-1:0]Read data from each I3C reverse-lookup table memory.
i3c_rlt_mem_sink_ooutputi3c_pkg::rlt_mem_sink_t [smc_config_pkg::NumI3c-1:0]Request to each I3C reverse-lookup table memory.
gated_clk_periph_i3c_ooutputlogicGated I3C peripheral clock (same domain as i3ccore_wrapper).
avsbus_cur_state_debug_ooutputlogic [16:0]AVSBus controller state, synchronized to the SMC clock.
telemetry_debug_ooutputlogic [smc_config_pkg::NumTelemetryReceivers-1:0][3:0]telemetry receiver debug (4 bits per; see telemetry_receiver.sv for field definitions).
i2c_debug_ooutputlogic [smc_config_pkg::NumI2c-1:0][3:0]I2C debug (4 bits per I2C; see i2c_core.sv for field definitions).
efuse_debug_ooutputlogic [9:0]eFuse controller status for the SMC debug bus: shadow-register write and read locks, program and read locks, write-setup-only, LC-state access, read and program timeouts, request error and secure-test-mode block, from bit 0 upward.