smc_cpu_wrapper

Wrap the four-core SMC CPU cluster with its cpu_ctrl register block and boot ROM bridge.

Splits the fabric AXI front port by address between the cluster L2 frontend and cpu_ctrl, which it reaches through an AXI-to-AXI-Lite converter; the cluster MMIO master goes back out. Surfaces per-core PC, WDT, and cluster error status back to smc_base. Converts the cluster boot ROM TileLink port to the ROM memory interface, and exposes the scratch RAM and L1 cache bank interfaces; the memories themselves are outside this module.

Parameters

Table 1. Parameters
NameTypeDefaultDescription
NO_ADDR_REMAPbit1'b1Reported by cpu_ctrl in SMC_ATTRIBUTES.no_output_remap; no other effect in this module.
NumCpuCoresint unsignedsmc_4core_cpu_pkg::NumCpuCoresNumber of cores in the cluster, from smc_4core_cpu_pkg; sizes the per-core PC and watchdog ports.
NumCpuInterruptsint unsignedsmc_4core_cpu_pkg::NumCpuInterruptsNumber of interrupt lines into the cluster, from smc_4core_cpu_pkg.
NumSramBanksint unsignedchipyard_4core_mem_pkg::NumSramBanksNumber of scratch RAM banks; sizes the scratch RAM port arrays.
NumIcacheTagBanksint unsignedchipyard_4core_mem_pkg::NumIcacheTagBanksNumber of instruction-cache tag banks; sizes the instruction-cache tag port arrays.
NumIcacheDataBanksint unsignedchipyard_4core_mem_pkg::NumIcacheDataBanksNumber of instruction-cache data banks; sizes the instruction-cache data port arrays.
NumDcacheTagBanksint unsignedchipyard_4core_mem_pkg::NumDcacheTagBanksNumber of data-cache tag banks; sizes the data-cache tag port arrays.
NumDcacheDataBanksint unsignedchipyard_4core_mem_pkg::NumDcacheDataBanksNumber of data-cache data banks; sizes the data-cache data port arrays.

Ports

Table 2. Ports
NameDirectionTypeDescription
clk_iinputlogicSMC core clock for the cluster, the front-port demux, cpu_ctrl and the boot ROM interface.
clk_ref_iinputlogicReference clock for the cpu_ctrl reference counter.
rst_isolate_niinputlogicActive-low reset for the cluster-boundary AXI isolate modules.
rst_primary_smc_clk_niinputlogicActive-low primary reset in the SMC clock domain for the front-port demux, AXI-Lite converter and cpu_ctrl.
rst_warm_smc_clk_niinputlogicActive-low warm reset in the SMC clock domain; holds the cluster core and uncore resets asserted and selects the default core reset vector.
fuse_reset_niinputlogicActive-low reset for the scratch RAM zero-fill sequencer; its release starts the zero-fill.
scan_rst_niinputlogicActive-low scan reset, passed to cpu_ctrl, which does not use it.
chiplet_is_primary_iinputlogicHigh on the primary chiplet; reported by cpu_ctrl in SMC_ATTRIBUTES.
axi_front_port_req_iinputsmc_pkg::smc_local_32_64_8_12_axi_req_tFront-port AXI request from the local fabric; addresses in the SMC_CPU_CTRL window go to cpu_ctrl, all others to the cluster L2 frontend.
axi_front_port_resp_ooutputsmc_pkg::smc_local_32_64_8_12_axi_resp_tFront-port AXI response to the local fabric.
axi_mmio_port_req_ooutputsmc_pkg::smc_cpu_mmio_axi_req_tCluster MMIO AXI master request to the smc_fabric input fabric.
axi_mmio_port_resp_iinputsmc_pkg::smc_cpu_mmio_axi_resp_tCluster MMIO AXI master response from the smc_fabric input fabric.
interrupts_iinputlogic [NumCpuInterrupts-1:0]Interrupt vector from smc_base, passed unchanged to the cluster.
wb_reg_pc_ooutputlogic [NumCpuCores-1:0][57:0]Per-core writeback program counter from the cluster, zero while the cluster boundary is isolated.
wdt_timeout_cluster_ooutputlogic [NumCpuCores-1:0]Per-core first-stage watchdog timeout from the cluster, low while the cluster boundary is isolated.
wdt_second_timeout_ooutputlogicSecond-stage watchdog timeout from cpu_ctrl, registered on clk_i.
cluster_ded_ooutputlogicRegistered OR of the cluster's uncorrectable-error flags, cleared while the cluster uncore reset is asserted.
rom_intf_req_ooutputrom_req_tBoot ROM read request from the TileLink-to-ROM bridge, clocked by clk_i, with the write fields tied to zero.
rom_intf_rsp_iinputrom_rsp_tBoot ROM read data for the TileLink-to-ROM bridge.
scratch_ram_intf_req_ooutputscratch_ram_req_tScratch RAM bank requests, driven by the zero-fill sequencer until the zero-fill completes.
scratch_ram_intf_rsp_iinputscratch_ram_rsp_tScratch RAM bank read data.
l1_icache_tag_intf_req_ooutputl1_icache_tag_req_tInstruction-cache tag bank requests.
l1_icache_tag_intf_rsp_iinputl1_icache_tag_rsp_tInstruction-cache tag bank read data.
l1_icache_data_intf_req_ooutputl1_icache_data_req_tInstruction-cache data bank requests.
l1_icache_data_intf_rsp_iinputl1_icache_data_rsp_tInstruction-cache data bank read data.
l1_dcache_tag_intf_req_ooutputl1_dcache_tag_req_tData-cache tag bank requests.
l1_dcache_tag_intf_rsp_iinputl1_dcache_tag_rsp_tData-cache tag bank read data.
l1_dcache_data_intf_req_ooutputl1_dcache_data_req_tData-cache data bank requests.
l1_dcache_data_intf_rsp_iinputl1_dcache_data_rsp_tData-cache data bank read data.
disable_sram_auto_init_iinputlogicHigh skips the scratch RAM zero-fill after fuse_reset_ni releases.
init_mem_done_ooutputlogicHigh once the scratch RAM zero-fill has completed or been skipped.
rom_flip_endianness_iinputlogicHigh byte-reverses each ROM word returned to the cluster.
test_en_iinputlogicScan test mode enable for the front-port demux, AXI-Lite converter and cluster debug clock gate.
smc_cpu_jtag_TCK_iinputlogicJTAG test clock for the cluster debug transport module.
smc_cpu_jtag_TMS_iinputlogicJTAG test mode select for the cluster debug transport module.
smc_cpu_jtag_TDI_iinputlogicJTAG test data into the cluster debug transport module.
smc_cpu_jtag_TDO_data_ooutputlogicJTAG test data out of the cluster debug transport module.
smc_cpu_jtag_reset_iinputlogicActive-high asynchronous reset of the cluster JTAG debug transport module (TAP) and of the debug module's DMI interface.
smc_cpu_jtag_mfr_id_iinputlogic [10:0]Manufacturer ID reported in the cluster JTAG IDCODE.
smc_cpu_jtag_part_number_iinputlogic [15:0]Part number reported in the cluster JTAG IDCODE.
smc_cpu_jtag_version_iinputlogic [3:0]Version reported in the cluster JTAG IDCODE.