Quote:
Originally Posted by shane25119
Sorry, we're happy to help- but we won't do your homework for you.
When you post, tell us what you've tried, provide the error messages you've gotten and we can take it from there.
|
here is what i did and its not working so could you please check it.
proc dualVth_assignment {arrivalTime} {
set start_time [clock seconds]
set resList[list]
set number_of_lvt_cells 0
set lkg_val_dualVT 0 ##leakage value dualLVT
set lkg_value_LVT 0 ## leakage value LVT
##extract the leakage power from power report file with LVT
report_power > lvt.txt
set lvtname "./lvt.txt"
set lvtid [open $lvtname r]
set i 0
while {$i < 27} {
incr i
gets $lvtid line_1
}
gets $lvtid line_1
close $lvtid
scan $line_1 %s%s%s%s%f space1 space2 space3 space4 lkg_value_LVT
###################################
set number_of_cells 0
set cell_collection [get_cells]
foreach_in_collection current_cell $cell_collection {
set cell_name [get_attribute $current_cell full_name]
set cell_ref [get_attribute $current_cell ref_name]
incr number_of_cells
if { [regexp {LL} $cell_ref] } {
set reference [regsub -all {LL} $cell_ref "LH"]
size_cell $cell_name CORE65LPHVT_nom_1.00V_25C.db:CORE65LPHVT/$reference
}
}
############################
##storing the cell which are in critical path to restore list
#########################
set num_path 0
set s 1
while {1} {
set restore_list[list]
set path_collection [get_timing_path]
foreach_in_collection current_path $path_collection {
incr num_path
set data_arrival [get_attribute $current_path arrival]
set slack_point [get_attribute $current_path slack]
set start_point [get_attribute [get_attribute $current_path startpoint] full_name]
set Slack_Calculated [expr $arrivalTime - $data_arrival]
if { [ expr $Slack_Calculated < 0 ] } {
set $s 1
set points_collection [get_attribute $current_path points]
foreach_in_collection current_point $points_collection {
set obj_point [get_attribute $current_point object]
set Point_name [get_attribute $obj_point full_name]
set point_type [get_attribute $Point_name object_class]
if { [ string compare $point_type "pin" ] == 0 } {
set CellName_list [split $Point_name /]
set Cell_Name1 [lindex $CellName_list 0]
lappend restore_list $Cell_Name1
}
}
}
}
##changing the cell which are in restore list
set len [llength $restore_list]
for {set i 0 } {$i < $len } {incr i} {
set cell_to_replace [lindex $restore_list $i]
set cell_ref1 [get_attribute $cell_to_replace ref_name]
if { [regexp {LH} $cell_ref1] } {
set reference2 [regsub -all {LH} $cell_ref1 "LL"]
size_cell $cell_to_replace CORE65LPLVT_nom_1.00V_25C.db:CORE65LPLVT/$reference2
incr number_of_lvt_cells
}
}
if { [ expr $Slack_Calculated >= 0 ]} {break}
}
#################################################
#extract the leakage power from power report file with dualVT
report_power > dualvt.txt
set dualvtname "./dualvt.txt"
set dualvtid [open $dualvtname r]
set j 0
while {$j < 27} {
incr j
gets $dualvtid line_1
}
gets $dualvtid line_1
close $dualvtid
scan $line_1 %s%s%s%s%f space1 space2 space3 space4 lkg_val_dualVT
####XXXXXXXXXXXXXXXXXXX###
set leakage_difference [ expr $lkg_value_LVT - $lkg_val_dualVT ]
set leakage_reduction [ expr $leakage_difference / $lkg_value_LVT ]
set power_saving [ expr $leakage_reduction * 100 ]
puts "percent:$power_saving"
set lvt [expr [ expr double($number_of_lvt_cells )/ $number_of_cells ]*100]
set hvt [expr 100 - $lvt]
puts "% of lvt cells: $lvt %"
puts "% of hvt cells: $hvt %"
set end_time [clock seconds]
set execution_time [ expr $end_time-$start_time]
puts "Time Elapsed:$execution_time"
###XXXXXXXXXXXXXXXXXXXX###
lappend $resList $power_saving
lappend $resList $execution_time
lappend $resList $lvt
lappend $resList $hvt
return $resList
}