| // 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}", | |
| "{xcelium_cov_refine_files}"] | |
| // 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. | |
| "{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: [] | |
| } | |
| ] | |
| } |