i3ccore_wrapper

Demux one AXI-Lite slave onto NUM_I3C I3C cores by address.

Routes bus requests to individual I3C instances based on BASE_ADDR and INSTANCE_SPACING; addresses outside every instance window go to instance 0. Each instance receives the address minus its index times INSTANCE_SPACING, truncated to I3C_REG_ADDR_WIDTH bits. The demux registers every channel and allows eight outstanding transactions. Bus, recovery, IRQ, and DAT/DCT/RLT memory export ports are per-instance vectors.

Parameters

Table 1. Parameters
NameTypeDefaultDescription
NUM_I3Cint unsigned2Number of I3C instances.
I3C_REG_ADDR_WIDTHint unsignedi3ccore_wrap_pkg::I3cRegAddrWidthWidth of the instance-relative address given to each i3c_wrapper.
BASE_ADDRint unsigned0Wrapper decode base address.
INSTANCE_SPACINGint unsignedi3ccore_wrap_pkg::I3cInstanceSpacingByte size of each instance's address window.
DAT_AWint unsignedi3c_pkg::DatAwDAT memory address width.
DCT_AWint unsignedi3c_pkg::DctAwDCT memory address width.
CSR_ADDR_WIDTHint unsignedI3CCSR_pkg::I3CCSR_MIN_ADDR_WIDTHCSR address width.
CSR_DATA_WIDTHint unsignedI3CCSR_pkg::I3CCSR_DATA_WIDTHData width of each I3C core's internal CSR interface.
SelectWidthint unsigned(NUM_I3C > 32'd1) ? $clog2(NUM_I3C) : 32'd1Instance-select width.

Ports

Table 2. Ports
NameDirectionTypeDescription
clk_iinputlogicSystem clock.
rst_niinputlogicAsync reset, active-low.
awvalid_iinputlogicWrite-address valid.
awready_ooutputlogicWrite-address ready.
awaddr_iinputreg_addr_tWrite address.
awprot_iinputlogic [2:0]Write-address protection; forwarded but not used by the instances.
wvalid_iinputlogicWrite-data valid.
wready_ooutputlogicWrite-data ready.
wdata_iinputreg_data_tWrite data.
wstrb_iinputreg_strb_tWrite strobe.
bvalid_ooutputlogicWrite-response valid.
bready_iinputlogicWrite-response ready.
bresp_ooutputlogic [1:0]Write response.
arvalid_iinputlogicRead-address valid.
arready_ooutputlogicRead-address ready.
araddr_iinputreg_addr_tRead address.
arprot_iinputlogic [2:0]Read-address protection; forwarded but not used by the instances.
rvalid_ooutputlogicRead-data valid.
rready_iinputlogicRead-data ready.
rdata_ooutputreg_data_tRead data.
rresp_ooutputlogic [1:0]Read response.
irq_ooutputlogic [NUM_I3C-1:0]Per-instance interrupt.
scl_iinputlogic [NUM_I3C-1:0]Per-instance SCL in.
sda_iinputlogic [NUM_I3C-1:0]Per-instance SDA in.
scl_ooutputlogic [NUM_I3C-1:0]Per-instance SCL pad output, tied low; scl_oe_o controls the line.
sda_ooutputlogic [NUM_I3C-1:0]Per-instance SDA bus level, driven while sda_oe_o is high.
scl_oe_ooutputlogic [NUM_I3C-1:0]Per-instance SCL output enable, high while the instance pulls SCL low.
sda_oe_ooutputlogic [NUM_I3C-1:0]Per-instance SDA output enable, high in push-pull mode or while SDA is low.
sel_od_pp_ooutputlogic [NUM_I3C-1:0]Per-instance driver mode: 0 open-drain, 1 push-pull.
recovery_payload_available_ooutputlogic [NUM_I3C-1:0]Per-instance recovery payload ready.
recovery_image_activated_ooutputlogic [NUM_I3C-1:0]Per-instance flag, high while RECOVERY_CTRL.ACTIVATE_REC_IMG holds 0x0F.
peripheral_reset_ooutputlogic [NUM_I3C-1:0]Per-instance peripheral reset request, held until peripheral_reset_done_i.
peripheral_reset_done_iinputlogic [NUM_I3C-1:0]Per-instance peripheral reset done.
escalated_reset_ooutputlogic [NUM_I3C-1:0]Per-instance escalated reset request, held until rst_ni.
dat_mem_src_iinputi3c_pkg::dat_mem_src_t [NUM_I3C-1:0]Per-instance DAT read data; requires CONTROLLER_SUPPORT.
dat_mem_sink_ooutputi3c_pkg::dat_mem_sink_t [NUM_I3C-1:0]Per-instance DAT request; requires CONTROLLER_SUPPORT.
dct_mem_src_iinputi3c_pkg::dct_mem_src_t [NUM_I3C-1:0]Per-instance DCT read data; requires CONTROLLER_SUPPORT.
dct_mem_sink_ooutputi3c_pkg::dct_mem_sink_t [NUM_I3C-1:0]Per-instance DCT request; requires CONTROLLER_SUPPORT.
rlt_mem_src_iinputi3c_pkg::rlt_mem_src_t [NUM_I3C-1:0]Per-instance reverse-lookup table read data; requires CONTROLLER_SUPPORT.
rlt_mem_sink_ooutputi3c_pkg::rlt_mem_sink_t [NUM_I3C-1:0]Per-instance reverse-lookup table request; requires CONTROLLER_SUPPORT.