report_power nan's
This commit is contained in:
parent
48015d8a4f
commit
34159b6742
|
|
@ -736,10 +736,11 @@ Power::findOutputInternalPower(const Pin *to_pin,
|
|||
}
|
||||
if (tr_count)
|
||||
energy /= tr_count; // average non-inf energies
|
||||
auto duty_sum = pg_duty_sum.find(related_pg_pin);
|
||||
float weight = duty_sum == pg_duty_sum.end()
|
||||
? duty
|
||||
: duty / duty_sum->second;
|
||||
auto duty_sum_iter = pg_duty_sum.find(related_pg_pin);
|
||||
float duty_sum = duty_sum_iter == pg_duty_sum.end()
|
||||
? 0.0
|
||||
: duty_sum_iter->second;
|
||||
float weight = duty_sum == 0.0 ? duty : duty / duty_sum;
|
||||
float port_internal = weight * energy * to_activity.activity();
|
||||
debugPrint9(debug_, "power", 2, "%3s -> %-3s %6s %.2f %.2f %.2f %9.2e %9.2e %s\n",
|
||||
from_port->name(),
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ proc report_title_dashes { count } {
|
|||
|
||||
proc report_power_row { type row_result design_total field_width digits } {
|
||||
lassign $row_result internal switching leakage total
|
||||
if { $design_total == 0.0 } {
|
||||
if { $design_total == 0.0 || [is_nan $design_total] } {
|
||||
set percent 0.0
|
||||
} else {
|
||||
set percent [expr $total / $design_total * 100]
|
||||
|
|
@ -128,12 +128,20 @@ proc report_power_row { type row_result design_total field_width digits } {
|
|||
puts [format " %5.1f%%" $percent]
|
||||
}
|
||||
|
||||
proc is_nan { str } {
|
||||
return [string match "*NaN" $str]
|
||||
}
|
||||
|
||||
proc report_power_col { pwr field_width digits } {
|
||||
puts -nonewline [format " %$field_width.${digits}e" $pwr]
|
||||
if { [is_nan $pwr] } {
|
||||
puts -nonewline [format " %${field_width}s" $pwr]
|
||||
} else {
|
||||
puts -nonewline [format " %$field_width.${digits}e" $pwr]
|
||||
}
|
||||
}
|
||||
|
||||
proc report_power_col_percent { col_total total field_width } {
|
||||
if { $total == 0.0 } {
|
||||
if { $total == 0.0 || [is_nan $total]} {
|
||||
set percent 0.0
|
||||
} else {
|
||||
set percent [expr $col_total / $total * 100]
|
||||
|
|
@ -142,7 +150,11 @@ proc report_power_col_percent { col_total total field_width } {
|
|||
}
|
||||
|
||||
proc report_power_line { type pwr digits } {
|
||||
puts [format "%-16s %.${digits}e" $type $pwr]
|
||||
if { [is_nan $pwr] } {
|
||||
puts [format "%-16s %s" $type $pwr]
|
||||
} else {
|
||||
puts [format "%-16s %.${digits}e" $type $pwr]
|
||||
}
|
||||
}
|
||||
|
||||
proc report_power_insts { insts corner digits } {
|
||||
|
|
@ -244,5 +256,17 @@ proc set_power_activity { args } {
|
|||
}
|
||||
}
|
||||
|
||||
proc power_find_nan { } {
|
||||
set corner [cmd_corner]
|
||||
foreach inst [network_leaf_instances] {
|
||||
set power_result [instance_power $inst $corner]
|
||||
lassign $power_result internal switching leakage total
|
||||
if { [is_nan $internal] || [is_nan $switching] || [is_nan $leakage] } {
|
||||
puts "[get_full_name $inst] $internal $switching $leakage"
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# sta namespace end.
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue