Skip to content

Roadmap

Jordan Carlin edited this page Feb 23, 2025 · 9 revisions

These are the main areas where work is happening. Indentation indicates dependencies.

Configuration

The implementation defined behaviour in RISC-V is near limitless, but only a small number of configuration flags are exposed by the emulator currently because they are very tedious to wire in.

Alasdair Armstrong is working on adding a native configuration system to the Sail language which will be a lot easier to use.

  • Move from using sys_foo_enable() style callbacks to Alasdair's new native config system, once implemented. #495
    • Add flags for all the options that are currently hard-coded.
      • Clean up the organisation of the code & files so it makes sense. It's a bit of a tangled web at the moment.
  • Fix misaligned accesses and add options for common behaviours. #49
  • Add extensions for the (un)privileged spec versions. #319

Testing & Infrastructure

Currently the code is not tested at all well. There's just a very old version of the riscv-tests in the repo. Ideally we would have unit tests written in Sail, and a wide range of ELF tests. It would also be beneficial to avoid requiring users to set up a cross-compiler, RISCOF, etc. to run the tests since that is quite onerous. But we don't want to store ELF binaries in the repo like we currently do. See Jessica's comment in #114.

  • Switch to native Sail project file. #572
  • Add callbacks for state change events. #494
    • Make RVFI a runtime option. #642
      • Switch to CMake. #551, #647
        • Add Sail unit tests.
        • Test against the ACTs. #481 (testing is being done in the riscv-arch-test repo; not duplicating here)
        • Test against a recent version of riscv-tests. See #114

Extensions

The two biggest missing pieces are Hypervisor and Vector Crypto. There are a number of smaller extensions that are missing too. Relevant PRs are tagged with the extension label

See Extension Roadmap for the full details.

Verification Interface

Currently the only programmatic verification interface is RVFI-DII, but it only works over TCP and is quite limited. The goal is to expose a library interface, and a machine readable execution log.

  • Add callbacks for state change events. #494
    • Add C++ library interface for instantiating the model, stepping it, and retreiving state change events.
    • Add support for logging state changes to a machine readable (e.g. Protobuf) file. #545
    • Add RVVI API support.
Clone this wiki locally