blob: 32ffd8a8a917ef2a812df9911a65b12ab161845e [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_opts: ["-elaborate -64bit -access +r -sv",
"-licqueue",
// TODO: duplicate primitives between OT and Ibex #1231
"-ALLOWREDEFINITION",
"-messages -errormax 50",
"-timescale 1ns/1ps",
"-f {sv_flist}",
"-uvmhome CDNS-1.2",
"-xmlibdirname {build_dir}/xcelium.d",
// 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",
// Use this to conditionally compile for Xcelium (example: LRM interpretations differ
// across tools).
"+define+XCELIUM",
// 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",
]
run_opts: ["-input {run_script}",
"-licqueue",
"-64bit -xmlibdirname {build_dir}/xcelium.d",
// Use the same snapshot name set during the build step.
"-r {tb}",
"+SVSEED={seed}",
"+UVM_TESTNAME={uvm_test}",
"+UVM_TEST_SEQ={uvm_test_seq}",
// 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}" }
]
// 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 refinement files.
// Note that this needs to be set as -load_refinement <file>.
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: "{job_prefix} 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",
"-exec {dv_root}/tools/xcelium/cov_report.tcl",
"{xcelium_cov_refine_files}"]
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: ["-gui",
"-64bit",
"-licqueue",
"-load {cov_merge_db_dir}",
"-init {xcelium_common_excl_file}",
" {eval_cmd} echo {xcelium_cov_refine_files} | sed -E 's/(\\S+)/-load_refinement \\1/g' "]
// pass and fail patterns
build_fail_patterns: ["\\*E.*$"]
run_fail_patterns: ["\\*E.*$"] // Null pointer error
build_modes: [
{
name: xcelium_waves
is_sim_mode: 1
}
{
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}"]
run_opts: [// 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: []
run_opts: []
}
{
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: []
}
]
}