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

#Setup the clock and reset the design 
clock -infer
reset rst_n
get_reset_info

set_prove_time_limit 5m

check_unr -prove
check_unr -list -type unreachable
database -export_unicov
report -detailed
