Hardware Interfaces

Referring to the Comportable guideline for peripheral device functionality, the module rv_core_ibex has the following hardware interfaces defined

  • Primary Clock: clk_i
  • Other Clocks: clk_edn_i, clk_esc_i, clk_otp_i
  • Bus Device Interfaces (TL-UL): cfg_tl_d
  • Bus Host Interfaces (TL-UL): corei_tl_h
  • Peripheral Pins for Chip IO: none
  • Interrupts: none

Inter-Module Signals

Port NamePackage::StructTypeActWidthDescription
rst_cpu_nlogicunireq1
cheriot_enaprim_mubi_pkg::mubi4unireq1CHERIoT mode enable.
cored_tl_htlul_pkg::tlreq_rspreq1Core data host port to the CHERIoT subsystem.
cored_tag_h2dlogicunireq1CHERIoT capability tag carried with the A-channel of cored_tl_h.
cored_tag_d2hlogicunircv1Capability tag returned on the D-channel of cored_tl_h.
corerevbm_tltlul_pkg::tlreq_rspreq1Core revocation bitmap host port.
ram_cfg_icache_tagprim_ram_1p_pkg::ram_1p_cfgreq_rsprspICacheNWays
ram_cfg_icache_dataprim_ram_1p_pkg::ram_1p_cfgreq_rsprspICacheNWays
hart_idlogicunircv32
boot_addrlogicunircv32
irq_softwarelogicunircv1
irq_timerlogicunircv1
irq_externallogicunircv1
esc_txprim_esc_pkg::esc_txunircv1
esc_rxprim_esc_pkg::esc_rxunireq1
debug_reqlogicunircv1
crash_dumprv_core_ibex_pkg::cpu_crash_dumpunireq1
lc_cpu_enlc_ctrl_pkg::lc_txunircv1
pwrmgr_cpu_enlc_ctrl_pkg::lc_txunircv1
pwrmgrrv_core_ibex_pkg::cpu_pwrmgrunireq1
nmi_wdoglogicunircv1
ednedn_pkg::ednreq_rspreq1
icache_otp_keyotp_ctrl_pkg::sram_otp_keyreq_rspreq1
fpga_infologicunircv32
corei_tl_htlul_pkg::tlreq_rspreq1
cfg_tl_dtlul_pkg::tlreq_rsprsp1

Security Alerts

Alert NameDescription
fatal_sw_errSoftware triggered alert for fatal faults
recov_sw_errSoftware triggered Alert for recoverable faults
fatal_hw_errTriggered when - Ibex raises alert_major_internal_o - Ibex raises alert_major_bus_o - A double fault is seen (Ibex raises double_fault_seen_o) - A bus integrity error is seen - The ePMP/CHERIoT execution mode switch enters its error state
recov_hw_errTriggered when Ibex raises alert_minor_o

Security Countermeasures

Countermeasure IDDescription
RV_CORE_IBEX.CHERIOT_SWITCH.FSM.SPARSEThe write-once ePMP/CHERIoT execution mode switch FSM is sparsely encoded.
RV_CORE_IBEX.BUS.INTEGRITYEnd-to-end bus integrity scheme.
RV_CORE_IBEX.SCRAMBLE.KEY.SIDELOADThe scrambling key for the icache is sideloaded from OTP and thus unreadable by SW.
RV_CORE_IBEX.CORE.DATA_REG_SW.SCAData independent timing.
RV_CORE_IBEX.PC.CTRL_FLOW.CONSISTENCYCorrect PC increment check.
RV_CORE_IBEX.CTRL_FLOW.UNPREDICTABLERandomized dummy instruction insertion.
RV_CORE_IBEX.DATA_REG_SW.INTEGRITYRegister file integrity checking via ECC. The register file is split across two instances: the main core’s register file stores data bits only, while the shadow core’s register file (see LOGIC.SHADOW) stores the corresponding ECC bits only. ECC checking is performed inside the shadow core.
RV_CORE_IBEX.DATA_REG_SW.GLITCH_DETECTThe split register file architecture provides implicit glitch detection. A physical fault that modifies data in the main register file through a glitch will be caught in the shadow core’s ECC check.
RV_CORE_IBEX.LOGIC.SHADOWShadow core run in lockstep to crosscheck CPU behaviour. This provides broad protection for all assets with the Ibex core.
RV_CORE_IBEX.FETCH.CTRL.LC_GATEDFetch enable so core execution can be halted.
RV_CORE_IBEX.EXCEPTION.CTRL_FLOW.LOCAL_ESCA mechanism to detect and act on double faults. Local escalation shuts down the core when a double fault is seen.
RV_CORE_IBEX.EXCEPTION.CTRL_FLOW.GLOBAL_ESCA mechanism to detect and act on double faults. Global escalation sends a fatal alert when a double fault is seen.
RV_CORE_IBEX.ICACHE.MEM.SCRAMBLEICache memory scrambling.
RV_CORE_IBEX.ICACHE.MEM.INTEGRITYICache memory integrity checking.
RV_CORE_IBEX.ICACHE.MEM.ADDR_INFECTIONICache data and tag words are XORed with a tweak derived from their cache-line address. A fault causing data to land in the wrong cache index produces a tweak mismatch on read-back.
RV_CORE_IBEX.CORED_TLUL.BUS.LC_GATEDOutstanding data-bus TL-UL requests are gated when the CPU is disabled via the life-cycle controller.
RV_CORE_IBEX.TLUL_ADAPTER.LOGIC.SHADOWAddress translation and TL-UL adapters (data and instruction interface) run in lockstep with shadow logic protecting both interfaces against faults.
RV_CORE_IBEX.MCOUNTEREN_WRITABLE.CTRL.MUBIUse MuBI signals for critical control signals such as mcounteren_writable.
RV_CORE_IBEX.CHERIOT_ENABLE.CTRL.MUBIThe cheriot_enable input is MuBi and checked for a valid MuBi encoding in Ibex.

