Formality:参考设计/实现设计以及顶层设计

news2025/1/19 0:42:27

相关阅读

Formalityicon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm=1001.2014.3001.5482​​​


        Formality存在两个重要的概念:参考设计/实现设计和顶层设计,本文就将对此进行详细阐述。参考设计/实现设计是中两个重要的全局概念,在使用verify命令时,默认是对它们两者之中的比较点进行验证;而顶层设计则是属于一个容器的局部概念,每个容器只能拥有一个顶层设计,且确定之后就无法更改。

顶层设计

        使用set_top命令可以将容器中某一个设计设置为顶层设计并进行展开(Elaborate)或者说链接(Link)时,Formality会在容器范围内解析引用并构建层次结构(只会对与顶层设计相关的设计进行解析),此后可以使用report_hierarchy命令报告层次中任意设计的结构。如果这个容器是默认容器r,则顶层设计还会被自动设置为参考设计;如果这个容器是默认容器i,则顶层设计还会被自动设置为实现设计。

参考设计/实现设计

        使用set_reference_design命令将已设置顶层设计的容器中的某个设计设置为参考设计(要求必须在顶层设计的层次结构中),设置完成后用变量$ref表示;使用set_implementation_design命令将已设置顶层设计的容器中的某个设计设置为参考设计(要求必须在顶层设计的层次结构中),设置完成后用变量$ref表示。

        虽然参考设计/实现设计常常不需要显式指定,它们在使用set_top命令指定默认容器r和i的顶层设计时就自动设置了,但会有一些特殊情况,比如层次化验证(hierarchical verification)过程中就是从下到上将层次结构中的各个设计设置为参考设计/实现设计依次进行验证,并在高层次验证时将低层次设置为黑盒来进行验证。

        使用write_hierarchical_verification_script命令即可生成一个用于层次验证的脚本,该脚本应该在之前的验证基础上执行,下面是一个层次验证脚本的例子。

###
### Formality (R) hierarchical verification script: /home/zhangchen/Desktop/test1/hier.tcl
###
### Reference design: r:/WORK/TopModule
### Implementation design: i:/WORK/TopModule
### Generated Fri Jan 17 00:32:42 2025
###

global ref
global impl
global verification_constant_prop_mode
global signature_analysis_match_blackbox_input
global signature_analysis_match_blackbox_output
global signature_analysis_match_primary_input
global signature_analysis_match_primary_output
global verification_status
global fm_tmp_result_count
global fm_hier_result_array

redirect         /home/zhangchen/Desktop/test1/fm_hier.log {echo "**************************************************************************************************"}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {echo "Results of hierarchical verification script: /home/zhangchen/Desktop/test1/hier.tcl"}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {echo "**************************************************************************************************"}

setup

if [info exists verification_constant_prop_mode] {
  set fm_write_hier_saved_vars(verification_constant_prop_mode) $verification_constant_prop_mode
}
set verification_constant_prop_mode none

if [info exists signature_analysis_match_blackbox_input] {
  set fm_write_hier_saved_vars(signature_analysis_match_blackbox_input) $signature_analysis_match_blackbox_input
}
set signature_analysis_match_blackbox_input false

if [info exists signature_analysis_match_blackbox_output] {
  set fm_write_hier_saved_vars(signature_analysis_match_blackbox_output) $signature_analysis_match_blackbox_output
}
set signature_analysis_match_blackbox_output false

if [info exists signature_analysis_match_primary_input] {
  set fm_write_hier_saved_vars(signature_analysis_match_primary_input) $signature_analysis_match_primary_input
}
set signature_analysis_match_primary_input false

if [info exists signature_analysis_match_primary_output] {
  set fm_write_hier_saved_vars(signature_analysis_match_primary_output) $signature_analysis_match_primary_output
}
set signature_analysis_match_primary_output false

if [info exists fm_hier_result_array] {
  unset fm_hier_result_array
}
set fm_hier_result_count 0
set fm_tmp_result_count 0
set fm_session_files_saved 0
set fm_save_file_limit 1
set fm_save_time_limit 0

proc get_verification_status {ref_inst imp_inst} {
  global fm_tmp_result_count
  global fm_hier_result_array
  
  for {set i 0} {$i < $fm_tmp_result_count} {incr i} {
    if [expr (![string compare [lindex $fm_hier_result_array([expr $i + 1]) 0] $ref_inst])] {
      if [expr (![string compare [lindex $fm_hier_result_array([expr $i + 1]) 1] $imp_inst])] {
        return [lindex $fm_hier_result_array([expr $i + 1]) 2]
      }
    }
  }
  
  return UNKNOWN
}

###
### Verifying instances: 
###   Ref: r:/WORK/TopModule/a1/c1
###   Imp: i:/WORK/TopModule/a1/c1
###
set_reference_design      r:/WORK/C_0
set_implementation_design i:/WORK/C_0
set_user_match -type port $impl/out[3] $ref/out[3]
set_user_match -type port $impl/out[2] $ref/out[2]
set_user_match -type port $impl/out[1] $ref/out[1]
set_user_match -type port $impl/out[0] $ref/out[0]
set_user_match -type port $impl/op_select $ref/op_select
set_user_match -type port $impl/input_a[3] $ref/input_a[3]
set_user_match -type port $impl/input_a[2] $ref/input_a[2]
set_user_match -type port $impl/input_a[1] $ref/input_a[1]
set_user_match -type port $impl/input_a[0] $ref/input_a[0]
set_user_match -type port $impl/input_b[3] $ref/input_b[3]
set_user_match -type port $impl/input_b[2] $ref/input_b[2]
set_user_match -type port $impl/input_b[1] $ref/input_b[1]
set_user_match -type port $impl/input_b[0] $ref/input_b[0]
set_user_match -type port $impl/clk $ref/clk
set_user_match -type port $impl/reset $ref/reset
set_constant -type port  $ref/op_select 0
set_constant -type port $impl/op_select 0
set fm_begin_cputime [cputime]
verify
set fm_end_cputime [cputime]
set fm_this_verification_cputime [expr $fm_end_cputime - $fm_begin_cputime]
set fm_cumulative_memory [expr [memory] / 1000]
set fm_tmp_result_count [expr $fm_tmp_result_count + 1]
set fm_hier_result_array($fm_tmp_result_count) [list {r:/WORK/TopModule/a1/c1} {i:/WORK/TopModule/a1/c1} $verification_status]
set fm_failure_comment ""
if [expr (![string compare $verification_status "FAILED"])] {
  set fm_failure_comment " (may be resolved in the parent level verification)"
}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  "}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "Verification %s%s:" $verification_status $fm_failure_comment}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Ref: %s (instance of %s)" {r:/WORK/TopModule/a1/c1} $ref}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Imp: %s (instance of %s)" {i:/WORK/TopModule/a1/c1} $impl}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  %s, %4.0fMB (cumulative), %7.2fsec (incremental)" [date] $fm_cumulative_memory $fm_this_verification_cputime}
if [expr (![string compare $verification_status "INCONCLUSIVE"]) && \
         ($fm_session_files_saved < $fm_save_file_limit) && \
         ($fm_this_verification_cputime >= $fm_save_time_limit)] {
  save_session -replace /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  lappend fm_hier_result_array($fm_tmp_result_count) /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Session file: /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss"}
  set fm_session_files_saved [expr $fm_session_files_saved + 1]
}
setup
remove_user_match -type port $impl/out[3]
remove_user_match -type port $impl/out[2]
remove_user_match -type port $impl/out[1]
remove_user_match -type port $impl/out[0]
remove_user_match -type port $impl/op_select
remove_user_match -type port $impl/input_a[3]
remove_user_match -type port $impl/input_a[2]
remove_user_match -type port $impl/input_a[1]
remove_user_match -type port $impl/input_a[0]
remove_user_match -type port $impl/input_b[3]
remove_user_match -type port $impl/input_b[2]
remove_user_match -type port $impl/input_b[1]
remove_user_match -type port $impl/input_b[0]
remove_user_match -type port $impl/clk
remove_user_match -type port $impl/reset
remove_constant -type port  $ref/op_select 
remove_constant -type port $impl/op_select 

###
### Verifying instances: 
###   Ref: r:/WORK/TopModule/a1/c2
###   Imp: i:/WORK/TopModule/a1/c2
###
set_reference_design      r:/WORK/C_5
set_implementation_design i:/WORK/C_5
set_user_match -type port $impl/out[3] $ref/out[3]
set_user_match -type port $impl/out[2] $ref/out[2]
set_user_match -type port $impl/out[1] $ref/out[1]
set_user_match -type port $impl/out[0] $ref/out[0]
set_user_match -type port $impl/op_select $ref/op_select
set_user_match -type port $impl/input_a[3] $ref/input_a[3]
set_user_match -type port $impl/input_a[2] $ref/input_a[2]
set_user_match -type port $impl/input_a[1] $ref/input_a[1]
set_user_match -type port $impl/input_a[0] $ref/input_a[0]
set_user_match -type port $impl/input_b[3] $ref/input_b[3]
set_user_match -type port $impl/input_b[2] $ref/input_b[2]
set_user_match -type port $impl/input_b[1] $ref/input_b[1]
set_user_match -type port $impl/input_b[0] $ref/input_b[0]
set_user_match -type port $impl/clk $ref/clk
set_user_match -type port $impl/reset $ref/reset
set_constant -type port  $ref/op_select 1
set_constant -type port $impl/op_select 1
set fm_begin_cputime [cputime]
verify
set fm_end_cputime [cputime]
set fm_this_verification_cputime [expr $fm_end_cputime - $fm_begin_cputime]
set fm_cumulative_memory [expr [memory] / 1000]
set fm_tmp_result_count [expr $fm_tmp_result_count + 1]
set fm_hier_result_array($fm_tmp_result_count) [list {r:/WORK/TopModule/a1/c2} {i:/WORK/TopModule/a1/c2} $verification_status]
set fm_failure_comment ""
if [expr (![string compare $verification_status "FAILED"])] {
  set fm_failure_comment " (may be resolved in the parent level verification)"
}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  "}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "Verification %s%s:" $verification_status $fm_failure_comment}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Ref: %s (instance of %s)" {r:/WORK/TopModule/a1/c2} $ref}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Imp: %s (instance of %s)" {i:/WORK/TopModule/a1/c2} $impl}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  %s, %4.0fMB (cumulative), %7.2fsec (incremental)" [date] $fm_cumulative_memory $fm_this_verification_cputime}
if [expr (![string compare $verification_status "INCONCLUSIVE"]) && \
         ($fm_session_files_saved < $fm_save_file_limit) && \
         ($fm_this_verification_cputime >= $fm_save_time_limit)] {
  save_session -replace /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  lappend fm_hier_result_array($fm_tmp_result_count) /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Session file: /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss"}
  set fm_session_files_saved [expr $fm_session_files_saved + 1]
}
setup
remove_user_match -type port $impl/out[3]
remove_user_match -type port $impl/out[2]
remove_user_match -type port $impl/out[1]
remove_user_match -type port $impl/out[0]
remove_user_match -type port $impl/op_select
remove_user_match -type port $impl/input_a[3]
remove_user_match -type port $impl/input_a[2]
remove_user_match -type port $impl/input_a[1]
remove_user_match -type port $impl/input_a[0]
remove_user_match -type port $impl/input_b[3]
remove_user_match -type port $impl/input_b[2]
remove_user_match -type port $impl/input_b[1]
remove_user_match -type port $impl/input_b[0]
remove_user_match -type port $impl/clk
remove_user_match -type port $impl/reset
remove_constant -type port  $ref/op_select 
remove_constant -type port $impl/op_select 

