diff --git a/scripts/riscv_isa_formal/Makefile b/scripts/riscv_isa_formal/Makefile index f344b819b..ac71fb275 100755 --- a/scripts/riscv_isa_formal/Makefile +++ b/scripts/riscv_isa_formal/Makefile @@ -1,4 +1,4 @@ -commonPath=../../common +commonPath=../../verif PREPARE?=0 RTL?=../../cv32e40p/ GUI?=0 diff --git a/scripts/riscv_isa_formal/README.md b/scripts/riscv_isa_formal/README.md index 4ba93b08e..8999d0be2 100755 --- a/scripts/riscv_isa_formal/README.md +++ b/scripts/riscv_isa_formal/README.md @@ -30,7 +30,7 @@ RISC-V ISA Formal Verification methodology has been used with Siemens Questa Pro - Makefile - launch_command_example -### common +### verif Contains all files to create assertions and to launch different tool apps on different configurations and using different modes. > [!CAUTION] @@ -39,6 +39,9 @@ Contains all files to create assertions and to launch different tool apps on dif ## How to launch a run +> [!CAUTION] +> Siemens Questa Processor 2024.2 and above must be used. + - Locally clone cv32e40p github repository or make a symbolic link to an existing repo. - launch following command:
make GUI=1 APP=PRC CONF=XP MODE=DEF NAME=v1_8_0 VERBOSE=1 PREPARE=1 all >&! run_gui-PRC-cfg_XP-mode_DEF-v1_8_0.log diff --git a/scripts/riscv_isa_formal/launch_command example b/scripts/riscv_isa_formal/launch_command_example similarity index 96% rename from scripts/riscv_isa_formal/launch_command example rename to scripts/riscv_isa_formal/launch_command_example index 6b7f3a0a3..804a8dcf1 100755 --- a/scripts/riscv_isa_formal/launch_command example +++ b/scripts/riscv_isa_formal/launch_command_example @@ -19,7 +19,7 @@ set mode=DEF ; set mode_cmd="MODE=${mode}" set mode=DPM ; set mode_cmd="MODE=${mode}" set mode=DPF ; set mode_cmd="MODE=${mode}" -# Prepare the working directory (common files and design copy) or reuse existing one (no copy) +# Prepare the working directory (verif files and design copy) or reuse existing one (no copy) set prepare="" set prepare="PREPARE=1" diff --git a/scripts/riscv_isa_formal/common/constraints.sv b/scripts/riscv_isa_formal/verif/constraints.sv similarity index 99% rename from scripts/riscv_isa_formal/common/constraints.sv rename to scripts/riscv_isa_formal/verif/constraints.sv index 082432653..d615cf6a6 100755 --- a/scripts/riscv_isa_formal/common/constraints.sv +++ b/scripts/riscv_isa_formal/verif/constraints.sv @@ -112,7 +112,7 @@ endfunction `ifdef RESTRICT_REGS // Restrict instruction decoding & register file verification to a subset of registers restrict_regs_c: assume property (disable iff (~rst_n) - restrict_regs(execute.dec) + restrict_regs(my_dec) `ifndef COMPLETENESS `ifndef RESTRICT_REGISTER_INDEX // && (reg_idx<4 || (MISA.C|Zca) && reg_idx inside {5'd8,5'd9}) diff --git a/scripts/riscv_isa_formal/common/core_checker.sv b/scripts/riscv_isa_formal/verif/core_checker.sv similarity index 100% rename from scripts/riscv_isa_formal/common/core_checker.sv rename to scripts/riscv_isa_formal/verif/core_checker.sv diff --git a/scripts/riscv_isa_formal/verif/cv32e40p/info.txt b/scripts/riscv_isa_formal/verif/cv32e40p/info.txt new file mode 100755 index 000000000..76123a920 --- /dev/null +++ b/scripts/riscv_isa_formal/verif/cv32e40p/info.txt @@ -0,0 +1,17 @@ +# Copyright 2024 Siemens +# SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1 +# +# Licensed under the Solderpad Hardware License v 2.1 (the "License"); +# you may not use this file except in compliance with the License, or, +# at your option, the Apache License version 2.0. +# You may obtain a copy of the License at +# +# https://solderpad.org/licenses/SHL-2.1/ +# +# Unless required by applicable law or agreed to in writing, any work +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +github clone from https://github.com/openhwgroup/cv32e40p.git on the 24th of Jun 2024, tag cv32e40p_v1.8.0 is selected. diff --git a/scripts/riscv_isa_formal/common/setup_mv.tcl b/scripts/riscv_isa_formal/verif/cv32e40p/setup_mv.tcl similarity index 100% rename from scripts/riscv_isa_formal/common/setup_mv.tcl rename to scripts/riscv_isa_formal/verif/cv32e40p/setup_mv.tcl diff --git a/scripts/riscv_isa_formal/common/io.sv b/scripts/riscv_isa_formal/verif/io.sv similarity index 100% rename from scripts/riscv_isa_formal/common/io.sv rename to scripts/riscv_isa_formal/verif/io.sv diff --git a/scripts/riscv_isa_formal/common/other_bindings.sv b/scripts/riscv_isa_formal/verif/other_bindings.sv similarity index 100% rename from scripts/riscv_isa_formal/common/other_bindings.sv rename to scripts/riscv_isa_formal/verif/other_bindings.sv diff --git a/scripts/riscv_isa_formal/common/setup.tcl b/scripts/riscv_isa_formal/verif/setup.tcl similarity index 67% rename from scripts/riscv_isa_formal/common/setup.tcl rename to scripts/riscv_isa_formal/verif/setup.tcl index 8f68ea6b3..c1c2639f7 100755 --- a/scripts/riscv_isa_formal/common/setup.tcl +++ b/scripts/riscv_isa_formal/verif/setup.tcl @@ -14,6 +14,9 @@ # See the License for the specific language governing permissions and # limitations under the License. +# clean up local files (that would be read instead of the one in the include dir due to local folder being first in include list) +file delete RISCV_ISA.sv bind.sv generated_assertions.sv vplan.csv + proc duration {int_time} { set timeList [list] if {$int_time == 0} { @@ -32,14 +35,15 @@ proc duration {int_time} { } } -proc quantify_run {{cmd_limit 0} {run 0} {no_cuts {}} {limit_scale 2.0} {effort 4} {skip_effort_level 0} {html_dir {}} {result_file {}} {checks {}} {prev_run_result {}} {skip_files {}}} { +proc quantify_run {{cmd_limit 0} {run 0} {limit_scale 2.0} {effort 4} {skip_effort_level 0} {html_dir {}} {result_file {}} {checks {}} {prev_run_result {}} {skip_files {}}} { puts "\n-INFO- Start of Quantify Run ($run)::\n\nChecks Included::\n\n$checks" set_limit -command_real_time $cmd_limit set run_start_t [clock seconds] - puts "\n-INFO- Launching Quantify Command::\n\nquantify -assume_hold -additional_args \[list $no_cuts -limit_scale $limit_scale -use_single_prover\] -effort $effort -skip_effort_level $skip_effort_level -html $html_dir -save $result_file -checks $checks -incremental $prev_run_result -skip_files $skip_files\n" - catch {quantify -assume_hold -additional_args [list $no_cuts -limit_scale $limit_scale -use_single_prover] -effort $effort -skip_effort_level $skip_effort_level -html $html_dir -save $result_file -checks $checks -incremental $prev_run_result -skip_files $skip_files} + set cmd [list quantify -assume_hold -additional_args [list -no_cuts -use_single_prover -limit_scale $limit_scale] -effort $effort -skip_effort_level $skip_effort_level -html $html_dir -save $result_file -checks $checks -incremental $prev_run_result -skip_files $skip_files] + puts "\n-INFO- Launching Quantify Command::\n\n$cmd\n" + catch $cmd set run_end_t [expr [clock seconds] - $run_start_t] set_limit -default @@ -48,11 +52,11 @@ proc quantify_run {{cmd_limit 0} {run 0} {no_cuts {}} {limit_scale 2.0} {effort ## 0. DESIGN SETUP ## -### SETTING UP THE DESIRED CONFIGURATION, RUN & APP ### -## source the setup.inc as the following: [onespin -i setup.inc ] -## arg1: what configuration to set . +### SETTING UP THE DESIRED CONFIGURATION, RUN & APP ### +## source the setup.inc as the following: [onespin -i setup.inc ] +## arg1: what configuration to set . ## arg2: what processor verification mode to set . -## arg3: what app to launch on top of the processor app. +## arg3: what app to launch on top of the processor app. ## ------------------------------------------------------------------------------------------------------------------ set configs [dict create \ @@ -161,7 +165,7 @@ set apps [dict create \ ] if {$::argc>0} { - lassign $::argv cfg pve_mode app + lassign $::argv cfg pve_mode app prev_run if {$cfg ni [dict keys $configs]} { onespin::message -error "Only configurations [join [dict keys $configs] ,] are supported!" return -code error @@ -171,7 +175,7 @@ if {$::argc>0} { return -code error } elseif {$pve_mode eq "DPF" && $cfg in {"DEF" "XP" "XPXC"} } { onespin::message -error "Floating-point configuration must be selected in order to perform data path verification!" - return -code error + return -code error } if {$app ni [dict keys $apps]} { onespin::message -error "Only apps [join [dict keys $apps] ,] are supported!" @@ -179,28 +183,31 @@ if {$::argc>0} { } } else { if {[get_tool_info -gui]} { - set cfg [string index [onespin::ask_user -default 0 -alternatives [lmap {k d} $configs {string cat "$k - " [dict get $d description]}] "Select which RISC-V configuration to set up:"] 0] - set pve_mode [string index [onespin::ask_user -default "DEF" -alternatives [lmap {k d} $pve_modes {string cat "$k - " [dict get $d description]}] "Select which processor verification mode to set:"] 0] - set app [string index [onespin::ask_user -default "PRC" -alternatives [lmap {k d} $apps {string cat "$k - " [dict get $d description]}] "Select which app to launch:"] 0] + set cfg [lindex [onespin::ask_user -default DEF -alternatives [lmap {k d} $configs {string cat "$k - " [dict get $d description]}] "Select which RISC-V configuration to set up:"] 0] + set pve_mode [lindex [onespin::ask_user -default "DEF" -alternatives [lmap {k d} $pve_modes {string cat "$k - " [dict get $d description]}] "Select which processor verification mode to set:"] 0] + set app [lindex [onespin::ask_user -default "PRC" -alternatives [lmap {k d} $apps {string cat "$k - " [dict get $d description]}] "Select which app to launch:"] 0] } else { set cfg "DEF" set pve_mode "DEF" set app "PRC" } } -set target cv32e40p_top -set core_inst core_i -set prefix ${core_inst}. ## ### ADJUST TO READ-IN THE NEW DESIGN ### onespin::set_parameter disable_intermediate_arithmetic_signals 1 set cwd [pwd] set_session_option -naming_style sv +set target cv32e40p_top +if {$target=="cv32e40p_top"} { + set core_inst core_i + set prefix ${core_inst}. +} set_compile_option {*}[dict get $apps $app compile] set_elaborate_option {*}[dict get $configs $cfg elab] -top $target +# The RTL directory cloned from GitHub, where tag cv32e40p_v1.8.0 is checked out cd cv32e40p -source $cwd/setup_mv.tcl +source setup_mv.tcl set_reset_sequence -low rst_ni cd $cwd @@ -212,6 +219,7 @@ file mkdir $pve_mode_dir file mkdir $app_dir ## + ### PROCESSOR APP FLOW ### ## --------------------------------------------------------------------------------------------------------------------------------- @@ -247,6 +255,7 @@ file mkdir $app_dir ## 0. APP SETUP ## package require processor_integrity +processor_integrity::clear_data -core_checker_version 2024.2 ### APPEND THE FOLLOWING SET OF DEFINES (ONLY IF NECESSARY) ### ## --------------------------------------------------------------------------------------------------------------------------------- @@ -385,38 +394,17 @@ foreach i ${rtl_signals_to_disassemble} { } ## -#set nb_processes 2 -#set nb_processes 3 -#set nb_processes 4 -#set nb_processes 5 -#set nb_processes 6 -#set nb_processes 8 -#set nb_processes 12 -set nb_processes 16 -#set nb_processes 24 -#set nb_processes 32 - -set_check_option -verbose -set_check_option -local_processes $nb_processes -set_check_option -engine_licensing unlimited - -puts "\n-INFO- Launching $app app in $pve_mode mode with $nb_processes parallel processes.\n" - -#set_check_option -prover_exec_order { { approver1 approver4 prover2:0 prover2:8 prover2:11 disprover1 disprover3 } } -set_check_option -prover_exec_order { { approver1 prover2:0 prover2:8 prover2:11 } } -#set_check_option -disprover1_steps 40 -disprover3_steps 40 - -check_consistency -category model_building -effort maximum exclude_check [get_checks -filter name=~"*hdl*"||name=~"*FSQRT_S_a*"||name=~"**FDIV_S_a*"] +check_consistency -category model_building -effort maximum set DEF_checks [lsort -dictionary [get_checks -filter excluded==false&&(type==property||type==assertion)]] set DPM_checks [lsort -dictionary [get_checks -filter excluded==false&&(name=~"*RV32M.*"||name=~"*RV32X.CV_XDOT*"||name=~"*RV32X.CV_MUL*"||name=~"*RV32X.CV_MAC*"||name=~"*RV32X.CV_CPLXMUL*")]] set DPF_checks [lsort -dictionary [get_checks -filter excluded==false&&(name=~"*RV32F.*"||name=~"*RV32Zfinx.*")]] set group_1_checks [lsort -dictionary [concat core_i.RV_chk.ops.RESET_a [get_checks -filter excluded==false&&type==assertion]]] -set group_2_checks [lsort -dictionary [list core_i.RV_chk.ops.XCPT_IF_ID_a core_i.RV_chk.RV32C.ARITH_a core_i.RV_chk.RV32C.BRANCH_Taken_a core_i.RV_chk.RV32C.BRANCH_a core_i.RV_chk.RV32C.JUMP_a core_i.RV_chk.RV32I.EBREAK_BreakPoint_a core_i.RV_chk.RV32I.MEM_MultiAccess_a core_i.RV_chk.RV32I.xRET_a core_i.RV_chk.RV32X.CV_ADD_X_a core_i.RV_chk.RV32X.CV_BITMAN_OTHER_a core_i.RV_chk.RV32X.CV_EXTRACTX_X_a core_i.RV_chk.RV32X.CV_INSERTX_a core_i.RV_chk.RV32X.CV_PACKXX_X_a core_i.RV_chk.RV32X.CV_SETUPX_a core_i.RV_chk.RV32X.CV_SHUFFLE2_X_a core_i.RV_chk.RV32Zicsr.CSRx_a]] -set group_3_checks [lsort -dictionary [list core_i.RV_chk.ops.BUBBLE_a core_i.RV_chk.RV32I.ARITH_a core_i.RV_chk.RV32I.EBREAK_HaltReq_a core_i.RV_chk.RV32I.ECALL_a core_i.RV_chk.RV32I.FENCE_a core_i.RV_chk.RV32I.WFI_a core_i.RV_chk.RV32X.CV_ABS_X_a core_i.RV_chk.RV32X.CV_CLIPXX_a core_i.RV_chk.RV32X.CV_CMPEQ_X_a core_i.RV_chk.RV32X.CV_EXTRACTXX_a core_i.RV_chk.RV32X.CV_EXTXX_a core_i.RV_chk.RV32X.CV_INSERT_X_a core_i.RV_chk.RV32X.CV_SX_I_a core_i.RV_chk.RV32X.CV_SX_RI_a core_i.RV_chk.RV32X.CV_ADDXXNR_a core_i.RV_chk.RV32X.CV_SHUFFLEIX_SCI_B_a core_i.RV_chk.RV32X.CV_BSETX_a core_i.RV_chk.RV32X.CV_BXXIMM_Taken_a core_i.RV_chk.RV32X.CV_ENDX_a core_i.RV_chk.RV32X.CV_LXX_I_a core_i.RV_chk.RV32X.CV_LXX_RI_a core_i.RV_chk.RV32X.CV_SLL_X_a core_i.RV_chk.RV32X.CV_STARTX_a core_i.RV_chk.RV32X.CV_ADD_DIVX_a core_i.RV_chk.RV32X.CV_ADDXXN_a core_i.RV_chk.RV32X.CV_AVGU_X_a core_i.RV_chk.RV32X.CV_BCLRX_a core_i.RV_chk.RV32X.CV_SUB_DIVX_a core_i.RV_chk.RV32X.CV_SUBROTMJ_X_a core_i.RV_chk.RV32X.CV_SUBXXN_a core_i.RV_chk.RV32X.CV_SUBXXNR_a core_i.RV_chk.RV32X.CV_MAXU_X_a]] -set group_4_checks [lsort -dictionary [concat [get_checks -filter excluded==false&&name=~"*RV32X.CV_ELW*"] core_i.RV_chk.RV32I.EBREAK_ForcedEntry_a core_i.RV_chk.RV32X.CV_COUNTX_a core_i.RV_chk.RV32X.CV_LXX_R_a core_i.RV_chk.RV32X.CV_MAXX_a core_i.RV_chk.RV32X.CV_SX_R_a core_i.RV_chk.RV32C.MEM_a core_i.RV_chk.RV32C.MEM_MultiAccess_a core_i.RV_chk.RV32I.BRANCH_a core_i.RV_chk.RV32I.BRANCH_Taken_a core_i.RV_chk.RV32I.JUMP_a core_i.RV_chk.RV32I.MEM_a core_i.RV_chk.RV32X.CV_ABS_a core_i.RV_chk.RV32X.CV_AND_X_a core_i.RV_chk.RV32X.CV_AVG_X_a core_i.RV_chk.RV32X.CV_BXXIMM_a core_i.RV_chk.RV32X.CV_CMPGE_X_a core_i.RV_chk.RV32X.CV_CMPGEU_X_a core_i.RV_chk.RV32X.CV_CMPGT_X_a core_i.RV_chk.RV32X.CV_CMPGTU_X_a core_i.RV_chk.RV32X.CV_CMPLE_X_a core_i.RV_chk.RV32X.CV_CMPLEU_X_a core_i.RV_chk.RV32X.CV_CMPLT_X_a core_i.RV_chk.RV32X.CV_CMPLTU_X_a core_i.RV_chk.RV32X.CV_CMPNE_X_a core_i.RV_chk.RV32X.CV_CPLXCONJ_a core_i.RV_chk.RV32X.CV_LXX_I_MultiAccess_a core_i.RV_chk.RV32X.CV_LXX_R_MultiAccess_a core_i.RV_chk.RV32X.CV_LXX_RI_MultiAccess_a core_i.RV_chk.RV32X.CV_MAX_X_a core_i.RV_chk.RV32X.CV_MIN_X_a core_i.RV_chk.RV32X.CV_MINU_X_a core_i.RV_chk.RV32X.CV_MINX_a core_i.RV_chk.RV32X.CV_OR_X_a core_i.RV_chk.RV32X.CV_SHUFFLE_X_a core_i.RV_chk.RV32X.CV_SLEX_a core_i.RV_chk.RV32X.CV_SRA_X_a core_i.RV_chk.RV32X.CV_SRL_X_a core_i.RV_chk.RV32X.CV_SUB_X_a core_i.RV_chk.RV32X.CV_SX_I_MultiAccess_a core_i.RV_chk.RV32X.CV_SX_R_MultiAccess_a core_i.RV_chk.RV32X.CV_SX_RI_MultiAccess_a core_i.RV_chk.RV32X.CV_XOR_X_a core_i.RV_chk.RV32Zifencei.FENCE_I_a]] +set group_2_checks [lsort -dictionary [list core_i.RV_chk.xcpt.XCPT_IF_ID_a core_i.RV_chk.RV32C.ARITH_a core_i.RV_chk.RV32C.BRANCH_Taken_a core_i.RV_chk.RV32C.BRANCH_a core_i.RV_chk.RV32C.JUMP_a core_i.RV_chk.xcpt.EBREAK_a core_i.RV_chk.RV32I.MEM_MultiAccess_a core_i.RV_chk.RV32I.RETURN_a core_i.RV_chk.RV32X.CV_ADD_X_a core_i.RV_chk.RV32X.CV_BITMAN_OTHER_a core_i.RV_chk.RV32X.CV_EXTRACTX_X_a core_i.RV_chk.RV32X.CV_INSERTX_a core_i.RV_chk.RV32X.CV_PACKXX_X_a core_i.RV_chk.RV32X.CV_SETUPX_a core_i.RV_chk.RV32X.CV_SHUFFLE2_X_a core_i.RV_chk.RV32Zicsr.CSRx_a]] +set group_3_checks [lsort -dictionary [list core_i.RV_chk.ops.BUBBLE_a core_i.RV_chk.RV32I.ARITH_a core_i.RV_chk.xcpt.ECALL_a core_i.RV_chk.RV32I.FENCE_a core_i.RV_chk.RV32I.WFI_a core_i.RV_chk.RV32X.CV_ABS_X_a core_i.RV_chk.RV32X.CV_CLIPXX_a core_i.RV_chk.RV32X.CV_CMPEQ_X_a core_i.RV_chk.RV32X.CV_EXTRACTXX_a core_i.RV_chk.RV32X.CV_EXTXX_a core_i.RV_chk.RV32X.CV_INSERT_X_a core_i.RV_chk.RV32X.CV_SX_I_a core_i.RV_chk.RV32X.CV_SX_RI_a core_i.RV_chk.RV32X.CV_ADDXXNR_a core_i.RV_chk.RV32X.CV_SHUFFLEIX_SCI_B_a core_i.RV_chk.RV32X.CV_BSETX_a core_i.RV_chk.RV32X.CV_BXXIMM_Taken_a core_i.RV_chk.RV32X.CV_ENDX_a core_i.RV_chk.RV32X.CV_LXX_I_a core_i.RV_chk.RV32X.CV_LXX_RI_a core_i.RV_chk.RV32X.CV_SLL_X_a core_i.RV_chk.RV32X.CV_STARTX_a core_i.RV_chk.RV32X.CV_ADD_DIVX_a core_i.RV_chk.RV32X.CV_ADDXXN_a core_i.RV_chk.RV32X.CV_AVGU_X_a core_i.RV_chk.RV32X.CV_BCLRX_a core_i.RV_chk.RV32X.CV_SUB_DIVX_a core_i.RV_chk.RV32X.CV_SUBROTMJ_X_a core_i.RV_chk.RV32X.CV_SUBXXN_a core_i.RV_chk.RV32X.CV_SUBXXNR_a core_i.RV_chk.RV32X.CV_MAXU_X_a]] +set group_4_checks [lsort -dictionary [concat [get_checks -filter excluded==false&&name=~"*RV32X.CV_ELW*"] core_i.RV_chk.RV32X.CV_COUNTX_a core_i.RV_chk.RV32X.CV_LXX_R_a core_i.RV_chk.RV32X.CV_MAXX_a core_i.RV_chk.RV32X.CV_SX_R_a core_i.RV_chk.RV32C.MEM_a core_i.RV_chk.RV32C.MEM_MultiAccess_a core_i.RV_chk.RV32I.BRANCH_a core_i.RV_chk.RV32I.BRANCH_Taken_a core_i.RV_chk.RV32I.JUMP_a core_i.RV_chk.RV32I.MEM_a core_i.RV_chk.RV32X.CV_ABS_a core_i.RV_chk.RV32X.CV_AND_X_a core_i.RV_chk.RV32X.CV_AVG_X_a core_i.RV_chk.RV32X.CV_BXXIMM_a core_i.RV_chk.RV32X.CV_CMPGE_X_a core_i.RV_chk.RV32X.CV_CMPGEU_X_a core_i.RV_chk.RV32X.CV_CMPGT_X_a core_i.RV_chk.RV32X.CV_CMPGTU_X_a core_i.RV_chk.RV32X.CV_CMPLE_X_a core_i.RV_chk.RV32X.CV_CMPLEU_X_a core_i.RV_chk.RV32X.CV_CMPLT_X_a core_i.RV_chk.RV32X.CV_CMPLTU_X_a core_i.RV_chk.RV32X.CV_CMPNE_X_a core_i.RV_chk.RV32X.CV_CPLXCONJ_a core_i.RV_chk.RV32X.CV_LXX_I_MultiAccess_a core_i.RV_chk.RV32X.CV_LXX_R_MultiAccess_a core_i.RV_chk.RV32X.CV_LXX_RI_MultiAccess_a core_i.RV_chk.RV32X.CV_MAX_X_a core_i.RV_chk.RV32X.CV_MIN_X_a core_i.RV_chk.RV32X.CV_MINU_X_a core_i.RV_chk.RV32X.CV_MINX_a core_i.RV_chk.RV32X.CV_OR_X_a core_i.RV_chk.RV32X.CV_SHUFFLE_X_a core_i.RV_chk.RV32X.CV_SLEX_a core_i.RV_chk.RV32X.CV_SRA_X_a core_i.RV_chk.RV32X.CV_SRL_X_a core_i.RV_chk.RV32X.CV_SUB_X_a core_i.RV_chk.RV32X.CV_SX_I_MultiAccess_a core_i.RV_chk.RV32X.CV_SX_R_MultiAccess_a core_i.RV_chk.RV32X.CV_SX_RI_MultiAccess_a core_i.RV_chk.RV32X.CV_XOR_X_a core_i.RV_chk.RV32Zifencei.FENCE_I_a]] set group_5_checks [lsort -dictionary [get_checks -filter excluded==false&&(name=~"*RV32M.DIV16_a*"||name=~"*RV32M.DIV32_a*"||name=~"*RV32M.MUL_a*"||name=~"*RV32X.CV_XDOT*"||name=~"*RV32X.CV_MUL*"||name=~"*RV32X.CV_MAC*"||name=~"*RV32X.CV_CPLXMUL*")]] set group_6_checks [lsort -dictionary [get_checks -filter excluded==false&&(name=~"*RV32F.*"||name=~"*RV32Zfinx.*")]] @@ -429,58 +417,13 @@ puts "\n-INFO- Cut signals::\n\n\t$rtl_signals_to_cut\n" if {$app eq "PRC"} { -# set_check_option -prover_exec_order { { approver1 approver4 prover2:0 prover2:8 prover2:11 disprover1 disprover3 } } - set_check_option -prover_exec_order { { approver1 prover2:0 prover2:8 prover2:11 } } -# set_check_option -prover_exec_order { { disprover1 disprover3 } } -disprover1_steps 20 -disprover3_steps 20 - - set all_checks [set ${pve_mode}_checks] - set checks_nb [llength $all_checks] - set nb_round [expr $checks_nb / $nb_processes] - set nb_remain [expr $checks_nb % $nb_processes] - puts "nb_round = $nb_round, nb_remain = $nb_remain" - for {set i 0} {$i < $nb_round} {incr i} { - set checks [lrange $all_checks [expr $i * $nb_processes] [expr ((($i + 1) * $nb_processes) - 1)]] - puts "[expr $i * $nb_processes] [expr ((($i + 1) * $nb_processes) - 1)]" - puts "\n-INFO- Launching Check Command::\n\ncheck $checks\n" - check $checks - cd $app_dir - start_message_log round_[expr $i + 1].log - report_result -details - stop_message_log - save_database -force round_[expr $i + 1] - cd $cwd - } - if {$nb_remain > 0} { - set checks [lrange $all_checks [expr $nb_round * $nb_processes] [expr (($nb_round * $nb_processes) + $nb_remain - 1)]] - puts "[expr $nb_round * $nb_processes] [expr (($nb_round * $nb_processes) + $nb_remain - 1)]" - puts "\n-INFO- Launching Check Command::\n\ncheck $checks\n" - check $checks - cd $app_dir - start_message_log round_[expr $i + 1].log - report_result -details - stop_message_log - save_database -force round_[expr $nb_round + 1] - cd $cwd - } - - cd $app_dir - start_message_log report_signoff_${app}_${cfg}_${pve_mode}.log - report_result -signoff -details - stop_message_log - cd $cwd - -# set_check_option -prover_exec_order { { disprover1 disprover3 } } -# puts "\n-INFO- Launching Check Command::\n\ncheck RV32M.DIV16_a\n" -# check [get_checks -filter name=~"*RV32M.DIV16_a*"] -# cd $app_dir -# save_database -force -# cd $cwd - -} + set_check_option -prover_exec_order { { approver1 approver4 prover2:0 prover2:8 prover2:11 } } + check [set ${pve_mode}_checks] + report_result -signoff -details -if {$app eq "QTF"} { +} - source basics.tcl.obf +if {$app eq "QTF"} { set_check_option -prover_exec_order { { disprover1 disprover3 } } -disprover1_steps 20 -disprover3_steps 20 @@ -501,27 +444,24 @@ if {$app eq "QTF"} { puts "Group (${i}) checks: Total number of checks is: [llength [set group_${i}_checks]]" } -# for {set i 1} {$i < 7} {incr i} { - - set i 5 + for {set i 1} {$i < 7} {incr i} { - start_message_log ${log}${i}.log + start_message_log -force ${log}${i}.log if {$i == 1} { - quantify_run 0 $i {-no_cuts} 1.0 2 1 ${html}_L2_S1_R${i} ${results}${i} $group_1_checks {} {} + quantify_run 0 $i 1.0 2 1 ${html}_L2_S1_R${i} ${results}${i} $group_1_checks {} {} } elseif {$i == 2} { - quantify_run 0 $i {-no_cuts} 4.0 4 3 ${html}_L4_S4_R${i} ${results}${i} $group_2_checks ${results}[expr $i-1] $skipped_files + quantify_run 0 $i 4.0 4 3 ${html}_L4_S4_R${i} ${results}${i} $group_2_checks ${results}[expr $i-1] $skipped_files } elseif {$i == 3} { - quantify_run 0 $i {-no_cuts} 2.0 4 3 ${html}_L4_S2_R${i} ${results}${i} $group_3_checks ${results}[expr $i-1] $skipped_files + quantify_run 0 $i 2.0 4 3 ${html}_L4_S2_R${i} ${results}${i} $group_3_checks ${results}[expr $i-1] $skipped_files } elseif {$i == 4} { - quantify_run 0 $i {-no_cuts} 2.0 4 3 ${html}_L4_S2_R${i} ${results}${i} $group_4_checks ${results}[expr $i-1] $skipped_files + quantify_run 0 $i 2.0 4 3 ${html}_L4_S2_R${i} ${results}${i} $group_4_checks ${results}[expr $i-1] $skipped_files } elseif {$i == 5} { -# quantify_run 0 $i {-no_cuts} 4.0 4 3 ${html}_L4_S4_R${i} ${results}${i} $group_5_checks ${results}[expr $i-1] $skipped_files - quantify_run 0 $i {} 6.0 4 3 ${html}_L4_S4_R${i} ${results}${i} $group_5_checks ${results}[expr $i-1] $skipped_files + quantify_run 0 $i 4.0 4 3 ${html}_L4_S4_R${i} ${results}${i} $group_5_checks ${results}[expr $i-1] $skipped_files } elseif {($i == 6) && ("CFG_F" in $defines || "CFG_ZFINX" in $defines)} { - quantify_run 0 $i {-no_cuts} 4.0 4 3 ${html}_L4_S4_R${i} ${results}${i} $group_6_checks ${results}[expr $i-1] {} + quantify_run 0 $i 4.0 4 3 ${html}_L4_S4_R${i} ${results}${i} $group_6_checks ${results}[expr $i-1] {} } stop_message_log -# } + } } elseif {$pve_mode eq "DPM"} { @@ -532,11 +472,7 @@ if {$app eq "QTF"} { } start_message_log ${log}${i}.log -# quantify_run 0 $i {-no_cuts} 4.0 4 3 ${html}_L4_S4_R${i} ${results}${i} $group_5_checks {} $skipped_files -# file copy -force ${cfg_dir}/DEF/QTF/qtf_results_${cfg}_DEF_R[expr $i-1] ${cfg_dir}/DEF/QTF/qtf_results_${cfg}_DEF_R[expr $i-1]-Xr -# fileutil::updateInPlace ${cfg_dir}/DEF/QTF/qtf_results_${cfg}_DEF_R[expr $i-1] [list string map [list " Xr" " U0"]] -# quantify_run 0 $i {-no_cuts} 4.0 4 3 ${html}_L4_S4_R${i} ${results}${i} $group_5_checks ${cfg_dir}/DEF/QTF/qtf_results_${cfg}_DEF_R[expr $i-1] $skipped_files - quantify_run 0 $i {} 6.0 4 3 ${html}_L4_S4_R${i} ${results}${i} $group_5_checks ${cfg_dir}/DEF/QTF/qtf_results_${cfg}_DEF_R[expr $i-1] $skipped_files + quantify_run 0 $i 4.0 4 3 ${html}_L4_S4_R${i} ${results}${i} $group_5_checks ${cfg_dir}/DEF/QTF/qtf_results_${cfg}_DEF_R[expr $i-1] $skipped_files stop_message_log } elseif {$pve_mode eq "DPF"} { @@ -544,15 +480,12 @@ if {$app eq "QTF"} { set i 8 start_message_log ${log}${i}.log -# quantify_run 0 $i -no_cuts 2.0 4 3 ${html}_L4_S4_R${i} ${results}${i} $group_6_checks {} {} -# file copy -force ${cfg_dir}/DPM/QTF/qtf_results_${cfg}_DPM_R[expr $i-1] ${cfg_dir}/DPM/QTF/qtf_results_${cfg}_DPM_R[expr $i-1]-Xr -# fileutil::updateInPlace ${cfg_dir}/DPM/QTF/qtf_results_${cfg}_DPM_R[expr $i-1] [list string map [list " Xr" " U0"]] - quantify_run 0 $i -no_cuts 2.0 4 3 ${html}_L4_S4_R${i} ${results}${i} $group_6_checks ${cfg_dir}/DPM/QTF/qtf_results_${cfg}_DPM_R[expr $i-1] {} + quantify_run 0 $i 2.0 4 3 ${html}_L4_S4_R${i} ${results}${i} $group_6_checks ${cfg_dir}/DPM/QTF/qtf_results_${cfg}_DPM_R[expr $i-1] {} stop_message_log } -} +} if {$app eq "VCI"} { @@ -581,8 +514,7 @@ if {$app eq "VCI"} { start_message_log ${log}.log puts "\n-INFO- Launching VCI Command::\nexport_quantify_coverage -call_script t.sh -generate_flist -output_dir $output_dir -checks $checks ${results}${i}\n" - export_quantify_coverage -call_script t.sh -generate_flist -output_dir $output_dir -checks $checks ${results}${i} + export_quantify_coverage -call_script t.sh -generate_flist -output_dir $output_dir -checks $checks ${results}${i} stop_message_log -# report_quantify_result -quantify_result qtf_results_run_${run} -html html_results_run_${run} } diff --git a/scripts/riscv_isa_formal/common/t.sh b/scripts/riscv_isa_formal/verif/t.sh similarity index 100% rename from scripts/riscv_isa_formal/common/t.sh rename to scripts/riscv_isa_formal/verif/t.sh diff --git a/scripts/riscv_isa_formal/common/vips/obi_dmem.sv b/scripts/riscv_isa_formal/verif/vips/obi_dmem.sv similarity index 100% rename from scripts/riscv_isa_formal/common/vips/obi_dmem.sv rename to scripts/riscv_isa_formal/verif/vips/obi_dmem.sv diff --git a/scripts/riscv_isa_formal/common/vips/obi_imem.sv b/scripts/riscv_isa_formal/verif/vips/obi_imem.sv similarity index 100% rename from scripts/riscv_isa_formal/common/vips/obi_imem.sv rename to scripts/riscv_isa_formal/verif/vips/obi_imem.sv