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

相关阅读

Formalityhttps://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
相关推荐
zh731420 小时前
锐捷路由器网关RG-NBR6135-E和锐捷交换机 Ruijie Reyee RG-ES224GC 电脑登录web方法
硬件工程
David WangYang1 天前
设计和优化用于 AR、HUD 和高级显示系统的表面浮雕光栅
硬件工程
日晨难再6 天前
Formality:两种等价状态consistency和equality
硬件工程·数字ic
钡铼技术物联网关7 天前
1TOPS 算力加持:瑞芯微 RK3568 边缘计算盒子重塑电路板质检模式
linux·arm开发·自动化·硬件工程
硬件技术我知道8 天前
用AMIDEDOS.EXE查看和编辑计算机个性化信息
网络·人工智能·嵌入式硬件·物联网·计算机视觉·硬件工程·智慧城市
大象机器人8 天前
自动化机械臂视觉跟踪和手眼校准
运维·python·机器人·自动化·硬件工程·制造
David WangYang8 天前
Ansys Fluent Aeroacoustics 应用
硬件工程
可喜~可乐8 天前
CAN总线入门指南:从原理到实践
c++·stm32·单片机·硬件工程
贝塔实验室9 天前
宇航用VIRTEX5系列FPGA的动态刷新方法及实现
考研·fpga开发·硬件架构·硬件工程·学习方法·业界资讯·fpga