###
### Verifying instances: 
###   Ref: r:/WORK/TopModule/a1
###   Imp: i:/WORK/TopModule/a1
###
set_reference_design      r:/WORK/A_0
set_implementation_design i:/WORK/A_0
set at_least_one_black_box 0
set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a1/c1} {i:/WORK/TopModule/a1/c1}]
if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
          (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
  set_black_box  $ref/c1
  set_black_box $impl/c1
  set at_least_one_black_box 1
  set_user_match -type cell $impl/c1 $ref/c1
  set_user_match -type pin $impl/c1/out[3] $ref/c1/out[3]
  set_user_match -type pin $impl/c1/out[2] $ref/c1/out[2]
  set_user_match -type pin $impl/c1/out[1] $ref/c1/out[1]
  set_user_match -type pin $impl/c1/out[0] $ref/c1/out[0]
  set_user_match -type pin $impl/c1/op_select $ref/c1/op_select
  set_user_match -type pin $impl/c1/input_a[3] $ref/c1/input_a[3]
  set_user_match -type pin $impl/c1/input_a[2] $ref/c1/input_a[2]
  set_user_match -type pin $impl/c1/input_a[1] $ref/c1/input_a[1]
  set_user_match -type pin $impl/c1/input_a[0] $ref/c1/input_a[0]
  set_user_match -type pin $impl/c1/input_b[3] $ref/c1/input_b[3]
  set_user_match -type pin $impl/c1/input_b[2] $ref/c1/input_b[2]
  set_user_match -type pin $impl/c1/input_b[1] $ref/c1/input_b[1]
  set_user_match -type pin $impl/c1/input_b[0] $ref/c1/input_b[0]
  set_user_match -type pin $impl/c1/clk $ref/c1/clk
  set_user_match -type pin $impl/c1/reset $ref/c1/reset
}
if [expr true] {
}
if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
          (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
  # The following matched pin(s) are constant,
  # therefore need not be verified at this level.
  set_dont_verify_points -type pin  $ref/c1/op_select
  # The following matched pin(s) are constant,
  # therefore need not be verified at this level.
  set_dont_verify_points -type pin $impl/c1/op_select
}
set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a1/c2} {i:/WORK/TopModule/a1/c2}]
if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
          (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
  set_black_box  $ref/c2
  set_black_box $impl/c2
  set at_least_one_black_box 1
  set_user_match -type cell $impl/c2 $ref/c2
  set_user_match -type pin $impl/c2/out[3] $ref/c2/out[3]
  set_user_match -type pin $impl/c2/out[2] $ref/c2/out[2]
  set_user_match -type pin $impl/c2/out[1] $ref/c2/out[1]
  set_user_match -type pin $impl/c2/out[0] $ref/c2/out[0]
  set_user_match -type pin $impl/c2/op_select $ref/c2/op_select
  set_user_match -type pin $impl/c2/input_a[3] $ref/c2/input_a[3]
  set_user_match -type pin $impl/c2/input_a[2] $ref/c2/input_a[2]
  set_user_match -type pin $impl/c2/input_a[1] $ref/c2/input_a[1]
  set_user_match -type pin $impl/c2/input_a[0] $ref/c2/input_a[0]
  set_user_match -type pin $impl/c2/input_b[3] $ref/c2/input_b[3]
  set_user_match -type pin $impl/c2/input_b[2] $ref/c2/input_b[2]
  set_user_match -type pin $impl/c2/input_b[1] $ref/c2/input_b[1]
  set_user_match -type pin $impl/c2/input_b[0] $ref/c2/input_b[0]
  set_user_match -type pin $impl/c2/clk $ref/c2/clk
  set_user_match -type pin $impl/c2/reset $ref/c2/reset
}
if [expr true] {
}
if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
          (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
  # The following matched pin(s) are constant,
  # therefore need not be verified at this level.
  set_dont_verify_points -type pin  $ref/c2/op_select
  # The following matched pin(s) are constant,
  # therefore need not be verified at this level.
  set_dont_verify_points -type pin $impl/c2/op_select
}
set_user_match -type port $impl/out[3] $ref/out[3]
set_user_match -type port $impl/out[2] $ref/out[2]
set_user_match -type port $impl/out[1] $ref/out[1]
set_user_match -type port $impl/out[0] $ref/out[0]
set_user_match -type port $impl/input_a[3] $ref/input_a[3]
set_user_match -type port $impl/input_a[2] $ref/input_a[2]
set_user_match -type port $impl/input_a[1] $ref/input_a[1]
set_user_match -type port $impl/input_a[0] $ref/input_a[0]
set_user_match -type port $impl/input_b[3] $ref/input_b[3]
set_user_match -type port $impl/input_b[2] $ref/input_b[2]
set_user_match -type port $impl/input_b[1] $ref/input_b[1]
set_user_match -type port $impl/input_b[0] $ref/input_b[0]
set_user_match -type port $impl/clk $ref/clk
set_user_match -type port $impl/reset $ref/reset
set_dont_match -type port $ref/c_out_1[3]
set_dont_match -type port $ref/c_out_1[2]
set_dont_match -type port $ref/c_out_1[1]
set_dont_match -type port $ref/c_out_1[0]
set_dont_match -type port $ref/c_out_2[3]
set_dont_match -type port $ref/c_out_2[2]
set_dont_match -type port $ref/c_out_2[1]
set_dont_match -type port $ref/c_out_2[0]
set_dont_match -type port $impl/c_out_1[3]
set_dont_match -type port $impl/c_out_1[2]
set_dont_match -type port $impl/c_out_1[1]
set_dont_match -type port $impl/c_out_1[0]
set_dont_match -type port $impl/c_out_2[3]
set_dont_match -type port $impl/c_out_2[2]
set_dont_match -type port $impl/c_out_2[1]
set_dont_match -type port $impl/c_out_2[0]
# The following unmatched port(s) will cause verification failure at higher level if used there,
# therefore need not cause verification failure at this level.
set_dont_verify_points -type port  $ref/c_out_1[3]
set_dont_verify_points -type port  $ref/c_out_1[2]
set_dont_verify_points -type port  $ref/c_out_1[1]
set_dont_verify_points -type port  $ref/c_out_1[0]
set_dont_verify_points -type port  $ref/c_out_2[3]
set_dont_verify_points -type port  $ref/c_out_2[2]
set_dont_verify_points -type port  $ref/c_out_2[1]
set_dont_verify_points -type port  $ref/c_out_2[0]
# The following unmatched port(s) will cause verification failure at higher level if used there,
# therefore need not cause verification failure at this level.
set_dont_verify_points -type port $impl/c_out_1[3]
set_dont_verify_points -type port $impl/c_out_1[2]
set_dont_verify_points -type port $impl/c_out_1[1]
set_dont_verify_points -type port $impl/c_out_1[0]
set_dont_verify_points -type port $impl/c_out_2[3]
set_dont_verify_points -type port $impl/c_out_2[2]
set_dont_verify_points -type port $impl/c_out_2[1]
set_dont_verify_points -type port $impl/c_out_2[0]
set fm_begin_cputime [cputime]
verify
if [expr ($at_least_one_black_box) && \
         (![string compare $verification_status "FAILED"])] {
  setup
  set at_least_one_black_box 0
  set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a1/c1} {i:/WORK/TopModule/a1/c1}]
  if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
            (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
    remove_black_box  $ref/c1
    remove_black_box $impl/c1
    remove_user_match -type cell $impl/c1
    remove_user_match -type pin $impl/c1/out[3]
    remove_user_match -type pin $impl/c1/out[2]
    remove_user_match -type pin $impl/c1/out[1]
    remove_user_match -type pin $impl/c1/out[0]
    remove_user_match -type pin $impl/c1/op_select
    remove_user_match -type pin $impl/c1/input_a[3]
    remove_user_match -type pin $impl/c1/input_a[2]
    remove_user_match -type pin $impl/c1/input_a[1]
    remove_user_match -type pin $impl/c1/input_a[0]
    remove_user_match -type pin $impl/c1/input_b[3]
    remove_user_match -type pin $impl/c1/input_b[2]
    remove_user_match -type pin $impl/c1/input_b[1]
    remove_user_match -type pin $impl/c1/input_b[0]
    remove_user_match -type pin $impl/c1/clk
    remove_user_match -type pin $impl/c1/reset
    remove_dont_verify_points -type pin  $ref/c1/op_select
    remove_dont_verify_points -type pin $impl/c1/op_select
  }
  set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a1/c2} {i:/WORK/TopModule/a1/c2}]
  if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
            (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
    remove_black_box  $ref/c2
    remove_black_box $impl/c2
    remove_user_match -type cell $impl/c2
    remove_user_match -type pin $impl/c2/out[3]
    remove_user_match -type pin $impl/c2/out[2]
    remove_user_match -type pin $impl/c2/out[1]
    remove_user_match -type pin $impl/c2/out[0]
    remove_user_match -type pin $impl/c2/op_select
    remove_user_match -type pin $impl/c2/input_a[3]
    remove_user_match -type pin $impl/c2/input_a[2]
    remove_user_match -type pin $impl/c2/input_a[1]
    remove_user_match -type pin $impl/c2/input_a[0]
    remove_user_match -type pin $impl/c2/input_b[3]
    remove_user_match -type pin $impl/c2/input_b[2]
    remove_user_match -type pin $impl/c2/input_b[1]
    remove_user_match -type pin $impl/c2/input_b[0]
    remove_user_match -type pin $impl/c2/clk
    remove_user_match -type pin $impl/c2/reset
    remove_dont_verify_points -type pin  $ref/c2/op_select
    remove_dont_verify_points -type pin $impl/c2/op_select
  }
  verify
}
set fm_end_cputime [cputime]
set fm_this_verification_cputime [expr $fm_end_cputime - $fm_begin_cputime]
set fm_cumulative_memory [expr [memory] / 1000]
set fm_tmp_result_count [expr $fm_tmp_result_count + 1]
set fm_hier_result_array($fm_tmp_result_count) [list {r:/WORK/TopModule/a1} {i:/WORK/TopModule/a1} $verification_status]
set fm_failure_comment ""
if [expr (![string compare $verification_status "FAILED"])] {
  set fm_failure_comment " (may be resolved in the parent level verification)"
}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  "}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "Verification %s%s:" $verification_status $fm_failure_comment}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Ref: %s (instance of %s)" {r:/WORK/TopModule/a1} $ref}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Imp: %s (instance of %s)" {i:/WORK/TopModule/a1} $impl}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  %s, %4.0fMB (cumulative), %7.2fsec (incremental)" [date] $fm_cumulative_memory $fm_this_verification_cputime}
if [expr (![string compare $verification_status "INCONCLUSIVE"]) && \
         ($fm_session_files_saved < $fm_save_file_limit) && \
         ($fm_this_verification_cputime >= $fm_save_time_limit)] {
  save_session -replace /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  lappend fm_hier_result_array($fm_tmp_result_count) /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Session file: /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss"}
  set fm_session_files_saved [expr $fm_session_files_saved + 1]
}
setup
if [expr ($at_least_one_black_box)] {
  set at_least_one_black_box 0
  set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a1/c1} {i:/WORK/TopModule/a1/c1}]
  if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
            (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
    remove_black_box  $ref/c1
    remove_black_box $impl/c1
    remove_user_match -type cell $impl/c1
    remove_user_match -type pin $impl/c1/out[3]
    remove_user_match -type pin $impl/c1/out[2]
    remove_user_match -type pin $impl/c1/out[1]
    remove_user_match -type pin $impl/c1/out[0]
    remove_user_match -type pin $impl/c1/op_select
    remove_user_match -type pin $impl/c1/input_a[3]
    remove_user_match -type pin $impl/c1/input_a[2]
    remove_user_match -type pin $impl/c1/input_a[1]
    remove_user_match -type pin $impl/c1/input_a[0]
    remove_user_match -type pin $impl/c1/input_b[3]
    remove_user_match -type pin $impl/c1/input_b[2]
    remove_user_match -type pin $impl/c1/input_b[1]
    remove_user_match -type pin $impl/c1/input_b[0]
    remove_user_match -type pin $impl/c1/clk
    remove_user_match -type pin $impl/c1/reset
    remove_dont_verify_points -type pin  $ref/c1/op_select
    remove_dont_verify_points -type pin $impl/c1/op_select
  }
  set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a1/c2} {i:/WORK/TopModule/a1/c2}]
  if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
            (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
    remove_black_box  $ref/c2
    remove_black_box $impl/c2
    remove_user_match -type cell $impl/c2
    remove_user_match -type pin $impl/c2/out[3]
    remove_user_match -type pin $impl/c2/out[2]
    remove_user_match -type pin $impl/c2/out[1]
    remove_user_match -type pin $impl/c2/out[0]
    remove_user_match -type pin $impl/c2/op_select
    remove_user_match -type pin $impl/c2/input_a[3]
    remove_user_match -type pin $impl/c2/input_a[2]
    remove_user_match -type pin $impl/c2/input_a[1]
    remove_user_match -type pin $impl/c2/input_a[0]
    remove_user_match -type pin $impl/c2/input_b[3]
    remove_user_match -type pin $impl/c2/input_b[2]
    remove_user_match -type pin $impl/c2/input_b[1]
    remove_user_match -type pin $impl/c2/input_b[0]
    remove_user_match -type pin $impl/c2/clk
    remove_user_match -type pin $impl/c2/reset
    remove_dont_verify_points -type pin  $ref/c2/op_select
    remove_dont_verify_points -type pin $impl/c2/op_select
  }
}
remove_user_match -type port $impl/out[3]
remove_user_match -type port $impl/out[2]
remove_user_match -type port $impl/out[1]
remove_user_match -type port $impl/out[0]
remove_user_match -type port $impl/input_a[3]
remove_user_match -type port $impl/input_a[2]
remove_user_match -type port $impl/input_a[1]
remove_user_match -type port $impl/input_a[0]
remove_user_match -type port $impl/input_b[3]
remove_user_match -type port $impl/input_b[2]
remove_user_match -type port $impl/input_b[1]
remove_user_match -type port $impl/input_b[0]
remove_user_match -type port $impl/clk
remove_user_match -type port $impl/reset
remove_dont_match -type port $ref/c_out_1[3]
remove_dont_match -type port $ref/c_out_1[2]
remove_dont_match -type port $ref/c_out_1[1]
remove_dont_match -type port $ref/c_out_1[0]
remove_dont_match -type port $ref/c_out_2[3]
remove_dont_match -type port $ref/c_out_2[2]
remove_dont_match -type port $ref/c_out_2[1]
remove_dont_match -type port $ref/c_out_2[0]
remove_dont_match -type port $impl/c_out_1[3]
remove_dont_match -type port $impl/c_out_1[2]
remove_dont_match -type port $impl/c_out_1[1]
remove_dont_match -type port $impl/c_out_1[0]
remove_dont_match -type port $impl/c_out_2[3]
remove_dont_match -type port $impl/c_out_2[2]
remove_dont_match -type port $impl/c_out_2[1]
remove_dont_match -type port $impl/c_out_2[0]
remove_dont_verify_points -type port  $ref/c_out_1[3]
remove_dont_verify_points -type port  $ref/c_out_1[2]
remove_dont_verify_points -type port  $ref/c_out_1[1]
remove_dont_verify_points -type port  $ref/c_out_1[0]
remove_dont_verify_points -type port  $ref/c_out_2[3]
remove_dont_verify_points -type port  $ref/c_out_2[2]
remove_dont_verify_points -type port  $ref/c_out_2[1]
remove_dont_verify_points -type port  $ref/c_out_2[0]
remove_dont_verify_points -type port $impl/c_out_1[3]
remove_dont_verify_points -type port $impl/c_out_1[2]
remove_dont_verify_points -type port $impl/c_out_1[1]
remove_dont_verify_points -type port $impl/c_out_1[0]
remove_dont_verify_points -type port $impl/c_out_2[3]
remove_dont_verify_points -type port $impl/c_out_2[2]
remove_dont_verify_points -type port $impl/c_out_2[1]
remove_dont_verify_points -type port $impl/c_out_2[0]

