A suitable compiler for the RISC-V ISA must be available. Since the RI5CY RISC-V core supports additional ISA extensions that are not supported by official toolchain, a special compiler must be used to take advantage of those.
For the basic RV32I instruction set also the official toolchain can be used.
The software compilation flow is based on CMake. A version of CMake >= 2.8.0 is required, but a version greater than 3.1.0 is recommended due to support for ninja.
CMake uses out-of-source builds which means you will need a separate build
folder for the software, e.g. build
mkdir build
Then switch to the build folder and copy the cmake template configuration
script there which resides in the sw
folder. The name of template follows the
following naming scheme: cmake-configure.{or1k/riscv}.{gcc/llvm}.sh
Choose, copy, modify and then execute this script. It will setup the build
environment for you.
Now you are ready to start compiling software!
Switch to the build folder and compile the application you are interested in:
make applicationName
This command will compile the application and generate stimuli for RTL simulation using ModelSim.
To compile the RTL using ModelSim, use
make vcompile
To execute an application again CMake can be used. Switch to the build folder and execute
make applicationName.vsim
to start ModelSim in GUI mode.
To use console mode, use
make applicationName.vsimc
Automatic regression tests are supported using the ctest framework that comes with CMake.
use
ctest -L "riscv|sequential" --timeout 100
to launch the tests for the RISC-V core and some basic computation benchmarks
CMake uses the concept of CMakeLists.txt files in each directory that is managed by the tool. Those files give instructions to the tool about which applications exist and which files belong to it.
An application is defined like this in a CMakeLists.txt file:
add_application(helloworld helloworld.c)
If an application consists of multiple source files it has be defined like this:
set(SOURCES main.c helper.c)
add_application(helloworld "${SOURCES}")
For ease-of-use we recommend that each application has its own source
directory. Use the add_subdirectory
macro of CMake to let the tool know about
folder structures. Those macros are put in the parent folders until you hit a
folder that is already managed by CMake. Each of the folders needs to have a
CMakeLists.txt file.
All applications need to have their own build folders. This means that if you
want to declare multiple applications in the same source folders, you have to
make sure they do not share the same build folder. This can be done by the
optional argument SUBDIR
for add_application
add_application(helloworld helloworld.c SUBDIR "hello"))
The command above would put the application helloworld in a subdirectory called hello in the build folder structure.
Each application supports the following targets:
- ${NAME}: Compile the application and generate all stimuli for simulation
- ${NAME}.vsim: Start modelsim in GUI mode
- ${NAME}.vsimc: Start modelsim in console
- ${NAME}.elf: Compile the application and generate the elf file
- ${NAME}.read: Perform an objdump of the binary and save it as ${NAME}.read