Skip to content


Repository files navigation

An ARMv8 Virtual Platform (AVP64)

Build Status Lint Status Code Style

This repository contains an ARMv8 multicore virtual platform. It was built at the Institute for Communication Technologies and Embedded Systems at RTWH Aachen University. The following target software configurations were tested (see config):

  • CoreMark
  • Dhrystone
  • Whetstone
  • Linux single- and dual-core
  • Xen single- and dual-core

Build & Installation

In order to build avp64, you need a working installation of vcml and its components. For that please follow the installation guideline of vcml which can be found here.

  1. Clone git repository including submodules:

    git clone --recurse-submodules
  2. Chose directories for building and deployment:

    <source-dir>  location of your repo copy,     e.g. /home/lukas/avp64
    <build-dir>   location to store object files, e.g. /home/lukas/avp64/BUILD
    <install-dir> output directory for binaries,  e.g. /opt/avp64
  3. Patch submodules: A patch can be applied to patch the unicorn submodule.

    • unicorn-fix-breakpoint.patch: This patch fixes the breakpoint behavior of the VP. Without this patch, the VP executes the instruction on a breakpoint hit and stops after the execution. The patch stops the VP before the instruction is executed. To apply the patch, execute:
    (cd <source-dir>/deps/ocx-qemu-arm/unicorn && git apply <source-dir>/patches/unicorn-fix-breakpoint.patch)
  4. Configure and build the project using cmake. During configuration you must state whether or not to build the unit tests:

    • -DAVP64_BUILD_TESTS=[ON|OFF]: build unit tests (default: OFF)

    Ensure that the environment variable SYSTEMC_HOME is correctly set. Release and debug build configurations are controlled via the regular parameters:

    mkdir -p <build-dir>
    cd <build-dir>
    cmake -DCMAKE_INSTALL_PREFIX=<install-dir> -DCMAKE_BUILD_TYPE=RELEASE <source-dir>
    make -j 4
    sudo make install

    If building with -DAVP64_BUILD_TESTS=ON you can run all unit tests using make test within <build-dir>.

  5. After installation, the following new files should be present:

    <install-dir>/bin/avp64                # executable program
    <install-dir>/config/                  # configuration files
  6. If the library cannot be found, add the lib folder to LD_LIBRARY_PATH:

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/avp64/lib/


Run the platform using a config file:

<install-dir>/bin/avp64 -f <install-dir>/config/<config-file>

For more details on run parameters please look here.

To stop the platform, press Ctrl + a + x .

To install tested software that belongs to the provided configuration files, follow the installation guide of avp64_sw. After the installation, set the environment variable AVP64_SW to the path of the avp64_sw repository:

export AVP64_SW=<software-repository>

Execute the setup script, which is in avp64/, to copy and integrate the installed software:


Maintaining Multiple Builds

Debug builds (i.e. -DCMAKE_BUILD_TYPE=DEBUG) are intended for developers that like to make changes on avp64 and want to track down bugs. Note that these builds operate significantly slower than optimized release builds and should therefore not be used for VPs that are used productively, e.g. for target software development. Ensure that the environment variable SYSTEMC_HOME is correctly set.
To maintain both builds from a single source repository, try the following:

git clone --recurse-submodules && cd avp64  

for type in "DEBUG" "RELEASE"; do
    mkdir -p $build && cd $build
    cmake -DCMAKE_BUILD_TYPE=$type -DCMAKE_INSTALL_PREFIX=$install $home
    make install

Afterward, you can find the builds in:

<source-dir>/avp64/BUILD/DEBUG    # for the debug build or
<source-dir>/avp64/BUILD/RELEASE  # for the release build


The VCML documentation can be found here.

Target-Software-Debugging Tutorial

You can find a tutorial that shows how to debug the executed target software using Visual Studio Code here.


This project is licensed under the MIT license - see the LICENSE file for details.


An ARMv8 virtual platform based on QEMU and VCML







No releases published


No packages published