###
### Verifying instances: 
###   Ref: r:/WORK/TopModule/a2/c1
###   Imp: i:/WORK/TopModule/a2/c1
###
set_reference_design      r:/WORK/C_4
set_implementation_design i:/WORK/C_4
set_user_match -type port $impl/out[3] $ref/out[3]
set_user_match -type port $impl/out[2] $ref/out[2]
set_user_match -type port $impl/out[1] $ref/out[1]
set_user_match -type port $impl/out[0] $ref/out[0]
set_user_match -type port $impl/op_select $ref/op_select
set_user_match -type port $impl/input_a[3] $ref/input_a[3]
set_user_match -type port $impl/input_a[2] $ref/input_a[2]
set_user_match -type port $impl/input_a[1] $ref/input_a[1]
set_user_match -type port $impl/input_a[0] $ref/input_a[0]
set_user_match -type port $impl/input_b[3] $ref/input_b[3]
set_user_match -type port $impl/input_b[2] $ref/input_b[2]
set_user_match -type port $impl/input_b[1] $ref/input_b[1]
set_user_match -type port $impl/input_b[0] $ref/input_b[0]
set_user_match -type port $impl/clk $ref/clk
set_user_match -type port $impl/reset $ref/reset
set_constant -type port  $ref/op_select 0
set_constant -type port $impl/op_select 0
set fm_begin_cputime [cputime]
verify
set fm_end_cputime [cputime]
set fm_this_verification_cputime [expr $fm_end_cputime - $fm_begin_cputime]
set fm_cumulative_memory [expr [memory] / 1000]
set fm_tmp_result_count [expr $fm_tmp_result_count + 1]
set fm_hier_result_array($fm_tmp_result_count) [list {r:/WORK/TopModule/a2/c1} {i:/WORK/TopModule/a2/c1} $verification_status]
set fm_failure_comment ""
if [expr (![string compare $verification_status "FAILED"])] {
  set fm_failure_comment " (may be resolved in the parent level verification)"
}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  "}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "Verification %s%s:" $verification_status $fm_failure_comment}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Ref: %s (instance of %s)" {r:/WORK/TopModule/a2/c1} $ref}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Imp: %s (instance of %s)" {i:/WORK/TopModule/a2/c1} $impl}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  %s, %4.0fMB (cumulative), %7.2fsec (incremental)" [date] $fm_cumulative_memory $fm_this_verification_cputime}
if [expr (![string compare $verification_status "INCONCLUSIVE"]) && \
         ($fm_session_files_saved < $fm_save_file_limit) && \
         ($fm_this_verification_cputime >= $fm_save_time_limit)] {
  save_session -replace /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  lappend fm_hier_result_array($fm_tmp_result_count) /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Session file: /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss"}
  set fm_session_files_saved [expr $fm_session_files_saved + 1]
}
setup
remove_user_match -type port $impl/out[3]
remove_user_match -type port $impl/out[2]
remove_user_match -type port $impl/out[1]
remove_user_match -type port $impl/out[0]
remove_user_match -type port $impl/op_select
remove_user_match -type port $impl/input_a[3]
remove_user_match -type port $impl/input_a[2]
remove_user_match -type port $impl/input_a[1]
remove_user_match -type port $impl/input_a[0]
remove_user_match -type port $impl/input_b[3]
remove_user_match -type port $impl/input_b[2]
remove_user_match -type port $impl/input_b[1]
remove_user_match -type port $impl/input_b[0]
remove_user_match -type port $impl/clk
remove_user_match -type port $impl/reset
remove_constant -type port  $ref/op_select 
remove_constant -type port $impl/op_select 

###
### Verifying instances: 
###   Ref: r:/WORK/TopModule/a2/c2
###   Imp: i:/WORK/TopModule/a2/c2
###
set_reference_design      r:/WORK/C_3
set_implementation_design i:/WORK/C_3
set_user_match -type port $impl/out[3] $ref/out[3]
set_user_match -type port $impl/out[2] $ref/out[2]
set_user_match -type port $impl/out[1] $ref/out[1]
set_user_match -type port $impl/out[0] $ref/out[0]
set_user_match -type port $impl/op_select $ref/op_select
set_user_match -type port $impl/input_a[3] $ref/input_a[3]
set_user_match -type port $impl/input_a[2] $ref/input_a[2]
set_user_match -type port $impl/input_a[1] $ref/input_a[1]
set_user_match -type port $impl/input_a[0] $ref/input_a[0]
set_user_match -type port $impl/input_b[3] $ref/input_b[3]
set_user_match -type port $impl/input_b[2] $ref/input_b[2]
set_user_match -type port $impl/input_b[1] $ref/input_b[1]
set_user_match -type port $impl/input_b[0] $ref/input_b[0]
set_user_match -type port $impl/clk $ref/clk
set_user_match -type port $impl/reset $ref/reset
set_constant -type port  $ref/op_select 1
set_constant -type port $impl/op_select 1
set fm_begin_cputime [cputime]
verify
set fm_end_cputime [cputime]
set fm_this_verification_cputime [expr $fm_end_cputime - $fm_begin_cputime]
set fm_cumulative_memory [expr [memory] / 1000]
set fm_tmp_result_count [expr $fm_tmp_result_count + 1]
set fm_hier_result_array($fm_tmp_result_count) [list {r:/WORK/TopModule/a2/c2} {i:/WORK/TopModule/a2/c2} $verification_status]
set fm_failure_comment ""
if [expr (![string compare $verification_status "FAILED"])] {
  set fm_failure_comment " (may be resolved in the parent level verification)"
}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  "}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "Verification %s%s:" $verification_status $fm_failure_comment}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Ref: %s (instance of %s)" {r:/WORK/TopModule/a2/c2} $ref}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Imp: %s (instance of %s)" {i:/WORK/TopModule/a2/c2} $impl}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  %s, %4.0fMB (cumulative), %7.2fsec (incremental)" [date] $fm_cumulative_memory $fm_this_verification_cputime}
if [expr (![string compare $verification_status "INCONCLUSIVE"]) && \
         ($fm_session_files_saved < $fm_save_file_limit) && \
         ($fm_this_verification_cputime >= $fm_save_time_limit)] {
  save_session -replace /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  lappend fm_hier_result_array($fm_tmp_result_count) /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Session file: /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss"}
  set fm_session_files_saved [expr $fm_session_files_saved + 1]
}
setup
remove_user_match -type port $impl/out[3]
remove_user_match -type port $impl/out[2]
remove_user_match -type port $impl/out[1]
remove_user_match -type port $impl/out[0]
remove_user_match -type port $impl/op_select
remove_user_match -type port $impl/input_a[3]
remove_user_match -type port $impl/input_a[2]
remove_user_match -type port $impl/input_a[1]
remove_user_match -type port $impl/input_a[0]
remove_user_match -type port $impl/input_b[3]
remove_user_match -type port $impl/input_b[2]
remove_user_match -type port $impl/input_b[1]
remove_user_match -type port $impl/input_b[0]
remove_user_match -type port $impl/clk
remove_user_match -type port $impl/reset
remove_constant -type port  $ref/op_select 
remove_constant -type port $impl/op_select 

