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 {} { set macro_area [expr [join [dbget [dbget top.insts.cell.name *ram* -p2 ].area ] +]] set std_cell_area [expr [join [dbget [dbget top.insts.cell.name *ram* -v -p2 ].area ] +]] 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} { if { $stage == "preCTS" } { timeDesign -preCTS -prefix ${stage} } elseif { $stage == "postCTS" } { timeDesign -postCTS -prefix ${stage} } elseif { $stage == "postRoute" } { setAnalysisMode -analysisType onChipVariatio -cppr both timeDesign -postRoute -prefix ${stage} } 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 }