Hardware Interfaces

Signals

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, cored_tl_h
  • Peripheral Pins for Chip IO: none
  • Interrupts: none

Inter-Module Signals

Port NamePackage::StructTypeActWidthDescription
rst_cpu_nlogicunireq1
ram_cfgprim_ram_1p_pkg::ram_1p_cfgunircv1
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
pwrmgrpwrmgr_pkg::pwr_cpuunireq1
nmi_wdoglogicunircv1
ednedn_pkg::ednreq_rspreq1
icache_otp_keyotp_ctrl_pkg::sram_otp_keyreq_rspreq1
fpga_infologicunircv32
corei_tl_htlul_pkg::tlreq_rspreq1
cored_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
recov_hw_errTriggered when Ibex raises alert_minor_o

Security Countermeasures

Countermeasure IDDescription
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. Note that whilst the core itself is duplicated (see LOGIC.SHADOW) the register file is not. Protection is provided by an ECC.
RV_CORE_IBEX.DATA_REG_SW.GLITCH_DETECTThis countermeasure augments DATA_REG_SW.INTEGRITY and checks for spurious write-enable signals on the register file by monitoring the one-hot0 property of the individual write-enable strobes.
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.

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_). 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_iinputprim_ram_1p_pkg::ram_1p_cfg_tIncoming memory configuration that is technology dependent.
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_o outputtlul_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::pwr_cpu_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.