smc_output_fabric
Route the SMC's outbound AXI through the output remap and filter to the system AXI port.
With NO_ADDR_REMAP clear, requests inside the M-mode or Xvisor remap window at either SMC base go through the matching output_remap, which rewrites the address and replaces AxUSER with the M-mode or the other source ID; all other requests have AxUSER replaced with the SMC source ID; a mux merges the three paths and widens the ID. With NO_ADDR_REMAP set, only the ID widening remains. A clock-gated outbound access filter, which allows traffic that hits no rule, then guards the port, which it reaches through an axi_cut.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
NO_ADDR_REMAP | bit | 1'b1 | Removes the M-mode and Xvisor output remap when the integration map is fixed, leaving an ID-width converter in its place. |
NUM_FILTERS | int unsigned | 16 | Number of system outbound filter entries; sizes the filter CSR arrays and the hit-index outputs. |
MAX_TRANS | int unsigned | smc_pkg::FabricMaxTrans | Outstanding transactions per ID bucket in the remap demux and mux, which also sizes their clock-gate snoop; unused when NO_ADDR_REMAP is set. |
FILTER_REQ_PIPELINE_ENABLE | bit | 1'b0 | Adds spill registers on the request channels at the system outbound filter boundary. |
FILTER_RSP_PIPELINE_ENABLE | bit | 1'b0 | Adds spill registers on the response channels at the system outbound filter boundary. |
MMODE_BASE_ADDR | int unsigned | smc_top_addrmap_pkg::SMC_TOP_MMODE_REGION_BASE_ADDR | Base of the M-mode remap region, subtracted from request addresses before the M-mode remap region lookup; unused when NO_ADDR_REMAP is set. |
XVISOR_BASE_ADDR | int unsigned | smc_top_addrmap_pkg::SMC_TOP_XVISOR_REGION_BASE_ADDR | Base of the Xvisor remap region, subtracted from request addresses before the Xvisor remap region lookup; unused when NO_ADDR_REMAP is set. |
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 AXI primitives and forces the fabric and filter clock gates on. |
global_base_addr_i | input | smc_pkg::smc_axi_addr_t | Global base address of the SMC address window; requests inside the M-mode or Xvisor remap window at this base go to that remap. Unused when NO_ADDR_REMAP is set. |
local_base_addr_i | input | smc_pkg::smc_axi_addr_t | Local base address of the SMC address window; requests inside the M-mode or Xvisor remap window at this base go to that remap. Unused when NO_ADDR_REMAP is set. |
filter_axi_cg_en_i | input | logic | Enables clock gating of the system outbound filter, active-high; low keeps the filter clock running. |
fabric_cg_en_i | input | logic | Enables clock gating of the 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 remap fabric and outbound filter clock gates wait after their bus goes quiet before stopping the gated clock. |
axi_req_i | input | smc_pkg::smc_56_64_6_12_axi_req_t | Outbound request from the input fabric's global output port. |
axi_resp_o | output | smc_pkg::smc_56_64_6_12_axi_resp_t | Response to the input fabric's global output port. |
axi_filtered_remapped_req_o | output | smc_pkg::smc_sys_out_56_64_8_12_axi_req_t | Request to the system AXI output after remap and the outbound filter. |
axi_filtered_remapped_resp_i | input | smc_pkg::smc_sys_out_56_64_8_12_axi_resp_t | Response from the system AXI output. |
filter_ctrl_i | input | filter_ctrl_reg_pkg::filter_ctrl__out_t | Per-entry system outbound filter configuration from the register block; the filter matches source ID and the non-secure flag. |
filter_status_o | output | filter_ctrl_reg_pkg::filter_ctrl__in_t | Per-entry system outbound filter status returned to the register block. |
mR_ctrl_i | input | output_remap_reg_pkg::output_remap__out_t | M-mode output remap region configuration; unused when NO_ADDR_REMAP is set. |
xR_ctrl_i | input | output_remap_reg_pkg::output_remap__out_t | Xvisor output remap region configuration; unused when NO_ADDR_REMAP is set. |
write_filter_hit_debug_o | output | logic [$clog2(NUM_FILTERS)-1:0] | Lowest system outbound filter entry hit by a write. |
read_filter_hit_debug_o | output | logic [$clog2(NUM_FILTERS)-1:0] | Lowest system outbound filter entry hit by a read. |
fabric_clk_active_o | output | logic | High while the remap demux and mux clock runs; tied low when NO_ADDR_REMAP is set. |
fabric_bus_active_o | output | logic | High while axi_req_i has a request valid or a transaction outstanding; tied 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 filter input has a request valid or a transaction outstanding. |