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

-covInput $SCRATCH_PATH/cov_merge/merged.vdb
-covDUT $dut_instance

# Provide the clock specification
-clock clk_i 100
# Provide the reset specification: signal_name, active_value, num clk cycles reset to be active
-reset rst_ni 0 20

# Black box some of the modules
# -blackBoxes -type design *

# Include common el file, so that it doesn't generate reviewed common exclusions
-covEL $dv_root/tools/vcs/common_cov_excl.el

# Name of the generated exclusion file
-save_exclusion $SCRATCH_PATH/cov_unr/unr_exclude.el

# Enables verbose reporting in addition to summary reporting.
-verboseReport