###
### Verifying instances: 
###   Ref: r:/WORK/TopModule/a2
###   Imp: i:/WORK/TopModule/a2
###
set_reference_design      r:/WORK/A_2
set_implementation_design i:/WORK/A_2
set at_least_one_black_box 0
set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a2/c1} {i:/WORK/TopModule/a2/c1}]
if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
          (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
  set_black_box  $ref/c1
  set_black_box $impl/c1
  set at_least_one_black_box 1
  set_user_match -type cell $impl/c1 $ref/c1
  set_user_match -type pin $impl/c1/out[3] $ref/c1/out[3]
  set_user_match -type pin $impl/c1/out[2] $ref/c1/out[2]
  set_user_match -type pin $impl/c1/out[1] $ref/c1/out[1]
  set_user_match -type pin $impl/c1/out[0] $ref/c1/out[0]
  set_user_match -type pin $impl/c1/op_select $ref/c1/op_select
  set_user_match -type pin $impl/c1/input_a[3] $ref/c1/input_a[3]
  set_user_match -type pin $impl/c1/input_a[2] $ref/c1/input_a[2]
  set_user_match -type pin $impl/c1/input_a[1] $ref/c1/input_a[1]
  set_user_match -type pin $impl/c1/input_a[0] $ref/c1/input_a[0]
  set_user_match -type pin $impl/c1/input_b[3] $ref/c1/input_b[3]
  set_user_match -type pin $impl/c1/input_b[2] $ref/c1/input_b[2]
  set_user_match -type pin $impl/c1/input_b[1] $ref/c1/input_b[1]
  set_user_match -type pin $impl/c1/input_b[0] $ref/c1/input_b[0]
  set_user_match -type pin $impl/c1/clk $ref/c1/clk
  set_user_match -type pin $impl/c1/reset $ref/c1/reset
}
if [expr true] {
}
if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
          (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
  # The following matched pin(s) are constant,
  # therefore need not be verified at this level.
  set_dont_verify_points -type pin  $ref/c1/op_select
  # The following matched pin(s) are constant,
  # therefore need not be verified at this level.
  set_dont_verify_points -type pin $impl/c1/op_select
}
set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a2/c2} {i:/WORK/TopModule/a2/c2}]
if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
          (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
  set_black_box  $ref/c2
  set_black_box $impl/c2
  set at_least_one_black_box 1
  set_user_match -type cell $impl/c2 $ref/c2
  set_user_match -type pin $impl/c2/out[3] $ref/c2/out[3]
  set_user_match -type pin $impl/c2/out[2] $ref/c2/out[2]
  set_user_match -type pin $impl/c2/out[1] $ref/c2/out[1]
  set_user_match -type pin $impl/c2/out[0] $ref/c2/out[0]
  set_user_match -type pin $impl/c2/op_select $ref/c2/op_select
  set_user_match -type pin $impl/c2/input_a[3] $ref/c2/input_a[3]
  set_user_match -type pin $impl/c2/input_a[2] $ref/c2/input_a[2]
  set_user_match -type pin $impl/c2/input_a[1] $ref/c2/input_a[1]
  set_user_match -type pin $impl/c2/input_a[0] $ref/c2/input_a[0]
  set_user_match -type pin $impl/c2/input_b[3] $ref/c2/input_b[3]
  set_user_match -type pin $impl/c2/input_b[2] $ref/c2/input_b[2]
  set_user_match -type pin $impl/c2/input_b[1] $ref/c2/input_b[1]
  set_user_match -type pin $impl/c2/input_b[0] $ref/c2/input_b[0]
  set_user_match -type pin $impl/c2/clk $ref/c2/clk
  set_user_match -type pin $impl/c2/reset $ref/c2/reset
}
if [expr true] {
}
if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
          (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
  # The following matched pin(s) are constant,
  # therefore need not be verified at this level.
  set_dont_verify_points -type pin  $ref/c2/op_select
  # The following matched pin(s) are constant,
  # therefore need not be verified at this level.
  set_dont_verify_points -type pin $impl/c2/op_select
}
set_user_match -type port $impl/out[3] $ref/out[3]
set_user_match -type port $impl/out[2] $ref/out[2]
set_user_match -type port $impl/out[1] $ref/out[1]
set_user_match -type port $impl/out[0] $ref/out[0]
set_user_match -type port $impl/input_a[3] $ref/input_a[3]
set_user_match -type port $impl/input_a[2] $ref/input_a[2]
set_user_match -type port $impl/input_a[1] $ref/input_a[1]
set_user_match -type port $impl/input_a[0] $ref/input_a[0]
set_user_match -type port $impl/input_b[3] $ref/input_b[3]
set_user_match -type port $impl/input_b[2] $ref/input_b[2]
set_user_match -type port $impl/input_b[1] $ref/input_b[1]
set_user_match -type port $impl/input_b[0] $ref/input_b[0]
set_user_match -type port $impl/clk $ref/clk
set_user_match -type port $impl/reset $ref/reset
set_dont_match -type port $ref/c_out_1[3]
set_dont_match -type port $ref/c_out_1[2]
set_dont_match -type port $ref/c_out_1[1]
set_dont_match -type port $ref/c_out_1[0]
set_dont_match -type port $ref/c_out_2[3]
set_dont_match -type port $ref/c_out_2[2]
set_dont_match -type port $ref/c_out_2[1]
set_dont_match -type port $ref/c_out_2[0]
set_dont_match -type port $impl/c_out_1[3]
set_dont_match -type port $impl/c_out_1[2]
set_dont_match -type port $impl/c_out_1[1]
set_dont_match -type port $impl/c_out_1[0]
set_dont_match -type port $impl/c_out_2[3]
set_dont_match -type port $impl/c_out_2[2]
set_dont_match -type port $impl/c_out_2[1]
set_dont_match -type port $impl/c_out_2[0]
# The following unmatched port(s) will cause verification failure at higher level if used there,
# therefore need not cause verification failure at this level.
set_dont_verify_points -type port  $ref/c_out_1[3]
set_dont_verify_points -type port  $ref/c_out_1[2]
set_dont_verify_points -type port  $ref/c_out_1[1]
set_dont_verify_points -type port  $ref/c_out_1[0]
set_dont_verify_points -type port  $ref/c_out_2[3]
set_dont_verify_points -type port  $ref/c_out_2[2]
set_dont_verify_points -type port  $ref/c_out_2[1]
set_dont_verify_points -type port  $ref/c_out_2[0]
# The following unmatched port(s) will cause verification failure at higher level if used there,
# therefore need not cause verification failure at this level.
set_dont_verify_points -type port $impl/c_out_1[3]
set_dont_verify_points -type port $impl/c_out_1[2]
set_dont_verify_points -type port $impl/c_out_1[1]
set_dont_verify_points -type port $impl/c_out_1[0]
set_dont_verify_points -type port $impl/c_out_2[3]
set_dont_verify_points -type port $impl/c_out_2[2]
set_dont_verify_points -type port $impl/c_out_2[1]
set_dont_verify_points -type port $impl/c_out_2[0]
set fm_begin_cputime [cputime]
verify
if [expr ($at_least_one_black_box) && \
         (![string compare $verification_status "FAILED"])] {
  setup
  set at_least_one_black_box 0
  set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a2/c1} {i:/WORK/TopModule/a2/c1}]
  if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
            (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
    remove_black_box  $ref/c1
    remove_black_box $impl/c1
    remove_user_match -type cell $impl/c1
    remove_user_match -type pin $impl/c1/out[3]
    remove_user_match -type pin $impl/c1/out[2]
    remove_user_match -type pin $impl/c1/out[1]
    remove_user_match -type pin $impl/c1/out[0]
    remove_user_match -type pin $impl/c1/op_select
    remove_user_match -type pin $impl/c1/input_a[3]
    remove_user_match -type pin $impl/c1/input_a[2]
    remove_user_match -type pin $impl/c1/input_a[1]
    remove_user_match -type pin $impl/c1/input_a[0]
    remove_user_match -type pin $impl/c1/input_b[3]
    remove_user_match -type pin $impl/c1/input_b[2]
    remove_user_match -type pin $impl/c1/input_b[1]
    remove_user_match -type pin $impl/c1/input_b[0]
    remove_user_match -type pin $impl/c1/clk
    remove_user_match -type pin $impl/c1/reset
    remove_dont_verify_points -type pin  $ref/c1/op_select
    remove_dont_verify_points -type pin $impl/c1/op_select
  }
  set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a2/c2} {i:/WORK/TopModule/a2/c2}]
  if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
            (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
    remove_black_box  $ref/c2
    remove_black_box $impl/c2
    remove_user_match -type cell $impl/c2
    remove_user_match -type pin $impl/c2/out[3]
    remove_user_match -type pin $impl/c2/out[2]
    remove_user_match -type pin $impl/c2/out[1]
    remove_user_match -type pin $impl/c2/out[0]
    remove_user_match -type pin $impl/c2/op_select
    remove_user_match -type pin $impl/c2/input_a[3]
    remove_user_match -type pin $impl/c2/input_a[2]
    remove_user_match -type pin $impl/c2/input_a[1]
    remove_user_match -type pin $impl/c2/input_a[0]
    remove_user_match -type pin $impl/c2/input_b[3]
    remove_user_match -type pin $impl/c2/input_b[2]
    remove_user_match -type pin $impl/c2/input_b[1]
    remove_user_match -type pin $impl/c2/input_b[0]
    remove_user_match -type pin $impl/c2/clk
    remove_user_match -type pin $impl/c2/reset
    remove_dont_verify_points -type pin  $ref/c2/op_select
    remove_dont_verify_points -type pin $impl/c2/op_select
  }
  verify
}
set fm_end_cputime [cputime]
set fm_this_verification_cputime [expr $fm_end_cputime - $fm_begin_cputime]
set fm_cumulative_memory [expr [memory] / 1000]
set fm_tmp_result_count [expr $fm_tmp_result_count + 1]
set fm_hier_result_array($fm_tmp_result_count) [list {r:/WORK/TopModule/a2} {i:/WORK/TopModule/a2} $verification_status]
set fm_failure_comment ""
if [expr (![string compare $verification_status "FAILED"])] {
  set fm_failure_comment " (may be resolved in the parent level verification)"
}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  "}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "Verification %s%s:" $verification_status $fm_failure_comment}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Ref: %s (instance of %s)" {r:/WORK/TopModule/a2} $ref}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Imp: %s (instance of %s)" {i:/WORK/TopModule/a2} $impl}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  %s, %4.0fMB (cumulative), %7.2fsec (incremental)" [date] $fm_cumulative_memory $fm_this_verification_cputime}
if [expr (![string compare $verification_status "INCONCLUSIVE"]) && \
         ($fm_session_files_saved < $fm_save_file_limit) && \
         ($fm_this_verification_cputime >= $fm_save_time_limit)] {
  save_session -replace /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  lappend fm_hier_result_array($fm_tmp_result_count) /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Session file: /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss"}
  set fm_session_files_saved [expr $fm_session_files_saved + 1]
}
setup
if [expr ($at_least_one_black_box)] {
  set at_least_one_black_box 0
  set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a2/c1} {i:/WORK/TopModule/a2/c1}]
  if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
            (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
    remove_black_box  $ref/c1
    remove_black_box $impl/c1
    remove_user_match -type cell $impl/c1
    remove_user_match -type pin $impl/c1/out[3]
    remove_user_match -type pin $impl/c1/out[2]
    remove_user_match -type pin $impl/c1/out[1]
    remove_user_match -type pin $impl/c1/out[0]
    remove_user_match -type pin $impl/c1/op_select
    remove_user_match -type pin $impl/c1/input_a[3]
    remove_user_match -type pin $impl/c1/input_a[2]
    remove_user_match -type pin $impl/c1/input_a[1]
    remove_user_match -type pin $impl/c1/input_a[0]
    remove_user_match -type pin $impl/c1/input_b[3]
    remove_user_match -type pin $impl/c1/input_b[2]
    remove_user_match -type pin $impl/c1/input_b[1]
    remove_user_match -type pin $impl/c1/input_b[0]
    remove_user_match -type pin $impl/c1/clk
    remove_user_match -type pin $impl/c1/reset
    remove_dont_verify_points -type pin  $ref/c1/op_select
    remove_dont_verify_points -type pin $impl/c1/op_select
  }
  set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a2/c2} {i:/WORK/TopModule/a2/c2}]
  if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
            (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
    remove_black_box  $ref/c2
    remove_black_box $impl/c2
    remove_user_match -type cell $impl/c2
    remove_user_match -type pin $impl/c2/out[3]
    remove_user_match -type pin $impl/c2/out[2]
    remove_user_match -type pin $impl/c2/out[1]
    remove_user_match -type pin $impl/c2/out[0]
    remove_user_match -type pin $impl/c2/op_select
    remove_user_match -type pin $impl/c2/input_a[3]
    remove_user_match -type pin $impl/c2/input_a[2]
    remove_user_match -type pin $impl/c2/input_a[1]
    remove_user_match -type pin $impl/c2/input_a[0]
    remove_user_match -type pin $impl/c2/input_b[3]
    remove_user_match -type pin $impl/c2/input_b[2]
    remove_user_match -type pin $impl/c2/input_b[1]
    remove_user_match -type pin $impl/c2/input_b[0]
    remove_user_match -type pin $impl/c2/clk
    remove_user_match -type pin $impl/c2/reset
    remove_dont_verify_points -type pin  $ref/c2/op_select
    remove_dont_verify_points -type pin $impl/c2/op_select
  }
}
remove_user_match -type port $impl/out[3]
remove_user_match -type port $impl/out[2]
remove_user_match -type port $impl/out[1]
remove_user_match -type port $impl/out[0]
remove_user_match -type port $impl/input_a[3]
remove_user_match -type port $impl/input_a[2]
remove_user_match -type port $impl/input_a[1]
remove_user_match -type port $impl/input_a[0]
remove_user_match -type port $impl/input_b[3]
remove_user_match -type port $impl/input_b[2]
remove_user_match -type port $impl/input_b[1]
remove_user_match -type port $impl/input_b[0]
remove_user_match -type port $impl/clk
remove_user_match -type port $impl/reset
remove_dont_match -type port $ref/c_out_1[3]
remove_dont_match -type port $ref/c_out_1[2]
remove_dont_match -type port $ref/c_out_1[1]
remove_dont_match -type port $ref/c_out_1[0]
remove_dont_match -type port $ref/c_out_2[3]
remove_dont_match -type port $ref/c_out_2[2]
remove_dont_match -type port $ref/c_out_2[1]
remove_dont_match -type port $ref/c_out_2[0]
remove_dont_match -type port $impl/c_out_1[3]
remove_dont_match -type port $impl/c_out_1[2]
remove_dont_match -type port $impl/c_out_1[1]
remove_dont_match -type port $impl/c_out_1[0]
remove_dont_match -type port $impl/c_out_2[3]
remove_dont_match -type port $impl/c_out_2[2]
remove_dont_match -type port $impl/c_out_2[1]
remove_dont_match -type port $impl/c_out_2[0]
remove_dont_verify_points -type port  $ref/c_out_1[3]
remove_dont_verify_points -type port  $ref/c_out_1[2]
remove_dont_verify_points -type port  $ref/c_out_1[1]
remove_dont_verify_points -type port  $ref/c_out_1[0]
remove_dont_verify_points -type port  $ref/c_out_2[3]
remove_dont_verify_points -type port  $ref/c_out_2[2]
remove_dont_verify_points -type port  $ref/c_out_2[1]
remove_dont_verify_points -type port  $ref/c_out_2[0]
remove_dont_verify_points -type port $impl/c_out_1[3]
remove_dont_verify_points -type port $impl/c_out_1[2]
remove_dont_verify_points -type port $impl/c_out_1[1]
remove_dont_verify_points -type port $impl/c_out_1[0]
remove_dont_verify_points -type port $impl/c_out_2[3]
remove_dont_verify_points -type port $impl/c_out_2[2]
remove_dont_verify_points -type port $impl/c_out_2[1]
remove_dont_verify_points -type port $impl/c_out_2[0]

