smc_fabric
Compose the SMC interconnect fabric from its input, local and output stages.
The input fabric alias-remaps the JTAG, CPU MMIO, log and data accelerator initiators and filters system inbound AXI; SMC-window traffic, including SEP, goes to the local fabric toward the CPU front port and SMC CSRs, and other traffic goes to the output fabric, which applies the M-mode and Xvisor output remap and the outbound filter before the system AXI output. Window decode uses the base-config global base, local base and region size.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
NO_ADDR_REMAP | bit | 1'b1 | Removes the output fabric's M-mode and Xvisor output remap when the integration map is fixed, replacing it with an ID-width converter, which reduces area. The input fabric's alias remap remains. |
SYS_IN_ID_WIDTH | int unsigned | 9 | Unused; the input fabric takes the system input ID width from smc_pkg::SysInIdWidth. |
NUM_INBOUND_FILTERS | int unsigned | 16 | Number of filter entries on the system AXI input; sizes the inbound filter CSR arrays and the input fabric hit-index outputs. |
NUM_OUTBOUND_FILTERS | int unsigned | 16 | Number of filter entries on the system AXI output; sizes the outbound filter CSR arrays and the output fabric hit-index outputs. |
MAX_TRANS | int unsigned | smc_pkg::FabricMaxTrans | Outstanding transactions per ID bucket tracked by the output fabric remap demux and mux; unused when NO_ADDR_REMAP is set. |
FILTER_REQ_PIPELINE_ENABLE | bit | 1'b0 | Adds spill registers on the request channels at the inbound and outbound filter boundaries, trading a cycle of latency for easier timing closure. |
FILTER_RSP_PIPELINE_ENABLE | bit | 1'b0 | Adds spill registers on the response channels at the inbound and outbound filter boundaries, trading a cycle of latency for easier timing closure. |
Ports
| Name | Direction | Type | Description |
|---|---|---|---|
clk_i | input | logic | SMC core clock. |
rst_ni | input | logic | Primary reset, active-low, synchronized to the SMC core clock. |
test_en_i | input | logic | Scan test mode enable, active-high; forwarded to the fabric stages and forces their clock gates on. |
scan_rst_ni | input | logic | Scan reset, active-low; forwarded to the input fabric, which does not use it. |
global_base_addr_i | input | smc_pkg::smc_axi_addr_t | Global base address of the SMC address window, from the base-config registers; the input and output fabrics decode SMC accesses against it. |
local_base_addr_i | input | smc_pkg::smc_axi_addr_t | Local base address of the SMC address window, from the base-config registers; the input and output fabrics also decode SMC accesses against it, and the local fabric rebases every request onto it. |
region_size_i | input | logic [31:0] | Size in bytes of the SMC address window at either base, a power of two by software contract. |
ob_filter_axi_cg_en_i | input | logic | Enables clock gating of the system outbound filter, active-high; low keeps its clock running. |
ib_filter_axi_cg_en_i | input | logic | Enables clock gating of the system inbound filter, active-high; low keeps its clock running. |
fabric_cg_en_i | input | logic | Enables clock gating of the output fabric remap demux and mux, active-high; low keeps their clock running. Unused when NO_ADDR_REMAP is set. |
cg_hysteresis_i | input | smc_pkg::cg_hyster_t | Idle SMC core clock cycles the fabric and filter clock gates wait after their bus goes quiet before stopping the gated clock. |
axi_in_jtag_req_i | input | smc_pkg::smc_jtag_56_64_2_12_axi_req_t | JTAG AXI request into the input fabric, which widens its ID and alias-remaps it. |
axi_in_jtag_resp_o | output | smc_pkg::smc_jtag_56_64_2_12_axi_resp_t | JTAG AXI response from the input fabric. |
axi_in_mmio_req_i | input | smc_pkg::smc_cpu_mmio_axi_req_t | CPU MMIO AXI request into the input fabric, which widens its ID and alias-remaps it. |
axi_in_mmio_resp_o | output | smc_pkg::smc_cpu_mmio_axi_resp_t | CPU MMIO AXI response from the input fabric. |
axi_in_data_accel_req_i | input | smc_pkg::smc_input_fabric_56_64_4_12_axi_req_t | Data accelerator AXI request into the input fabric, which alias-remaps it. |
axi_in_data_accel_resp_o | output | smc_pkg::smc_input_fabric_56_64_4_12_axi_resp_t | Data accelerator AXI response from the input fabric. |
axi_lite_log_req_i | input | smc_pkg::smc_axil_56_64_req_t | Log engine AXI-Lite request into the input fabric, which converts it to AXI and alias-remaps it. |
axi_lite_log_resp_o | output | smc_pkg::smc_axil_56_64_resp_t | Log engine AXI-Lite response from the input fabric. |
sys_axi_in_req_i | input | smc_pkg::smc_sys_in_56_64_6_12_axi_req_t | System AXI input request; passes the inbound filter, and outside the SMC window receives DECERR. |
sys_axi_in_resp_o | output | smc_pkg::smc_sys_in_56_64_6_12_axi_resp_t | System AXI input response. |
sep_axi_in_req_i | input | smc_pkg::smc_sep_in_56_64_6_12_axi_req_t | SEP AXI input request; unfiltered, and outside the SMC window receives DECERR. |
sep_axi_in_resp_o | output | smc_pkg::smc_sep_in_56_64_6_12_axi_resp_t | SEP AXI input response. |
axi_front_port_req_o | output | smc_pkg::smc_local_32_64_8_12_axi_req_t | AXI request from the local fabric to the CPU cluster's front port. |
axi_front_port_rsp_i | input | smc_pkg::smc_local_32_64_8_12_axi_resp_t | AXI response from the CPU cluster's front port. |
apb_smc_dfd_reg_req_o | output | smc_pkg::smc_dfd_apb_req_t | APB request from the local fabric for the SMC CLA (DFD) register window. |
apb_smc_dfd_reg_resp_i | input | smc_pkg::smc_dfd_apb_resp_t | APB response from the SMC CLA (DFD) registers. |
axi_data_accel_ctrl_req_o | output | smc_pkg::smc_local_32_64_8_12_axi_req_t | AXI request from the local fabric to the data accelerator's control port. |
axi_data_accel_ctrl_rsp_i | input | smc_pkg::smc_local_32_64_8_12_axi_resp_t | AXI response from the data accelerator's control port. |
axil_peripherals_req_o | output | smc_pkg::smc_axil_32_32_req_t | 32-bit AXI-Lite request from the local fabric to the peripheral CSR crossbar. |
axil_peripherals_resp_i | input | smc_pkg::smc_axil_32_32_resp_t | 32-bit AXI-Lite response from the peripheral CSR crossbar. |
axil_aR_ctrl_req_o | output | smc_pkg::smc_axil_32_64_req_t | AXI-Lite request for the alias remap control registers. |
axil_aR_ctrl_resp_i | input | smc_pkg::smc_axil_32_64_resp_t | AXI-Lite response from the alias remap control registers. |
axil_mR_ctrl_req_o | output | smc_pkg::smc_axil_32_64_req_t | AXI-Lite request for the M-mode output remap control registers. |
axil_mR_ctrl_resp_i | input | smc_pkg::smc_axil_32_64_resp_t | AXI-Lite response from the M-mode output remap control registers. |
axil_xR_ctrl_req_o | output | smc_pkg::smc_axil_32_64_req_t | AXI-Lite request for the Xvisor output remap control registers. |
axil_xR_ctrl_resp_i | input | smc_pkg::smc_axil_32_64_resp_t | AXI-Lite response from the Xvisor output remap control registers. |
axil_inbound_filter_ctrl_req_o | output | smc_pkg::smc_axil_32_64_req_t | AXI-Lite request for the inbound filter control registers. |
axil_inbound_filter_ctrl_resp_i | input | smc_pkg::smc_axil_32_64_resp_t | AXI-Lite response from the inbound filter control registers. |
axil_outbound_filter_ctrl_req_o | output | smc_pkg::smc_axil_32_64_req_t | AXI-Lite request for the outbound filter control registers. |
axil_outbound_filter_ctrl_resp_i | input | smc_pkg::smc_axil_32_64_resp_t | AXI-Lite response from the outbound filter control registers. |
axil_mailbox_req_o | output | smc_pkg::smc_axil_32_64_req_t | AXI-Lite request for the SMC mailbox window. |
axil_mailbox_resp_i | input | smc_pkg::smc_axil_32_64_resp_t | AXI-Lite response from the SMC mailbox. |
axil_smc_base_config_req_o | output | smc_pkg::smc_axil_32_64_req_t | AXI-Lite request for the SMC base configuration registers. |
axil_smc_base_config_resp_i | input | smc_pkg::smc_axil_32_64_resp_t | AXI-Lite response from the SMC base configuration registers. |
axil_dfx_csr_req_o | output | smc_pkg::smc_axil_32_64_req_t | AXI-Lite request for the DFX control register window. |
axil_dfx_csr_resp_i | input | smc_pkg::smc_axil_32_64_resp_t | AXI-Lite response from the DFX control registers. |
axi_filtered_remapped_req_o | output | smc_pkg::smc_sys_out_56_64_8_12_axi_req_t | System AXI output request from the output fabric, after output remap and the outbound filter. |
axi_filtered_remapped_resp_i | input | smc_pkg::smc_sys_out_56_64_8_12_axi_resp_t | System AXI output response. |
outbound_filter_ctrl_i | input | filter_ctrl_reg_pkg::filter_ctrl__out_t | Per-entry configuration of the system outbound filter. |
outbound_filter_status_o | output | filter_ctrl_reg_pkg::filter_ctrl__in_t | Per-entry status of the system outbound filter. |
inbound_filter_ctrl_i | input | filter_ctrl_reg_pkg::filter_ctrl__out_t | Per-entry configuration of the system inbound filter. |
inbound_filter_status_o | output | filter_ctrl_reg_pkg::filter_ctrl__in_t | Per-entry status of the system inbound filter. |
mR_ctrl_i | input | output_remap_reg_pkg::output_remap__out_t | M-mode output remap region configuration. |
xR_ctrl_i | input | output_remap_reg_pkg::output_remap__out_t | Xvisor output remap region configuration. |
aR_ctrl_i | input | alias_remap_reg_pkg::alias_remap__out_t | Alias remap region configuration. |
remap_debug_mmio_o | output | smc_pkg::remap_debug_t | Alias region index hit by the MMIO path. |
remap_debug_jtag_o | output | smc_pkg::remap_debug_t | Alias region index hit by the JTAG path. |
remap_debug_log_o | output | smc_pkg::remap_debug_t | Alias region index hit by the log path. |
remap_debug_dma_o | output | smc_pkg::remap_debug_t | Alias region index hit by the data accelerator path. |
inbound_write_filter_hit_debug_o | output | logic [$clog2(NUM_INBOUND_FILTERS)-1:0] | Lowest system inbound filter entry hit by a write. |
inbound_read_filter_hit_debug_o | output | logic [$clog2(NUM_INBOUND_FILTERS)-1:0] | Lowest system inbound filter entry hit by a read. |
outbound_write_filter_hit_debug_o | output | logic [$clog2(NUM_OUTBOUND_FILTERS)-1:0] | Lowest system outbound filter entry hit by a write. |
outbound_read_filter_hit_debug_o | output | logic [$clog2(NUM_OUTBOUND_FILTERS)-1:0] | Lowest system outbound filter entry hit by a read. |
fabric_clk_active_o | output | logic | High while the output fabric remap clock runs; low when NO_ADDR_REMAP is set. |
fabric_bus_active_o | output | logic | High while the output fabric input has a request valid or a transaction outstanding; low when NO_ADDR_REMAP is set. |
sys_out_filter_clk_active_o | output | logic | High while the system outbound filter clock runs. |
sys_out_filter_bus_active_o | output | logic | High while the system outbound filter input has a request valid or a transaction outstanding. |
sys_in_filter_clk_active_o | output | logic | High while the system inbound filter clock runs. |
sys_in_filter_bus_active_o | output | logic | High while the system AXI input has a request valid or a transaction outstanding. |