riscv-formal-nmigen/README.md

43 lines
2.1 KiB
Markdown
Raw Normal View History

2020-07-14 10:30:37 +08:00
# riscv-formal-nmigen
2020-07-14 10:42:06 +08:00
A port of [riscv-formal](https://github.com/SymbioticEDA/riscv-formal) to nMigen
2020-07-21 16:13:52 +08:00
## Breakdown
2020-08-21 11:46:39 +08:00
| File/Directory | Description |
| --- | --- |
| `shell.nix` | [nix-shell](https://nixos.wiki/wiki/Development_environment_with_nix-shell) configuration file |
2020-08-17 12:05:39 +08:00
| `rvfi` | RISC-V Formal Verification Framework (nMigen port) |
| `rvfi/insns` | Supported RISC-V instructions and ISAs |
2020-08-20 15:32:10 +08:00
| `rvfi/checks` | Checks for RISC-V compliant cores |
| `rvfi/cores` | Cores currently tested against this port of riscv-formal |
2020-08-21 11:46:39 +08:00
| `rvfi/cores/minerva/verify.py` | Verification tasks for the Minerva core |
## Running the Verification
First make sure you have [Nix](https://nixos.org/download.html) installed. Then `cd` to the root directory of this repo and run:
2020-07-21 16:13:52 +08:00
```bash
$ nix-shell
```
2020-08-17 16:46:15 +08:00
2020-08-20 15:32:10 +08:00
This should run the tests (cache, multiplier, divider) provided by Minerva itself and give you an environment with all the dependencies required for this project. Then, to run the main verification tasks for Minerva provided in this repo:
2020-08-17 16:46:15 +08:00
```bash
2020-08-17 16:46:15 +08:00
$ python -m rvfi.cores.minerva.verify
```
2020-07-21 16:13:52 +08:00
2020-08-21 11:53:20 +08:00
This should run in the order of a few minutes.
2020-08-19 14:56:26 +08:00
2020-08-05 12:54:46 +08:00
## Scope
Support for the RV32I base ISA and RV32M extension are planned and well underway. Support for other ISAs in the original riscv-formal such as RV32C and their 64-bit counterparts may also be added in the future as time permits.
2020-08-21 16:58:33 +08:00
## Known Issues
As of 21/08/2020, the verification passes unconditionally, even when obvious, deliberate bugs are introduced to the Minerva core and/or its components thereof (such as replacing subtraction with addition in the adder). This is caused by the Minerva core having its `rvfi.valid` signal de-asserted all of the time. The cause of this issue is very likely due to the absence of proper interrupt signals and instruction + data buses, which must be connected to the core for it to function properly. Perhaps the issue could be solved by constructing abstract instruction + data buses with suitable assumed properties and connecting those abstract interfaces to the Minerva core (but then, what would those properties be?).
2020-07-21 16:13:52 +08:00
## License
See [LICENSE](./LICENSE)