Skip to content

Roadmap

Tim Hutt edited this page Jan 6, 2025 · 4 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
        • 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.

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 support.
Clone this wiki locally