smc_padring
Mux SMC peripheral digital I/O onto chiplet pads.
Instantiates one gpio interface per pad behind an AXI-Lite demux whose error target returns DECERR with data 0xBADCAB1E outside the GPIO window. Assigns fixed pads to SPI, UART, I3C, I2C, AVSBus, the system timer, and the isolate-request, boot-stall and cool-reset pins; each function's enable drives the pad's LSIO select, which the gpio registers can disable. The pad mapping is combinational.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
MAX_TRANS | int unsigned | 1 | Maximum outstanding transactions of the demux and of each gpio interface. |
GPIO_INTF_BASE_ADDR | bit [gpio_pkg::AddrWidth-1:0] | 32'h00000000 | Base address of the first GPIO interface; the demux decodes NumGpioWraps 16-byte slots from it. |
Ports
| Name | Direction | Type | Description |
|---|---|---|---|
clk_i | input | logic | SMC core clock for the GPIO register demux and the GPIO interfaces. |
rst_primary_ni | input | logic | Primary reset, active-low, synchronized to clk_i; resets the demux and GPIO registers. |
rst_cold_stable_smc_clk_ni | input | logic | Stable cold reset, active-low, synchronized to clk_i; while low, every GPIO pad is held in its default direction with the output disabled. |
test_en_i | input | logic | DFT test-mode enable, active-high, passed to the demux and the gpio interfaces. |
scan_rst_ni | input | logic | DFT scan reset, active-low; unused. |
axil_req_i | input | gpio_pkg::gpio_axil_req_t | AXI-Lite Register Interface request. |
axil_resp_o | output | gpio_pkg::gpio_axil_resp_t | AXI-Lite Register Interface response. |
spi_enable_i | input | logic | Selects the SPI function on GPIO pads 0-10 and 54, active-high. |
spi_clk_i | input | logic | Serial bit-rate clock driven onto GPIO 9. |
spi_txd_i | input | logic [7:0] | Transmit data driven onto GPIO 0-7, one bit per pad. |
spi_cs_n_i | input | logic | Chip select, active-low, driven onto GPIO 8. |
spi_cs_oe_n_i | input | logic | Output enable for the chip-select pad (GPIO 8), active-low. |
spi_cs_ie_n_i | input | logic | Input enable for the chip-select pad (GPIO 8), active-low. |
spi_clk_ie_n_i | input | logic | Input enable for the SPI clock pad (GPIO 9), active-low. |
spi_clk_oe_n_i | input | logic | Output enable for the SPI clock pad (GPIO 9), active-low. |
spi_dqs_ie_n_i | input | logic | Input enable for the data-strobe pad (GPIO 10), active-low. |
spi_dqs_oe_n_i | input | logic | Output enable for the data-strobe pad (GPIO 10), active-low; the pad drives zero when enabled. |
spi_dq_ie_n_i | input | logic [7:0] | Input enables for the data pads (GPIO 0-7), active-low. |
spi_dq_oe_n_i | input | logic [7:0] | Output enables for the data pads (GPIO 0-7), active-low. |
spi_rxd_o | output | logic [7:0] | Receive data sampled from GPIO 0-7. |
spi_rxds_o | output | logic | Read data strobe sampled from GPIO 10, used in DDR mode. |
spi_mem_rebar_oepad_i | input | logic | Output enable for the SPI DQS loopback pad (GPIO 54), active-high. |
spi_mem_rebar_opad_i | input | logic | Data driven onto the SPI DQS loopback pad (GPIO 54). |
spi_mem_rebar_iepad_i | input | logic | Input enable for the SPI DQS loopback pad (GPIO 54), active-high. |
spi_mem_rebar_ipad_o | output | logic | Value sampled from the SPI DQS loopback pad (GPIO 54). |
uart_enable_i | input | logic [smc_config_pkg::NumUart-1:0] | Selects each UART's four pads, active-high, one bit per UART; UART u uses GPIO 11+4u (RX), 12+4u (TX), 13+4u (RTS) and 14+4u (CTS). |
uart_rx_o | output | logic [smc_config_pkg::NumUart-1:0] | Receive data sampled from each UART's RX pad. |
uart_tx_i | input | logic [smc_config_pkg::NumUart-1:0] | Transmit data driven onto each UART's TX pad. |
uart_rts_n_i | input | logic [smc_config_pkg::NumUart-1:0] | Request-to-send, active-low, driven onto each UART's RTS pad. |
uart_cts_n_o | output | logic [smc_config_pkg::NumUart-1:0] | Clear-to-send, active-low, sampled from each UART's CTS pad. |
chiplet_is_primary_i | input | logic | Timer pad direction: high drives GPIO 55 and 56 from the timer inputs, low samples them. |
timer_sync_load_i | input | logic | System timer sync-load, driven onto GPIO 55 on the primary chiplet. |
timer_cnt_credit_i | input | logic | System timer count credit, driven onto GPIO 56 on the primary chiplet. |
timer_sync_load_o | output | logic | System timer sync-load sampled from GPIO 55, used on a secondary chiplet. |
timer_cnt_credit_o | output | logic | System timer count credit sampled from GPIO 56, used on a secondary chiplet. |
timer_gpio_enable_i | input | logic | Selects the system timer function on GPIO 55 and 56, active-high. |
boot_stall_o | output | logic | Boot-stall strap sampled from GPIO 57, not synchronized to clk_i. |
i3c_enable_i | input | logic [smc_config_pkg::NumI3c-1:0] | Selects each I3C instance's SCL and SDA pads, active-high: GPIO 27-28 for instance 0, 63-64 for instance 1, and from 29 upward for the rest. |
i3c_scl_o | output | logic [smc_config_pkg::NumI3c-1:0] | SCL sampled from each I3C instance's SCL pad. |
i3c_sda_o | output | logic [smc_config_pkg::NumI3c-1:0] | SDA sampled from each I3C instance's SDA pad. |
i3c_scl_i | input | logic [smc_config_pkg::NumI3c-1:0] | SCL value driven onto each I3C instance's SCL pad. |
i3c_scl_oen_i | input | logic [smc_config_pkg::NumI3c-1:0] | Output enable for each SCL pad, active-low. |
i3c_sda_i | input | logic [smc_config_pkg::NumI3c-1:0] | SDA value driven onto each I3C instance's SDA pad. |
i3c_sda_oen_i | input | logic [smc_config_pkg::NumI3c-1:0] | Output enable for SDA IO pad (active low). |
i3c_sda_pp_i | input | logic [smc_config_pkg::NumI3c-1:0] | Push-pull select for each SDA pad; high enables the SDA output whatever i3c_sda_oen_i is. |
i2c_enable_i | input | logic [smc_config_pkg::NumI2c-1:0] | Selects each I2C instance's SCL, SDA, SMBus alert and SMBus suspend pads, active-high; instance i uses GPIO 37+4i to 40+4i. |
i2c_master_enable_i | input | logic [smc_config_pkg::NumI2c-1:0] | Controller mode per I2C instance: the SMBus alert pad is sampled and the suspend pad driven; in target mode the directions reverse. |
i2c_scl_o | output | logic [smc_config_pkg::NumI2c-1:0] | SCL sampled from each I2C instance's SCL pad. |
i2c_sda_o | output | logic [smc_config_pkg::NumI2c-1:0] | SDA sampled from each I2C instance's SDA pad. |
i2c_smbus_n_o | output | logic [smc_config_pkg::NumI2c-1:0] | SMBus suspend, active-low, sampled from the pad in target mode; zero in controller mode. |
i2c_smbus_alert_n_o | output | logic [smc_config_pkg::NumI2c-1:0] | SMBus alert, active-low, sampled from the pad in controller mode; zero in target mode. |
i2c_scl_oen_i | input | logic [smc_config_pkg::NumI2c-1:0] | Open-drain SCL control, active-low: low pulls the pad low, high releases it to the board pull-up. |
i2c_sda_oen_i | input | logic [smc_config_pkg::NumI2c-1:0] | Open-drain SDA control, active-low: low pulls the pad low, high releases it to the board pull-up. |
i2c_smbus_n_i | input | logic [smc_config_pkg::NumI2c-1:0] | SMBus suspend from the I2C core, active-low; in controller mode, low pulls the suspend pad low. |
i2c_smbus_alert_oe_i | input | logic [smc_config_pkg::NumI2c-1:0] | In target mode, high pulls the SMBus alert pad low. |
avs_enable_i | input | logic | Selects the AVSBus function on GPIO pads 49-51, active-high. |
avs_clock_i | input | logic | AVSBus clock from the AVSBus controller, driven onto GPIO 49. |
avs_mdata_i | input | logic | AVSBus controller-to-device data, driven onto GPIO 50. |
avs_sdata_o | output | logic | AVSBus device-to-controller data, sampled from GPIO 51. |
rst_cool_ni | input | logic | Cool reset for other chiplets, active-low; pulls GPIO 62 low while asserted and leaves it undriven otherwise. |
isolate_req_pin_o | output | logic | Isolation request sampled from GPIO 53, not synchronized to clk_i. |
lsio_interface_select_o | output | logic [smc_pkg::NumGpioWraps-1:0] | LSIO select per pad, high where a peripheral function claims the pad; also drives each gpio interface's select. |
core2pad_o | output | logic [smc_pkg::NumGpioWraps-1:0] | Data driven to each pad by its gpio interface; zero during cold reset. |
core2pad_en_o | output | logic [smc_pkg::NumGpioWraps-1:0] | Output enable for each pad, active-high; low during cold reset. |
pad2core_i | input | logic [smc_pkg::NumGpioWraps-1:0] | Value received from each pad, not synchronized to clk_i. |
pad2core_en_o | output | logic [smc_pkg::NumGpioWraps-1:0] | Input enable for each pad, active-high; the pad's default direction during cold reset. |
gpio_interrupt_o | output | logic [smc_pkg::NumGpioWraps-1:0] | Interrupt from each gpio interface, active-high, registered on clk_i. |