###
### Verifying instances: 
###   Ref: r:/WORK/TopModule/a3/c1
###   Imp: i:/WORK/TopModule/a3/c1
###
set_reference_design      r:/WORK/C_2
set_implementation_design i:/WORK/C_2
set_user_match -type port $impl/out[3] $ref/out[3]
set_user_match -type port $impl/out[2] $ref/out[2]
set_user_match -type port $impl/out[1] $ref/out[1]
set_user_match -type port $impl/out[0] $ref/out[0]
set_user_match -type port $impl/op_select $ref/op_select
set_user_match -type port $impl/input_a[3] $ref/input_a[3]
set_user_match -type port $impl/input_a[2] $ref/input_a[2]
set_user_match -type port $impl/input_a[1] $ref/input_a[1]
set_user_match -type port $impl/input_a[0] $ref/input_a[0]
set_user_match -type port $impl/input_b[3] $ref/input_b[3]
set_user_match -type port $impl/input_b[2] $ref/input_b[2]
set_user_match -type port $impl/input_b[1] $ref/input_b[1]
set_user_match -type port $impl/input_b[0] $ref/input_b[0]
set_user_match -type port $impl/clk $ref/clk
set_user_match -type port $impl/reset $ref/reset
set_constant -type port  $ref/op_select 0
set_constant -type port $impl/op_select 0
set fm_begin_cputime [cputime]
verify
set fm_end_cputime [cputime]
set fm_this_verification_cputime [expr $fm_end_cputime - $fm_begin_cputime]
set fm_cumulative_memory [expr [memory] / 1000]
set fm_tmp_result_count [expr $fm_tmp_result_count + 1]
set fm_hier_result_array($fm_tmp_result_count) [list {r:/WORK/TopModule/a3/c1} {i:/WORK/TopModule/a3/c1} $verification_status]
set fm_failure_comment ""
if [expr (![string compare $verification_status "FAILED"])] {
  set fm_failure_comment " (may be resolved in the parent level verification)"
}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  "}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "Verification %s%s:" $verification_status $fm_failure_comment}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Ref: %s (instance of %s)" {r:/WORK/TopModule/a3/c1} $ref}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Imp: %s (instance of %s)" {i:/WORK/TopModule/a3/c1} $impl}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  %s, %4.0fMB (cumulative), %7.2fsec (incremental)" [date] $fm_cumulative_memory $fm_this_verification_cputime}
if [expr (![string compare $verification_status "INCONCLUSIVE"]) && \
         ($fm_session_files_saved < $fm_save_file_limit) && \
         ($fm_this_verification_cputime >= $fm_save_time_limit)] {
  save_session -replace /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  lappend fm_hier_result_array($fm_tmp_result_count) /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Session file: /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss"}
  set fm_session_files_saved [expr $fm_session_files_saved + 1]
}
setup
remove_user_match -type port $impl/out[3]
remove_user_match -type port $impl/out[2]
remove_user_match -type port $impl/out[1]
remove_user_match -type port $impl/out[0]
remove_user_match -type port $impl/op_select
remove_user_match -type port $impl/input_a[3]
remove_user_match -type port $impl/input_a[2]
remove_user_match -type port $impl/input_a[1]
remove_user_match -type port $impl/input_a[0]
remove_user_match -type port $impl/input_b[3]
remove_user_match -type port $impl/input_b[2]
remove_user_match -type port $impl/input_b[1]
remove_user_match -type port $impl/input_b[0]
remove_user_match -type port $impl/clk
remove_user_match -type port $impl/reset
remove_constant -type port  $ref/op_select 
remove_constant -type port $impl/op_select 

###
### Verifying instances: 
###   Ref: r:/WORK/TopModule/a3/c2
###   Imp: i:/WORK/TopModule/a3/c2
###
set_reference_design      r:/WORK/C_1
set_implementation_design i:/WORK/C_1
set_user_match -type port $impl/out[3] $ref/out[3]
set_user_match -type port $impl/out[2] $ref/out[2]
set_user_match -type port $impl/out[1] $ref/out[1]
set_user_match -type port $impl/out[0] $ref/out[0]
set_user_match -type port $impl/op_select $ref/op_select
set_user_match -type port $impl/input_a[3] $ref/input_a[3]
set_user_match -type port $impl/input_a[2] $ref/input_a[2]
set_user_match -type port $impl/input_a[1] $ref/input_a[1]
set_user_match -type port $impl/input_a[0] $ref/input_a[0]
set_user_match -type port $impl/input_b[3] $ref/input_b[3]
set_user_match -type port $impl/input_b[2] $ref/input_b[2]
set_user_match -type port $impl/input_b[1] $ref/input_b[1]
set_user_match -type port $impl/input_b[0] $ref/input_b[0]
set_user_match -type port $impl/clk $ref/clk
set_user_match -type port $impl/reset $ref/reset
set_constant -type port  $ref/op_select 1
set_constant -type port $impl/op_select 1
set fm_begin_cputime [cputime]
verify
set fm_end_cputime [cputime]
set fm_this_verification_cputime [expr $fm_end_cputime - $fm_begin_cputime]
set fm_cumulative_memory [expr [memory] / 1000]
set fm_tmp_result_count [expr $fm_tmp_result_count + 1]
set fm_hier_result_array($fm_tmp_result_count) [list {r:/WORK/TopModule/a3/c2} {i:/WORK/TopModule/a3/c2} $verification_status]
set fm_failure_comment ""
if [expr (![string compare $verification_status "FAILED"])] {
  set fm_failure_comment " (may be resolved in the parent level verification)"
}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  "}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "Verification %s%s:" $verification_status $fm_failure_comment}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Ref: %s (instance of %s)" {r:/WORK/TopModule/a3/c2} $ref}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Imp: %s (instance of %s)" {i:/WORK/TopModule/a3/c2} $impl}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  %s, %4.0fMB (cumulative), %7.2fsec (incremental)" [date] $fm_cumulative_memory $fm_this_verification_cputime}
if [expr (![string compare $verification_status "INCONCLUSIVE"]) && \
         ($fm_session_files_saved < $fm_save_file_limit) && \
         ($fm_this_verification_cputime >= $fm_save_time_limit)] {
  save_session -replace /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  lappend fm_hier_result_array($fm_tmp_result_count) /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Session file: /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss"}
  set fm_session_files_saved [expr $fm_session_files_saved + 1]
}
setup
remove_user_match -type port $impl/out[3]
remove_user_match -type port $impl/out[2]
remove_user_match -type port $impl/out[1]
remove_user_match -type port $impl/out[0]
remove_user_match -type port $impl/op_select
remove_user_match -type port $impl/input_a[3]
remove_user_match -type port $impl/input_a[2]
remove_user_match -type port $impl/input_a[1]
remove_user_match -type port $impl/input_a[0]
remove_user_match -type port $impl/input_b[3]
remove_user_match -type port $impl/input_b[2]
remove_user_match -type port $impl/input_b[1]
remove_user_match -type port $impl/input_b[0]
remove_user_match -type port $impl/clk
remove_user_match -type port $impl/reset
remove_constant -type port  $ref/op_select 
remove_constant -type port $impl/op_select 

