Skip to content

Pin CVE2 and Ibex as reference cores; same-flow comparison of five cores - #17

Merged
abmajith merged 2 commits into
mainfrom
ref-cores
Nov 7, 2026
Merged

abmajith merged 2 commits into
mainfrom
ref-cores

Conversation

@abmajith

@abmajith abmajith commented Nov 7, 2026

Copy link
Copy Markdown
Owner
  • third_party/cve2, third_party/ibex: submodules at pinned commits, wrapped by rtl/cores/{cve2,ibex}/rabbit_cpu.sv (deviations from the contract documented: boot/mtvec placement, fast interrupt priority lowest-first, Ibex has 15 fast lines). CORE_CFLAGS in core.mk lets firmware know about documented deviations; the irq test uses it for the priority order.
  • Ibex files.f generated from its FuseSoC cores (tools/fusesoc_to_filelist.py); synth_sky130.sh works around one construct slang cannot elaborate.
  • Fixed in our testbench: reset started low, so Verilator never saw a falling edge and cores that gate their clock during reset (CVE2) kept unreset state (CVE2 ran in user mode; CV32E40P's mcountinhibit was not reset, so earlier CV32E40P mcycle-based timings were wrong).
  • Timing measurements in firmware use the SoC cycle counter (mcycle is stopped at reset on CV32E40P).
  • rtl/cores/README.md: area / delay / cycles / M timing / interrupt-during- divide for rabbit3, rabbit5, Ibex, CVE2, CV32E40P, all from our scripts.
  • CI: lint and soc-sim matrices include cve2 and ibex.

abmajith and others added 2 commits November 7, 2026 12:20
- third_party/cve2, third_party/ibex: submodules at pinned commits, wrapped
  by rtl/cores/{cve2,ibex}/rabbit_cpu.sv (deviations from the contract
  documented: boot/mtvec placement, fast interrupt priority lowest-first,
  Ibex has 15 fast lines). CORE_CFLAGS in core.mk lets firmware know about
  documented deviations; the irq test uses it for the priority order.
- Ibex files.f generated from its FuseSoC cores (tools/fusesoc_to_filelist.py);
  synth_sky130.sh works around one construct slang cannot elaborate.
- Fixed in our testbench: reset started low, so Verilator never saw a
  falling edge and cores that gate their clock during reset (CVE2) kept
  unreset state (CVE2 ran in user mode; CV32E40P's mcountinhibit was not
  reset, so earlier CV32E40P mcycle-based timings were wrong).
- Timing measurements in firmware use the SoC cycle counter (mcycle is
  stopped at reset on CV32E40P).
- rtl/cores/README.md: area / delay / cycles / M timing / interrupt-during-
  divide for rabbit3, rabbit5, Ibex, CVE2, CV32E40P, all from our scripts.
- CI: lint and soc-sim matrices include cve2 and ibex.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ci.yml (every pull request and main; jobs ~1 min): lint, soc-sim on five
cores, ip-test, rma-smoke, exhaustive 8-bit muldiv. push runs only on main,
so a branch with a pull request is no longer checked twice.
deep-verify.yml (Actions -> deep-verify -> Run workflow, choose
all/formal/gls/mutants): the formal proofs (~7-10 min per core on GitHub),
gate-level runs and the mutation tests. Locally: tools/check_all.sh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@abmajith
abmajith merged commit 5dae101 into main Nov 7, 2026
33 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant