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
| Name | Type | Default | Description |
|---|---|---|---|
NUM_I3C | int unsigned | 2 | Number of I3C instances. |
I3C_REG_ADDR_WIDTH | int unsigned | i3ccore_wrap_pkg::I3cRegAddrWidth | Width of the instance-relative address given to each i3c_wrapper. |
BASE_ADDR | int unsigned | 0 | Wrapper decode base address. |
INSTANCE_SPACING | int unsigned | i3ccore_wrap_pkg::I3cInstanceSpacing | Byte size of each instance's address window. |
DAT_AW | int unsigned | i3c_pkg::DatAw | DAT memory address width. |
DCT_AW | int unsigned | i3c_pkg::DctAw | DCT memory address width. |
CSR_ADDR_WIDTH | int unsigned | I3CCSR_pkg::I3CCSR_MIN_ADDR_WIDTH | CSR address width. |
CSR_DATA_WIDTH | int unsigned | I3CCSR_pkg::I3CCSR_DATA_WIDTH | Data width of each I3C core's internal CSR interface. |
SelectWidth | int unsigned | (NUM_I3C > 32'd1) ? $clog2(NUM_I3C) : 32'd1 | Instance-select width. |
Ports
| Name | Direction | Type | Description |
|---|---|---|---|
clk_i | input | logic | System clock. |
rst_ni | input | logic | Async reset, active-low. |
awvalid_i | input | logic | Write-address valid. |
awready_o | output | logic | Write-address ready. |
awaddr_i | input | reg_addr_t | Write address. |
awprot_i | input | logic [2:0] | Write-address protection; forwarded but not used by the instances. |
wvalid_i | input | logic | Write-data valid. |
wready_o | output | logic | Write-data ready. |
wdata_i | input | reg_data_t | Write data. |
wstrb_i | input | reg_strb_t | Write strobe. |
bvalid_o | output | logic | Write-response valid. |
bready_i | input | logic | Write-response ready. |
bresp_o | output | logic [1:0] | Write response. |
arvalid_i | input | logic | Read-address valid. |
arready_o | output | logic | Read-address ready. |
araddr_i | input | reg_addr_t | Read address. |
arprot_i | input | logic [2:0] | Read-address protection; forwarded but not used by the instances. |
rvalid_o | output | logic | Read-data valid. |
rready_i | input | logic | Read-data ready. |
rdata_o | output | reg_data_t | Read data. |
rresp_o | output | logic [1:0] | Read response. |
irq_o | output | logic [NUM_I3C-1:0] | Per-instance interrupt. |
scl_i | input | logic [NUM_I3C-1:0] | Per-instance SCL in. |
sda_i | input | logic [NUM_I3C-1:0] | Per-instance SDA in. |
scl_o | output | logic [NUM_I3C-1:0] | Per-instance SCL pad output, tied low; scl_oe_o controls the line. |
sda_o | output | logic [NUM_I3C-1:0] | Per-instance SDA bus level, driven while sda_oe_o is high. |
scl_oe_o | output | logic [NUM_I3C-1:0] | Per-instance SCL output enable, high while the instance pulls SCL low. |
sda_oe_o | output | logic [NUM_I3C-1:0] | Per-instance SDA output enable, high in push-pull mode or while SDA is low. |
sel_od_pp_o | output | logic [NUM_I3C-1:0] | Per-instance driver mode: 0 open-drain, 1 push-pull. |
recovery_payload_available_o | output | logic [NUM_I3C-1:0] | Per-instance recovery payload ready. |
recovery_image_activated_o | output | logic [NUM_I3C-1:0] | Per-instance flag, high while RECOVERY_CTRL.ACTIVATE_REC_IMG holds 0x0F. |
peripheral_reset_o | output | logic [NUM_I3C-1:0] | Per-instance peripheral reset request, held until peripheral_reset_done_i. |
peripheral_reset_done_i | input | logic [NUM_I3C-1:0] | Per-instance peripheral reset done. |
escalated_reset_o | output | logic [NUM_I3C-1:0] | Per-instance escalated reset request, held until rst_ni. |
dat_mem_src_i | input | i3c_pkg::dat_mem_src_t [NUM_I3C-1:0] | Per-instance DAT read data; requires CONTROLLER_SUPPORT. |
dat_mem_sink_o | output | i3c_pkg::dat_mem_sink_t [NUM_I3C-1:0] | Per-instance DAT request; requires CONTROLLER_SUPPORT. |
dct_mem_src_i | input | i3c_pkg::dct_mem_src_t [NUM_I3C-1:0] | Per-instance DCT read data; requires CONTROLLER_SUPPORT. |
dct_mem_sink_o | output | i3c_pkg::dct_mem_sink_t [NUM_I3C-1:0] | Per-instance DCT request; requires CONTROLLER_SUPPORT. |
rlt_mem_src_i | input | i3c_pkg::rlt_mem_src_t [NUM_I3C-1:0] | Per-instance reverse-lookup table read data; requires CONTROLLER_SUPPORT. |
rlt_mem_sink_o | output | i3c_pkg::rlt_mem_sink_t [NUM_I3C-1:0] | Per-instance reverse-lookup table request; requires CONTROLLER_SUPPORT. |