tree: 40d73616bd476592da14ffb818aadd40b4846e54 [path history] [tgz]
  1. fail_patterns
  2. fusesoc.mk
  3. Makefile
  4. modes.mk
  5. pass_fail
  6. pass_patterns
  7. ral_gen.mk
  8. README.md
  9. rules.mk
  10. run_dir_limiter
hw/dv/tools/README.md

DV build and run flow

The Makefile system implemented here is a standardized solution for building and running DV sims for all ip/block/top level testbenches. This is only a stop gap solution until a proper build and run tool is developed and implemented. The way the Makefiles are structured will hopefully make the eventual transition easier.

Makefile Organization

- hw/ip/<ip>/dv/Makefile OR
  hw/top_earlgrey/dv/Makefile
  - hw/dv/tools/Makefile
    - ral_gen.mk
    - fusesoc.mk
    - modes.mk
    - rules.mk
  - $VCS_PRIV_DIR/vcs.mk

Test Makefile

The test Makefile that serves as the entry point into the DV build and run flow is placed in individual ‘dv’ directories of each testbench. For example: hw/ip/uart/dv/Makefile This includes the top level Makefile, some mandatory variables that are to be set and exported and the actual tests.

Top level Makefile

This includes the top level Makefile which contains generic set of variable names (most of which can be overridden) to indicate where, what and how to build and run tests, some option groups and generic set of rules. This is located at hw/dv/tools/Makefile

Generic Tool-independent Make variables

The following is a list of Make variables that are used for specifying options to run simulations in a tool-independent way. Some variables are overridable in the Test Makefile (or command line) and some are appended to group / add options together. Please see following table for more details:

Make variableDescriptionOverridable (O) or Appendable (A)
DV_DIRThis is the top level DV directory for the IP containing the Test Makefile.
DUT_TOPThis is the top level dut module under test. This is used in common vcs.tcl file placed in the $VCS_PRIV_DIR directory.
TB_TOPThis is the top level tb module under test. This is used in common vcs.tcl file placed in the $VCS_PRIV_DIR directory.
FUSESOC_COREThis is the testbench fusesoc .core name that contains the simulation target. This .core file is typically placed in the same directory as the test Makefile.
COMPILE_KEYUsers need to define COMPILE_KEY sets for building Test Makefile, CL with a unique sets of compile time options. This is to be done in the Test Makefile in this way:
ifeq (${COMPILE_KEY},foo)
BUILD_OPTS += +define+FOO
endif
There is a ‘default’ compile key already added which implies no additional compile time options are required. Within each test specification, the COMPILE_KEY can be overridden to use the specific compile key.
ifeq (${TEST_NAME},foo_test)
COMPILE_KEY = foo )
# other test opts
endif
O (Within tests, & command line)
UVM_TESTSV UVM test class to create in the test. This is set to the ‘base_test’ by default and is overridden in the test specifications if needed.O (Test Makefile)
UVM_TEST_SEQSV UVM test sequence to create in the test. This is set to the ‘base_test’ by default and is overridden in the test specifications if needed.O (Test Makefile)
TEST_NAMEName of the test to run. These are specified in the test Makefile. By default, it is set to run the sanity test (simply calling ‘make’ will run this test).O (command line only)
SIMULATORWhat simulator to use. Currently only ‘vcs’ is supported and is set by default.O
BUILD_OPTSOptions to pass for build.A (Test Makefile :: COMPILE_KEY specifications only)
CL_BUILD_OPTSPass additional build options on the command line.A (command line only)
RUN_OPTSOptions to pass for run.A (Test Makefile :: test specifications only)
CL_RUN_OPTSPass additional run options on the command line.A (command line only
WAVESEnable wave dumps (fsdb). Set to 0 by default; override with WAVES=1.O
SIMPROFILETurn on sim profiling (time option by default). Set to 0 by default; override with SIMPROFILE=1.O
COVTurn on coverage collection. Set to 0 by default; override with COV=1.O
UVM_VERBOSITYVerbosity level for UVM. Set to UVM_LOW by default; override with UVM_VERBOSITY=UVM_NONE / UVM_LOW / UVM_HIGH / UVM_DEBUG.O
BUILD_LOCBuild directory name in the scratch area. This defaults to the COMPILE_KEY used by the corresponding test. You can override it to use a different directory name. This is helpful when there is a test / regression already running and you made some fixes and want to rerun some failing test from another terminal without affecting the existing running sims.O
RUN_LOCRun directory name in the scratch area. This defaults to a ‘timestamp’ value. You can override this to a specific name. Everytime a test is run, it creates a new directory with the current timestamp for the name. By overriding this with a specific name and rerunning the same test with the same directory name, you won't have to reopen waves - you can just reload. This is useful during test debug.O
SCRATCH_ROOTThis is the path to the root scratch area for bulding and running tests. If SCRATCH_ROOT is not already set, it will create a scratch directory in pwd which typically is the same as DV_DIR.O (command line only)
RUN_DIR_LIMITWhen you run tests, The flow creates a new RUN_LOC directory with the current timestamp (unless it is overridden). In course of debug, you may run the same test multiple times, which will eventually result in a large number of old timestamp directories in the scratch space. Without periodic cleanup, you may run out of scratch space. By default, this variable is set to 5, which means before running the test, it will prune the test area to contain no more than RUN_DIR_LIMIT number of most recent directories (including the newly created one). On the flipside, if you want to run the same test with a large number of iterations, you will need to override this variable to be set to that many iterations to prevent the flow from deleting actively running simulations.O (command line only)
SEEDThis is a run time parameter passed to the sim executable. It uses od command to generate a 32-bit random number to run the sim with a unique seed. You can override this variable on the command line to run the test with a specific seed for debug.O (command line only)

This is not an exhaustive list of Make variables. Please see ./Makefile and ./*.mk for more such variables in use.

ral_gen.mk

RAL generation tool specific mk file

This lists tools and options to generate the ral model by simply running the command make ral from the same directory as the Test Makefile. For generating the UVM REG based RAL model, we use the same in-house tool for autogenerating RTL with mako template.

fusesoc.mk

RTL/TB filelist generation tool specific mk file

This lists tools and options to generate the flattened filelist to supply to the simulator during the build step.

modes.mk

Modes or option groups that can be turned on easily

This lists common modes (which are groups of compile time and / or run time options) passed to the simulator for turning on a specific function. Modes listed in this file are meant to be common across all environments and simulator tools. Modes added in this file are WAVES, COV, SIMPROFILE and UVM_TRACE. These are truly global and can be turned on easily on the command line by setting them to 1: COV=1 switch on the command line will turn on coverage. These modes may require options that are specific to the simulator tool, so the make variable SIMULATOR can be used to set tool specific options.

rules.mk

List of Make targets and recipes

This is the only file in the make flow that contains targets and recipes that are completely agnostic to the tools used. It sequences the build and run set of targets.

vcs.mk

VCS tool specific options

The top level Makefile uses SIMULATOR variable (which is set to vcs by default) to enable tool specific options. If support for new tools need to be added, then those tool specific mk files need to be supplied. It sets the following mandatory variables - SIMCC & SIMX. It also exports additional tool specific variables to the sub shell when the recipes are executed. This file has been placed in the $VCS_PRIV_DIR directory, which is outside of this OpenTitan repo. The reason for that is it contains sensitive tool specific options that cannot be exposed. The private repo specific to VCS tools (TBD) needs to be cloned and the path to the directory containing this file needs to be set with VCS_PRIV_DIR environment variable prior to invoking the simulation.

Simulation targets

Building and running tests

All of the below command examples are to be run from the ‘dv’ directory containing the Test Makefile.

Run the following command to build and run tests:

make TEST_NAME=[test-name] [overrides]

To only buld the simv:

make build TEST_NAME=[test-name] [overrides]

To run the sim after build is complete:

make run TEST_NAME=[test-name] [overrides]

To build and run the sanity test:

make This will work provided user has specified a set a ‘default’ value to the TEST_NAME Make variable.

Below are some examples
Build and run a test:

This builds the ‘default’ compile key and runs the ‘uart_sanity’ test make TEST_NAME=uart_sanity

Run with specific seed:

make TEST_NAME=<test-name> SEED=123423334

Dump waves:

make TEST_NAME=<test-name> SEED=123423334 WAVES=1

Run with coverage option enabled:

make TEST_NAME=<test-name> COV=1

The options.mk file lists several tool options passed to the build and run steps for enabling coverage collection. One of the options is adding a hier file (with a -cm_hier switch). By default, it looks for a file called cover.cfg in the ‘dv’ directory set using the CM_HIER Make variable - if it exists, it adds the switch automatically when coverage is enabled. If another hier file is desired (or with another name), it can be placed anywhere as the user desires and user can add the following line to the Test Makefile:

CM_HIER := <path-to-hier-file

Enable sim profiling:

make TEST_NAME=<test-name> SIMPROFILE=1

Override UVM verbosity:

make TEST_NAME=<test-name> WAVES=1 UVM_VERBOSITY=UVM_DEBUG

Build only:

This will build the ‘default’ compile key make build

Build ‘foo’ compile key instead:

make build COMPILE_KEY=foo

Build with ‘FOO’ preprocessor flag:

make build CL_BUILD_OPTS+=+define+FOO

Run with ‘FOO’ runtime plusarg:

make TEST_NAME=<test-name> CL_RUN_OPTS+=+FOO

Run only:

This assumes the simv executable for the specified compile key is available in the default directory and will use it to run the test

make run TEST_NAME=<test-name> SEED=123423334 WAVES=1