###
### Verifying instances: 
###   Ref: r:/WORK/TopModule/a3
###   Imp: i:/WORK/TopModule/a3
###
set_reference_design      r:/WORK/A_1
set_implementation_design i:/WORK/A_1
set at_least_one_black_box 0
set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a3/c1} {i:/WORK/TopModule/a3/c1}]
if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
          (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
  set_black_box  $ref/c1
  set_black_box $impl/c1
  set at_least_one_black_box 1
  set_user_match -type cell $impl/c1 $ref/c1
  set_user_match -type pin $impl/c1/out[3] $ref/c1/out[3]
  set_user_match -type pin $impl/c1/out[2] $ref/c1/out[2]
  set_user_match -type pin $impl/c1/out[1] $ref/c1/out[1]
  set_user_match -type pin $impl/c1/out[0] $ref/c1/out[0]
  set_user_match -type pin $impl/c1/op_select $ref/c1/op_select
  set_user_match -type pin $impl/c1/input_a[3] $ref/c1/input_a[3]
  set_user_match -type pin $impl/c1/input_a[2] $ref/c1/input_a[2]
  set_user_match -type pin $impl/c1/input_a[1] $ref/c1/input_a[1]
  set_user_match -type pin $impl/c1/input_a[0] $ref/c1/input_a[0]
  set_user_match -type pin $impl/c1/input_b[3] $ref/c1/input_b[3]
  set_user_match -type pin $impl/c1/input_b[2] $ref/c1/input_b[2]
  set_user_match -type pin $impl/c1/input_b[1] $ref/c1/input_b[1]
  set_user_match -type pin $impl/c1/input_b[0] $ref/c1/input_b[0]
  set_user_match -type pin $impl/c1/clk $ref/c1/clk
  set_user_match -type pin $impl/c1/reset $ref/c1/reset
}
if [expr true] {
}
if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
          (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
  # The following matched pin(s) are constant,
  # therefore need not be verified at this level.
  set_dont_verify_points -type pin  $ref/c1/op_select
  # The following matched pin(s) are constant,
  # therefore need not be verified at this level.
  set_dont_verify_points -type pin $impl/c1/op_select
}
set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a3/c2} {i:/WORK/TopModule/a3/c2}]
if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
          (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
  set_black_box  $ref/c2
  set_black_box $impl/c2
  set at_least_one_black_box 1
  set_user_match -type cell $impl/c2 $ref/c2
  set_user_match -type pin $impl/c2/out[3] $ref/c2/out[3]
  set_user_match -type pin $impl/c2/out[2] $ref/c2/out[2]
  set_user_match -type pin $impl/c2/out[1] $ref/c2/out[1]
  set_user_match -type pin $impl/c2/out[0] $ref/c2/out[0]
  set_user_match -type pin $impl/c2/op_select $ref/c2/op_select
  set_user_match -type pin $impl/c2/input_a[3] $ref/c2/input_a[3]
  set_user_match -type pin $impl/c2/input_a[2] $ref/c2/input_a[2]
  set_user_match -type pin $impl/c2/input_a[1] $ref/c2/input_a[1]
  set_user_match -type pin $impl/c2/input_a[0] $ref/c2/input_a[0]
  set_user_match -type pin $impl/c2/input_b[3] $ref/c2/input_b[3]
  set_user_match -type pin $impl/c2/input_b[2] $ref/c2/input_b[2]
  set_user_match -type pin $impl/c2/input_b[1] $ref/c2/input_b[1]
  set_user_match -type pin $impl/c2/input_b[0] $ref/c2/input_b[0]
  set_user_match -type pin $impl/c2/clk $ref/c2/clk
  set_user_match -type pin $impl/c2/reset $ref/c2/reset
}
if [expr true] {
}
if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
          (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
  # The following matched pin(s) are constant,
  # therefore need not be verified at this level.
  set_dont_verify_points -type pin  $ref/c2/op_select
  # The following matched pin(s) are constant,
  # therefore need not be verified at this level.
  set_dont_verify_points -type pin $impl/c2/op_select
}
set_user_match -type port $impl/out[3] $ref/out[3]
set_user_match -type port $impl/out[2] $ref/out[2]
set_user_match -type port $impl/out[1] $ref/out[1]
set_user_match -type port $impl/out[0] $ref/out[0]
set_user_match -type port $impl/input_a[3] $ref/input_a[3]
set_user_match -type port $impl/input_a[2] $ref/input_a[2]
set_user_match -type port $impl/input_a[1] $ref/input_a[1]
set_user_match -type port $impl/input_a[0] $ref/input_a[0]
set_user_match -type port $impl/input_b[3] $ref/input_b[3]
set_user_match -type port $impl/input_b[2] $ref/input_b[2]
set_user_match -type port $impl/input_b[1] $ref/input_b[1]
set_user_match -type port $impl/input_b[0] $ref/input_b[0]
set_user_match -type port $impl/clk $ref/clk
set_user_match -type port $impl/reset $ref/reset
set_dont_match -type port $ref/c_out_1[3]
set_dont_match -type port $ref/c_out_1[2]
set_dont_match -type port $ref/c_out_1[1]
set_dont_match -type port $ref/c_out_1[0]
set_dont_match -type port $ref/c_out_2[3]
set_dont_match -type port $ref/c_out_2[2]
set_dont_match -type port $ref/c_out_2[1]
set_dont_match -type port $ref/c_out_2[0]
set_dont_match -type port $impl/c_out_1[3]
set_dont_match -type port $impl/c_out_1[2]
set_dont_match -type port $impl/c_out_1[1]
set_dont_match -type port $impl/c_out_1[0]
set_dont_match -type port $impl/c_out_2[3]
set_dont_match -type port $impl/c_out_2[2]
set_dont_match -type port $impl/c_out_2[1]
set_dont_match -type port $impl/c_out_2[0]
# The following unmatched port(s) will cause verification failure at higher level if used there,
# therefore need not cause verification failure at this level.
set_dont_verify_points -type port  $ref/c_out_1[3]
set_dont_verify_points -type port  $ref/c_out_1[2]
set_dont_verify_points -type port  $ref/c_out_1[1]
set_dont_verify_points -type port  $ref/c_out_1[0]
set_dont_verify_points -type port  $ref/c_out_2[3]
set_dont_verify_points -type port  $ref/c_out_2[2]
set_dont_verify_points -type port  $ref/c_out_2[1]
set_dont_verify_points -type port  $ref/c_out_2[0]
# The following unmatched port(s) will cause verification failure at higher level if used there,
# therefore need not cause verification failure at this level.
set_dont_verify_points -type port $impl/c_out_1[3]
set_dont_verify_points -type port $impl/c_out_1[2]
set_dont_verify_points -type port $impl/c_out_1[1]
set_dont_verify_points -type port $impl/c_out_1[0]
set_dont_verify_points -type port $impl/c_out_2[3]
set_dont_verify_points -type port $impl/c_out_2[2]
set_dont_verify_points -type port $impl/c_out_2[1]
set_dont_verify_points -type port $impl/c_out_2[0]
set fm_begin_cputime [cputime]
verify
if [expr ($at_least_one_black_box) && \
         (![string compare $verification_status "FAILED"])] {
  setup
  set at_least_one_black_box 0
  set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a3/c1} {i:/WORK/TopModule/a3/c1}]
  if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
            (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
    remove_black_box  $ref/c1
    remove_black_box $impl/c1
    remove_user_match -type cell $impl/c1
    remove_user_match -type pin $impl/c1/out[3]
    remove_user_match -type pin $impl/c1/out[2]
    remove_user_match -type pin $impl/c1/out[1]
    remove_user_match -type pin $impl/c1/out[0]
    remove_user_match -type pin $impl/c1/op_select
    remove_user_match -type pin $impl/c1/input_a[3]
    remove_user_match -type pin $impl/c1/input_a[2]
    remove_user_match -type pin $impl/c1/input_a[1]
    remove_user_match -type pin $impl/c1/input_a[0]
    remove_user_match -type pin $impl/c1/input_b[3]
    remove_user_match -type pin $impl/c1/input_b[2]
    remove_user_match -type pin $impl/c1/input_b[1]
    remove_user_match -type pin $impl/c1/input_b[0]
    remove_user_match -type pin $impl/c1/clk
    remove_user_match -type pin $impl/c1/reset
    remove_dont_verify_points -type pin  $ref/c1/op_select
    remove_dont_verify_points -type pin $impl/c1/op_select
  }
  set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a3/c2} {i:/WORK/TopModule/a3/c2}]
  if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
            (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
    remove_black_box  $ref/c2
    remove_black_box $impl/c2
    remove_user_match -type cell $impl/c2
    remove_user_match -type pin $impl/c2/out[3]
    remove_user_match -type pin $impl/c2/out[2]
    remove_user_match -type pin $impl/c2/out[1]
    remove_user_match -type pin $impl/c2/out[0]
    remove_user_match -type pin $impl/c2/op_select
    remove_user_match -type pin $impl/c2/input_a[3]
    remove_user_match -type pin $impl/c2/input_a[2]
    remove_user_match -type pin $impl/c2/input_a[1]
    remove_user_match -type pin $impl/c2/input_a[0]
    remove_user_match -type pin $impl/c2/input_b[3]
    remove_user_match -type pin $impl/c2/input_b[2]
    remove_user_match -type pin $impl/c2/input_b[1]
    remove_user_match -type pin $impl/c2/input_b[0]
    remove_user_match -type pin $impl/c2/clk
    remove_user_match -type pin $impl/c2/reset
    remove_dont_verify_points -type pin  $ref/c2/op_select
    remove_dont_verify_points -type pin $impl/c2/op_select
  }
  verify
}
set fm_end_cputime [cputime]
set fm_this_verification_cputime [expr $fm_end_cputime - $fm_begin_cputime]
set fm_cumulative_memory [expr [memory] / 1000]
set fm_tmp_result_count [expr $fm_tmp_result_count + 1]
set fm_hier_result_array($fm_tmp_result_count) [list {r:/WORK/TopModule/a3} {i:/WORK/TopModule/a3} $verification_status]
set fm_failure_comment ""
if [expr (![string compare $verification_status "FAILED"])] {
  set fm_failure_comment " (may be resolved in the parent level verification)"
}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  "}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "Verification %s%s:" $verification_status $fm_failure_comment}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Ref: %s (instance of %s)" {r:/WORK/TopModule/a3} $ref}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Imp: %s (instance of %s)" {i:/WORK/TopModule/a3} $impl}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  %s, %4.0fMB (cumulative), %7.2fsec (incremental)" [date] $fm_cumulative_memory $fm_this_verification_cputime}
if [expr (![string compare $verification_status "INCONCLUSIVE"]) && \
         ($fm_session_files_saved < $fm_save_file_limit) && \
         ($fm_this_verification_cputime >= $fm_save_time_limit)] {
  save_session -replace /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  lappend fm_hier_result_array($fm_tmp_result_count) /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Session file: /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss"}
  set fm_session_files_saved [expr $fm_session_files_saved + 1]
}
setup
if [expr ($at_least_one_black_box)] {
  set at_least_one_black_box 0
  set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a3/c1} {i:/WORK/TopModule/a3/c1}]
  if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
            (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
    remove_black_box  $ref/c1
    remove_black_box $impl/c1
    remove_user_match -type cell $impl/c1
    remove_user_match -type pin $impl/c1/out[3]
    remove_user_match -type pin $impl/c1/out[2]
    remove_user_match -type pin $impl/c1/out[1]
    remove_user_match -type pin $impl/c1/out[0]
    remove_user_match -type pin $impl/c1/op_select
    remove_user_match -type pin $impl/c1/input_a[3]
    remove_user_match -type pin $impl/c1/input_a[2]
    remove_user_match -type pin $impl/c1/input_a[1]
    remove_user_match -type pin $impl/c1/input_a[0]
    remove_user_match -type pin $impl/c1/input_b[3]
    remove_user_match -type pin $impl/c1/input_b[2]
    remove_user_match -type pin $impl/c1/input_b[1]
    remove_user_match -type pin $impl/c1/input_b[0]
    remove_user_match -type pin $impl/c1/clk
    remove_user_match -type pin $impl/c1/reset
    remove_dont_verify_points -type pin  $ref/c1/op_select
    remove_dont_verify_points -type pin $impl/c1/op_select
  }
  set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a3/c2} {i:/WORK/TopModule/a3/c2}]
  if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
            (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
    remove_black_box  $ref/c2
    remove_black_box $impl/c2
    remove_user_match -type cell $impl/c2
    remove_user_match -type pin $impl/c2/out[3]
    remove_user_match -type pin $impl/c2/out[2]
    remove_user_match -type pin $impl/c2/out[1]
    remove_user_match -type pin $impl/c2/out[0]
    remove_user_match -type pin $impl/c2/op_select
    remove_user_match -type pin $impl/c2/input_a[3]
    remove_user_match -type pin $impl/c2/input_a[2]
    remove_user_match -type pin $impl/c2/input_a[1]
    remove_user_match -type pin $impl/c2/input_a[0]
    remove_user_match -type pin $impl/c2/input_b[3]
    remove_user_match -type pin $impl/c2/input_b[2]
    remove_user_match -type pin $impl/c2/input_b[1]
    remove_user_match -type pin $impl/c2/input_b[0]
    remove_user_match -type pin $impl/c2/clk
    remove_user_match -type pin $impl/c2/reset
    remove_dont_verify_points -type pin  $ref/c2/op_select
    remove_dont_verify_points -type pin $impl/c2/op_select
  }
}
remove_user_match -type port $impl/out[3]
remove_user_match -type port $impl/out[2]
remove_user_match -type port $impl/out[1]
remove_user_match -type port $impl/out[0]
remove_user_match -type port $impl/input_a[3]
remove_user_match -type port $impl/input_a[2]
remove_user_match -type port $impl/input_a[1]
remove_user_match -type port $impl/input_a[0]
remove_user_match -type port $impl/input_b[3]
remove_user_match -type port $impl/input_b[2]
remove_user_match -type port $impl/input_b[1]
remove_user_match -type port $impl/input_b[0]
remove_user_match -type port $impl/clk
remove_user_match -type port $impl/reset
remove_dont_match -type port $ref/c_out_1[3]
remove_dont_match -type port $ref/c_out_1[2]
remove_dont_match -type port $ref/c_out_1[1]
remove_dont_match -type port $ref/c_out_1[0]
remove_dont_match -type port $ref/c_out_2[3]
remove_dont_match -type port $ref/c_out_2[2]
remove_dont_match -type port $ref/c_out_2[1]
remove_dont_match -type port $ref/c_out_2[0]
remove_dont_match -type port $impl/c_out_1[3]
remove_dont_match -type port $impl/c_out_1[2]
remove_dont_match -type port $impl/c_out_1[1]
remove_dont_match -type port $impl/c_out_1[0]
remove_dont_match -type port $impl/c_out_2[3]
remove_dont_match -type port $impl/c_out_2[2]
remove_dont_match -type port $impl/c_out_2[1]
remove_dont_match -type port $impl/c_out_2[0]
remove_dont_verify_points -type port  $ref/c_out_1[3]
remove_dont_verify_points -type port  $ref/c_out_1[2]
remove_dont_verify_points -type port  $ref/c_out_1[1]
remove_dont_verify_points -type port  $ref/c_out_1[0]
remove_dont_verify_points -type port  $ref/c_out_2[3]
remove_dont_verify_points -type port  $ref/c_out_2[2]
remove_dont_verify_points -type port  $ref/c_out_2[1]
remove_dont_verify_points -type port  $ref/c_out_2[0]
remove_dont_verify_points -type port $impl/c_out_1[3]
remove_dont_verify_points -type port $impl/c_out_1[2]
remove_dont_verify_points -type port $impl/c_out_1[1]
remove_dont_verify_points -type port $impl/c_out_1[0]
remove_dont_verify_points -type port $impl/c_out_2[3]
remove_dont_verify_points -type port $impl/c_out_2[2]
remove_dont_verify_points -type port $impl/c_out_2[1]
remove_dont_verify_points -type port $impl/c_out_2[0]

