Timing Violation处理脚本(Tclsh) (zz)

#!/usr/bin/tclsh

#############################
## filter postsim log file ##
#############################

set log_dir "./log"
set file_list [ glob "$log_dir/*.log" ]

set msg_get ""
set reserve_lvl ""
set ignore_type ""

set violation_type ""
set ref_name ""
set ref_time ""
set dat_name ""
set dat_time ""
set su_limit ""
set hd_limit ""
set wd_limit ""

set timing_cell ""
set timing_msg ""

set temp_str ""

foreach file_name $file_list {

    set dp [ open $file_name.fix w ]
    set fp [ open $file_name r ]

    while { [ gets $fp line ] >= 0 } {

       if { $msg_get == "enable" } {
       ### timing messege line

           # capture violation_type          
           regexp {^/s*/$(/w*)/(.*} $line temp_str  violation_type

           # capture timing messege
           if { $violation_type == "setuphold" } {
               regexp {^/s+/$/w+/(/s+(.*):(/d+)/s*,/s+(.*):(/d+),/s+limits:/s+/((.*),(.*)/)/s+/);} $line temp_str /
                       ref_name ref_time dat_name dat_time su_limit hd_limit
           } elseif { $violation_type == "width" } {
               regexp {^/s+/$/w+/(/s+(.*):(/d+),/s+:/s+(.*),/s+limit:/s+(.*)/s+/);.*} $line temp_str /
                       ref_name ref_time dat_time wd_limit
           }

           ## filter timing messege, accroding timing_cell,vioaltion_type
           if { $reserve_lvl == "all" } {
               regexp {/s+(/$.*)} $line temp_str line_valid
               puts $dp $timing_cell
               puts $dp $line_valid
               puts $dp "~~~~~~~~~~~~"
           } elseif { $reserve_lvl == "type" } {
               if { $violation_type != $ignore_type } {
                   regexp {/s+(/$.*)} $line temp_str line_valid
                   puts $dp $timing_cell
                   puts $dp $line_valid
                   puts $dp "~~~~~~~~~~~~"
               }
           } elseif { $reserve_lvl == "ignore" } {
               # do nothing, ignore
           }

           ## clear all flag
           set msg_get ""
           set reserve_lvl ""
           set ignore_type ""
           set timing_cell ""
           set violation_type ""
           set ref_name ""
           set ref_time ""
           set dat_name ""
           set dat_time ""
           set su_limit ""
           set hd_limit ""
           set wd_limit ""

       } else {
           if { [ regexp {.*Timing violation.*} $line ] != 1 } {
               puts $dp $line
           }
       }

       if { [ regexp {.*Timing violation.*} $line ] } {
           regexp {.*Timing violation in (.*)} $line temp_str timing_cell  
           set reserve_lvl "all"

           if { $timing_cell == "fm289_top_v02_tb.i_va.x_digit_top.x_clk_gen_dma_clk_en_reg" } {
               set reserve_lvl "type"
               set ignore_type "setuphold"
           }

           set msg_get "enable"
       }


    }

    close $fp
    close $dp
}


---------------

转载,原文链接:http://blog.csdn.net/vwzhd/article/details/6542407

转载于:https://www.cnblogs.com/zeushuang/archive/2013/01/09/2853008.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值