# 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 *

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

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