###
### Verifying instances: 
###   Ref: r:/WORK/TopModule
###   Imp: i:/WORK/TopModule
###
set_reference_design      r:/WORK/TopModule
set_implementation_design i:/WORK/TopModule
set at_least_one_black_box 0
set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a1} {i:/WORK/TopModule/a1}]
if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
          (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
  set_black_box  $ref/a1
  set_black_box $impl/a1
  set at_least_one_black_box 1
  set_user_match -type cell $impl/a1 $ref/a1
  set_user_match -type pin $impl/a1/out[3] $ref/a1/out[3]
  set_user_match -type pin $impl/a1/out[2] $ref/a1/out[2]
  set_user_match -type pin $impl/a1/out[1] $ref/a1/out[1]
  set_user_match -type pin $impl/a1/out[0] $ref/a1/out[0]
  set_user_match -type pin $impl/a1/input_a[3] $ref/a1/input_a[3]
  set_user_match -type pin $impl/a1/input_a[2] $ref/a1/input_a[2]
  set_user_match -type pin $impl/a1/input_a[1] $ref/a1/input_a[1]
  set_user_match -type pin $impl/a1/input_a[0] $ref/a1/input_a[0]
  set_user_match -type pin $impl/a1/input_b[3] $ref/a1/input_b[3]
  set_user_match -type pin $impl/a1/input_b[2] $ref/a1/input_b[2]
  set_user_match -type pin $impl/a1/input_b[1] $ref/a1/input_b[1]
  set_user_match -type pin $impl/a1/input_b[0] $ref/a1/input_b[0]
  set_user_match -type pin $impl/a1/clk $ref/a1/clk
  set_user_match -type pin $impl/a1/reset $ref/a1/reset
}
if [expr true] {
}
if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
          (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
}
set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a2} {i:/WORK/TopModule/a2}]
if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
          (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
  set_black_box  $ref/a2
  set_black_box $impl/a2
  set at_least_one_black_box 1
  set_user_match -type cell $impl/a2 $ref/a2
  set_user_match -type pin $impl/a2/out[3] $ref/a2/out[3]
  set_user_match -type pin $impl/a2/out[2] $ref/a2/out[2]
  set_user_match -type pin $impl/a2/out[1] $ref/a2/out[1]
  set_user_match -type pin $impl/a2/out[0] $ref/a2/out[0]
  set_user_match -type pin $impl/a2/input_a[3] $ref/a2/input_a[3]
  set_user_match -type pin $impl/a2/input_a[2] $ref/a2/input_a[2]
  set_user_match -type pin $impl/a2/input_a[1] $ref/a2/input_a[1]
  set_user_match -type pin $impl/a2/input_a[0] $ref/a2/input_a[0]
  set_user_match -type pin $impl/a2/input_b[3] $ref/a2/input_b[3]
  set_user_match -type pin $impl/a2/input_b[2] $ref/a2/input_b[2]
  set_user_match -type pin $impl/a2/input_b[1] $ref/a2/input_b[1]
  set_user_match -type pin $impl/a2/input_b[0] $ref/a2/input_b[0]
  set_user_match -type pin $impl/a2/clk $ref/a2/clk
  set_user_match -type pin $impl/a2/reset $ref/a2/reset
}
if [expr true] {
}
if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
          (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
}
set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a3} {i:/WORK/TopModule/a3}]
if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
          (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
  set_black_box  $ref/a3
  set_black_box $impl/a3
  set at_least_one_black_box 1
  set_user_match -type cell $impl/a3 $ref/a3
  set_user_match -type pin $impl/a3/out[3] $ref/a3/out[3]
  set_user_match -type pin $impl/a3/out[2] $ref/a3/out[2]
  set_user_match -type pin $impl/a3/out[1] $ref/a3/out[1]
  set_user_match -type pin $impl/a3/out[0] $ref/a3/out[0]
  set_user_match -type pin $impl/a3/input_a[3] $ref/a3/input_a[3]
  set_user_match -type pin $impl/a3/input_a[2] $ref/a3/input_a[2]
  set_user_match -type pin $impl/a3/input_a[1] $ref/a3/input_a[1]
  set_user_match -type pin $impl/a3/input_a[0] $ref/a3/input_a[0]
  set_user_match -type pin $impl/a3/input_b[3] $ref/a3/input_b[3]
  set_user_match -type pin $impl/a3/input_b[2] $ref/a3/input_b[2]
  set_user_match -type pin $impl/a3/input_b[1] $ref/a3/input_b[1]
  set_user_match -type pin $impl/a3/input_b[0] $ref/a3/input_b[0]
  set_user_match -type pin $impl/a3/clk $ref/a3/clk
  set_user_match -type pin $impl/a3/reset $ref/a3/reset
}
if [expr true] {
}
if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
          (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
}
set fm_begin_cputime [cputime]
verify
if [expr ($at_least_one_black_box) && \
         (![string compare $verification_status "FAILED"])] {
  setup
  set at_least_one_black_box 0
  set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a1} {i:/WORK/TopModule/a1}]
  if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
            (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
    remove_black_box  $ref/a1
    remove_black_box $impl/a1
    remove_user_match -type cell $impl/a1
    remove_user_match -type pin $impl/a1/out[3]
    remove_user_match -type pin $impl/a1/out[2]
    remove_user_match -type pin $impl/a1/out[1]
    remove_user_match -type pin $impl/a1/out[0]
    remove_user_match -type pin $impl/a1/input_a[3]
    remove_user_match -type pin $impl/a1/input_a[2]
    remove_user_match -type pin $impl/a1/input_a[1]
    remove_user_match -type pin $impl/a1/input_a[0]
    remove_user_match -type pin $impl/a1/input_b[3]
    remove_user_match -type pin $impl/a1/input_b[2]
    remove_user_match -type pin $impl/a1/input_b[1]
    remove_user_match -type pin $impl/a1/input_b[0]
    remove_user_match -type pin $impl/a1/clk
    remove_user_match -type pin $impl/a1/reset
  }
  set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a2} {i:/WORK/TopModule/a2}]
  if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
            (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
    remove_black_box  $ref/a2
    remove_black_box $impl/a2
    remove_user_match -type cell $impl/a2
    remove_user_match -type pin $impl/a2/out[3]
    remove_user_match -type pin $impl/a2/out[2]
    remove_user_match -type pin $impl/a2/out[1]
    remove_user_match -type pin $impl/a2/out[0]
    remove_user_match -type pin $impl/a2/input_a[3]
    remove_user_match -type pin $impl/a2/input_a[2]
    remove_user_match -type pin $impl/a2/input_a[1]
    remove_user_match -type pin $impl/a2/input_a[0]
    remove_user_match -type pin $impl/a2/input_b[3]
    remove_user_match -type pin $impl/a2/input_b[2]
    remove_user_match -type pin $impl/a2/input_b[1]
    remove_user_match -type pin $impl/a2/input_b[0]
    remove_user_match -type pin $impl/a2/clk
    remove_user_match -type pin $impl/a2/reset
  }
  set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a3} {i:/WORK/TopModule/a3}]
  if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
            (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
    remove_black_box  $ref/a3
    remove_black_box $impl/a3
    remove_user_match -type cell $impl/a3
    remove_user_match -type pin $impl/a3/out[3]
    remove_user_match -type pin $impl/a3/out[2]
    remove_user_match -type pin $impl/a3/out[1]
    remove_user_match -type pin $impl/a3/out[0]
    remove_user_match -type pin $impl/a3/input_a[3]
    remove_user_match -type pin $impl/a3/input_a[2]
    remove_user_match -type pin $impl/a3/input_a[1]
    remove_user_match -type pin $impl/a3/input_a[0]
    remove_user_match -type pin $impl/a3/input_b[3]
    remove_user_match -type pin $impl/a3/input_b[2]
    remove_user_match -type pin $impl/a3/input_b[1]
    remove_user_match -type pin $impl/a3/input_b[0]
    remove_user_match -type pin $impl/a3/clk
    remove_user_match -type pin $impl/a3/reset
  }
  verify
}
set fm_end_cputime [cputime]
set fm_this_verification_cputime [expr $fm_end_cputime - $fm_begin_cputime]
set fm_cumulative_memory [expr [memory] / 1000]
set fm_tmp_result_count [expr $fm_tmp_result_count + 1]
set fm_hier_result_array($fm_tmp_result_count) [list {r:/WORK/TopModule} {i:/WORK/TopModule} $verification_status]
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  "}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "Verification %s:" $verification_status}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Ref: %s (top)" {r:/WORK/TopModule}}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Imp: %s (top)" {i:/WORK/TopModule}}
redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  %s, %4.0fMB (cumulative), %7.2fsec (incremental)" [date] $fm_cumulative_memory $fm_this_verification_cputime}
if [expr (![string compare $verification_status "INCONCLUSIVE"]) && \
         ($fm_session_files_saved < $fm_save_file_limit) && \
         ($fm_this_verification_cputime >= $fm_save_time_limit)] {
  save_session -replace /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  lappend fm_hier_result_array($fm_tmp_result_count) /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss
  redirect -append /home/zhangchen/Desktop/test1/fm_hier.log {format "  Session file: /home/zhangchen/Desktop/test1/fm_hier.tcl.$fm_tmp_result_count.fss"}
  set fm_session_files_saved [expr $fm_session_files_saved + 1]
}
setup
if [expr ($at_least_one_black_box)] {
  set at_least_one_black_box 0
  set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a1} {i:/WORK/TopModule/a1}]
  if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
            (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
    remove_black_box  $ref/a1
    remove_black_box $impl/a1
    remove_user_match -type cell $impl/a1
    remove_user_match -type pin $impl/a1/out[3]
    remove_user_match -type pin $impl/a1/out[2]
    remove_user_match -type pin $impl/a1/out[1]
    remove_user_match -type pin $impl/a1/out[0]
    remove_user_match -type pin $impl/a1/input_a[3]
    remove_user_match -type pin $impl/a1/input_a[2]
    remove_user_match -type pin $impl/a1/input_a[1]
    remove_user_match -type pin $impl/a1/input_a[0]
    remove_user_match -type pin $impl/a1/input_b[3]
    remove_user_match -type pin $impl/a1/input_b[2]
    remove_user_match -type pin $impl/a1/input_b[1]
    remove_user_match -type pin $impl/a1/input_b[0]
    remove_user_match -type pin $impl/a1/clk
    remove_user_match -type pin $impl/a1/reset
  }
  set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a2} {i:/WORK/TopModule/a2}]
  if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
            (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
    remove_black_box  $ref/a2
    remove_black_box $impl/a2
    remove_user_match -type cell $impl/a2
    remove_user_match -type pin $impl/a2/out[3]
    remove_user_match -type pin $impl/a2/out[2]
    remove_user_match -type pin $impl/a2/out[1]
    remove_user_match -type pin $impl/a2/out[0]
    remove_user_match -type pin $impl/a2/input_a[3]
    remove_user_match -type pin $impl/a2/input_a[2]
    remove_user_match -type pin $impl/a2/input_a[1]
    remove_user_match -type pin $impl/a2/input_a[0]
    remove_user_match -type pin $impl/a2/input_b[3]
    remove_user_match -type pin $impl/a2/input_b[2]
    remove_user_match -type pin $impl/a2/input_b[1]
    remove_user_match -type pin $impl/a2/input_b[0]
    remove_user_match -type pin $impl/a2/clk
    remove_user_match -type pin $impl/a2/reset
  }
  set tmp_verification_status [get_verification_status {r:/WORK/TopModule/a3} {i:/WORK/TopModule/a3}]
  if [expr ((![string compare $tmp_verification_status "SUCCEEDED"]) || \
            (![string compare $tmp_verification_status "INCONCLUSIVE"]))] {
    remove_black_box  $ref/a3
    remove_black_box $impl/a3
    remove_user_match -type cell $impl/a3
    remove_user_match -type pin $impl/a3/out[3]
    remove_user_match -type pin $impl/a3/out[2]
    remove_user_match -type pin $impl/a3/out[1]
    remove_user_match -type pin $impl/a3/out[0]
    remove_user_match -type pin $impl/a3/input_a[3]
    remove_user_match -type pin $impl/a3/input_a[2]
    remove_user_match -type pin $impl/a3/input_a[1]
    remove_user_match -type pin $impl/a3/input_a[0]
    remove_user_match -type pin $impl/a3/input_b[3]
    remove_user_match -type pin $impl/a3/input_b[2]
    remove_user_match -type pin $impl/a3/input_b[1]
    remove_user_match -type pin $impl/a3/input_b[0]
    remove_user_match -type pin $impl/a3/clk
    remove_user_match -type pin $impl/a3/reset
  }
}

