|  | // Copyright lowRISC contributors. | 
|  | // Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
|  | // SPDX-License-Identifier: Apache-2.0 | 
|  | { | 
|  | // Replicate settings from `common_sim_cfg.hjson`. | 
|  | // | 
|  | // Unfortunately, that file assumes that the tools are invoked natively as | 
|  | // opposed to via FuseSoC. Verilator is setup to be invoked via FuseSoC, | 
|  | // which causes FuseSoC to fail due to unknown {build_opts}. Hence, contents | 
|  | // from `common_sim_cfg.hjson` are replicated here as appropriate. | 
|  | // -- START -- | 
|  | dv_root:          "{proj_root}/hw/dv" | 
|  | flow:             sim | 
|  | flow_makefile:    "{dv_root}/tools/dvsim/sim.mk" | 
|  |  | 
|  | import_cfgs:      ["{proj_root}/hw/data/common_project_cfg.hjson", | 
|  | "{dv_root}/tools/dvsim/common_modes.hjson", | 
|  | "{dv_root}/tools/dvsim/fusesoc.hjson", | 
|  | ] | 
|  |  | 
|  | // Default directory structure for the output | 
|  | build_dir:          "{scratch_path}/{build_mode}" | 
|  | run_dir_name:       "{index}.{test}" | 
|  | run_dir:            "{scratch_path}/{run_dir_name}/out" | 
|  | sw_build_dir:       "{scratch_path}" | 
|  | sw_root_dir:        "{proj_root}/sw" | 
|  |  | 
|  | regressions: [ | 
|  | { | 
|  | name: smoke | 
|  | reseed: 1 | 
|  | } | 
|  | { | 
|  | name: all | 
|  | } | 
|  | { | 
|  | name: all_once | 
|  | reseed: 1 | 
|  | } | 
|  | { | 
|  | name: nightly | 
|  | } | 
|  | ] | 
|  | // -- END -- | 
|  |  | 
|  | pre_build_cmds: [] | 
|  |  | 
|  | build_cmd:  "fusesoc {fusesoc_cores_root_dirs} run" | 
|  | ex_name:    "{eval_cmd} echo \"{fusesoc_core}\" | cut -d: -f3" | 
|  | run_cmd:    "{build_dir}/sim-verilator/V{ex_name}" | 
|  |  | 
|  | // TODO: Verilator has a few useful build switches. Need to figure out how to | 
|  | // pass them via FuseSoC. | 
|  |  | 
|  | build_opts: ["--flag=fileset_{design_level}", | 
|  | "--target=sim", | 
|  | "--build-root={build_dir}", | 
|  | "--setup", | 
|  | "--build", | 
|  | "{fusesoc_core}" | 
|  | // "--timescale 1ns/1ps", | 
|  | // Enable all assertions. | 
|  | // "--assert", | 
|  | // Flush streams immediately after all $displays. | 
|  | // "--autoflush", | 
|  | // Enable multi-threading. | 
|  | // "--threads 4", | 
|  | // Randomize all 2-state vars if driven to unknown 'X'. | 
|  | // "--x-assign unique", | 
|  | // "--x-initial unique", | 
|  | ] | 
|  |  | 
|  | run_opts: [// Set random seed. | 
|  | // "+verilator+seed+{seed}", | 
|  | ] | 
|  |  | 
|  | // Supported wave dumping formats (in order of preference). | 
|  | supported_wave_formats: ["fst"] | 
|  |  | 
|  | // Vars that need to exported to the env. | 
|  | exports: [ | 
|  | ] | 
|  |  | 
|  | // pass and fail patterns | 
|  | build_pass_patterns: [] | 
|  | build_fail_patterns: [// Verilator compile error. | 
|  | "^%Error.*?:", | 
|  | // FuseSoC build error. | 
|  | "^ERROR:.*$", | 
|  | ] | 
|  | run_pass_patterns:   ["^TEST PASSED CHECKS$"] | 
|  | run_fail_patterns:   [// $warning/error/fatal messages. | 
|  | "^\\[[0-9]+\\] %Warning.*?: ", | 
|  | "^\\[[0-9]+\\] %Error.*?: ", | 
|  | "^\\[[0-9]+\\] %Fatal.*?: ", | 
|  | // Ninja / SW compile failure. | 
|  | "^FAILED: ", | 
|  | " error: ", | 
|  | // Failure signature pattern. | 
|  | "^TEST FAILED CHECKS$" | 
|  | ] | 
|  |  | 
|  | // Coverage related. | 
|  | cov_db_dir: "" | 
|  | cov_db_test_dir: "" | 
|  |  | 
|  | build_modes: [ | 
|  | // TODO: Verilator will likely never have GUI. Find a better way to support | 
|  | // --gui when the tool itself doesn't support it. | 
|  | { | 
|  | name: verilator_gui | 
|  | is_sim_mode: 1 | 
|  | build_opts: [] | 
|  | run_opts: [] | 
|  | } | 
|  | { | 
|  | name: verilator_waves | 
|  | is_sim_mode: 1 | 
|  | // build_opts: ["--trace", | 
|  | //              "--trace-fst" | 
|  | //              "--trace-structs", | 
|  | //              "--trace-params", | 
|  | //              "-CFLAGS \"-DVM_TRACE_FMT_FST\"", | 
|  | //              ] | 
|  | run_opts: ["--trace"] | 
|  | } | 
|  | // TODO: These need to be fine-tuned. | 
|  | { | 
|  | name: verilator_cov | 
|  | is_sim_mode: 1 | 
|  | // build_opts: ["--coverage"] | 
|  | } | 
|  | { | 
|  | name: verilator_xprop | 
|  | is_sim_mode: 1 | 
|  | } | 
|  | { | 
|  | name: verilator_profile | 
|  | is_sim_mode: 1 | 
|  | // build_opts: ["--prof-cfuncs", | 
|  | //              "--prof-threads", | 
|  | //             ] | 
|  | } | 
|  | { | 
|  | name: verilator_loopdetect | 
|  | is_sim_mode: 1 | 
|  | } | 
|  | ] | 
|  | } |