3. UATG Tutorial¶
Note
uatg is interchangeably denoted as ‘framework’ in this section.
This section provides a deeper insight about using the UATG Tool. We will be using the generate command as an alternative to the from-config command.
Warning
It is assumed that you have followed the Quickstart before trying this out.
Successfully getting through quick start should indicate that the UATG framework is successsfully installed in your computer.
We will be continuing in the same myquickstart directory which we had
created for the quickstart. Right now, the directory structure will be
something like this
myquickstart/
├── aliasing.yaml
├── chromite_uatg_tests
│ ├── aliasing.yaml
│ ├── LICENSE.incore
│ ├── modules
│ │ ├── branch_predictor
│ │ │ ├── issues.rst
│ │ │ ├── uatg_gshare_fa_btb_fill_01.py
│ │ │ ├── uatg_gshare_fa_btb_selfmodifying_01.py
│ │ │ ├── uatg_gshare_fa_fence_01.py
│ │ │ ├── uatg_gshare_fa_ghr_alternating_01.py
│ │ │ ├── uatg_gshare_fa_ghr_ones.py
│ │ │ ├── uatg_gshare_fa_ghr_zeros_01.py
│ │ │ ├── uatg_gshare_fa_mispredict_loop_01.py
│ │ │ └── uatg_gshare_fa_ras_push_pop_01.py
│ │ ├── decoder
│ │ │ └── uatg_decoder_arithmetic_insts.py
│ │ ├── decompressor
│ │ │ └── uatg_decompressor.py
│ │ └── index.yaml
│ └── README.rst
├── config.ini
├── core_config.yaml
├── csr_grouping.yaml
├── custom_config.yaml
├── isa_config.yaml
├── rv_debug.yaml
└── work
If you had gone through the quickstart, you may find some more .yapsy_plugin
files, __pycache__ directories and you will find several tests within the
work directory. It is okay for your directory tree to be so. It will not
impact your workflow with UATG.
Here, the aliasing.yaml, dut_config.yaml and config.ini were created by
the uatg setup command.
Detailed description about the options used along with the subcommands has been discussed in the CLI docs. We will be breifly explaining the flags in this section.
Let’s start by generating the tests.
Warning
All paths are absolute.
3.1. Generate ASM tests¶
$ uatg generate -v debug -m all -wd ~/myquickstart/work/ \
-ld ~/myquickstart/chromite_uatg_tests/target/ -t -gc\
-md ~/myquickstart/chromite_uatg_tests/modules/ \
-cfg ~/myquickstart/isa_config.yaml -cfg ~/myquickstart/core_config.yaml \
-cfg ~/myquickstart/custom_config.yaml -cfg ~/myquickstart/csr_grouping.yaml \
-cfg ~/myquickstart/rv_debug.yaml \
-af ~/myquickstart/chromite_uatg_tests/aliasing.yaml
Here the
-voption is used to control the verbosity of the log. Debug logs everything which will be useful in debugging the code.-moption is used to choose the modules for which the tests are to be generated by UATG. The module names should be comma separated. Spaces are not allowed between the comma and the name. By default, the value for-misall.-wdUATG will create the test files within this directory. It will also create a model_test.h and link.ld file in the same directory by default. [REQUIRED]-ldis an optional parameter. If not specified, the-wdparameter is reused. If the user has his own linker files, he may rename the linker file aslink.ldand pass the path to the directory containing thelink.ldfile along with the-ldoption.-tis a flag used to generate a test_list.yaml file. Information about the test_list format can be found here.-gcflag is used to specify the generation of SV covergroup and TB files. It is required to pass the -gc flag along with the alias file (-af). The SV files will be found within thesv_topdirectory in theworkdirectory.-mdis the path to the modules directory containing the test_classes. The test_classes will be sorted into directories based on the module being tested.-cfgtakes multiple absolute paths. The path to the 5 YAML files used to configure the core should be passed here. The yaml paths should be passed in the following order,isa_config.yaml
core_config.yaml
custom_config.yaml
csr_grouping.yaml
rv_debug.yaml.
Each path should be specified with a preceding
-cfgas shown above.-afis the path to the aliasing.yaml file generated usinguatg setup.
Running this command should generate this log in your terminal.
INFO | ****** Micro-Architectural Test Generator - UATG *******
INFO | Version : 1.2.1
INFO | Copyright (c) 2021, InCore Semiconductors Pvt. Ltd.
INFO | All Rights Reserved.
INFO | uatg dir is /home/akrish/work/InCore/uatg/uatg
INFO | work_dir is /home/akrish/myquickstart/work/
DEBUG | The modules are ['branch_predictor', 'decompressor']
INFO | ****** Generating Tests ******
DEBUG | Directory for branch_predictor is /home/akrish/myquickstart/chromite_uatg_tests/modules/branch_predictor
INFO | Starting plugin Creation for branch_predictor
DEBUG | Created plugin for uatg_gshare_fa_btb_fill_01
DEBUG | Created plugin for uatg_gshare_fa_btb_selfmodifying_01
DEBUG | Created plugin for uatg_gshare_fa_fence_01
DEBUG | Created plugin for uatg_gshare_fa_ghr_alternating_01
DEBUG | Created plugin for uatg_gshare_fa_ghr_ones_01
DEBUG | Created plugin for uatg_gshare_fa_ghr_zeros_01
DEBUG | Created plugin for uatg_gshare_fa_mispredict_loop_01
DEBUG | Created plugin for uatg_gshare_fa_ras_push_pop_01
INFO | Created plugins for branch_predictor
DEBUG | Generating assembly tests for branch_predictor
DEBUG | Selected test: uatg_gshare_fa_ghr_ones_01-001
DEBUG | Generating test for uatg_gshare_fa_ghr_ones_01-001
INFO | Syntax check passed for uatg_gshare_fa_ghr_ones_01-001
DEBUG | Selected test: uatg_gshare_fa_btb_fill_01-001
DEBUG | Generating test for uatg_gshare_fa_btb_fill_01-001
INFO | Syntax check passed for uatg_gshare_fa_btb_fill_01-001
DEBUG | Selected test: uatg_gshare_fa_ras_push_pop_01-001
DEBUG | Generating test for uatg_gshare_fa_ras_push_pop_01-001
INFO | Syntax check passed for uatg_gshare_fa_ras_push_pop_01-001
DEBUG | Selected test: uatg_gshare_fa_fence_01-001
DEBUG | Generating test for uatg_gshare_fa_fence_01-001
INFO | Syntax check passed for uatg_gshare_fa_fence_01-001
DEBUG | Selected test: uatg_gshare_fa_ghr_alternating_01-001
DEBUG | Generating test for uatg_gshare_fa_ghr_alternating_01-001
INFO | Syntax check passed for uatg_gshare_fa_ghr_alternating_01-001
DEBUG | Selected test: uatg_gshare_fa_btb_selfmodifying_01-001
DEBUG | Generating test for uatg_gshare_fa_btb_selfmodifying_01-001
INFO | Syntax check passed for uatg_gshare_fa_btb_selfmodifying_01-001
DEBUG | Selected test: uatg_gshare_fa_ghr_zeros_01-001
DEBUG | Generating test for uatg_gshare_fa_ghr_zeros_01-001
INFO | Syntax check passed for uatg_gshare_fa_ghr_zeros_01-001
DEBUG | Selected test: uatg_gshare_fa_mispredict_loop_01-001
DEBUG | Generating test for uatg_gshare_fa_mispredict_loop_01-001
INFO | Syntax check passed for uatg_gshare_fa_mispredict_loop_01-001
DEBUG | Finished Generating Assembly Tests for branch_predictor
INFO | Creating test_list for the branch_predictor
DEBUG | Current test is /home/akrish/myquickstart/work/branch_predictor/uatg_gshare_fa_ghr_ones_01-001/uatg_gshare_fa_ghr_ones_01-001.S
DEBUG | Current test is /home/akrish/myquickstart/work/branch_predictor/uatg_gshare_fa_btb_fill_01-001/uatg_gshare_fa_btb_fill_01-001.S
DEBUG | Current test is /home/akrish/myquickstart/work/branch_predictor/uatg_gshare_fa_ras_push_pop_01-001/uatg_gshare_fa_ras_push_pop_01-001.S
DEBUG | Current test is /home/akrish/myquickstart/work/branch_predictor/uatg_gshare_fa_fence_01-001/uatg_gshare_fa_fence_01-001.S
DEBUG | Current test is /home/akrish/myquickstart/work/branch_predictor/uatg_gshare_fa_ghr_alternating_01-001/uatg_gshare_fa_ghr_alternating_01-001.S
DEBUG | Current test is /home/akrish/myquickstart/work/branch_predictor/uatg_gshare_fa_btb_selfmodifying_01-001/uatg_gshare_fa_btb_selfmodifying_01-001.S
DEBUG | Current test is /home/akrish/myquickstart/work/branch_predictor/uatg_gshare_fa_ghr_zeros_01-001/uatg_gshare_fa_ghr_zeros_01-001.S
DEBUG | Current test is /home/akrish/myquickstart/work/branch_predictor/uatg_gshare_fa_mispredict_loop_01-001/uatg_gshare_fa_mispredict_loop_01-001.S
DEBUG | Directory for decompressor is /home/akrish/myquickstart/chromite_uatg_tests/modules/decompressor
INFO | Starting plugin Creation for decompressor
DEBUG | no plugin for uatg_decompressor_01 to remove
WARNING | Skippping test uatg_decompressor_01 as index yaml has False
DEBUG | Created plugin for uatg_decompressor_floating_01
DEBUG | Created plugin for uatg_decompressor_02
INFO | Created plugins for decompressor
DEBUG | Generating assembly tests for decompressor
WARNING | Skipped uatg_decompressor_floating_01
DEBUG | Selected test: uatg_decompressor_02-001
DEBUG | Generating test for uatg_decompressor_02-001
INFO | Syntax check passed for uatg_decompressor_02-001
DEBUG | Finished Generating Assembly Tests for decompressor
INFO | Creating test_list for the decompressor
DEBUG | Current test is /home/akrish/myquickstart/work/decompressor/uatg_decompressor_02-001/uatg_decompressor_02-001.S
INFO | ****** Finished Generating Tests ******
DEBUG | Using user specified linker: /home/akrish/myquickstart/chromite_uatg_tests/target/link.ld
DEBUG | Using user specified model_test file: /home/akrish/myquickstart/chromite_uatg_tests/target/model_test.h
INFO | Test List was generated by UATG. You can find it in the work dir
INFO | ****** Generating Covergroups ******
DEBUG | Generated tbtop, defines and interface files
DEBUG | Removing Existing coverpoints SV file
DEBUG | Generating CoverPoints for branch_predictor
INFO | Generating coverpoints SV file for uatg_gshare_fa_mispredict_loop_01
WARNING | Skipping coverpoint generation for uatg_gshare_fa_btb_selfmodifying_01 as there is no gen_covergroup method
INFO | Generating coverpoints SV file for uatg_gshare_fa_btb_fill_01
WARNING | Skipping coverpoint generation for uatg_gshare_fa_ghr_ones_01 as there is no gen_covergroup method
WARNING | Skipping coverpoint generation for uatg_gshare_fa_ghr_alternating_01 as there is no gen_covergroup method
INFO | Generating coverpoints SV file for uatg_gshare_fa_fence_01
INFO | Generating coverpoints SV file for uatg_gshare_fa_ghr_zeros_01
WARNING | Skipping coverpoint generation for uatg_gshare_fa_ras_push_pop_01 as there is no gen_covergroup method
DEBUG | Finished Generating Coverpoints for branch_predictor
DEBUG | Generating CoverPoints for decompressor
CRITICAL | Skipped uatg_decompressor_floating_01 as this test is not created for the current DUT configuration
INFO | Generating coverpoints SV file for uatg_decompressor_02
DEBUG | Finished Generating Coverpoints for decompressor
INFO | ****** Finished Generating Covergroups ******
Your directory structure should be like this.
myquickstart/
├── aliasing.yaml
├── chromite_uatg_tests
│ ├── aliasing.yaml
│ ├── LICENSE.incore
│ ├── modules
│ │ ├── branch_predictor
│ │ │ ├── issues.rst
│ │ │ ├── __pycache__
│ │ │ │ ├── uatg_gshare_fa_btb_fill_01.cpython-37.pyc
│ │ │ │ ├── uatg_gshare_fa_btb_fill_01.cpython-39.pyc
│ │ │ │ ├── uatg_gshare_fa_btb_selfmodifying_01.cpython-37.pyc
│ │ │ │ ├── uatg_gshare_fa_btb_selfmodifying_01.cpython-39.pyc
│ │ │ │ ├── uatg_gshare_fa_fence_01.cpython-37.pyc
│ │ │ │ ├── uatg_gshare_fa_fence_01.cpython-39.pyc
│ │ │ │ ├── uatg_gshare_fa_ghr_alternating_01.cpython-37.pyc
│ │ │ │ ├── uatg_gshare_fa_ghr_alternating_01.cpython-39.pyc
│ │ │ │ ├── uatg_gshare_fa_ghr_ones.cpython-37.pyc
│ │ │ │ ├── uatg_gshare_fa_ghr_ones.cpython-39.pyc
│ │ │ │ ├── uatg_gshare_fa_ghr_zeros_01.cpython-37.pyc
│ │ │ │ ├── uatg_gshare_fa_ghr_zeros_01.cpython-39.pyc
│ │ │ │ ├── uatg_gshare_fa_mispredict_loop_01.cpython-37.pyc
│ │ │ │ ├── uatg_gshare_fa_mispredict_loop_01.cpython-39.pyc
│ │ │ │ ├── uatg_gshare_fa_ras_push_pop_01.cpython-37.pyc
│ │ │ │ └── uatg_gshare_fa_ras_push_pop_01.cpython-39.pyc
│ │ │ ├── uatg_gshare_fa_btb_fill_01.py
│ │ │ ├── uatg_gshare_fa_btb_fill_01.yapsy-plugin
│ │ │ ├── uatg_gshare_fa_btb_selfmodifying_01.py
│ │ │ ├── uatg_gshare_fa_btb_selfmodifying_01.yapsy-plugin
│ │ │ ├── uatg_gshare_fa_fence_01.py
│ │ │ ├── uatg_gshare_fa_fence_01.yapsy-plugin
│ │ │ ├── uatg_gshare_fa_ghr_alternating_01.py
│ │ │ ├── uatg_gshare_fa_ghr_alternating_01.yapsy-plugin
│ │ │ ├── uatg_gshare_fa_ghr_ones.py
│ │ │ ├── uatg_gshare_fa_ghr_ones.yapsy-plugin
│ │ │ ├── uatg_gshare_fa_ghr_zeros_01.py
│ │ │ ├── uatg_gshare_fa_ghr_zeros_01.yapsy-plugin
│ │ │ ├── uatg_gshare_fa_mispredict_loop_01.py
│ │ │ ├── uatg_gshare_fa_mispredict_loop_01.yapsy-plugin
│ │ │ ├── uatg_gshare_fa_ras_push_pop_01.py
│ │ │ └── uatg_gshare_fa_ras_push_pop_01.yapsy-plugin
│ │ ├── decoder
│ │ │ ├── __pycache__
│ │ │ │ ├── uatg_decoder_arithmetic_insts.cpython-37.pyc
│ │ │ │ └── uatg_decoder_arithmetic_insts.cpython-39.pyc
│ │ │ ├── uatg_decoder_arithmetic_insts.py
│ │ │ └── uatg_decoder_arithmetic_insts.yapsy-plugin
│ │ ├── decompressor
│ │ │ └── uatg_decompressor.py
│ │ └── index.yaml
│ └── README.rst
├── config.ini
├── core_config.yaml
├── csr_grouping.yaml
├── custom_config.yaml
├── isa_config.yaml
├── rv_debug.yaml
├── config.ini
└── work/
├── branch_predictor
│ ├── uatg_gshare_fa_btb_fill_01-001
│ │ └── uatg_gshare_fa_btb_fill_01-001.S
│ ├── uatg_gshare_fa_btb_selfmodifying_01-001
│ │ └── uatg_gshare_fa_btb_selfmodifying_01-001.S
│ ├── uatg_gshare_fa_fence_01-001
│ │ └── uatg_gshare_fa_fence_01-001.S
│ ├── uatg_gshare_fa_ghr_alternating_01-001
│ │ └── uatg_gshare_fa_ghr_alternating_01-001.S
│ ├── uatg_gshare_fa_ghr_ones_01-001
│ │ └── uatg_gshare_fa_ghr_ones_01-001.S
│ ├── uatg_gshare_fa_ghr_zeros_01-001
│ │ └── uatg_gshare_fa_ghr_zeros_01-001.S
│ ├── uatg_gshare_fa_mispredict_loop_01-001
│ │ └── uatg_gshare_fa_mispredict_loop_01-001.S
│ └── uatg_gshare_fa_ras_push_pop_01-001
│ └── uatg_gshare_fa_ras_push_pop_01-001.S
├── decompressor
│ ├── uatg_decompressor_01-001
│ │ └── uatg_decompressor_01-001.S
│ └── uatg_decompressor_02-001
│ └── uatg_decompressor_02-001.S
├── link.ld
├── makefile
├── model_test.h
├── sv_top
│ ├── coverpoints.sv
│ ├── defines.sv
│ ├── interface.sv
│ └── tb_top.sv
└── test_list.yaml
You can find all the test files within the work directory. The test names
will be same as the test_class. The test will be located within the directory
named same as the module for which the test is written.
For example, a test written for decoder will be present at
~/myquickstart/work/decoder/.
You can also find that the link.ld and model_test.h files have been
generated by UATG. This is because the directory passed along with -ld option
did not already contain a linker file. If it had, these files would have not
been generated.
3.1.1. Assembly syntax check feature¶
By default, UATG generates a makefile within the work directory. This
makefile can be used to perform a syntax check of the Assembly code generated by
from the test plugins.
In order to use this feature, the user can perform a make within the work
directory.
The default target of the makefile is all. Hence, if the user wants to check a specific assembly file, they can mention the name of the assembly file as make’s target.
$ make uatg_gshare_fa_btb_fill_01-001
riscv64-unknown-elf-gcc -mcmodel=medany -static -std=gnu99 -O2 -fno-common\
-fno-builtin-printf -fvisibility=hidden -static -nostdlib -nostartfiles -lm\
-lgcc -march=rv64imac -mabi=lp64 -lm -lgcc -T\
/home/akrish/work/InCore/chromite_uatg_tests//target//link.ld\
/home/akrish/myquickstart//uatg//work/branch_predictor/uatg_gshare_fa_btb_fill_01-001/uatg_gshare_fa_btb_fill_01-001.S\
-I /home/akrish/myquickstart/uatg/uatg/env\
-I /home/akrish/myquickstart//uatg//work/ -DXLEN=64 -o /dev/null
3.2. Using RiVer Core to run tests¶
RiVer Core is an open source python based verification framework. RiVer Core enables running tests generated from any source (random or directed) on any target (irrespective of the language of design and simulation environment) and compare results with any choice of a valid golden reference model. RiVer Core achieves this by splitting the entire verification flow into multiple standardized python-plugin calls. Each plugin encapsulates either a test-generator, target test-environment or the reference simulation environment. The framework itself provides a central control point for calling these plugins and thereby generating, compiling and simulating tests on different targets. It provides a management surface of sorts.
In this section, we will be setting up RiVer Core and then use UATG to run tests on the Chromite DUT.
Warning
We are assuming that you have worked through the Quickstart, ergo, have UATG already installed.
3.2.1. Installing 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.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
3.2.2. 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
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
Warning
Each of the generators have their own unique config.yamls to configure their plugin specific details, ensure you have changed them as required.
The UATG package should be installed in your computer. Guide to installing UATG can be found in the Quickstart.
Warning
Check if uatg is installed by using the uatg --help command.
3.2.3. Setting up RiVer Core¶
We will be using the myquickstart directory which we created earlier in this
document.
This should be the structure of your directory tree.
myquickstart/
├── aliasing.yaml
├── chromite_uatg_tests
│ ├── aliasing.yaml
│ ├── LICENSE.incore
│ ├── modules
│ │ ├── branch_predictor
│ │ │ ├── issues.rst
│ │ │ ├── uatg_gshare_fa_btb_fill_01.py
│ │ │ ├── uatg_gshare_fa_btb_selfmodifying_01.py
│ │ │ ├── uatg_gshare_fa_fence_01.py
│ │ │ ├── uatg_gshare_fa_ghr_alternating_01.py
│ │ │ ├── uatg_gshare_fa_ghr_ones.py
│ │ │ ├── uatg_gshare_fa_ghr_zeros_01.py
│ │ │ ├── uatg_gshare_fa_mispredict_loop_01.py
│ │ │ └── uatg_gshare_fa_ras_push_pop_01.py
│ │ ├── decoder
│ │ │ └── uatg_decoder_arithmetic_insts.py
│ │ ├── decompressor
│ │ │ └── uatg_decompressor.py
│ │ └── index.yaml
│ └── README.rst
├── config.ini
├── core_config.yaml
├── csr_grouping.yaml
├── custom_config.yaml
├── isa_config.yaml
└── work
You should 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:
In addition to the
$ cd ~/myquickstart
$ river_core setup --config
You should also create a new directory mywork within ~/myquickstart
for RiVer core to store the files generated.
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.
Warning
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.2.3.1. Setting up the Generator Plugin - UATG¶
By default, the river_core.ini file specifies aapg to be the generator. But,
we are using UATG as the generator. Hence, it is necesssary to specify
uatg as the generator in line 12.
generator = uatg
In addition to that, you’re required to create a [uatg] section between the
[coverage] and [aapg] section of the INI file. This will be
similiar to the [aapg] section in the river_core.ini file. For this
tutorial you can paste the following code-block into the river_core.ini file
. This section will contain the path to the directories and files required by
uatg to generate tests.
Warning
replace user in the paths with your username.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [uatg]
jobs = 8
count = 1
seed = random
isa_config_yaml = /home/user/myquickstart/isa_config.yaml
core_config_yaml = /home/user/myquickstart/core_config.yaml
custom_config_yaml = /home//user/myquickstart/custom_config.yaml
csr_grouping_yaml = /home//user/myquickstart/csr_grouping.yaml
modules_dir = /home/user/myquickstart/chromite_uatg_tests/modules/
work_dir = /home/user/myquickstart/work/
linker_dir = /home/user/myquickstart/chromite_uatg_tests/target/
modules = all
generate_covergroups = True
alias_file = /home/user/myquickstart/aliasing.yaml
check_logs = True
|
Once you have pasted this into the river_core.ini file and have also updated
the generator argument in line 12. You should be able use UATG as a generator
for RiVer core.
3.2.3.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
$ git checkout using-csrbox
$ pip install -U -r requirements.txt
$ python -m configure.main -ispec sample_config/c64/rv64i_isa.yaml \
-customspec sample_config/c64/rv64i_custom.yaml \
-cspec sample_config/c64/core64.yaml \
-gspec sample_config/c64/csr_grouping64.yaml --verbose debug
$ make -j<jobs> generate_verilog
$ make link_verilator generate_boot_files
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/verilogpath 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.2.3.3. Setting up the Reference Plugin¶
For this quickstart we will be using SPIKE, the RISC-V ISA Simulator. Do the following to setup spike:
$ git clone https://github.com/riscv/riscv-isa-sim.git
$ cd riscv-isa-sim
$ git checkout a04da860635b4e94fc05f23f75fd99578258bc3e
$ export RISCV=<path 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.2.4. Running RiVer Core¶
3.2.4.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.1
info | Copyright (c) 2021 InCore Semiconductors Pvt. Ltd.
debug | Read file from river_core.ini
info | ****** Generation Mode ******
info | The river_core is currently configured to run with following parameters
info | The Output Directory (work_dir) : mywork
info | ISA : rv64imafdc
info | Plugin Jobs : 4
info | Plugin Seed : random
info | Plugin Count (Times to run the test) : 1
info | Now loading uatg Suite
debug | Loading module from /home/akrish/myquickstart//river_core_plugins/generator_plugins/uatg_plugin/uatg_plugin.py
================================================= test session starts ==================================================
platform linux -- Python 3.9.6, pytest-6.2.4, py-1.10.0, pluggy-0.13.1 -- /usr/bin/python
cachedir: .pytest_cache
metadata: {'Python': '3.9.6', 'Platform': 'Linux-5.13.13-200.fc34.x86_64-x86_64-with-glibc2.33', 'Packages': {'pytest': '6.2.4', 'py': '1.10.0', 'pluggy': '0.13.1'}, 'Plugins': {'metadata': '1.11.0', 'forked': '1.3.0', 'xdist': '2.2.1', 'reportlog': '0.1.2', 'html': '3.1.1'}}
rootdir: /home/akrish/myquickstart
plugins: metadata-1.11.0, forked-1.3.0, xdist-2.2.1, reportlog-0.1.2, html-3.1.1
[gw0] linux Python 3.9.6 cwd: /home/akrish/myquickstart
[gw0] Python 3.9.6 (default, Jul 16 2021, 00:00:00) -- [GCC 11.1.1 20210531 (Red Hat 11.1.1-3)]
gw0 [1]
scheduling tests via LoadScheduling
river_core_plugins/generator_plugins/uatg_plugin/gen_framework.py::test_eval[Generating Test-list using uatg]
[gw0] [100%] PASSED river_core_plugins/generator_plugins/uatg_plugin/gen_framework.py::test_eval[Generating Test-list using uatg]
--------------- generated report log file: /home/akrish/myquickstart/mywork/.json/uatg_20210908-1132.json ---------------
-------------------- generated html file: file:///home/akrish/myquickstart/mywork/reports/uatg.html ---------------------
================================================== 1 passed in 0.82s ===================================================
Upon running the command, your UATG Work directory structure will be like this. This indicates that RiVer core has generated the tests which you had written for the DUT.
work/
├── branch_predictor
│ ├── uatg_gshare_fa_btb_fill_01
│ │ └── uatg_gshare_fa_btb_fill_01.S
│ ├── uatg_gshare_fa_btb_selfmodifying_01
│ │ └── uatg_gshare_fa_btb_selfmodifying_01.S
│ ├── uatg_gshare_fa_fence_01
│ │ └── uatg_gshare_fa_fence_01.S
│ ├── uatg_gshare_fa_ghr_alternating_01
│ │ └── uatg_gshare_fa_ghr_alternating_01.S
│ ├── uatg_gshare_fa_ghr_ones_01
│ │ └── uatg_gshare_fa_ghr_ones_01.S
│ ├── uatg_gshare_fa_ghr_zeros_01
│ │ └── uatg_gshare_fa_ghr_zeros_01.S
│ ├── uatg_gshare_fa_mispredict_loop_01
│ │ └── uatg_gshare_fa_mispredict_loop_01.S
│ └── uatg_gshare_fa_ras_push_pop_01
│ └── uatg_gshare_fa_ras_push_pop_01.S
├── decoder
│ └── uatg_decoder_i_ext_r_type
│ └── uatg_decoder_i_ext_r_type.S
├── decompressor
│ └── uatg_decompressor
│ └── uatg_decompressor.S
├── link.ld
├── model_test.h
└── sv_top
├── coverpoints.sv
├── defines.sv
├── interface.sv
└── tb_top.sv
You can also find a test_list.yaml file within the mywork directory which
you had created for RiVer Core to dump files. The test_list format can be
understood by reading the Configuration spec.
mywork/
├── reports
│ └── uatg.html
├── test_list.yaml
└── uatg
3.2.4.2. Running the tests on DUT using RiVer Core¶
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.1
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 river_core.ini
info | ****** Compilation Mode ******
info | The river_core is currently configured to run with following parameters
info | The Output Directory (work_dir) : mywork
info | ISA : rv64imafdc
info | Generator Plugin : uatg
info | Target Plugin : ['chromite_verilator']
info | Reference Plugin : ['modspike']
info | DuT Info
info | DuT Jobs : 4
info | DuT Count (Times to run) : 1
info | Now running on the Target Plugins
info | Now loading chromite_verilator-target
debug | Loading module from /home/akrish/myquickstart//river_core_plugins/dut_plugins/chromite_verilator_plugin/chromite_verilator_plugin.py
debug | All modes enabled
debug | Running run
info | Pre Compile Stage
debug | /home/akrish/myquickstart/mywork//.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 /home/akrish/work/InCore/river_core/river_start/chromite/build/hw/verilog/ -y /home/akrish/work/bluespec/inst/lib/Verilog -y /home/akrish/work/InCore/river_core/river_start/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 -j4 -C obj_dir -f VmkTbSoc.mk
debug | make: Entering directory '/home/akrish/myquickstart/mywork/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 -DVM_TRACE_FST=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 -o VmkTbSoc
debug | make: Leaving directory '/home/akrish/myquickstart/mywork/chromite_verilator/obj_dir'
info | Renaming verilator Binary
info | Creating boot-files
command | $ timeout=240 make -C /home/akrish/myquickstart//river_core_plugins/dut_plugins/chromite_verilator_plugin/boot/ XLEN=64
debug | make: Entering directory '/home/akrish/myquickstart/river_core_plugins/dut_plugins/chromite_verilator_plugin/boot'
debug | make: Leaving directory '/home/akrish/myquickstart/river_core_plugins/dut_plugins/chromite_verilator_plugin/boot'
debug | chromite.dts:20.39-24.9: Warning (interrupt_provider): /cpus/cpu@0/interrupt-controller: Missing #address-cells in interrupt provider
info | Build Hook
debug | Creating Make Target for uatg_decoder_i_ext_r_type
debug | Creating Make Target for uatg_decompressor
debug | Creating Make Target for uatg_gshare_fa_btb_fill_01
debug | Creating Make Target for uatg_gshare_fa_btb_selfmodifying_01
debug | Creating Make Target for uatg_gshare_fa_fence_01
debug | Creating Make Target for uatg_gshare_fa_ghr_alternating_01
debug | Creating Make Target for uatg_gshare_fa_ghr_ones_01
debug | Creating Make Target for uatg_gshare_fa_ghr_zeros_01
debug | Creating Make Target for uatg_gshare_fa_mispredict_loop_01
debug | Creating Make Target for uatg_gshare_fa_ras_push_pop_01
info | Run Hook
debug | Module dir: /home/akrish/myquickstart//river_core_plugins/dut_plugins
debug | Pytest file: /home/akrish/myquickstart//river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py
========================================================================= test session starts ==========================================================================
platform linux -- Python 3.9.6, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: /home/akrish/myquickstart
plugins: metadata-1.11.0, forked-1.3.0, xdist-2.2.1, reportlog-0.1.2, html-3.1.1
[gw0] Python 3.9.6 (default, Jul 16 2021, 00:00:00) -- [GCC 11.1.1 20210531 (Red Hat 11.1.1-3)]
[gw1] Python 3.9.6 (default, Jul 16 2021, 00:00:00) -- [GCC 11.1.1 20210531 (Red Hat 11.1.1-3)]
[gw2] Python 3.9.6 (default, Jul 16 2021, 00:00:00) -- [GCC 11.1.1 20210531 (Red Hat 11.1.1-3)]
[gw3] Python 3.9.6 (default, Jul 16 2021, 00:00:00) -- [GCC 11.1.1 20210531 (Red Hat 11.1.1-3)]
gw0 [10] / gw1 [10] / gw2 [10] / gw3 [10]
scheduling tests via LoadScheduling
river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_decompressor]
river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_gshare_fa_btb_fill_01]
river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_gshare_fa_btb_selfmodifying_01]
river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_decoder_i_ext_r_type]
[gw3] [ 10%] PASSED river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_gshare_fa_btb_selfmodifying_01]
river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_gshare_fa_ghr_zeros_01]
[gw2] [ 20%] PASSED river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_gshare_fa_btb_fill_01]
river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_gshare_fa_ghr_ones_01]
[gw1] [ 30%] PASSED river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_decompressor]
river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_gshare_fa_ghr_alternating_01]
[gw3] [ 40%] PASSED river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_gshare_fa_ghr_zeros_01]
river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_gshare_fa_mispredict_loop_01]
[gw2] [ 50%] PASSED river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_gshare_fa_ghr_ones_01]
river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_gshare_fa_ras_push_pop_01]
[gw1] [ 60%] PASSED river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_gshare_fa_ghr_alternating_01]
[gw3] [ 70%] PASSED river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_gshare_fa_mispredict_loop_01]
[gw2] [ 80%] PASSED river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_gshare_fa_ras_push_pop_01]
[gw0] [ 90%] PASSED river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_decoder_i_ext_r_type]
river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_gshare_fa_fence_01]
[gw0] [100%] PASSED river_core_plugins/dut_plugins/chromite_verilator_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.chromite_verilator uatg_gshare_fa_fence_01]
------------------------------- generated report log file: /home/akrish/myquickstart/mywork/.json/chromite_verilator_20210908-1142.json --------------------------------
------------------------------------- generated html file: file:///home/akrish/myquickstart/mywork/reports/chromite_verilator.html -------------------------------------
==================================================================== 10 passed in 62.82s (0:01:02) =====================================================================
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 /home/akrish/myquickstart//river_core_plugins/reference_plugins/modspike_plugin/modspike_plugin.py
debug | All modes detected
debug | Running build
debug | Pre Compile Stage
debug | /home/akrish/myquickstart/mywork//.json/ Directory exists
debug | Build Hook
debug | Creating Make Target for uatg_decoder_i_ext_r_type
debug | Creating Make Target for uatg_decompressor
debug | Creating Make Target for uatg_gshare_fa_btb_fill_01
debug | Creating Make Target for uatg_gshare_fa_btb_selfmodifying_01
debug | Creating Make Target for uatg_gshare_fa_fence_01
debug | Creating Make Target for uatg_gshare_fa_ghr_alternating_01
debug | Creating Make Target for uatg_gshare_fa_ghr_ones_01
debug | Creating Make Target for uatg_gshare_fa_ghr_zeros_01
debug | Creating Make Target for uatg_gshare_fa_mispredict_loop_01
debug | Creating Make Target for uatg_gshare_fa_ras_push_pop_01
debug | Run Hook
debug | Module dir: /home/akrish/myquickstart//river_core_plugins/reference_plugins
debug | Pytest file: /home/akrish/myquickstart//river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py
========================================================================= test session starts ==========================================================================
platform linux -- Python 3.9.6, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: /home/akrish/myquickstart
plugins: metadata-1.11.0, forked-1.3.0, xdist-2.2.1, reportlog-0.1.2, html-3.1.1
[gw0] Python 3.9.6 (default, Jul 16 2021, 00:00:00) -- [GCC 11.1.1 20210531 (Red Hat 11.1.1-3)]
gw0 [10]
scheduling tests via LoadScheduling
river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_decoder_i_ext_r_type]
[gw0] [ 10%] PASSED river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_decoder_i_ext_r_type]
river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_decompressor]
[gw0] [ 20%] PASSED river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_decompressor]
river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_gshare_fa_btb_fill_01]
[gw0] [ 30%] PASSED river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_gshare_fa_btb_fill_01]
river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_gshare_fa_btb_selfmodifying_01]
[gw0] [ 40%] PASSED river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_gshare_fa_btb_selfmodifying_01]
river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_gshare_fa_fence_01]
[gw0] [ 50%] PASSED river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_gshare_fa_fence_01]
river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_gshare_fa_ghr_alternating_01]
[gw0] [ 60%] PASSED river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_gshare_fa_ghr_alternating_01]
river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_gshare_fa_ghr_ones_01]
[gw0] [ 70%] PASSED river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_gshare_fa_ghr_ones_01]
river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_gshare_fa_ghr_zeros_01]
[gw0] [ 80%] PASSED river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_gshare_fa_ghr_zeros_01]
river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_gshare_fa_mispredict_loop_01]
[gw0] [ 90%] PASSED river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_gshare_fa_mispredict_loop_01]
river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_gshare_fa_ras_push_pop_01]
[gw0] [100%] PASSED river_core_plugins/reference_plugins/modspike_plugin/gen_framework.py::test_eval[make -f /home/akrish/myquickstart/mywork/Makefile.spike uatg_gshare_fa_ras_push_pop_01]
-------------------------------------- generated report log file: /home/akrish/myquickstart/mywork/.json/spike_20210908-1143.json --------------------------------------
------------------------------------------- generated html file: file:///home/akrish/myquickstart/mywork/reports/spike.html --------------------------------------------
========================================================================== 10 passed in 5.91s ==========================================================================
info | Dumps for test uatg_decoder_i_ext_r_type Match. TEST PASSED
info | Dumps for test uatg_decompressor Match. TEST PASSED
info | Dumps for test uatg_gshare_fa_btb_fill_01 Match. TEST PASSED
info | Dumps for test uatg_gshare_fa_btb_selfmodifying_01 Match. TEST PASSED
info | Dumps for test uatg_gshare_fa_fence_01 Match. TEST PASSED
info | Dumps for test uatg_gshare_fa_ghr_alternating_01 Match. TEST PASSED
info | Dumps for test uatg_gshare_fa_ghr_ones_01 Match. TEST PASSED
info | Dumps for test uatg_gshare_fa_ghr_zeros_01 Match. TEST PASSED
info | Dumps for test uatg_gshare_fa_mispredict_loop_01 Match. TEST PASSED
info | Dumps for test uatg_gshare_fa_ras_push_pop_01 Match. TEST PASSED
info | Checking for a generator json to create final report
debug | Detected generated JSON Files: ['mywork/.json/uatg_20210908-1025.json', 'mywork/.json/uatg_20210908-1026.json', 'mywork/.json/uatg_20210908-1132.json']
info | Not checking logs
debug | Removing artifacts for Chromite
debug | Removing extra files for Test: uatg_decoder_i_ext_r_type
debug | Removing extra files for Test: uatg_decompressor
debug | Removing extra files for Test: uatg_gshare_fa_btb_fill_01
debug | Removing extra files for Test: uatg_gshare_fa_btb_selfmodifying_01
debug | Removing extra files for Test: uatg_gshare_fa_fence_01
debug | Removing extra files for Test: uatg_gshare_fa_ghr_alternating_01
debug | Removing extra files for Test: uatg_gshare_fa_ghr_ones_01
debug | Removing extra files for Test: uatg_gshare_fa_ghr_zeros_01
debug | Removing extra files for Test: uatg_gshare_fa_mispredict_loop_01
debug | Removing extra files for Test: uatg_gshare_fa_ras_push_pop_01
debug | Removing artifacts for Spike
debug | Removing extra files for Test: uatg_decoder_i_ext_r_type
debug | Removing extra files for Test: uatg_decompressor
debug | Removing extra files for Test: uatg_gshare_fa_btb_fill_01
debug | Removing extra files for Test: uatg_gshare_fa_btb_selfmodifying_01
debug | Removing extra files for Test: uatg_gshare_fa_fence_01
debug | Removing extra files for Test: uatg_gshare_fa_ghr_alternating_01
debug | Removing extra files for Test: uatg_gshare_fa_ghr_ones_01
debug | Removing extra files for Test: uatg_gshare_fa_ghr_zeros_01
debug | Removing extra files for Test: uatg_gshare_fa_mispredict_loop_01
debug | Removing extra files for Test: uatg_gshare_fa_ras_push_pop_01
info | Now generating some good HTML reports for you
info | Final report saved at mywork/reports//report.html
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.