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)
|
if (tr_count)
|
||||||
energy /= tr_count; // average non-inf energies
|
energy /= tr_count; // average non-inf energies
|
||||||
auto duty_sum = pg_duty_sum.find(related_pg_pin);
|
auto duty_sum_iter = pg_duty_sum.find(related_pg_pin);
|
||||||
float weight = duty_sum == pg_duty_sum.end()
|
float duty_sum = duty_sum_iter == pg_duty_sum.end()
|
||||||
? duty
|
? 0.0
|
||||||
: duty / duty_sum->second;
|
: duty_sum_iter->second;
|
||||||
|
float weight = duty_sum == 0.0 ? duty : duty / duty_sum;
|
||||||
float port_internal = weight * energy * to_activity.activity();
|
float port_internal = weight * energy * to_activity.activity();
|
||||||
debugPrint9(debug_, "power", 2, "%3s -> %-3s %6s %.2f %.2f %.2f %9.2e %9.2e %s\n",
|
debugPrint9(debug_, "power", 2, "%3s -> %-3s %6s %.2f %.2f %.2f %9.2e %9.2e %s\n",
|
||||||
from_port->name(),
|
from_port->name(),
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@ proc report_title_dashes { count } {
|
||||||
|
|
||||||
proc report_power_row { type row_result design_total field_width digits } {
|
proc report_power_row { type row_result design_total field_width digits } {
|
||||||
lassign $row_result internal switching leakage total
|
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
|
set percent 0.0
|
||||||
} else {
|
} else {
|
||||||
set percent [expr $total / $design_total * 100]
|
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]
|
puts [format " %5.1f%%" $percent]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proc is_nan { str } {
|
||||||
|
return [string match "*NaN" $str]
|
||||||
|
}
|
||||||
|
|
||||||
proc report_power_col { pwr field_width digits } {
|
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 } {
|
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
|
set percent 0.0
|
||||||
} else {
|
} else {
|
||||||
set percent [expr $col_total / $total * 100]
|
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 } {
|
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 } {
|
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.
|
# sta namespace end.
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue