# cva6 **Repository Path**: TankTrain/cva6 ## Basic Information - **Project Name**: cva6 - **Description**: No description available - **Primary Language**: Unknown - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-18 - **Last Updated**: 2025-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CVA6 RISC-V CPU [![Build Status](https://github.com/openhwgroup/cva6/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/openhwgroup/cva6/actions/workflows/ci.yml) [![CVA6 dashboard](https://riscv-ci.pages.thales-invia.fr/dashboard/badge_master.svg)](https://riscv-ci.pages.thales-invia.fr/dashboard/dashboard_cva6.html) [![Documentation Status](https://readthedocs.com/projects/openhw-group-cva6-user-manual/badge/?version=latest)](https://docs.openhwgroup.org/projects/cva6-user-manual/?badge=latest) [![GitHub release](https://img.shields.io/github/release/openhwgroup/cva6?include_prereleases=&sort=semver&color=blue)](https://github.com/openhwgroup/cva6/releases/) CVA6 is a 6-stage, single-issue, in-order CPU which implements the 64-bit RISC-V instruction set. It fully implements I, M, A and C extensions as specified in Volume I: User-Level ISA V 2.3 as well as the draft privilege extension 1.10. It implements three privilege levels M, S, U to fully support a Unix-like operating system. Furthermore, it is compliant to the draft external debug spec 0.13. It has a configurable size, separate TLBs, a hardware PTW and branch-prediction (branch target buffer and branch history table). The primary design goal was on reducing critical path length. The CVA6 core is part of a vivid ecosystem. In [this document](RESOURCES.md), we gather pointers to this ecosystem (building blocks, designs, partners...). A performance model of CVA6 is available in the `perf-model/` folder of this repository. It can be used to investigate performance-related micro-architecture changes. # Quick setup The following instructions will allow you to compile and run a Verilator model of the CVA6 APU (which instantiates the CVA6 core) within the CVA6 APU testbench (corev_apu/tb). Throughout all build and simulations scripts executions, you can use the environment variable `NUM_JOBS` to set the number of concurrent jobs launched by `make`: - if left undefined, `NUM_JOBS` will default to 1, resulting in a sequential execution of `make` jobs; - when setting `NUM_JOBS` to an explicit value, it is recommended not to exceed 2/3 of the total number of virtual cores available on your system. 1. Checkout the repository and initialize all submodules. ```sh git clone https://github.com/openhwgroup/cva6.git cd cva6 git submodule update --init --recursive ``` 2. Install the GCC Toolchain [build prerequisites](util/toolchain-builder/README.md#Prerequisites) then [the toolchain itself](util/toolchain-builder/README.md#Getting-started). :warning: It is **strongly recommended** to use the toolchain built with the provided scripts. 3. Install `cmake`, version 3.14 or higher. 4. Set the RISCV environment variable. ```sh export RISCV=/path/to/toolchain/installation/directory ``` 5. Install `help2man` and `device-tree-compiler` packages. For Debian-based Linux distributions, run : ```sh sudo apt-get install help2man device-tree-compiler ``` 6. Install the riscv-dv requirements: ```sh pip3 install -r verif/sim/dv/requirements.txt ``` 7. Run these commands to install a custom Spike and Verilator (i.e. these versions must be used to simulate the CVA6) and [these](#running-regression-tests-simulations) tests suites. ```sh # DV_SIMULATORS is detailed in the next section export DV_SIMULATORS=veri-testharness,spike bash verif/regress/smoke-tests.sh ``` # Tutorials * **[Running Simulations](tutorials/running_sim.md)** * **[ASIC Implementation](tutorials/asic.md)** * **[FPGA Implementation and running an OS](tutorials/fpga.md)** * **[Instruction Tracing](corev_apu/instr_tracing/README.md)** # Directory Structure The directory structure separates the [CVA6 RISC-V CPU](#cva6-risc-v-cpu) core from the [CORE-V-APU FPGA Emulation Platform](#corev-apu-fpga-emulation). Files, directories and submodules under `cva6` are for the core _only_ and should not have any dependencies on the APU. Files, directories and submodules under `corev_apu` are for the FPGA Emulation platform. The CVA6 core can be compiled stand-alone, and obviously the APU is dependent on the core. The top-level directories of this repo: * **ci**: Scriptware for CI. * **common**: Source code used by both the CVA6 Core and the COREV APU. Subdirectories from here are `local` for common files that are hosted in this repo and `submodules` that are hosted in other repos. * **core**: Source code for the CVA6 Core only. There should be no sources in this directory used to build anything other than the CVA6 core. * **corev_apu**: Source code for the CVA6 APU, exclusive of the CVA6 core. There should be no sources in this directory used to build the CVA6 core. * **docs**: Documentation. * **pd**: Example and CI scripts to synthesis CVA6. * **util**: General utility scriptware. * **vendor**: Third-party IP maintained outside the repository. * **verif**: Verification environment for the CVA6. The verification files shared with other cores are in the [core-v-verif](https://github.com/openhwgroup/core-v-verif) repository on GitHub. core-v-verif is defined as a cva6 submodule. ## verif Directories - **bsp**: board support package for test-programs compiled/assembled/linked for the CVA6. This BSP is used by both `core` testbench and `uvmt_cva6` UVM verification environment. - **regress**: scripts to install tools, test suites, CVA6 code and to execute tests - **sim**: simulation environment (e.g. riscv-dv) - **tb**: testbench module instancing the core - **tests**: source of test cases and test lists # Contributing We highly appreciate community contributions. To ease the work of reviewing contributions, please review [CONTRIBUTING](CONTRIBUTING.md). Contributions to the documentation (`docs/` and `tutorials/` directories) are very welcome as well. If you find any problems or issues with CVA6 or the documentation, please check out the [issue tracker](https://github.com/openhwgroup/cva6/issues) and create a new issue if your problem is not yet tracked. \ [The CVA6 Kanban Board](https://github.com/orgs/openhwgroup/project/3/view/7) loosely tracks planned improvements. # Publication If you use CVA6 in your academic work you can cite us:
CVA6 Publication ``` @article{zaruba2019cost, author={F. {Zaruba} and L. {Benini}}, journal={IEEE Transactions on Very Large Scale Integration (VLSI) Systems}, title={The Cost of Application-Class Processing: Energy and Performance Analysis of a Linux-Ready 1.7-GHz 64-Bit RISC-V Core in 22-nm FDSOI Technology}, year={2019}, volume={27}, number={11}, pages={2629-2640}, doi={10.1109/TVLSI.2019.2926114}, ISSN={1557-9999}, month={Nov}, } ```
# Acknowledgements Check out the [acknowledgements](ACKNOWLEDGEMENTS.md).