# Copyright lowRISC contributors (OpenTitan project).
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

# Common TCL script invoked at run-time by the simulator.
# VCS syntax: -ucli -do <this file>
# Xcelium syntax: -input <this file>

set dv_root ""
if {[info exists ::env(dv_root)]} {
  set dv_root "$::env(dv_root)"
} else {
  puts "ERROR: Script run without dv_root environment variable."
  quit
}

# Dumping waves in specific hierarchies.
#
# By default, if wave dumping is enabled, all hierarchies of the top level testbench are dumped.
# For large designs, this may slow down the simulation considerably. To bypass this and only enable
# waves in specific hierarchies, set the dump_tb_top flag to 0 (i.e. uncomment the line below), and
# specify the paths to dump on line 32.
# set dump_tb_top 0

source "${dv_root}/tools/common.tcl"
source "${dv_root}/tools/waves.tcl"

global waves
global simulator
global tb_top

# Dumping waves in specific hierarchies (example):
# wavedumpScope $waves $simulator tb.dut.foo.bar 12
# wavedumpScope $waves $simulator tb.dut.baz 0

if {$simulator eq "xcelium"} {
  puts "INFO: The following assertions are permamently disabled:"
  assertion -list -depth all -multiline -permoff $tb_top
}

global gui
global gui_debug
# In GUI mode, let the user take control of running the simulation.
# In GUI debug mode, run only up until the end of the UVM elaboration phase to have access to the
# dynamic objects.
if {$gui_debug == 1} {
  if {$simulator eq "xcelium"} {
    uvm_phase -stop_at build -end
    run
  }
} elseif {$gui == 0} {
  run
  if {$simulator eq "xcelium"} {
    # Xcelium provides a `finish` tcl command instead of `quit`. The argument '2' enables the
    # logging of additional resource usage information.
    finish 2
  } else {
    quit
  }
}
