blob: db2c640b19431f31d148c834545c04c01a92bc5f [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
{
build_cmd: "{job_prefix} vcs"
build_ex: "{build_dir}/simv"
run_cmd: "{job_prefix} {build_ex}"
// This option enables the following: (needed for uvm_hdl_*)
// - Read capability on registers, variables, and nets
// - Write (deposit) capability on registers and variables
// - Force capability on registers, variables, and nets
// TODO Trim this flag since +f hurts performance.
vcs_build_opt_debug_access: "-debug_access+f"
post_flist_opts: ""
build_opts: ["-sverilog -full64 -licqueue -ntb_opts uvm-1.2",
"-timescale={timescale}",
"-Mdir={build_ex}.csrc",
"-o {build_ex}",
"-f {sv_flist}",
"{post_flist_opts}",
// Enable LCA features. It does not require separate licenses.
"-lca",
// List multiple tops for the simulation. Prepend each top level with `-top`.
"{eval_cmd} echo {sim_tops} | sed -E 's/(\\S+)/-top \\1/g'",
"+incdir+{build_dir}",
// Turn on warnings for non-void functions called with return values ignored
"+warn=SV-NFIVC",
"+warn=noUII-L",
// Disable unnecessary LCA warning.
"+warn=noLCA_FEATURES_ENABLED",
// Disable warnings about bind directive not being applied.
"+warn=noBNA",
// Below option required for $error/$fatal system calls
"-assert svaext",
// Force unique and priority to evaluate compliance checking only on the stable
// and final value of the selection input at the end of a simulation timestep.
// See https://github.com/lowRISC/ibex/issues/845.
"-xlrm uniq_prior_final",
// Force DPI-C compilation in C99 mode. The -fno-extended-identifiers flag tells g++
// not to worry about unicode. For some bizarre reason, the VCS DPI code contains
// preprocessor macros with smart quotes, which causes GCC 10.2 and later to choke
// otherwise. The double-escaped quotes are because this needs to go inside a string
// that gets passed to Make (stripping one level of quotes), and then needs to
// result in an argument with an embedded space (the other one).
"-CFLAGS --std=c99 -CFLAGS -fno-extended-identifiers",
// C++11 standard is enforced for all sources, including the DPI-C constructs.
// TODO, may need to update to c++14 to meet our requirements
// Refer to https://docs.opentitan.org/doc/ug/install_instructions
"-CFLAGS --std=c++11",
// Without this magic LDFLAGS argument below, we get compile time errors with
// VCS on Google Linux machines that look like this:
// .../libvcsnew.so: undefined reference to `snpsReallocFunc'
// .../libvcsnew.so: undefined reference to `snpsCheckStrdupFunc'
// .../libvcsnew.so: undefined reference to `snpsGetMemBytes'
"-LDFLAGS -Wl,--no-as-needed",
// This option is needed for uvm_hdl_*, when it accesses the array under `celldefine
"-debug_region=cell+lib",
"{vcs_build_opt_debug_access}",
// Use this to conditionally compile for VCS (example: LRM interpretations differ
// across tools).
"+define+VCS",
// Upgrade below warnings to errors to make VCS more strict on syntax to avoid
// having issue with other simulators but passing with VCS
//
// Identifier previously declared
"-error=IPDW",
// Input Supply Port with no driver
"-error=UPF_ISPND",
// Invalid generic or parameter assignment
"-error=IGPA",
// Class scope used outside of class
"-error=PCSRMIO",
// Attempt to override undefined parameter
"-error=AOUP",
// Unbound component
"-error=ELW_UNBOUND",
// Illegal Use of Wildcard Index
"-error=IUWI",
// Index into non-array variable
"-error=INAV",
// Illegal Static Cast
"-error=SV-ISC",
// Obsolete System Verilog feature
"-error=OSVF-NPVIUFPI",
// Duplicate port in module instantiation
"-error=DPIMI",
// Identifier in ANSI port declaration
"-error=IPDASP",
// File not found
"-error=CM-HIER-FNF",
// Concatenations with unsized constants
"-error=CWUC",
// More arguments than needed
"-error=MATN",
// Specifying negative delays is invalid
"-error=STASKW_NDTAZ1",
// Too many parameter overrides
"-error=TMPO",
// Class objects must not hide other class members due to same name
"-error=SV-OHCM",
// ENUMASSIGN issues can cause LEC warnings later down the road (see #10083
// and #10952 for context). The warning is therefore promoted to an error
// in simulations in order to catch this as early as possible.
"-error=ENUMASSIGN",
// Tasks must not be enabled in functions. Other tools do not allow this.
"-error=TEIF"
]
run_opts: ["-licqueue",
"-ucli -do {run_script}",
"+ntb_random_seed={seed}",
// Disable the display of the SystemVerilog assert and cover statement summary
// at the end of simulation. This summary is list of assertions that started but
// did not finish because the simulation terminated, or assertions that did not
// fire at all. The latter is analyzed anyway in the collected coverage. Neither
// of these is useful in regular simulations.
"-assert nopostproc",
"+UVM_TESTNAME={uvm_test}",
"+UVM_TEST_SEQ={uvm_test_seq}"]
// Supported wave dumping formats (in order of preference).
supported_wave_formats: ["fsdb", "vpd"]
// Default tcl script used when running the sim. Override if needed.
run_script: "{dv_root}/tools/sim.tcl"
// Coverage related.
cov_db_dir: "{scratch_path}/coverage/{build_mode}.vdb"
// Individual test specific coverage data - this will be deleted if the test fails
// so that coverage from failiing tests is not included in the final report.
cov_db_test_dir_name: "{run_dir_name}.{seed}"
cov_db_test_dir: "{cov_db_dir}/snps/coverage/db/testdata/{cov_db_test_dir_name}"
// Merging coverage.
// "cov_db_dirs" is a special variable that appends all build directories in use.
// It is constructed by the tool itself.
cov_merge_dir: "{scratch_path}/cov_merge"
cov_merge_db_dir: "{cov_merge_dir}/merged.vdb"
cov_merge_cmd: "{job_prefix} urg"
cov_merge_opts: ["-lca",
"-full64",
// No need of generating report when merging coverage.
"-noreport",
// Merge results from tests in parallel.
"-parallel",
"-parallel_split 20",
"-parallel_temproot {cov_merge_dir}",
"+urg+lic+wait",
// Merge same assert instances found in different VDBs.
"-merge_across_libs",
// This enables grading on the merged vdb.
"-show tests",
// Enable union mode of flexible merging for covergroups.
"-flex_merge union",
// Use cov_db_dirs var for dir args; append -dir in front of each
"{eval_cmd} echo {cov_db_dirs} | sed -E 's/(\\S+)/-dir \\1/g'",
"-dbname {cov_merge_db_dir}"]
// Generate coverage reports in text as well as html.
cov_report_dir: "{scratch_path}/cov_report"
cov_report_cmd: "{job_prefix} urg"
cov_report_opts: ["-lca",
"-full64",
"+urg+lic+wait",
// Lists all the tests that covered a given object.
"-show tests",
// Enable test grading using the "index" scheme, and the
// generation of the list of contributing tests with
// "testfile".
"-grade index testfile",
// Use simple ratio of total covered bins over total bins across cps & crs,
"-group ratio",
// Follow LRM naming conventions for array bins.
"-group lrm_bin_name",
// Compute overall coverage for per-instance covergroups individually rather
// than cumulatively.
"-group instcov_for_score",
"-dir {cov_merge_db_dir}",
"-line nocasedef",
"-format both",
// Prepend each el file with `-elfile`.
"{eval_cmd} echo {vcs_cov_excl_files} | sed -E 's/(\\S+)/-elfile \\1/g'",
"-report {cov_report_dir}"]
cov_report_txt: "{cov_report_dir}/dashboard.txt"
cov_report_page: "dashboard.html"
// UNR related.
// All code coverage, assert isn't supported
cov_unr_metrics: "line+cond+fsm+tgl+branch"
cov_unr_dir: "{scratch_path}/cov_unr"
cov_unr_common_build_opts: ["-sverilog -full64 -licqueue -ntb_opts uvm-1.2",
"-timescale={timescale}"]
// Use recommended UUM (Unified usage model) 3 steps flow. The other flow defines macro
// "SYNTHESIS", which we have used in design
cov_unr_build_cmd: [// Step 1
"{job_prefix} vlogan {cov_unr_common_build_opts} &&",
// Step 2
"{job_prefix} vlogan {cov_unr_common_build_opts}",
// grep all defines from {build_opts} from step 2
'''{eval_cmd} opts=`echo {build_opts}`; defines=; d=; \
for o in $opts; \
do \
d=`echo $o | grep -o '+define+.*'`; \
defines="$defines $d"; \
done; \
echo $defines
''',
"-f {sv_flist} &&",
// Step 3
"{job_prefix} vcs {cov_unr_common_build_opts}"]
cov_unr_build_opts: ["-cm {cov_unr_metrics}",
"{vcs_cov_cfg_file}",
"-unr={vcs_unr_cfg_file}",
"{dut}"]
cov_unr_run_cmd: ["{job_prefix} ./unrSimv"]
cov_unr_run_opts: ["-unr"]
// Analyzing coverage - this is done by invoking --cov-analyze switch. It opens up the
// GUI for visual analysis.
cov_analyze_dir: "{scratch_path}/cov_analyze"
cov_analyze_cmd: "{job_prefix} verdi"
cov_analyze_opts: ["-cov",
"-covdir {cov_merge_db_dir}",
"-line nocasedef"
"-elfile {vcs_cov_excl_files}"]
// Vars that need to exported to the env.
exports: [
{ VCS_LICENSE_WAIT: 1 },
{ VCS_ARCH_OVERRIDE: "linux" },
{ VCS_LIC_EXPIRE_WARNING: 1 }
]
// Defaults for VCS
// By default, collect all coverage metrics.
cov_metrics: "line+cond+fsm+tgl+branch+assert"
// Supply the cov configuration file.
// Note that this needs to be set as `-cm_hier <file>`.
// Include hierarchies for both code coverage and assertions.
vcs_cov_cfg_file: ""
// Supply cov configuration file for -cm_fsmresetfilter.
vcs_fsm_reset_cov_cfg_file: ""
// Supply the cov exclusion files.
vcs_cov_excl_files: []
// pass and fail patterns
build_fail_patterns: ["^Error-.*$"]
run_fail_patterns: ["^Error-.*$"] // Null pointer error
build_modes: [
{
name: vcs_gui
is_sim_mode: 1
build_opts: ["-debug_access+all+reverse"]
run_opts: ["-gui", "-l {run_dir}/simv.log"]
}
{
name: vcs_waves
is_sim_mode: 1
build_opts: [// Enable generating Verdi Knowledge Database
"-kdb",
"-debug_access"]
}
{
name: vcs_waves_off
is_sim_mode: 1
build_opts: [// disable dumping assertion failures to improve runtime performance
"-assert novpi+dbgopt"]
}
{
name: vcs_cov
is_sim_mode: 1
build_opts: [// Enable the required cov metrics
"-cm {cov_metrics}",
// Set the coverage hierarchy
"{vcs_cov_cfg_file}",
"-cm_common_hier",
// Cover all continuous assignments
"-cm_line contassign",
// Dump toggle coverage on mdas, array of structs and on ports only
"-cm_tgl mda+structarr+portsonly",
// Report condition coverage within tasks, functions and for loops.
"-cm_cond for+tf",
// Ignore initial blocks for coverage
"-cm_report noinitial",
// Filter unreachable/statically constant blocks. seqnoconst does a more
// sophisticated analysis including NBA / assignment with delays.
"-cm_seqnoconst",
// Creates a constfile.txt indicating a list of detected constants.
"-diag noconst"
// Don't count coverage that's coming from zero-time glitches
"-cm_glitch 0",
// Ignore warnings about not applying cm_glitch to path and FSM
"+warn=noVCM-OPTIGN",
// Coverage database output location
"-cm_dir {cov_db_dir}",
// The following option is to improve runtime performance
"-Xkeyopt=rtopt",
// Exclude FSM transitions that can only happen on reset
"-cm_fsmresetfilter {vcs_fsm_reset_cov_cfg_file}",
]
run_opts: [// Enable the required cov metrics
"-cm {cov_metrics}",
// Same directory as build
"-cm_dir {cov_db_dir}",
// Don't output cm.log which can be quite large
"-cm_log /dev/null",
// Provide a name to the coverage collected for this test
"-cm_name {cov_db_test_dir_name}"]
}
{
name: vcs_xprop
is_sim_mode: 1
build_opts: ["-xprop={vcs_xprop_cfg_file}",
// Enable xmerge mode specific performance optimization
"-xprop=mmsopt"]
}
{
name: vcs_profile
is_sim_mode: 1
build_opts: ["-simprofile"]
run_opts: ["-simprofile {profile}"]
}
{
name: vcs_loopdetect
is_sim_mode: 1
build_opts: ["+vcs+loopreport", "+vcs+loopdetect"]
run_opts: ["+vcs+loopreport", "+vcs+loopdetect"]
}
]
}