blob: 5322930745304ba028922e35adaa1eb789fbf971 [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} xrun"
run_cmd: "{job_prefix} xrun"
build_db_dir: "{build_dir}/xcelium.d"
build_opts: ["-elaborate -64bit -sv",
// Wait to acquire a license.
"-licqueue",
// TODO: duplicate primitives between OT and Ibex #1231
"-ALLOWREDEFINITION",
"-messages -errormax 50",
"-timescale {timescale}",
"-f {sv_flist}",
"-uvmhome CDNS-1.2",
// Specify the library name for the run step to use.
"-xmlibdirname {build_db_dir}",
// List multiple tops for the simulation. Prepend each top level with `-top`.
"{eval_cmd} echo {sim_tops} | sed -E 's/(\\S+)/-top \\1/g'",
// Set the top level elaborated entity (snapshot name) correctly since there are
// multiple tops.
"-snapshot {tb}",
// for uvm_hdl_* used by csr backdoor
"-access +rw",
// This is to fix a timescale issue due to using `resetall to reset timescale and
// `-sv` compile option. #7178
"-enable_strict_timescale",
// Use this to conditionally compile for Xcelium (example: LRM interpretations differ
// across tools).
"+define+XCELIUM",
// Suppress printing of the copyright banner.
"-nocopyright",
// Ignore "timescale is not specified for the package" warning
"-nowarn TSNSPK",
// Ignore "IEEE 1800-2009 SystemVerilog simulation semantics" warning
"-nowarn DSEMEL",
// Ignore hierarchial ref warnings in interfaces
"-nowarn CUVIHR",
// Ignore warning "Potentially reversed dist range may cause it to be treated as
// empty". This is thrown when and expression like `var - 1` is added to a
// randomization distribution, which can potentially be a negative value.
"-nowarn REVRNG",
// Ignore warning "Include directory <path> given but not used". This is benign.
"-nowarn SPDUSD",
// Needed for including "secded_enc.h".
"-I{build_dir}/src/lowrisc_dv_secded_enc_0",
// This warning is thrown when a scalar enum variable is assigned to an enum array.
// Other tools (e.g., FPV) treat such assignments as an error, hence we bump it to
// an error in simulation so that this can be caught early in CI.
"-xmerror ENUMERR"
]
// We want to allow the possibility of passing no test or no test sequence. Unfortunately,
// Xcelium generates an error (*E,OPTP2ND) if you pass an empty plusarg. To avoid doing so, these
// two variables expand to e.g. "+UVM_TESTNAME=foo" if we have a test and the empty string if
// not.
uvm_testname_plusarg: "{eval_cmd} echo {uvm_test} | sed -E 's/(.+)/+UVM_TESTNAME=\\1/'"
uvm_testseq_plusarg: "{eval_cmd} echo {uvm_test_seq} | sed -E 's/(.+)/+UVM_TEST_SEQ=\\1/'"
run_opts: ["-input {run_script}",
// Suppress printing of the copyright banner.
"-nocopyright",
// Wait to acquire a license.
"-licqueue",
"-64bit -xmlibdirname {build_db_dir}",
// Use the same snapshot name set during the build step.
"-r {tb}",
"+SVSEED={seed}",
"{uvm_testname_plusarg}",
"{uvm_testseq_plusarg}",
// Ignore "IEEE 1800-2009 SystemVerilog simulation semantics" warning
"-nowarn DSEM2009",
]
// Vars that need to exported to the env.
exports: [
// Poll for an available license in all servers.
{ CDS_LIC_QUEUE_POLL: 1 },
// Poll for an available license every 1 min.
{ CDS_LIC_QUEUE_POLL_INT: 60 },
// X-prop related: these were suggested by Xcelium as warnings during the build time.
// These enable array corruption when the index is out of range or invalid.
{ VL_ENABLE_INVALID_IDX_XPROP: 1 },
{ VL_ENABLE_OUTOFRANGE_IDX_XPROP: 1 },
// Export the cov_report path so that the tcl file can read these as env vars.
{ cov_merge_db_dir: "{cov_merge_db_dir}" },
{ cov_report_dir: "{cov_report_dir}" }
// Export unr related paths for make
{cov_unr_dir: "{cov_unr_dir}" }
// Add an additional single quotation because `cov_merge_cmd` has an empty space, it will cause
// trouble when exporting the entire command in the environment.
{cov_merge_cmd: "{cov_merge_cmd}"}
// job prefix
{job_prefix: "{job_prefix}"}
]
// Supported wave dumping formats (in order of preference).
supported_wave_formats: ["shm", "fsdb", "vcd"]
// Default tcl script used when running the sim. Override if needed.
run_script: "{dv_root}/tools/sim.tcl"
// Coverage related.
// By default, collect all coverage metrics: block:expr:fsm:toggle:functional.
cov_metrics: all
// Supply the cov configuration file.
// Note that this needs to be set as -covfile <file>.
xcelium_cov_cfg_file: ""
// Supply the cov exclusion tcl script - passed on to IMC using the -init switch.
xcelium_cov_excl_script: ""
// Supply the cov refinement files - passed on to IMC using the -load_refinement switch.
xcelium_cov_refine_files: []
// Set the coverage directories.
cov_work_dir: "{scratch_path}/coverage"
cov_db_dir: "{cov_work_dir}/{build_mode}"
// 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}/{cov_db_test_dir_name}"
// Merging coverage.
// It is constructed by the tool itself.
cov_merge_dir: "{scratch_path}/cov_merge"
cov_merge_db_dir: "{cov_merge_dir}/merged"
cov_merge_cmd: "imc"
cov_merge_opts: ["-64bit",
"-licqueue",
"-exec {dv_root}/tools/xcelium/cov_merge.tcl"]
// Generate covreage reports in text as well as html.
cov_report_dir: "{scratch_path}/cov_report"
cov_report_cmd: "{job_prefix} imc"
cov_report_opts: ["-64bit",
"-licqueue",
"-load {cov_merge_db_dir}",
" {eval_cmd} echo {xcelium_cov_excl_script} | sed -E 's/(\\S+)/-init \\1/g' ",
" {eval_cmd} echo {xcelium_cov_refine_files} | sed -E 's/(\\S+)/-load_refinement \\1/g' ",
"-exec {dv_root}/tools/xcelium/cov_report.tcl"]
cov_report_txt: "{cov_report_dir}/cov_report.txt"
cov_report_page: "index.html"
// 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} imc"
cov_analyze_opts: ["-64bit",
"-licqueue",
"-load {cov_merge_db_dir}",
" {eval_cmd} echo {xcelium_cov_excl_script} | sed -E 's/(\\S+)/-init \\1/g' ",
" {eval_cmd} echo {xcelium_cov_refine_files} | sed -E 's/(\\S+)/-load_refinement \\1/g' "]
cov_unr_dir: "{scratch_path}/cov_unr"
// not needed we can reuse the last build snapshot
cov_unr_build_opts:[]
cov_unr_build_cmd:[]
cov_unr_run_cmd: "{job_prefix} xrun"
cov_unr_run_opts: [// use xrun in UNR mode
"-unr",
// JasperGold switch (use formal)
"-jg",
// use the same snapshot as used for regression
"-r {tb}",
// pointer to the merged coverage data from the regression
"-covdb {cov_merge_db_dir}",
// what metrics to use
"-jg_coverage {cov_metrics}",
"-64bit",
"-xmlibdirname {build_db_dir}",
// overwrite previous results
"-covoverwrite",
"-inst_top {dut_instance}",
// UNR Configurations
"-input {xcelium_unr_cfg_file} "]
// pass and fail patterns
build_fail_patterns: ["\\*E.*$"]
run_fail_patterns: ["\\*E.*$"] // Null pointer error
build_modes: [
{
name: xcelium_gui
is_sim_mode: 1
build_opts: ["-createdebugdb", "-access +c"]
run_opts: ["-gui"]
}
{
name: xcelium_waves
is_sim_mode: 1
build_opts: ["-access +c"]
}
{
name: xcelium_waves_off
is_sim_mode: 1
build_opts: []
}
{
name: xcelium_cov
is_sim_mode: 1
build_opts: [// Enable the required cov metrics.
"-coverage {cov_metrics}",
// Limit the scope of coverage collection to the DUT.
"-covdut {dut}",
// Set the coverage configuration file
"-covfile {xcelium_cov_cfg_file}",
// Don't warn about the switches we set that will be default in future releases.
"-nowarn COVDEF",
]
run_opts: [// Put the coverage model (*.ucm) and the database (*.ucd) together.
"-covmodeldir {cov_db_test_dir}",
// Coverage database output location.
"-covworkdir {cov_work_dir}",
// Set the scope to the build mode name.
"-covscope {build_mode}",
// Test coverage dir name to create under cov_db_dir.
"-covtest {cov_db_test_dir_name}",
// Overwrite the coverage data of a specific test/seed if it already exists.
"-covoverwrite"]
}
// TODO support profile for xcelium
{
name: xcelium_profile
is_sim_mode: 1
build_opts: ["-perfstat"]
run_opts: ["-perfstat", "-perflog perfstat.log"]
}
{
name: xcelium_xprop
is_sim_mode: 1
build_opts: ["-xprop F -xverbose"]
}
{
// TODO: Add build and run options to enable zero delay loop detection.
name: xcelium_loopdetect
is_sim_mode: 1
build_opts: []
run_opts: []
}
]
}