puts -> report_line

This commit is contained in:
James Cherry 2020-12-25 16:55:46 -08:00
parent ee86a30338
commit 7d6c70c6f8
13 changed files with 200 additions and 231 deletions

View File

@ -82,10 +82,10 @@ proc report_edge_dcalc { edge corner min_max digits } {
# Filter timing checks based on min_max.
if {!(($min_max == "max" && $role == "hold") \
|| ($min_max=="min" && $role=="setup"))} {
puts "Library: [get_name $library]"
puts "Cell: [get_name $cell]"
puts "Arc sense: [$edge sense]"
puts "Arc type: $role"
report_line "Library: [get_name $library]"
report_line "Cell: [get_name $cell]"
report_line "Arc sense: [$edge sense]"
report_line "Arc type: $role"
set arc_iter [$edge timing_arc_iterator]
while {[$arc_iter has_next]} {
@ -94,15 +94,14 @@ proc report_edge_dcalc { edge corner min_max digits } {
set from_rf [$arc from_trans]
set to [get_name [$to_pin port]]
set to_rf [$arc to_trans]
puts "$from $from_rf -> $to $to_rf"
puts -nonewline [report_delay_calc_cmd $edge $arc $corner $min_max $digits]
report_line "$from $from_rf -> $to $to_rf"
report_line [report_delay_calc_cmd $edge $arc $corner $min_max $digits]
if { [$edge delay_annotated $arc $corner $min_max] } {
set delay [$edge arc_delay $arc $corner $min_max]
puts "Annotated value = [format_time $delay $digits]"
report_line "Annotated value = [format_time $delay $digits]"
}
puts ""
puts "............................................."
puts ""
report_line "............................................."
report_line ""
}
$arc_iter finish
}

View File

@ -38,7 +38,7 @@ public:
Report();
virtual ~Report();
// Primitives to print output.
// Primitive to print output.
// Return the number of characters written.
virtual size_t printString(const char *buffer,
size_t length);
@ -47,6 +47,8 @@ public:
va_list args);
void print(const string *str);
void print(const string &str);
// Print line with return.
virtual void printLine(const char *line);
////////////////////////////////////////////////////////////////

View File

@ -27,21 +27,21 @@ proc report_clock1 { clk } {
if { [$clk waveform_valid] } {
set digits $sta_report_default_digits
puts -nonewline [format "%-20s" [get_name $clk]]
puts -nonewline [format "%10s" [format_time [$clk period] $digits]]
puts -nonewline " "
set waveform [$clk waveform]
if { $waveform == {} } {
puts -nonewline " "
set wave " "
} else {
set wave ""
foreach edge $waveform {
puts -nonewline [format "%10s" [format_time $edge $digits]]
set wave "$wave[format "%10s" [format_time $edge $digits]]"
}
}
if {[$clk is_generated]} {
puts -nonewline " (generated)"
set generated " (generated)"
} else {
set generated ""
}
puts ""
report_line "[format %-20s [get_name $clk]][format %10s [format_time [$clk period] $digits]] $wave$generated"
}
}
@ -75,10 +75,10 @@ proc check_setup_cmd { cmd cmd_args } {
$generated_clocks]
foreach error $errors {
# First line is the error msg.
puts [lindex $error 0]
report_line [lindex $error 0]
if { $verbose } {
foreach obj [lrange $error 1 end] {
puts " $obj"
report_line " $obj"
}
}
}

View File

@ -95,27 +95,25 @@ proc report_edges_ { vertex iter_proc wire_from_name_proc wire_to_name_proc } {
proc report_edge_ { edge vertex_from_name_proc vertex_to_name_proc } {
global sta_report_default_digits
puts -nonewline "[$vertex_from_name_proc [$edge from]] -> [$vertex_to_name_proc [$edge to]] [$edge role]"
set latch_enable [$edge latch_d_to_q_en]
if { $latch_enable != "" } {
puts " enable $latch_enable"
} else {
puts ""
set latch_enable " enable $latch_enable"
}
report_line "[$vertex_from_name_proc [$edge from]] -> [$vertex_to_name_proc [$edge to]] [$edge role]$latch_enable"
set disables [edge_disable_reason $edge]
if { $disables != "" } {
puts " Disabled by $disables"
report_line " Disabled by $disables"
}
set cond [$edge cond]
if { $cond != "" } {
puts " Condition: $cond"
report_line " Condition: $cond"
}
set mode_name [$edge mode_name]
if { $mode_name != "" } {
puts " Mode: $mode_name [$edge mode_value]"
report_line " Mode: $mode_name [$edge mode_value]"
}
set iter [$edge timing_arc_iterator]
@ -127,7 +125,7 @@ proc report_edge_ { edge vertex_from_name_proc vertex_to_name_proc } {
if { [timing_arc_disabled $edge $arc] } {
set disable_reason " disabled"
}
puts " [$arc from_trans] -> [$arc to_trans] $delays_fmt$disable_reason"
report_line " [$arc from_trans] -> [$arc to_trans] $delays_fmt$disable_reason"
}
$iter finish
}
@ -217,16 +215,20 @@ proc report_constant { obj } {
proc report_pin_constant { pin } {
set sim_value [pin_sim_logic_value $pin]
puts -nonewline "[pin_property $pin lib_pin_name] $sim_value"
set case_value [pin_case_logic_value $pin]
if { $case_value != "X" } {
puts -nonewline " case=$case_value"
set case " case=$case_value"
} else {
set case ""
}
set logic_value [pin_logic_value $pin]
if { $logic_value != "X" } {
puts -nonewline " logic=$logic_value"
set logic " logic=$logic_value"
} else {
set logic ""
}
puts ""
report_line "[pin_property $pin lib_pin_name] $sim_value$case$logic"
}
################################################################
@ -236,21 +238,21 @@ proc report_disabled_edges {} {
if { [$edge role] == "wire" } {
set from_pin_name [get_full_name [[$edge from] pin]]
set to_pin_name [get_full_name [[$edge to] pin]]
puts -nonewline "$from_pin_name $to_pin_name"
report_line "$from_pin_name $to_pin_name [edge_disable_reason_verbose $edge]"
} else {
set from_pin [[$edge from] pin]
set to_pin [[$edge to] pin]
set inst_name [get_full_name [$from_pin instance]]
set from_port_name [get_name [$from_pin port]]
set to_port_name [get_name [$to_pin port]]
puts -nonewline "$inst_name $from_port_name $to_port_name"
set cond [$edge cond]
if { $cond != "" } {
puts -nonewline " when: $cond"
set when " when: $cond"
} else {
set when ""
}
report_line "$inst_name $from_port_name $to_port_name$when [edge_disable_reason_verbose $edge]"
}
set reason [edge_disable_reason_verbose $edge]
puts " $reason"
}
}
@ -297,7 +299,7 @@ proc report_slews { pin } {
set pin1 [get_port_pin_error "pin" $pin]
foreach vertex [$pin1 vertices] {
puts "[vertex_path_name $vertex] [rise_short_name] [format_times [$vertex slews rise] $sta_report_default_digits] [fall_short_name] [format_times [$vertex slews fall] $sta_report_default_digits]"
report_line "[vertex_path_name $vertex] [rise_short_name] [format_times [$vertex slews rise] $sta_report_default_digits] [fall_short_name] [format_times [$vertex slews fall] $sta_report_default_digits]"
}
}
@ -330,7 +332,7 @@ proc vertex_name_ { vertex pin pin_name } {
proc hier_pins_crossed_by_edge { edge } {
set from_pins [hier_pins_above [[$edge from] pin]]
set to_pins [hier_pins_above [[$edge to] pin]]
foreach p $to_pins { puts [$p path_name] }
foreach p $to_pins { report_line [$p path_name] }
while { [llength $from_pins] > 0 \
&& [llength $to_pins] > 0 \
&& [lindex $from_pins 0] == [lindex $to_pins 0] } {
@ -369,7 +371,7 @@ proc report_level { pin } {
set pin1 [get_port_pin_error "pin" $pin]
foreach vertex [$pin1 vertices] {
if { $vertex != "NULL" } {
puts "[vertex_path_name $vertex] level = [$vertex level]"
report_line "[vertex_path_name $vertex] level = [$vertex level]"
}
}
}
@ -392,9 +394,9 @@ proc report_level_distribution {} {
}
$iter finish
puts "level pin count"
report_line "level pin count"
for { set level 0 } { $level < $max_level } { incr level } {
puts " $level $count($level)"
report_line " $level $count($level)"
}
}

View File

@ -62,11 +62,11 @@ proc report_instance1 { instance connections verbose } {
} else {
set inst_name [get_full_name $instance]
}
puts "Instance $inst_name"
report_line "Instance $inst_name"
set cell [instance_property $instance "cell"]
puts " Cell: [get_name $cell]"
puts " Library: [get_name [$cell library]]"
puts " Path cells: [instance_cell_path $instance]"
report_line " Cell: [get_name $cell]"
report_line " Library: [get_name [$cell library]]"
report_line " Path cells: [instance_cell_path $instance]"
if { $connections } {
report_instance_pins $instance $verbose
}
@ -87,7 +87,7 @@ proc report_instance_pins { instance verbose } {
proc report_instance_pins1 {instance verbose header header_optional dirs} {
set header_shown 0
if { !$header_optional } {
puts $header
report_line $header
set header_shown 1
}
set iter [$instance pin_iterator]
@ -96,7 +96,7 @@ proc report_instance_pins1 {instance verbose header header_optional dirs} {
set dir [pin_direction $pin]
if { [lsearch $dirs $dir] != -1 } {
if { !$header_shown } {
puts $header
report_line $header
set header_shown 1
}
report_instance_pin $pin $verbose
@ -106,22 +106,22 @@ proc report_instance_pins1 {instance verbose header header_optional dirs} {
}
proc report_instance_pin { pin verbose } {
puts -nonewline " [$pin port_name] [pin_direction $pin]"
set net [$pin net]
if { $net == "NULL" } {
puts " (unconnected)"
set net_name "(unconnected)"
} else {
puts " [get_full_name [$net highest_connected_net]]"
if { $verbose } {
set pins [net_connected_pins_sorted $net]
foreach pin $pins {
if [$pin is_load] {
if [$pin is_top_level_port] {
puts " [get_full_name $pin] [pin_direction $pin] port"
} else {
puts " [get_full_name $pin] [pin_direction $pin]"
}
}
set net_name [get_full_name [$net highest_connected_net]]
}
report_line " [$pin port_name] [pin_direction $pin] $net_name"
if { $verbose && $net != "NULL" } {
set pins [net_connected_pins_sorted $net]
foreach pin $pins {
if [$pin is_load] {
if [$pin is_top_level_port] {
report_line " [get_full_name $pin] [pin_direction $pin] port"
} else {
report_line " [get_full_name $pin] [pin_direction $pin]"
}
}
}
}
@ -142,9 +142,9 @@ proc instance_cell_path { instance } {
proc report_instance_children_ { instance } {
set children [instance_sorted_children $instance]
if { $children != {} } {
puts " Children:"
report_line " Children:"
foreach child $children {
puts " [get_name $child] ([instance_property $child ref_name])"
report_line " [get_name $child] ([instance_property $child ref_name])"
}
}
}
@ -176,48 +176,48 @@ proc report_lib_cell_ { cell } {
global sta_report_default_digits
set lib [$cell liberty_library]
puts "Cell [get_name $cell]"
puts "Library [get_name $lib]"
report_line "Cell [get_name $cell]"
report_line "Library [get_name $lib]"
set filename [liberty_cell_property $cell "filename"]
if { $filename != "" } {
puts "File $filename"
report_line "File $filename"
}
set iter [$cell liberty_port_iterator]
while {[$iter has_next]} {
set port [$iter next]
if { [$port is_bus] } {
puts -nonewline " [$port bus_name] [liberty_port_direction $port]"
set port_name [$port bus_name]
} else {
puts -nonewline " [get_name $port] [liberty_port_direction $port]"
set port_name [get_name $port]
}
set enable [$port tristate_enable]
if { $enable != "" } {
puts -nonewline " enable=$enable"
set enable " enable=$enable"
}
set func [$port function]
if { $func != "" } {
puts -nonewline " function=$func"
set func " function=$func"
}
puts [port_capacitance_str $port $sta_report_default_digits]
report_line " $port_name [liberty_port_direction $port]$enable$func[port_capacitance_str $port $sta_report_default_digits]"
}
$iter finish
}
proc report_cell_ { cell } {
set lib [$cell library]
puts "Cell [get_name $cell]"
puts "Library [get_name $lib]"
report_line "Cell [get_name $cell]"
report_line "Library [get_name $lib]"
set filename [liberty_cell_property $cell "filename"]
if { $filename != "" } {
puts "File $filename"
report_line "File $filename"
}
set iter [$cell port_iterator]
while {[$iter has_next]} {
set port [$iter next]
if { [$port is_bus] } {
puts " [$port bus_name] [port_direction $port]"
report_line " [$port bus_name] [port_direction $port]"
} else {
puts " [get_name $port] [port_direction $port]"
report_line " [get_name $port] [port_direction $port]"
}
}
$iter finish
@ -285,20 +285,20 @@ proc report_net_ { net } {
}
proc report_net1 { net connections verbose hier_pins corner digits } {
puts "Net [get_full_name $net]"
report_line "Net [get_full_name $net]"
if {$connections} {
set pins [net_connected_pins_sorted $net]
if {$verbose} {
report_net_caps $net $pins $corner $digits
}
puts "Driver pins"
report_line "Driver pins"
report_net_pins $pins "is_driver" $verbose $corner $digits
puts ""
puts "Load pins"
report_line ""
report_line "Load pins"
report_net_pins $pins "is_load" $verbose $corner $digits
if {$hier_pins} {
puts ""
puts "Hierarchical pins"
report_line ""
report_line "Hierarchical pins"
report_net_pins $pins "is_hierarchical" $verbose $corner $digits
}
report_net_other_pins $pins $verbose $corner $digits
@ -336,10 +336,10 @@ proc report_net_caps { net pins corner digits } {
incr load_count
}
}
puts " Number of drivers: $driver_count"
puts " Number of loads: $load_count"
puts " Number of pins: $pin_count"
puts ""
report_line " Number of drivers: $driver_count"
report_line " Number of loads: $load_count"
report_line " Number of pins: $pin_count"
report_line ""
}
proc report_net_cap { net caption cap_msg corner digits } {
@ -347,7 +347,7 @@ proc report_net_cap { net caption cap_msg corner digits } {
set cap_r_max [$net $cap_msg "rise" $corner "max"]
set cap_f_min [$net $cap_msg "fall" $corner "min"]
set cap_f_max [$net $cap_msg "fall" $corner "max"]
puts " $caption capacitance: [capacitances_str $cap_r_min $cap_r_max $cap_f_min $cap_f_max $digits]"
report_line " $caption capacitance: [capacitances_str $cap_r_min $cap_r_max $cap_f_min $cap_f_max $digits]"
}
proc report_net_pins { pins pin_pred verbose corner digits } {
@ -363,8 +363,8 @@ proc report_net_other_pins { pins verbose corner digits } {
foreach pin $pins {
if { !([$pin is_driver] || [$pin is_load] || [$pin is_hierarchical]) } {
if { !$header } {
puts ""
puts "Other pins"
report_line ""
report_line "Other pins"
set header 1
}
report_net_pin $pin $verbose $corner $digits
@ -375,16 +375,17 @@ proc report_net_other_pins { pins verbose corner digits } {
proc report_net_pin { pin verbose corner digits } {
if [$pin is_leaf] {
set cell_name [get_name [[$pin instance] cell]]
puts -nonewline " [get_full_name $pin] [pin_direction $pin] ($cell_name)"
set cap ""
if { $verbose } {
set liberty_port [$pin liberty_port]
if { $liberty_port != "NULL" } {
puts -nonewline [port_capacitance_str $liberty_port $digits]
set cap [port_capacitance_str $liberty_port $digits]
}
}
puts "[pin_location_str $pin]"
report_line " [get_full_name $pin] [pin_direction $pin] ($cell_name)$cap[pin_location_str $pin]"
} elseif [$pin is_top_level_port] {
puts -nonewline " [get_full_name $pin] [pin_direction $pin] port"
set wire_cap ""
set pin_cap ""
if { $verbose } {
set port [$pin port]
set cap_r_min [port_ext_wire_cap $port "rise" "min"]
@ -392,7 +393,7 @@ proc report_net_pin { pin verbose corner digits } {
set cap_f_min [port_ext_wire_cap $port "fall" "min"]
set cap_f_max [port_ext_wire_cap $port "fall" "max"]
if { $cap_r_min > 0 || $cap_r_max > 0 || $cap_f_min > 0 || $cap_r_max > 0 } {
puts -nonewline " wire [capacitances_str $cap_r_min $cap_r_max $cap_f_min $cap_f_max $digits]"
set wire_cap " wire [capacitances_str $cap_r_min $cap_r_max $cap_f_min $cap_f_max $digits]"
}
set port [$pin port]
@ -401,12 +402,12 @@ proc report_net_pin { pin verbose corner digits } {
set cap_f_min [port_ext_pin_cap $port "fall" "min"]
set cap_f_max [port_ext_pin_cap $port "fall" "max"]
if { $cap_r_min > 0 || $cap_r_max > 0 || $cap_f_min > 0 || $cap_r_max > 0} {
puts -nonewline " pin [capacitances_str $cap_r_min $cap_r_max $cap_f_min $cap_f_max $digits]"
set pin_cap " pin [capacitances_str $cap_r_min $cap_r_max $cap_f_min $cap_f_max $digits]"
}
}
puts "[pin_location_str $pin]"
report_line " [get_full_name $pin] [pin_direction $pin] port$wire_cap$pin_cap[pin_location_str $pin]"
} elseif [$pin is_hierarchical] {
puts " [get_full_name $pin] [pin_direction $pin]"
report_line " [get_full_name $pin] [pin_direction $pin]"
}
}
@ -426,11 +427,11 @@ proc pin_location_str { pin } {
proc report_pin_ { pin } {
global sta_report_default_digits
puts -nonewline "Pin [get_full_name $pin] [pin_direction_desc $pin]"
set liberty_port [$pin liberty_port]
if { $liberty_port != "NULL" } {
puts -nonewline [port_capacitance_str $liberty_port $sta_report_default_digits]
set cap [port_capacitance_str $liberty_port $sta_report_default_digits]
} else {
set cap ""
}
if { [$pin is_top_level_port] } {
@ -444,10 +445,11 @@ proc report_pin_ { pin } {
set net [$pin net]
}
if { $net == "NULL" } {
puts " (unconnected)"
set net_name "(unconnected)"
} else {
puts " [get_full_name [$net highest_connected_net]]"
set net_name [get_full_name [$net highest_connected_net]]
}
report_line "Pin [get_full_name $pin] [pin_direction_desc $pin]$cap $net_name"
}
proc pin_direction_desc { pin } {

View File

@ -69,11 +69,7 @@ proc report_power_design { corner digits } {
report_title_dashes5 $field_width
report_power_row "Total" $power_result $design_total $field_width $digits
puts -nonewline [format "%-20s" ""]
report_power_col_percent $design_internal $design_total $field_width
report_power_col_percent $design_switching $design_total $field_width
report_power_col_percent $design_leakage $design_total $field_width
puts ""
report_line "[format %-20s {}][power_col_percent $design_internal $design_total $field_width][power_col_percent $design_switching $design_total $field_width][power_col_percent $design_leakage $design_total $field_width]"
}
proc max { x y } {
@ -85,15 +81,11 @@ proc max { x y } {
}
proc report_power_title5 { title1 title2 title3 title4 title5 field_width } {
puts -nonewline [format "%-20s" $title1]
report_power_title4 $title2 $title3 $title4 $title5 $field_width
report_line "[format %-20s $title1] [format %${field_width}s $title2] [format %${field_width}s $title3] [format %${field_width}s $title4] [format %${field_width}s $title5]"
}
proc report_power_title4 { title1 title2 title3 title4 field_width } {
puts -nonewline [format " %${field_width}s" $title1]
puts -nonewline [format " %${field_width}s" $title2]
puts -nonewline [format " %${field_width}s" $title3]
puts [format " %${field_width}s" $title4]
report_line " [format %${field_width}s $title1] [format %${field_width}s $title2] [format %${field_width}s $title3] [format %${field_width}s $title4]"
}
proc report_title_dashes5 { field_width } {
@ -107,10 +99,11 @@ proc report_title_dashes4 { field_width } {
}
proc report_title_dashes { count } {
set line ""
for {set i 0} {$i < $count} {incr i} {
puts -nonewline "-"
set line "-$line"
}
puts ""
report_line $line
}
proc report_power_row { type row_result design_total field_width digits } {
@ -120,40 +113,35 @@ proc report_power_row { type row_result design_total field_width digits } {
} else {
set percent [expr $total / $design_total * 100]
}
puts -nonewline [format "%-20s" $type]
report_power_col $internal $field_width $digits
report_power_col $switching $field_width $digits
report_power_col $leakage $field_width $digits
report_power_col $total $field_width $digits
puts [format " %5.1f%%" $percent]
report_line "[format %-20s $type][power_col $internal $field_width $digits][power_col $switching $field_width $digits][power_col $leakage $field_width $digits][power_col $total $field_width $digits] [format %5.1f%% $percent]"
}
proc is_nan { str } {
return [string match "*NaN" $str]
}
proc report_power_col { pwr field_width digits } {
proc power_col { pwr field_width digits } {
if { [is_nan $pwr] } {
puts -nonewline [format " %${field_width}s" $pwr]
format " %${field_width}s" $pwr
} else {
puts -nonewline [format " %$field_width.${digits}e" $pwr]
format " %$field_width.${digits}e" $pwr
}
}
proc report_power_col_percent { col_total total field_width } {
proc power_col_percent { col_total total field_width } {
if { $total == 0.0 || [is_nan $total]} {
set percent 0.0
} else {
set percent [expr $col_total / $total * 100]
}
puts -nonewline [format "%$field_width.1f%%" $percent]
format "%$field_width.1f%%" $percent
}
proc report_power_line { type pwr digits } {
if { [is_nan $pwr] } {
puts [format "%-16s %s" $type $pwr]
report_line [format "%-16s %s" $type $pwr]
} else {
puts [format "%-16s %.${digits}e" $type $pwr]
report_line [format "%-16s %.${digits}e" $type $pwr]
}
}
@ -194,11 +182,7 @@ proc inst_pwr_cmp { inst_pwr1 inst_pwr2 } {
proc report_power_inst { inst power_result field_width digits } {
lassign $power_result internal switching leakage total
report_power_col $internal $field_width $digits
report_power_col $switching $field_width $digits
report_power_col $leakage $field_width $digits
report_power_col $total $field_width $digits
puts " [get_full_name $inst]"
report_line "[power_col $internal $field_width $digits][power_col $switching $field_width $digits][power_col $leakage $field_width $digits][power_col $total $field_width $digits] [get_full_name $inst]"
}
################################################################
@ -262,7 +246,7 @@ proc power_find_nan { } {
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"
report_line "[get_full_name $inst] $internal $switching $leakage"
break
}
}

View File

@ -76,7 +76,7 @@ proc source_ { filename echo verbose } {
gets $stream line
if { $line != "" } {
if {$echo} {
puts $line
report_line $line
}
}
append cmd $line "\n"
@ -89,7 +89,7 @@ proc source_ { filename echo verbose } {
# Flush results printed outside tcl to stdout/stderr.
fflush
switch $error_code {
0 { if { $verbose && $result != "" } { puts $result } }
0 { if { $verbose && $result != "" } { report_line $result } }
1 { set error $result }
2 { set error {invoked "return" outside of a proc.} }
3 { set error {invoked "break" outside of a loop.} }
@ -99,9 +99,9 @@ proc source_ { filename echo verbose } {
if { $sta_continue_on_error } {
# Only prepend error message with file/line once.
if { [string first "Error" $error] == 0 } {
puts $error
report_line $error
} else {
puts "Error: [file tail $sdc_file], $sdc_line $error"
report_line "Error: [file tail $sdc_file], $sdc_line $error"
}
set error {}
} else {
@ -176,7 +176,7 @@ proc current_instance { {inst ""} } {
set current_instance [get_instance_error "instance" $inst]
}
set cell [get_name [$current_instance cell]]
puts "Current instance is $cell."
report_line "Current instance is $cell."
# Current instance state variable must be part of the sta state so
# the tcl interpreter can be shared by multiple sdc files.
set_current_instance $current_instance

View File

@ -59,7 +59,7 @@ proc report_delays_wrt_clk { vertex what clk clk_rf } {
} else {
set clk_str ""
}
puts "$clk_str r $rise_fmt f $fall_fmt"
report_line "$clk_str r $rise_fmt f $fall_fmt"
}
}
@ -94,7 +94,7 @@ proc report_wrt_clk { vertex what clk clk_rf } {
} else {
set clk_str ""
}
puts "$clk_str r $rise_fmt f $fall_fmt"
report_line "$clk_str r $rise_fmt f $fall_fmt"
}
}
@ -173,12 +173,12 @@ proc_redirect report_path {
while {[$path_iter has_next]} {
set path [$path_iter next]
if { $first } {
puts "Tag group: [$vertex tag_group_index]"
report_line "Tag group: [$vertex tag_group_index]"
} else {
puts ""
report_line ""
}
if { $report_tags } {
puts "Tag: [$path tag]"
report_line "Tag: [$path tag]"
}
report_path_cmd $path
delete_path_ref $path
@ -189,7 +189,7 @@ proc_redirect report_path {
set worst_path [vertex_worst_arrival_path_rf $vertex $tr $min_max]
if { $worst_path != "NULL" } {
if { $report_tags } {
puts "Tag: [$worst_path tag]"
report_line "Tag: [$worst_path tag]"
}
report_path_cmd $worst_path
delete_path_ref $worst_path
@ -386,33 +386,33 @@ proc report_slew_limits { corner min_max all_violators verbose nosplit } {
if { $all_violators } {
set violators [pin_slew_limit_violations $corner $min_max]
if { $violators != {} } {
puts "${min_max} slew"
puts ""
report_line "${min_max} slew"
report_line ""
if { $verbose } {
foreach pin $violators {
report_slew_limit_verbose $pin $corner $min_max
puts ""
report_line ""
}
} else {
report_slew_limit_short_header
foreach pin $violators {
report_slew_limit_short $pin $corner $min_max
}
puts ""
report_line ""
}
}
} else {
set pin [pin_min_slew_limit_slack $corner $min_max]
if { $pin != "NULL" } {
puts "${min_max} slew"
puts ""
report_line "${min_max} slew"
report_line ""
if { $verbose } {
report_slew_limit_verbose $pin $corner $min_max
puts ""
report_line ""
} else {
report_slew_limit_short_header
report_slew_limit_short $pin $corner $min_max
puts ""
report_line ""
}
}
}
@ -422,33 +422,33 @@ proc report_fanout_limits { min_max all_violators verbose nosplit } {
if { $all_violators } {
set violators [pin_fanout_limit_violations $min_max]
if { $violators != {} } {
puts "${min_max} fanout"
puts ""
report_line "${min_max} fanout"
report_line ""
if { $verbose } {
foreach pin $violators {
report_fanout_limit_verbose $pin $min_max
puts ""
report_line ""
}
} else {
report_fanout_limit_short_header
foreach pin $violators {
report_fanout_limit_short $pin $min_max
}
puts ""
report_line ""
}
}
} else {
set pin [pin_min_fanout_limit_slack $min_max]
if { $pin != "NULL" } {
puts "${min_max} fanout"
puts ""
report_line "${min_max} fanout"
report_line ""
if { $verbose } {
report_fanout_limit_verbose $pin $min_max
puts ""
report_line ""
} else {
report_fanout_limit_short_header
report_fanout_limit_short $pin $min_max
puts ""
report_line ""
}
}
}
@ -458,33 +458,33 @@ proc report_capacitance_limits { corner min_max all_violators verbose nosplit }
if { $all_violators } {
set violators [pin_capacitance_limit_violations $corner $min_max]
if { $violators != {} } {
puts "${min_max} capacitance"
puts ""
report_line "${min_max} capacitance"
report_line ""
if { $verbose } {
foreach pin $violators {
report_capacitance_limit_verbose $pin $corner $min_max
puts ""
report_line ""
}
} else {
report_capacitance_limit_short_header
foreach pin $violators {
report_capacitance_limit_short $pin $corner $min_max
}
puts ""
report_line ""
}
}
} else {
set pin [pin_min_capacitance_limit_slack $corner $min_max]
if { $pin != "NULL" } {
puts "${min_max} capacitance"
puts ""
report_line "${min_max} capacitance"
report_line ""
if { $verbose } {
report_capacitance_limit_verbose $pin $corner $min_max
puts ""
report_line ""
} else {
report_capacitance_limit_short_header
report_capacitance_limit_short $pin $corner $min_max
puts ""
report_line ""
}
}
}

View File

@ -25,7 +25,7 @@ namespace eval sta {
define_cmd_args show_splash {}
proc show_splash {} {
puts "OpenSTA [sta::version] [string range [sta::git_sha1] 0 9] Copyright (c) 2019, Parallax Software, Inc.
report_line "OpenSTA [sta::version] [string range [sta::git_sha1] 0 9] Copyright (c) 2019, Parallax Software, Inc.
License GPLv3: GNU GPL version 3 <http://gnu.org/licenses/gpl.html>
This is free software, and you are free to change and redistribute it
@ -36,7 +36,7 @@ This program comes with ABSOLUTELY NO WARRANTY; for details type `show_warranty'
define_cmd_args show_warranty {}
proc show_warranty {} {
puts {15. Disclaimer of Warranty.
report_line {15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
@ -49,7 +49,7 @@ If the disclaimer of warranty and limitation of liability provided above cannot
define_cmd_args show_copying {}
proc show_copying {} {
puts { GNU GENERAL PUBLIC LICENSE
report_line { GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>

View File

@ -303,7 +303,7 @@ proc_redirect report_checks {
parse_report_path_options "report_checks" args "full" 0
set path_ends [find_timing_paths_cmd "report_checks" args]
if { $path_ends == {} } {
puts "No paths found."
report_line "No paths found."
} else {
report_path_ends $path_ends
}
@ -535,7 +535,7 @@ proc_redirect report_tns {
set digits $sta_report_default_digits
}
puts "tns [format_time [total_negative_slack_cmd "max"] $digits]"
report_line "tns [format_time [total_negative_slack_cmd "max"] $digits]"
}
################################################################
@ -557,7 +557,7 @@ proc_redirect report_wns {
if { $slack > 0.0 } {
set slack 0.0
}
puts "wns [format_time $slack $digits]"
report_line "wns [format_time $slack $digits]"
}
################################################################
@ -575,7 +575,7 @@ proc_redirect report_worst_slack {
set digits $sta_report_default_digits
}
puts "worst slack [format_time [worst_slack_cmd "max"] $digits]"
report_line "worst slack [format_time [worst_slack_cmd "max"] $digits]"
}
################################################################
@ -1036,8 +1036,8 @@ define_sta_cmd_args "report_clock_properties" {[clocks]}
proc_redirect report_clock_properties {
check_argc_eq0or1 "report_clock_properties" $args
update_generated_clks
puts "Clock Period Waveform"
puts "----------------------------------------------------"
report_line "Clock Period Waveform"
report_line "----------------------------------------------------"
if { [llength $args] == 0 } {
set clk_iter [clock_iterator]
while {[$clk_iter has_next]} {
@ -1054,51 +1054,19 @@ proc_redirect report_clock_properties {
################################################################
define_sta_cmd_args "report_object_full_names" {[-verbose] objects}
define_sta_cmd_args "report_object_full_names" {objects}
proc report_object_full_names { args } {
parse_key_args "report_object_full_names" args keys {} flags {-verbose}
set objects [lindex $args 0]
if { [info exists flags(-verbose)] } {
puts -nonewline "{"
set first 1
foreach obj [sort_by_full_name $objects] {
if { !$first } {
puts -nonewline ", "
}
puts -nonewline \"[get_object_type $obj]:[get_full_name $obj]\"
set first 0
}
puts "}"
} else {
foreach obj [sort_by_full_name $objects] {
puts [get_full_name $obj]
}
proc report_object_full_names { objects } {
foreach obj [sort_by_full_name $objects] {
report_line [get_full_name $obj]
}
}
define_sta_cmd_args "report_object_names" {[-verbose] objects}
define_sta_cmd_args "report_object_names" {objects}
proc report_object_names { args } {
parse_key_args "report_object_names" args keys {} flags {-verbose}
set objects [lindex $args 0]
if { [info exists flags(-verbose)] } {
puts -nonewline "{"
set first 1
foreach obj [sort_by_name $objects] {
if { !$first } {
puts -nonewline ", "
}
puts -nonewline \"[get_object_type $obj]:[get_name $obj]\"
set first 0
}
puts "}"
} else {
foreach obj [sort_by_name $objects] {
puts [get_name $obj]
}
proc report_object_names { objects } {
foreach obj [sort_by_name $objects] {
report_line [get_name $obj]
}
}
@ -1109,7 +1077,7 @@ define_sta_cmd_args "report_units" {}
proc report_units { args } {
check_argc_eq0 "report_units" $args
foreach unit {"time" "capacitance" "resistance" "voltage" "current" "power" "distance"} {
puts " $unit 1[unit_scale_abreviation $unit][unit_suffix $unit]"
report_line " $unit 1[unit_scale_abreviation $unit][unit_suffix $unit]"
}
}

View File

@ -1947,7 +1947,8 @@ void
report_error(int id,
const char *msg)
{
Sta::sta()->report()->error(id, "%s", msg);
Report *report = Sta::sta()->report();
report->error(id, "%s", msg);
}
void
@ -1956,14 +1957,16 @@ report_file_error(int id,
int line,
const char *msg)
{
Sta::sta()->report()->error(id, filename, line, "%s", msg);
Report *report = Sta::sta()->report();
report->error(id, filename, line, "%s", msg);
}
void
report_warn(int id,
const char *msg)
{
Sta::sta()->report()->warn(id, "%s", msg);
Report *report = Sta::sta()->report();
report->warn(id, "%s", msg);
}
void
@ -1972,13 +1975,15 @@ report_file_warn(int id,
int line,
const char *msg)
{
Sta::sta()->report()->fileWarn(id, filename, line, "%s", msg);
Report *report = Sta::sta()->report();
report->fileWarn(id, filename, line, "%s", msg);
}
void
report(const char *msg)
report_line(const char *msg)
{
Sta::sta()->report()->print(msg);
Report *report = Sta::sta()->report();
report->printLine(msg);
}
void

View File

@ -225,25 +225,25 @@ proc show_cmd_args { cmd } {
set max_col 80
set indent 2
set indent_str " "
puts -nonewline $cmd
set line $cmd
set col [string length $cmd]
set arglist $cmd_args($cmd)
# Break the arglist up into max_col length lines.
while {1} {
if {[regexp {(^ *)([a-zA-Z0-9>_\|\-]+|\[.*\])(.*)} \
if {[regexp {(^ *)([a-zA-Z0-9_\\\|\-]+|\[.*\])(.*)} \
$arglist ignore space arg rest]} {
set arg_length [string length $arg]
if { $col + $arg_length < $max_col } {
puts -nonewline " $arg"
set line "$line $arg"
set col [expr $col + $arg_length + 1]
} else {
puts ""
puts -nonewline "$indent_str $arg"
report_line $line
set line "$line$indent_str $arg"
set col [expr $indent + $arg_length + 1]
}
set arglist $rest
} else {
puts ""
report_line $line
break
}
}

View File

@ -142,6 +142,13 @@ Report::print(const char *fmt, ...)
va_end(args);
}
void
Report::printLine(const char *line)
{
printString(line, strlen(line));
printString("\n", 1);
}
////////////////////////////////////////////////////////////////
void