3. Quickstart¶
This section is meant to serve as a quick-guide to setup RiVer Core and perform a sample run of various phases of the tool. We shall use the AAPG tool as the generator, the Chromite core as the DUT and Spike as a reference model.
3.1. Install Python and Pip¶
Ubuntu 17.10, 18.04 and 20.04 by default come with Python>=3.6.9 which is sufficient for using RiVer Core.
If you are are Ubuntu 16.10 and 17.04 you can directly install python3.6 using the Universe repository
$ sudo apt-get update
$ sudo apt-get install python3.6 python3-pip
$ pip3 install --upgrade pip
If you are using Ubuntu 14.04 or 16.04 you need to get python3.6 from a Personal Package Archive (PPA)
$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt-get update
$ sudo apt-get install python3.6 -y
$ pip3 install --upgrade pip
You should now have 2 binaries: python3
and pip3
available in your $PATH.
You can check the versions as below
$ python3 --version
Python 3.6.9
$ pip3 --version
pip 20.1 from <user-path>.local/lib/python3.6/site-packages/pip (python 3.6)
The CentOS 7 Linux distribution includes Python 2 by default. However, as of CentOS 7.7, Python 3 is available in the base package repository which can be installed using the following commands
$ sudo yum update -y
$ sudo yum install -y python3
$ pip3 install --upgrade pip
For versions prior to 7.7 you can install python3.6 using third-party repositories, such as the IUS repository
$ sudo yum update -y
$ sudo yum install yum-utils
$ sudo yum install https://centos7.iuscommunity.org/ius-release.rpm
$ sudo yum install python36u
$ pip3 install --upgrade pip
You can check the versions
$ python3 --version
Python 3.6.8
$ pip --version
pip 20.1 from <user-path>.local/lib/python3.6/site-packages/pip (python 3.6)
3.1.1. Using Virtualenv for Python¶
Many a times users face issues in installing and managing multiple python versions. This is actually a major issue as many gui elements in Linux use the default python versions, in which case installing python3.6 using the above methods might break other software. We thus advise the use of pyenv to install python3.6.
For Ubuntu and CentosOS, please follow the steps here: https://github.com/pyenv/pyenv#basic-github-checkout
RHEL users can find more detailed guides for virtual-env here: https://developers.redhat.com/blog/2018/08/13/install-python3-rhel/#create-env
Once you have pyenv installed do the following to install python 3.6.0:
$ pyenv install 3.6.0
$ pip3 install --upgrade pip
$ pyenv shell 3.6.0
You can check the version in the same shell:
$ python --version
Python 3.6.0
$ pip --version
pip 20.1 from <user-path>.local/lib/python3.6/site-packages/pip (python 3.6)
3.2. Install RiVer Core¶
Note
If you are using pyenv as mentioned above, make sure to enable that environment before performing the following steps.
To install RiVer Core, run this command in your terminal:
$ pip3 install git+https://github.com/incoresemi/river_core.git
This is the preferred method to install RiVer Core, as it will always install the most recent stable release.
If you don’t have pip installed, this Python installation guide can guide you through the process.
$ pip3 install river_core
To update an already installed version of RiVer Core to the latest version:
$ pip3 install -U river_core
To checkout a specific version of RiVer Core:
$ pip3 install river_core==1.x.x
The sources for RiVer Core can be downloaded from the Github Repo.
You can clone the repository:
$ git clone https://github.com/incoresemi/river_core.git
Once you have a copy of the source, you can install it with:
$ cd river_core
$ pip3 install --editable .
3.2.1. Testing Installation¶
Output for river_core --help
:
Usage: river_core [OPTIONS] COMMAND [ARGS]...
RiVer Core Verification Framework
Options:
--version Show the version and exit.
--help Show this message and exit.
Commands:
clean subcommand to clean generated programs.
compile subcommand to compile generated programs.
generate subcommand to generate programs.
merge subcommand to merge coverage databases.
setup subcommand to generate template setup files
Output for river_core clean --help
:
Usage: river_core clean [OPTIONS]
subcommand to clean generated programs.
Options:
-c, --config FILE Read option defaults from the INI file
Auto detects
river_core.ini in current directory or in the ~
directory
-v, --verbosity TEXT Set the verbosity level for the framework
--version Show the version and exit.
--help Show this message and exit.
Output for river_core generate --help
:
Usage: river_core generate [OPTIONS]
subcommand to generate programs.
Options:
-c, --config FILE Read option defaults from the INI file
Auto detects
river_core.ini in current directory or in the ~
directory
-v, --verbosity TEXT Set the verbosity level for the framework
--version Show the version and exit.
--help Show this message and exit.
Output for river_core compile --help
:
Usage: river_core compile [OPTIONS]
subcommand to compile generated programs.
Options:
--coverage Enable collection of coverage statistics
from the DuT plugin
--compare / --no-compare Toggle comparison between logs generated by
the DuT and the Reference Plugin
--ref_stage [init|build|run|auto]
Stages to run on configured reference Plugin
1. `init`: Call the initial setup API for
the Reference plugin
2. `build`: Call the
initial setup API and build API to generate
the necessary binaries for the Reference
Plugin
3. `run`: Call the initial setup API,
build API and run API to initialize,
generate and the run the binaries
4. `auto`
will enable run automatically and set other
valid values [default]
--dut_stage [init|build|run|auto]
Stages to run on configured DuT Plugin
1.
`init`: Call the initial setup API for the
DuT plugin
2. `build`: Call the initial
setup API and build API to generate the
necessary binaries for the DuT Plugin
3.
`run`: Call the initial setup API, build API
and run API to initialize, generate and the
run the binaries
4.`auto` will enable run
automatically and determine the other valid
values [default]
-c, --config FILE Read option defaults from the INI file
Auto
detects river_core.ini in current directory
or in the ~ directory
-t, --test_list FILE Test List file to pass [required]
-v, --verbosity TEXT Set the verbosity level for the framework
--version Show the version and exit.
--help Show this message and exit.
Output for river_core merge --help
:
Usage: river_core merge [OPTIONS] OUTPUT [DB_FILES]...
subcommand to merge coverage databases.
Options:
-v, --verbosity TEXT set the verbosity level for the framework
-c, --config FILE Read option defaults from the INI file
Auto detects
river_core.ini in current directory or in the ~
directory
--version Show the version and exit.
--help Show this message and exit.
3.3. Install RISCV-GNU Toolchain¶
This guide will use the 32-bit riscv-gnu tool chain to compile the architectural suite. If you already have the 32-bit gnu-toolchain available, you can skip to the next section.
Note
The git clone and installation will take significant time. Please be patient. If you face issues with any of the following steps please refer to https://github.com/riscv/riscv-gnu-toolchain for further help in installation.
$ sudo apt-get install autoconf automake autotools-dev curl python3 libmpc-dev \
libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool \
patchutils bc zlib1g-dev libexpat-dev
$ git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
$ git clone --recursive https://github.com/riscv/riscv-opcodes.git
$ cd riscv-gnu-toolchain
$ ./configure --prefix=/path/to/install --enable-multilib # for both 32 and 64bit
$ [sudo] make # sudo is required depending on the path chosen in the previous setup
$ sudo yum install autoconf automake python3 libmpc-devel mpfr-devel gmp-devel \
gawk bison flex texinfo patchutils gcc gcc-c++ zlib-devel expat-devel
$ git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
$ git clone --recursive https://github.com/riscv/riscv-opcodes.git
$ cd riscv-gnu-toolchain
$ ./configure --prefix=/path/to/install --enable-multilib # for both 32 and 64bit toolchain
$ [sudo] make # sudo is required depending on the path chosen in the previous setup
Make sure to add the path /path/to/install
to your $PATH in the .bashrc/cshrc
With this you should now have all the following available as command line arguments:
compgen -c | grep 'riscv64' # requires bash
riscv64-unknown-elf-addr2line riscv64-unknown-elf-elfedit
riscv64-unknown-elf-ar riscv64-unknown-elf-g++
riscv64-unknown-elf-as riscv64-unknown-elf-gcc
riscv64-unknown-elf-c++ riscv64-unknown-elf-gcc-8.3.0
riscv64-unknown-elf-c++filt riscv64-unknown-elf-gcc-ar
riscv64-unknown-elf-cpp riscv64-unknown-elf-gcc-nm
riscv64-unknown-elf-gcc-ranlib riscv64-unknown-elf-gprof
riscv64-unknown-elf-gcov riscv64-unknown-elf-ld
riscv64-unknown-elf-gcov-dump riscv64-unknown-elf-ld.bfd
riscv64-unknown-elf-gcov-tool riscv64-unknown-elf-nm
riscv64-unknown-elf-gdb riscv64-unknown-elf-objcopy
riscv64-unknown-elf-gdb-add-index riscv64-unknown-elf-objdump
riscv64-unknown-elf-ranlib riscv64-unknown-elf-readelf
riscv64-unknown-elf-run riscv64-unknown-elf-size
riscv64-unknown-elf-strings riscv64-unknown-elf-strip
Note
Each of the generators have their own unique config.yamls to configure their plugin specific details, ensure you have changed them as required.
3.4. Install Generator¶
AAPG can be easily installed using the following command:
$ pip install aapg
To test the installation try the aapg --help
command which should print the
following:
Usage: aapg [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
clean Function: To clean the directory where tests were generated...
convert Function: To convert old formats of config files to newer...
gen Function: To generate the actuall assembly files Usage: To be
run...
setup Function: To setup directory structure to generate ASM programs...
version Function: To return the current varsion of AAPG
3.5. Setup the Plugins¶
To continue further we shall first create a working directory, say myquickstart
$ mkdir ~/myquickstart
You can install some of the pre-built plugins from the Plugin Repo
$ cd ~/myquickstart
$ git clone https://github.com/incoresemi/river_core_plugins.git
We will next create a river_core.ini
under the myquickstart
directory. You
can use the setup to create this file:
$ cd ~/myquickstart
$ river_core setup
The above should create a river_core.ini
file with the following contents.
Details and further specification of the config file syntax is available at Config Spec.
You will need to change user
to your username in the below file:
Warning
Make sure to adjust jobs parameters everywhere accordingly. This guide assumes 8 jobs are available for parallel processing.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | [river_core]
# Main directory for all files generated by river_core
work_dir = mywork
# Name of the target DuT plugin
target = chromite_verilator
# Name of the reference model plugin
reference = spike
# Name of the generator(s) to be used. Comma separated
generator = aapg
# ISA for the tests
isa = rv64imafdc
# Set paths for each plugin
# TODO Change the following paths
path_to_target = /home/user/myquickstart/river_core_plugins/dut_plugins
path_to_ref = /home/user/myquickstart/river_core_plugins/reference_plugins
path_to_suite = /home/user/myquickstart/river_core_plugins/generator_plugins
# To open the report automatically in the browser
open_browser = True
# Enable Space Saver
space_saver = True
# Coverage Options
# Enable via True/False
[coverage]
code = False
functional = False
[aapg]
# Number of jobs to use to generate the tests
jobs = 8
filter = rv64imafdc_hazards_s
seed = random
count = 2
config_yaml = /home/user/myquickstart/river_core_plugins/generator_plugins/aapg_plugin/aapg_gen_config.yaml
[chromite_verilator]
jobs = 8
filter =
count = 1
# src dir: Verilog Dir, BSC Path, Wrapper path
src_dir = /home/user/myquickstart/chromite/build/hw/verilog/,/tools/bsc/inst/lib/Verilog,/home/user/myquickstart/chromite/bsvwrappers/common_lib
top_module = mkTbSoc
[spike]
jobs = 1
filter =
count = 1
|
3.5.1. Setting up the Generator Plugin¶
As part of the quickstart we will go with the default settings available in the
river_core.ini above. One can however modify the parameters under the [aapg]
directive between lines 36-41 above
3.5.2. Setting up the DUT Plugin¶
We will using the chromite core to as a DUT for testing in this quickstart guide. We shall use the verilator simulator to run tests on the DUT.
The chromite core can be built using the guide available here. If you already have the bsc compiler and other dependencies installed you can do the following steps to generate the verilated executable:
$ cd ~/myquickstart
$ git clone https://gitlab.com/incoresemi/core-generators/chromite.git
$ cd chromite
$ pip install -r requirements.txt
$ python -m configure.main
$ make -j<jobs> generate_verilog
The above steps shall generate a directory: build/hw/verilog
which includes
all the generated verilog files.
We will next modify the river_core.ini
to update paths of the directories in
line 48 above. Here we need to provide three paths (in comma separated fashion):
path to
build/hw/verilog
path to Verilog directory present in the bsc installation directory
path to
chromite/bsvwrappers/common_lib
if you have cloned the river_core_plugins
repo in a different place then you
will need to update the parameter path_to_target
in line 19 above.
3.5.3. Setting up the Reference Plugin¶
For this quickstart we will be using a modified version of spike. Do the following to setup spike:
$ git clone https://gitlab.com/shaktiproject/tools/mod-spike.git
$ cd mod-spike
$ git checkout bump-to-latest
$ git clone https://github.com/riscv/riscv-isa-sim.git
$ cd riscv-isa-sim
$ git checkout 6d15c93fd75db322981fe58ea1db13035e0f7add
$ git apply ../shakti.patch
$ export RISCV=<path you to install spike>
$ mkdir build
$ cd build
$ ../configure --prefix=$RISCV # export RISCV to where you would like to install
$ make
$ [sudo] make install
As long as spike is available in the your $PATH
no other changes are
required.
3.6. Running RiVer Core¶
3.6.1. Generating Tests¶
$ cd ~/myquickstart
$ river_core generate -v debug -c river_core.ini
You should see the following log on the console:
info | ------------RiVer Core Verification Framework------------
info | Version: 1.0.0
info | Copyright (c) 2021 InCore Semiconductors Pvt. Ltd.
debug | Read file from examples/sample-config.ini
info | ****** Generation Mode ******
info | The river_core is currently configured to run with following parameters
info | The Output Directory (work_dir) : test
info | ISA : rv64imafdc
info | Plugin Jobs : 8
info | Plugin Seed : random
info | Plugin Count (Times to run the test) : 2
info | Now loading aapg Suite
debug | Loading module from /scratch/git-repo/github/incoresemi/river_core_plugins/generator_plugins/aapg_plugin/aapg_plugin.py
debug | AAPG Pre Gen Stage
debug | Extracting info from list
debug | /scratch/git-repo/github/incoresemi/river_core/test/aapg/../.json/
debug | /scratch/git-repo/github/incoresemi/river_core/test/aapg/../.json/ Directory exists
debug | AAPG Plugin gen phase
debug | /scratch/git-repo/github/incoresemi/river_core_plugins/generator_plugins
debug | /scratch/git-repo/github/incoresemi/river_core_plugins/generator_plugins/aapg_plugin/gen_framework.py
======================================== test session starts ========================================
platform linux -- Python 3.7.0, pytest-6.1.2, py-1.9.0, pluggy-0.13.1 -- /home/neel/.pyenv/versions/3.7.0/envs/venv/bin/python3.7
cachedir: .pytest_cache
metadata: {'Python': '3.7.0', 'Platform': 'Linux-5.4.0-31-generic-x86_64-with-debian-bullseye-sid', 'Packages': {'pytest': '6.1.2', 'py': '1.9.0', 'pluggy': '0.13.1'}, 'Plugins': {'metadata': '1.11.0', 'forked': '1.3.0', 'reportlog': '0.1.2', 'html': '3.1.0', 'xdist': '2.1.0'}}
rootdir: /scratch/git-repo/github/incoresemi
plugins: metadata-1.11.0, forked-1.3.0, reportlog-0.1.2, html-3.1.0, xdist-2.1.0
[gw0] linux Python 3.7.0 cwd: /scratch/git-repo/github/incoresemi/river_core
[gw1] linux Python 3.7.0 cwd: /scratch/git-repo/github/incoresemi/river_core
[gw2] linux Python 3.7.0 cwd: /scratch/git-repo/github/incoresemi/river_core
[gw3] linux Python 3.7.0 cwd: /scratch/git-repo/github/incoresemi/river_core
[gw4] linux Python 3.7.0 cwd: /scratch/git-repo/github/incoresemi/river_core
[gw5] linux Python 3.7.0 cwd: /scratch/git-repo/github/incoresemi/river_core
[gw6] linux Python 3.7.0 cwd: /scratch/git-repo/github/incoresemi/river_core
[gw7] linux Python 3.7.0 cwd: /scratch/git-repo/github/incoresemi/river_core
[gw0] Python 3.7.0 (default, May 26 2020, 14:51:08) -- [GCC 9.3.0]
[gw1] Python 3.7.0 (default, May 26 2020, 14:51:08) -- [GCC 9.3.0]
[gw2] Python 3.7.0 (default, May 26 2020, 14:51:08) -- [GCC 9.3.0]
[gw3] Python 3.7.0 (default, May 26 2020, 14:51:08) -- [GCC 9.3.0]
[gw4] Python 3.7.0 (default, May 26 2020, 14:51:08) -- [GCC 9.3.0]
[gw5] Python 3.7.0 (default, May 26 2020, 14:51:08) -- [GCC 9.3.0]
[gw6] Python 3.7.0 (default, May 26 2020, 14:51:08) -- [GCC 9.3.0]
[gw7] Python 3.7.0 (default, May 26 2020, 14:51:08) -- [GCC 9.3.0]
gw0 [2] / gw1 [2] / gw2 [2] / gw3 [2] / gw4 [2] / gw5 [2] / gw6 [2] / gw7 [2]
scheduling tests via LoadScheduling
../river_core_plugins/generator_plugins/aapg_plugin/gen_framework.py::test_eval[Generating /scratch/git-repo/github/incoresemi/river_core_plugins/generator_plugins/aapg_plugin/templates/chromite/rv64imafdc_hazards_s1]
../river_core_plugins/generator_plugins/aapg_plugin/gen_framework.py::test_eval[Generating /scratch/git-repo/github/incoresemi/river_core_plugins/generator_plugins/aapg_plugin/templates/chromite/rv64imafdc_hazards_s0]
[gw1] [ 50%] PASSED ../river_core_plugins/generator_plugins/aapg_plugin/gen_framework.py::test_eval[Generating /scratch/git-repo/github/incoresemi/river_core_plugins/generator_plugins/aapg_plugin/templates/chromite/rv64imafdc_hazards_s1]
[gw0] [100%] PASSED ../river_core_plugins/generator_plugins/aapg_plugin/gen_framework.py::test_eval[Generating /scratch/git-repo/github/incoresemi/river_core_plugins/generator_plugins/aapg_plugin/templates/chromite/rv64imafdc_hazards_s0]
- generated report log file: /scratch/git-repo/github/incoresemi/river_core/test/aapg/../.json/aapg_20210602-1227.json -
- generated html file: file:///scratch/git-repo/github/incoresemi/river_core/test/reports/aapg.html -
========================================= 2 passed in 3.46s =========================================
info | Dumping generated Test-List at: test/test_list.yaml
info | Validating Generated Test-List
info | Test List Validated successfully
info | Opening test report for aapg in web-browser
The above log indicates that you have successfully generated 2 tests using aapg. The above command would have created a mywork directory with the following contents:
Note
the filenames may differ as aapg uses current time stamps to name them.
mywork/
├── aapg
│ ├── asm
│ │ ├── aapg_rv64imafdc_hazards_s_000273_22052021190655560606_00000
│ │ │ ├── aapg_rv64imafdc_hazards_s_000273_22052021190655560606_00000.ld
│ │ │ ├── aapg_rv64imafdc_hazards_s_000273_22052021190655560606_00000.S
│ │ │ ├── aapg_rv64imafdc_hazards_s_000273_22052021190655560606_00000_template.S
│ │ │ └── rv64imafdc_hazards_s.ini
│ │ └── aapg_rv64imafdc_hazards_s_003304_22052021190655586548_00001
│ │ ├── aapg_rv64imafdc_hazards_s_003304_22052021190655586548_00001.ld
│ │ ├── aapg_rv64imafdc_hazards_s_003304_22052021190655586548_00001.S
│ │ ├── aapg_rv64imafdc_hazards_s_003304_22052021190655586548_00001_template.S
│ │ └── rv64imafdc_hazards_s.ini
│ ├── bin
│ ├── common
│ │ ├── crt.S
│ │ ├── encoding.h
│ │ ├── illegal_insts.txt
│ │ └── illegal.pl
│ ├── config.yaml
│ ├── log
│ ├── Makefile
│ └── objdump
├── reports
│ └── aapg.html
└── test_list.yaml
The important file here is the test_list.yaml file which shall contain the information of the generated tests. This file is what will be used in the next steps to run tests on DUT and Reference Plugins.
You can also open the html report at : mywork/reports/aapg.html
which shall
contain all the information of the build and logs for each test generation.
3.6.2. Running Tests on DUT and Reference¶
We shall now generate a verilated executable of the chromite core, compile the tests and run them on the DUT. We then compile the same tests and run them on spike and compare the results. Following command shall initiate the whole flow:
$ cd ~/myquickstart
$ river_core compile -v debug -t mywork/test_list.yaml -c river_core.ini
You should see the following log on the console:
info | ------------RiVer Core Verification Framework------------
info | Version: 1.0.0
info | Copyright (c) 2021 InCore Semiconductors Pvt. Ltd.
info | Auto mode detected for DuT Plugin
info | Auto mode detected for Ref Plugin
debug | Read file from examples/sample-config.ini
info | ****** Compilation Mode ******
info | The river_core is currently configured to run with following parameters
info | The Output Directory (work_dir) : test
info | ISA : rv64imafdc
info | Generator Plugin : aapg
info | Target Plugin : ['chromite_verilator']
info | Reference Plugin : ['modspike']
info | DuT Info
info | DuT Jobs : 8
info | DuT Count (Times to run) : 1
info | Now running on the Target Plugins
info | Now loading chromite_verilator-target
debug | Loading module from /scratch/git-repo/github/incoresemi/river_core_plugins/dut_plugins/chromite_verilator_plugin/chromite_verilator_plugin.py
debug | All modes enabled
debug | Running run
info | Pre Compile Stage
debug | /scratch/git-repo/github/incoresemi/river_core/test//.json/ Directory exists
info | Build verilator
info | Coverage is disabled, compiling the chromite with usual options
command | $ timeout=500 verilator -O3 -LDFLAGS -static --x-assign fast --x-initial fast --noassert sim_main.cpp --bbox-sys -Wno-STMTDLY -Wno-UNOPTFLAT -Wno-WIDTH -Wno-lint -Wno-COMBDLY -Wno-INITIALDLY --autoflush --threads 1 -DBSV_RESET_FIFO_HEAD -DBSV_RESET_FIFO_ARRAY --output-split 20000 --output-split-ctrace 10000 --cc mkTbSoc.v -y /scratch/git-repo/incoresemi/core-generators/chromite/build/hw/verilog/ -y /software/open-bsc/lib/Verilog -y /scratch/git-repo/incoresemi/core-generators/chromite/bsvwrappers/common_lib --exe
info | Linking verilator simulation sources
command | $ timeout=240 ln -f -s ../sim_main.cpp obj_dir/sim_main.cpp
command | $ timeout=240 ln -f -s ../sim_main.h obj_dir/sim_main.h
info | Making verilator binary
command | $ timeout=500 make OPT_SLOW=-O3 OPT_FAST=-O3 VM_PARALLEL_BUILDS=1 -j8 -C obj_dir -f VmkTbSoc.mk
debug | make: Entering directory '/scratch/git-repo/github/incoresemi/river_core/test/chromite_verilator/obj_dir'
debug | g++ -I. -MMD -I/usr/share/verilator/include -I/usr/share/verilator/include/vltstd -DVM_COVERAGE=0 -DVM_SC=0 -DVM_TRACE=0 -faligned-new -fcf-protection=none -Wno-bool-operation -Wno-sign-compare -Wno-uninitialized -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable -Wno-shadow -DVL_THREADED -std=gnu++14 -O3 -c -o sim_main.o sim_main.cpp
debug | g++ sim_main.o verilated.o VmkTbSoc__ALL.a -static -pthread -lpthread -latomic -o VmkTbSoc -lm -lstdc++
debug | make: Leaving directory '/scratch/git-repo/github/incoresemi/river_core/test/chromite_verilator/obj_dir'
info | Renaming verilator Binary
info | Creating boot-files
command | $ timeout=240 make -C /scratch/git-repo/github/incoresemi/river_core_plugins/dut_plugins/chromite_verilator_plugin/boot/ XLEN=64
debug | make: Entering directory '/scratch/git-repo/github/incoresemi/river_core_plugins/dut_plugins/chromite_verilator_plugin/boot'
debug | make: Leaving directory '/scratch/git-repo/github/incoresemi/river_core_plugins/dut_plugins/chromite_verilator_plugin/boot'
info | Build Hook
debug | Creating Make Target for aapg_rv64imafdc_hazards_s_000573_02062021122737765659_00001
debug | Creating Make Target for aapg_rv64imafdc_hazards_s_001222_02062021122737711013_00000
info | Run Hook
debug | Module dir: /scratch/git-repo/github/incoresemi/river_core_plugins/dut_plugins
debug | Pytest file: /scratch/git-repo/github/incoresemi/river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py
======================================== test session starts ========================================
platform linux -- Python 3.7.0, pytest-6.1.2, py-1.9.0, pluggy-0.13.1
rootdir: /scratch/git-repo/github/incoresemi
plugins: metadata-1.11.0, forked-1.3.0, reportlog-0.1.2, html-3.1.0, xdist-2.1.0
[gw3] Python 3.7.0 (default, May 26 2020, 14:51:08) -- [GCC 9.3.0]
[gw0] Python 3.7.0 (default, May 26 2020, 14:51:08) -- [GCC 9.3.0]
[gw1] Python 3.7.0 (default, May 26 2020, 14:51:08) -- [GCC 9.3.0]
[gw4] Python 3.7.0 (default, May 26 2020, 14:51:08) -- [GCC 9.3.0]
[gw5] Python 3.7.0 (default, May 26 2020, 14:51:08) -- [GCC 9.3.0]
[gw2] Python 3.7.0 (default, May 26 2020, 14:51:08) -- [GCC 9.3.0]
[gw6] Python 3.7.0 (default, May 26 2020, 14:51:08) -- [GCC 9.3.0]
[gw7] Python 3.7.0 (default, May 26 2020, 14:51:08) -- [GCC 9.3.0]
gw0 [2] / gw1 [2] / gw2 [2] / gw3 [2] / gw4 [2] / gw5 [2] / gw6 [2] / gw7 [2]
scheduling tests via LoadScheduling
../river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /scratch/git-repo/github/incoresemi/river_core/test/Makefile.chromite_verilator aapg_rv64imafdc_hazards_s_001222_02062021122737711013_00000]
../river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /scratch/git-repo/github/incoresemi/river_core/test/Makefile.chromite_verilator aapg_rv64imafdc_hazards_s_000573_02062021122737765659_00001]
[gw3] [ 50%] PASSED ../river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /scratch/git-repo/github/incoresemi/river_core/test/Makefile.chromite_verilator aapg_rv64imafdc_hazards_s_000573_02062021122737765659_00001]
[gw0] [100%] PASSED ../river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /scratch/git-repo/github/incoresemi/river_core/test/Makefile.chromite_verilator aapg_rv64imafdc_hazards_s_001222_02062021122737711013_00000]
- generated report log file: /scratch/git-repo/github/incoresemi/river_core/test/.json/chromite_verilator_20210602-1239.json -
- generated html file: file:///scratch/git-repo/github/incoresemi/river_core/test/reports/chromite_verilator.html -
======================================== 2 passed in 11.34s =========================================
info | Reference Info
info | Reference Jobs : 1
info | Reference Count (Times to run the test) : 1
info | Now loading modspike-target
debug | Loading module from /scratch/git-repo/github/incoresemi/river_core_plugins/reference_plugins/modspike_plugin/modspike_plugin.py
debug | All modes detected
debug | Running build
debug | Pre Compile Stage
debug | /scratch/git-repo/github/incoresemi/river_core/test//.json/ Directory exists
debug | Build Hook
debug | Creating Make Target for aapg_rv64imafdc_hazards_s_000573_02062021122737765659_00001
debug | Creating Make Target for aapg_rv64imafdc_hazards_s_001222_02062021122737711013_00000
debug | Run Hook
debug | Module dir: /scratch/git-repo/github/incoresemi/river_core_plugins/reference_plugins
debug | Pytest file: /scratch/git-repo/github/incoresemi/river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py
======================================== test session starts ========================================
platform linux -- Python 3.7.0, pytest-6.1.2, py-1.9.0, pluggy-0.13.1
rootdir: /scratch/git-repo/github/incoresemi
plugins: metadata-1.11.0, forked-1.3.0, reportlog-0.1.2, html-3.1.0, xdist-2.1.0
[gw0] Python 3.7.0 (default, May 26 2020, 14:51:08) -- [GCC 9.3.0]
gw0 [2]
scheduling tests via LoadScheduling
../river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /scratch/git-repo/github/incoresemi/river_core/test/Makefile.spike aapg_rv64imafdc_hazards_s_000573_02062021122737765659_00001]
[gw0] [ 50%] PASSED ../river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /scratch/git-repo/github/incoresemi/river_core/test/Makefile.spike aapg_rv64imafdc_hazards_s_000573_02062021122737765659_00001]
../river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /scratch/git-repo/github/incoresemi/river_core/test/Makefile.spike aapg_rv64imafdc_hazards_s_001222_02062021122737711013_00000]
[gw0] [100%] PASSED ../river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /scratch/git-repo/github/incoresemi/river_core/test/Makefile.spike aapg_rv64imafdc_hazards_s_001222_02062021122737711013_00000]
- generated report log file: /scratch/git-repo/github/incoresemi/river_core/test/.json/spike_20210602-1239.json -
- generated html file: file:///scratch/git-repo/github/incoresemi/river_core/test/reports/spike.html -
========================================= 2 passed in 0.86s =========================================
info | Dumps for test aapg_rv64imafdc_hazards_s_000573_02062021122737765659_00001 Match. TEST PASSED
info | Dumps for test aapg_rv64imafdc_hazards_s_001222_02062021122737711013_00000 Match. TEST PASSED
info | Checking for a generator json to create final report
debug | Detected generated JSON Files: ['test/.json/aapg_20210602-1227.json']
debug | Removing artifacts for Chromite
debug | Removing extra files for Test: aapg_rv64imafdc_hazards_s_000573_02062021122737765659_00001
debug | Removing extra files for Test: aapg_rv64imafdc_hazards_s_001222_02062021122737711013_00000
debug | Removing artifacts for Spike
debug | Removing extra files for Test: aapg_rv64imafdc_hazards_s_000573_02062021122737765659_00001
debug | Removing extra files for Test: aapg_rv64imafdc_hazards_s_001222_02062021122737711013_00000
info | Now generating some good HTML reports for you
info | Final report saved at test/reports//report.html
info | Opening test report in web-browser
At the end you shall also see a html report open up in your default browser containing information of all the runs. The reports folder will have additional reports generated as well.
Congratulations.. you have successfully completed this guide