Skip to content
STIMSMITH

Ibex Core

Tool WIKI v1 · 5/27/2026

Ibex Core is an open-source 32-bit RISC-V CPU core written in SystemVerilog and maintained by lowRISC. It is highly parameterizable for embedded-control use cases and is verified with a UVM-based testbench using co-simulation against Spike, memory and interrupt agents, a memory model, and RVFI-based checking.

Overview

Ibex Core is an open-source 32-bit RISC-V CPU core written in SystemVerilog and maintained by lowRISC. The provided thesis evidence describes it as production-quality, heavily parameterizable, suited for embedded control applications, and having undergone extensive verification and multiple tape-outs. The public lowRISC GitHub repository describes Ibex as a small 32-bit RISC-V CPU core, previously known as zero-riscy.

Ibex supports the RISC-V Integer (I) or Embedded (E) base, Integer Multiplication and Division (M), Compressed (C), and Bit Manipulation (B) extensions. The evidence also identifies Ibex as being used in OpenTitan, an open-source silicon Root of Trust project.

Verification approach

Ibex is verified with a UVM-based testbench that uses co-simulation to cross-check execution against a golden instruction-set simulator reference model, Spike. The testbench runs binaries built from source generated by the RISC-DV random instruction generator, stimulates the core to execute programs stored in memory, and compares the core trace log against the Spike trace log.

The verification environment collects coverage information for executed instructions and operands. It uses a test plan and coverage plan to cover relevant instructions and operations. Additional randomized stimulus includes memory timings, memory errors, interrupts, and debug requests.

Testbench components

The Ibex UVM testbench includes several named components:

  • Memory interface agents: two instances are used, one for instruction fetch and one for the LSU interface. These agents run slave sequences that wait for memory requests from the core and grant requests for instructions or data.
  • Interrupt agent: drives randomized stimulus onto the Ibex core interrupt pins during test execution.
  • Memory model: a single memory model is loaded with the compiled assembly test program at the beginning of each test. It acts as a unified instruction/data memory serving requests from both memory interface agents.
  • Test and sequence library: tests are extended from core-ibex-base-test and coordinate a full test flow, including loading the compiled binary into the memory model, checking core status, and handling timeouts. Sequences drive interrupt and debug stimulus into the core.

Co-simulation and RVFI

The co-simulation system can run in the Ibex UVM DV environment or with Simple System. It runs a RISC-V ISS in lockstep with an Ibex core; the evidence states that Spike is currently the supported ISS. Instructions executed by Ibex and generated memory transactions are checked against the ISS behavior.

The co-simulation system supports memory errors, interrupt requests, and debug requests by observing them in RTL simulation and forwarding them to the ISS to keep the ISS and RTL synchronized. The system uses a generic interface intended to allow multiple ISSes, although the cited evidence states that only Spike is currently supported. It also states that only VCS is supported as a simulator, while noting that no VCS-specific functionality is required, so adding another simulator should be straightforward. The RISC-V Formal Interface (RVFI) is used to provide information about retired instructions and instructions that produce synchronous traps for checking.

Verification scope and maturity

The Ibex parameter space is large enough that fully verifying every possible parameter set is impractical. Verification regressions and closure therefore target a set of supported configurations. The cited evidence states that verification closure is focused on the OpenTitan configuration, which is the only configuration with nightly regression runs in that context. Verification maturity is tracked with OpenTitan-defined Verification Stages. The evidence reports that 90% code and functional coverage had been achieved, with over a 90% regression pass rate, and that the test plan and coverage plan were fully implemented but not yet closed.

CITATIONS

15 sources
15 citations
[1] Ibex is an open-source 32-bit RISC-V CPU core written in SystemVerilog and maintained by lowRISC. [PDF] UVM based design verification of a RISC-V CPU core - POLITesi
[2] The public lowRISC GitHub repository describes Ibex as a small 32-bit RISC-V CPU core, previously known as zero-riscy. lowRISC/ibex
[3] Ibex is heavily parameterizable, suited for embedded control applications, has undergone extensive verification, and has seen multiple tape-outs. [PDF] UVM based design verification of a RISC-V CPU core - POLITesi
[4] Ibex supports the RISC-V I or E, M, C, and B extensions. [PDF] UVM based design verification of a RISC-V CPU core - POLITesi
[5] Ibex is used in OpenTitan, described in the evidence as an open-source silicon Root of Trust project. [PDF] UVM based design verification of a RISC-V CPU core - POLITesi
[6] Ibex is verified using a UVM-based testbench with co-simulation against Spike, and the testbench runs binaries generated from RISC-DV source. [PDF] UVM based design verification of a RISC-V CPU core - POLITesi
[7] The Ibex testbench stimulates the core to execute a program from memory, compares the core trace log to a Spike trace log, and collects instruction and operand coverage. [PDF] UVM based design verification of a RISC-V CPU core - POLITesi
[8] The Ibex testbench adds randomized memory timings, memory errors, interrupts, and debug requests as stimulus. [PDF] UVM based design verification of a RISC-V CPU core - POLITesi
[9] Two memory interface agents are used in the Ibex testbench, one for instruction fetch and one for the LSU interface. [PDF] UVM based design verification of a RISC-V CPU core - POLITesi
[10] The interrupt agent drives randomized stimulus onto Ibex interrupt pins during test execution. [PDF] UVM based design verification of a RISC-V CPU core - POLITesi
[11] The Ibex testbench uses a single memory model loaded with the compiled assembly test program and serving requests from both memory interface agents. [PDF] UVM based design verification of a RISC-V CPU core - POLITesi
[12] Ibex tests extend core-ibex-base-test and coordinate binary loading, core-status checking, timeouts, and interrupt/debug stimulus. [PDF] UVM based design verification of a RISC-V CPU core - POLITesi
[13] The Ibex co-simulation system runs a RISC-V ISS in lockstep with Ibex, currently supports Spike, checks instructions and memory transactions against the ISS, and forwards observed RTL memory errors, interrupt requests, and debug requests to keep the ISS synchronized. [PDF] UVM based design verification of a RISC-V CPU core - POLITesi
[14] RVFI is used to provide information about retired instructions and instructions that produce synchronous traps for checking. [PDF] UVM based design verification of a RISC-V CPU core - POLITesi
[15] Because Ibex has many parameters, verification closure targets supported configurations rather than all possible parameter sets; the cited evidence focuses on the OpenTitan configuration and reports 90% code and functional coverage with over 90% regression pass rate. [PDF] UVM based design verification of a RISC-V CPU core - POLITesi