Signals

All ports and parameters of Ibex are exposed through this wrapper module, except for the instruction and data memory interfaces (signals starting with instr_ and data_). The TRVK ports (signals starting with trvk_) are not yet exposed. BaseIsa is not exposed: it is fixed to the CHERIoT-capable base ISA, and the mode is selected at runtime by the execution mode switch. Refer to the Ibex documentation for a detailed description of these signals and parameters.

The instruction and data memory ports are exposed as TL-UL ports. The table below lists other signals and the TL-UL ports.

SignalDirectionTypeDescription
rst_cpu_n_ooutputlogicOutgoing indication to reset manager that the process has reset.
ram_cfg_icache_tag_iinputprim_ram_1p_pkg::ram_1p_cfg_req_t [ICacheNWays-1:0]Incoming icache tag RAM configuration that is technology dependent.
ram_cfg_icache_tag_ooutputprim_ram_1p_pkg::ram_1p_cfg_rsp_t [ICacheNWays-1:0]Outgoing icache tag RAM configuration response.
ram_cfg_icache_data_iinputprim_ram_1p_pkg::ram_1p_cfg_req_t [ICacheNWays-1:0]Incoming icache data RAM configuration that is technology dependent.
ram_cfg_icache_data_ooutputprim_ram_1p_pkg::ram_1p_cfg_rsp_t [ICacheNWays-1:0]Outgoing icache data RAM configuration response.
hart_id_iinputlogic [31:0]Static Hard ID input signal.
boot_addr_iinputlogic [31:0]Static boot address input signal.
fpga_info_iinputlogic [31:0]Fpga info input signal, coming from a Xilinx USR_ACCESSE2 primitive for example.
irq_software_iinputlogicSoftware interrupt input.
irq_timer_iinputlogicTimer interrupt input.
irq_external_iinputlogicExternal interrupt input.
debug_req_iinputlogicDebug request from the debug module.
corei_tl_h_ooutputtlul_pkg::tl_h2d_tOutgoing instruction tlul request.
corei_tl_h_iinputtlul_pkg::tl_d2h_tIncoming instruction tlul response.
cored_tl_h_ooutputtlul_pkg::tl_h2d_tOutgoing data tlul request.
cored_tl_h_iinputtlul_pkg::tl_d2h_tIncoming data tlul response.
cfg_tl_d_ioutputtlul_pkg::tl_h2d_tOutgoing data tlul request for peripheral registers.
cfg_tl_d_oinputtlul_pkg::tl_d2h_tIncoming data tlul response for peripheral registers.
alert_rx_iinputprim_alert_pkg::alert_rx_tIncoming alert response / ping.
alert_tx_ooutputprim_alert_pkg::alert_tx_tOutgoing alert request.
esc_tx_iinputprim_esc_pkg::esc_tx_tIncoming escalation request / ping.
esc_rx_ooutputprim_esc_pkg::esc_rx_tOutgoing escalation response.
nmi_wdog_iinputlogicIncoming watchdog NMI bark.
crash_dump_ooutputibex_pkg::crash_dump_tOutgoing crash dump information to rstmgr.
cfg_tl_d_iinputtlul_pkg::tl_h2d_tIncoming configuration bus request.
cfg_tl_d_ooutputtlul_pkg::tl_d2h_tOutgoing configuration bus response.
lc_cpu_en_iinputlc_ctrl_pkg::lc_tx_tCPU enable signal from life cycle controller.
pwrmgr_cpu_en_iinputlc_ctrl_pkg::lc_tx_tCPU enable signal from power manager.
pwrmgr_ooutputpwrmgr_pkg::cpu_pwrmgr_tLow-power CPU status to power manager.
edn_iinputedn_pkg::edn_rsp_tIncoming entropy response from entropy distribution network.
edn_ooutputedn_pkg::edn_req_tOutgoing entropy request to entropy distribution network.
icache_otp_key_iinputotp_ctrl_pkg::sram_otp_key_rsp_tIncoming scrambling key response from OTP to icache.
icache_otp_key_ooutputotp_ctrl_pkg::sram_otp_key_req_tOutgoing scrambling key request from icache to OTP.

The PipeLine parameter can be used to configure the bus adapter pipelining.

  • Setting PipeLine to 0 disables pipelining, which gives minimal latency between the bus and the core, at the cost of a combinatorial path into the core.
  • Setting PipeLine to 1 introduces a pipelining FIFO between the core instruction/data interfaces and the bus. This setting increases the memory access latency, but improves timing.