# 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 IOC6 100

# Provide the reset specification: signal_name, active_value, num clk cycles reset to be active.
-reset POR_N 0 20

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

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

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