extract_report.tcl 2.62 KB
Newer Older
sakundu committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
proc extract_from_timing_rpt {timing_rpt} {
    set wns ""
    set tns ""
    set hc ""
    set vc ""
    set flag "0"
    # puts "File name $timing_rpt"
    set fp [open $timing_rpt r]
    zlib push gunzip $fp
    while { [gets $fp line] >= 0 } {
        # puts "Lins is : $line"
        if { $flag == 0 } {
            set words [split $line "|"]
        } else {
            set words [split $line]
        }
        if {[string map {" " "" } [lindex $words 1]] == "WNS(ns):"} {
            set wns [string map {" " "" } [lindex $words 2]]
        } elseif {[string map {" " "" } [lindex $words 1]] == "TNS(ns):"} {
            set tns [string map {" " "" } [lindex $words 2]]
            set flag 1
        } elseif { [lindex $words 0] == "Routing" && [llength $words] == 7} {
            set hc [lindex $words 2]
            set vc [lindex $words 5]
            break
        }
    }
    close $fp
    set ans [list $wns $tns $hc $vc]
    return $ans
}

proc extract_from_power_rpt {power_rpt} {
    set power ""
    set fp [open $power_rpt r]
    while { [gets $fp line] >= 0 } {
        if { [lindex $line 0] == "Total" && [llength $line] == 3 } {
            set power [lindex $line 2]
            break
        }
    }
    return $power
}

proc extract_cell_area {} {
46 47
    set macro_area [expr  [join [dbget [dbget top.insts.cell.subClass block -p2 ].area ] +]]
    set std_cell_area [expr  [join [dbget [dbget top.insts.cell.subClass block -v -p2 ].area ] +]]
sakundu committed
48 49 50 51 52 53 54 55
    return [list $macro_area $std_cell_area]
}

proc extract_wire_length {} {
    set wire_length [expr [join [dbget top.nets.wires.length ] + ]]
}

proc extract_report {stage} {
sakundu committed
56 57 58
    setAnalysisMode -reset
    setAnalysisMode -analysisType onChipVariation -cppr both

sakundu committed
59 60 61 62 63
    if { $stage == "preCTS" } {
       timeDesign -preCTS -prefix ${stage} 
    } elseif { $stage == "postCTS" } {
       timeDesign -postCTS -prefix ${stage} 
    } elseif { $stage == "postRoute" } {
sakundu committed
64
       timeDesign -postRoute -prefix ${stage}
65
    } elseif { $stage == "postRouteOpt" } {
sakundu committed
66
       timeDesign -postRoute -prefix ${stage}
67 68
    } elseif { $stage == "postSynth" } {
       timeDesign -prePlace -prefix ${stage}
sakundu committed
69
    }
70

sakundu committed
71 72 73 74 75 76 77 78 79
    set rpt1 [extract_from_timing_rpt timingReports/${stage}.summary.gz]
    report_power > power_${stage}.rpt
    set rpt2 [extract_from_power_rpt power_${stage}.rpt]
    set rpt3 [extract_cell_area]
    set rpt4 [extract_wire_length]
    # stage,core_area,standard_cell_area,macro_area,total_power,wire_length,wns,tns,h_c,v_c
    set ans "$stage,[dbget top.fplan.coreBox_area],[lindex $rpt3 1],[lindex $rpt3 0],$rpt2,$rpt4,[lindex $rpt1 0],[lindex $rpt1 1],[lindex $rpt1 2],[lindex $rpt1 3]"
    return $ans
}