Skip to content

ksco/riscv-vector-tests

Repository files navigation

RISC-V Vector Tests Generator

About

This repository hosts unit tests generator for the RISC-V vector extension.

How it works

The Spike simulator is known as the RISC-V gold standard simulator, and although we don't know how Spike is tested, it does fully support the V extension. So we added a custom special instruction to Spike, and for any test, let it automatically generate a reference result for that test. This way, we generate tests for all instructions almost automatically. Under this framework, all we have to do is write a simple config file for each instruction.

Prerequisite

  1. riscv64-unknown-elf-gcc with RVV 1.0 support
  2. The Spike simulator
  3. Golang 1.19+
  4. riscv-pk if you need to generate user-mode binaries

For starters, you can directly download the pre-generated tests from Github Action Artifacts.

How to use

make all -j$(nproc)

If you have problems compiling, please refer to the build steps in build-and-test.yml.

After make all, you will find all the generated tests in out/v[vlen]x[xlen][mode]/bin/stage2/.

For more advanced options, run make help.

Note: single/single.go generates tests directly from stage 1, suitable for targets with co-simulators (or simply use TEST_MODE=cosim if you're lazy).

Nix package

This repository also provides a nix derivation with the following output provided:

  • ${riscv-vector-test}/bin/*: Generator binaries
  • ${riscv-vector-test}/include/*: Necessary headers for runtime usage
  • ${riscv-vector-test}/configs/*: Necessary runtime configs

TODOs

  • Add tests for sub-extensions (e.g. Zvamo, Zvfh)
  • Support Zve64f and Zve32d
  • Tail/mask agnostic support
  • Fault-only-first tests

License

This project uses third-party projects, and the licenses of these projects are attached to the corresponding directories.

The code for this project is distributed under the MIT license.

The “RISC-V” trade name is a registered trademark of RISC-V International.