if [info exists fm_write_hier_saved_vars] {
  foreach _var [array names fm_write_hier_saved_vars] {
    set $_var $fm_write_hier_saved_vars($_var)
  };
  unset fm_write_hier_saved_vars
}

###
### Report results
###
set fm_hier_result_count $fm_tmp_result_count
set fm_log_fp [open /home/zhangchen/Desktop/test1/fm_hier.log]
puts [read $fm_log_fp]
close $fm_log_fp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2278700.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HBase实训:纸币冠字号查询任务

一、实验目的 1. 理解分布式数据存储系统HBase的架构和工作原理。 2. 掌握HBase表的设计原则&#xff0c;能够根据实际业务需求设计合理的表结构。 3. 学习使用HBase Java API进行数据的插入、查询和管理。 4. 实践分布式数据存储系统在大数据环境下的应用&#xff0c;…

C#轻松实现条形码二维码生成及识别

一、前言 大家好&#xff01;我是付工。 今天给大家分享一下&#xff0c;如何基于C#来生成并识别条形码或者二维码。 二、ZXing.Net 实现二维码生成的库有很多&#xff0c;我们这里采用的是http://ZXing.Net。 ZXing是一个开放源码的&#xff0c;用Java实现的多种格式的一…

重拾Python学习,先从把python删除开始。。。

自己折腾就是不行啊&#xff0c;屡战屡败&#xff0c;最近终于找到前辈教我 第一步 删除Python 先把前阵子折腾的WSL和VScode删掉。还是得用spyder&#xff0c;跟matlab最像&#xff0c;也最容易入手。 从VScode上搞python&#xff0c;最后安装到appdata上&#xff0c;安装插…

ASP.NET Core - 依赖注入(三)

ASP.NET Core - 依赖注入&#xff08;三&#xff09; 4. 容器中的服务创建与释放 4. 容器中的服务创建与释放 我们使用了 IoC 容器之后&#xff0c;服务实例的创建和销毁的工作就交给了容器去处理&#xff0c;前面也讲到了服务的生命周期&#xff0c;那三种生命周期中对象的创…

高通8255 Android STR 启动失败要因分析调查

目录 背景&#xff1a; 调查过程&#xff1a; 步骤1&#xff1a; slog2info | grep vmm_service 步骤2&#xff1a; slog2info | grep qvm 总结&#xff1a; 解决方案 背景&#xff1a; 调试高通8255 STR的STR过程中发现Android和QNX进入STR状态后&#xff0c;脱出STR时…

Linux操作命令之云计算基础命令

一、图形化界面/文本模式 ctrlaltF2-6 图形切换到文本 ctrlalt 鼠标跳出虚拟机 ctrlaltF1 文本切换到图形 shift ctrl "" 扩大 ctrl "-" 缩小 shift ctrl "n" 新终端 shift ctrl "t" 新标签 alt 1,…

LabVIEW桥接传感器配置与数据采集

该LabVIEW程序主要用于配置桥接传感器并进行数据采集&#xff0c;涉及电压激励、桥接电阻、采样设置及错误处理。第一个VI&#xff08;"Auto Cleanup"&#xff09;用于自动清理资源&#xff0c;建议保留以确保系统稳定运行。 以下是对图像中各个组件的详细解释&#…

面试题解析

1、写一个sed命令&#xff0c;修改/tmp/input.txt文件的内容 要求&#xff1a; 删除所有空行&#xff1b; 在非空行前面加一个"AAA"&#xff0c;在行尾加一个"BBB"&#xff0c;即将内容为11111的一行改为&#xff1a;AAA11111BBB 创造测试文件&#xff1a;…

合合信息名片全能王上架原生鸿蒙应用市场,成为首批数字名片类应用

长期以来&#xff0c;名片都是企业商务沟通的重要工具。随着企业数字化转型&#xff0c;相较于传统的纸质名片&#xff0c;数字名片对于企业成员拓展业务、获取商机、提升企业形象等方面发挥着重要作用。近期&#xff0c;合合信息旗下名片全能王正式上线原生鸿蒙应用市场&#…

【日志篇】(7.6) ❀ 01. 在macOS下刷新FortiAnalyzer固件 ❀ FortiAnalyzer 日志分析

【简介】FortiAnalyzer 是 Fortinet Security Fabric 安全架构的基础&#xff0c;提供集中日志记录和分析&#xff0c;以及端到端可见性。因此&#xff0c;分析师可以更有效地管理安全状态&#xff0c;将安全流程自动化&#xff0c;并快速响应威胁。具有分析和自动化功能的集成…

《汽车维修技师》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答&#xff1a; 问&#xff1a;《汽车维修技师》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《汽车维修技师》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;北方联合出版传媒&#xff08;…

【OpenCV(C++)快速入门】--opencv学习

0 配置环境 配置环境网上很多资料&#xff0c;这里就不赘述了。 笔者使用的是VS2022opencv4.9.0 测试配置环境 // 打开摄像头样例 #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/imgcodecs/imgcod…

Python编程与在线医疗平台数据挖掘与数据应用交互性研究

一、引言 1.1 研究背景与意义 在互联网技术飞速发展的当下,在线医疗平台如雨后春笋般涌现,为人们的就医方式带来了重大变革。这些平台打破了传统医疗服务在时间和空间上的限制,使患者能够更加便捷地获取医疗资源。据相关报告显示,中国基于互联网的医疗保健行业已进入新的…

网安快速入门之Windows命令

在Windows中 我们今天介绍几个命令&#xff1a; help copy dir cd type del ipconfig net netstat tasklist sc1. help 显示命令的帮助信息。或者显示Windows内置命令。 常用参数&#xff1a; <命令>&#xff1a;查看指定命令的帮助。 示例&#xff1a;help copy 显…

python convert.py -s Rubble

E0222 12:08:50.144686 1326795 logging.cc:56] [option_manager.cc:813] Check failed: ExistsDir(*image_path) E0222 12:08:50.144773 1326795 option_manager.cc:879] Invalid options provided. ERROR:root:Feature extraction failed with code 256. Exiting.在运行pytho…

[BrainShadow-V1] VR头戴设备统计报告

Brain-Shadow-V1 EventVR headsetsReported byXiao enDate2025/01/15Version1.0 HTC Vive Pro 2 Pro HTC Vive Pro 2 是一款高端虚拟现实头显&#xff0c;配备双 2.5K 显示屏&#xff0c;组合分辨率达到 48962448&#xff0c;提供 120 的视场角和 120Hz 的刷新率。该设备支持…

多监控m3u8视频流,怎么获取每个监控的封面图(纯前端)

文章目录 1.背景2.问题分析3.解决方案3.1解决思路3.2解决过程3.2.1 封装播放组件3.2.2 隐形的视频div3.2.3 截取封面图 3.3 结束 1.背景 有这样一个需求&#xff1a; 给你一个监控列表&#xff0c;每页展示多个监控&#xff08;至少12个&#xff0c;m3u8格式&#xff09;&…

Golang Gin系列-2:搭建Gin 框架环境

开始网络开发之旅通常是从选择合适的工具开始的。在这个全面的指南中&#xff0c;我们将引导你完成安装Go编程语言和Gin框架的过程&#xff0c;Gin框架是Go的轻量级和灵活的web框架。从设置Go工作空间到将Gin整合到项目中&#xff0c;本指南是高效而强大的web开发路线图。 安装…

日志收集Day001

1.ElasticSearch 作用&#xff1a;日志存储和检索 2.单点部署Elasticsearch与基础配置 rpm -ivh elasticsearch-7.17.5-x86_64.rpm 查看配置文件yy /etc/elasticsearch/elasticsearch.yml&#xff08;这里yy做了别名&#xff0c;过滤掉空行和注释行&#xff09; yy /etc/el…

SW - 快捷键

文章目录 SW - 快捷键概述笔记视图缩放视图平移视图旋转END SW - 快捷键 概述 鼠标中键不好使了&#xff0c;导致鼠标滚轮的操作在SW中不好使。 已经拆过鼠标&#xff0c;清理过中键计数轮那里的灰尘。只好用几天&#xff0c;然后鼠标中键又不好使了。 先查一下能代替鼠标中键…