| // 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" | 
 |  | 
 |   // Indicate the tool specific helper sources - these are copied over to the | 
 |   // {tool_srcs_dir} before running the simulation. | 
 |   tool_srcs:  ["{proj_root}/hw/dv/tools/xcelium/*"] | 
 |  | 
 |   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", | 
 |                // for uvm_hdl_* used by csr backdoor | 
 |                "-access +rw"] | 
 |  | 
 |   run_opts:   ["-input {tool_srcs_dir}/xcelium.tcl", | 
 |                "-licqueue", | 
 |                "-64bit -xmlibdirname {build_dir}/xcelium.d -R", | 
 |                "+SVSEED={seed}", | 
 |                "+UVM_TESTNAME={uvm_test}", | 
 |                "+UVM_TEST_SEQ={uvm_test_seq}"] | 
 |  | 
 |   // 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}" | 
 |   ] | 
 |  | 
 |   // 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 file. | 
 |   // Note that this needs to be set as -load_refinement <file>. | 
 |   xcelium_cov_refine_file: "" | 
 |  | 
 |   // 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_base_path}/cov_merge" | 
 |   cov_merge_db_dir: "{cov_merge_dir}/merged" | 
 |   cov_merge_cmd:    "{job_prefix} imc" | 
 |   cov_merge_opts:   ["-64bit", | 
 |                      "-licqueue", | 
 |                      "-exec {tool_srcs_dir}/cov_merge.tcl"] | 
 |  | 
 |   // Generate covreage reports in text as well as html. | 
 |   cov_report_dir:   "{scratch_base_path}/cov_report" | 
 |   cov_report_cmd:   "{job_prefix} imc" | 
 |   cov_report_opts:  ["-64bit", | 
 |                      "-licqueue", | 
 |                      "-exec {tool_srcs_dir}/cov_report.tcl"] | 
 |   cov_report_txt:   "{cov_report_dir}/cov_report.txt" | 
 |   cov_report_page:  "cov_report/index.html" | 
 |  | 
 |   // Analyzing coverage - this is done by invoking --cov-analyze switch. It opens up the | 
 |   // GUI for visual analysis. | 
 |   cov_analyze_dir:  "{scratch_base_path}/cov_analyze" | 
 |   cov_analyze_cmd:  "{job_prefix} imc" | 
 |   cov_analyze_opts: ["-gui", | 
 |                      "-64bit", | 
 |                      "-licqueue", | 
 |                      "-load {cov_merge_db_dir}", | 
 |                      "{xcelium_cov_refine_file}"] | 
 |  | 
 |   // 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:   [] | 
 |     } | 
 |   ] | 
 | } |