# 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 common security modules
 -blackBoxes -type design prim_count+prim_spare_fsm+prim_double_lfsr

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

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