Rename flags in `report_checks` (#131)
* Rename flags in report_checks * Smallfix * Smallfix to warning msg
This commit is contained in:
parent
70d52c2fe0
commit
e9c1a73eab
BIN
doc/OpenSTA.odt
BIN
doc/OpenSTA.odt
Binary file not shown.
BIN
doc/OpenSTA.pdf
BIN
doc/OpenSTA.pdf
Binary file not shown.
410
doc/messages.txt
410
doc/messages.txt
|
|
@ -88,7 +88,7 @@
|
||||||
0274 Parasitics.tcl:50 read_spef -delete_after_reduce is deprecated.
|
0274 Parasitics.tcl:50 read_spef -delete_after_reduce is deprecated.
|
||||||
0275 Parasitics.tcl:54 read_spef -save is deprecated.
|
0275 Parasitics.tcl:54 read_spef -save is deprecated.
|
||||||
0276 Parasitics.tcl:62 path instance '$path' not found.
|
0276 Parasitics.tcl:62 path instance '$path' not found.
|
||||||
0280 PathEnum.cc:572 diversion path not found
|
0280 PathEnum.cc:574 diversion path not found
|
||||||
0301 Power.tcl:234 activity should be 0.0 to 1.0 or 2.0
|
0301 Power.tcl:234 activity should be 0.0 to 1.0 or 2.0
|
||||||
0302 Power.tcl:242 duty should be 0.0 to 1.0
|
0302 Power.tcl:242 duty should be 0.0 to 1.0
|
||||||
0303 Power.tcl:257 activity cannot be set on clock ports.
|
0303 Power.tcl:257 activity cannot be set on clock ports.
|
||||||
|
|
@ -252,20 +252,22 @@
|
||||||
0482 Sdc.tcl:3718 define_corners must be called before read_liberty.
|
0482 Sdc.tcl:3718 define_corners must be called before read_liberty.
|
||||||
0500 Sdc.tcl:3791 no default operating conditions found.
|
0500 Sdc.tcl:3791 no default operating conditions found.
|
||||||
0501 Sdc.tcl:259 incorrect unit suffix '$arg_suffix'.
|
0501 Sdc.tcl:259 incorrect unit suffix '$arg_suffix'.
|
||||||
0510 Search.tcl:136 $cmd -path_delay must be min, min_rise, min_fall, max, max_rise, max_fall or min_max.
|
0502 Search.tcl:165 $cmd -endpoint_count is deprecated. Use -endpoint_path_count instead.
|
||||||
0511 Search.tcl:146 $cmd command failed.
|
0503 Search.tcl:178 $cmd -group_count is deprecated. Use -group_path_count instead.
|
||||||
0512 Search.tcl:165 -endpoint_count must be a positive integer.
|
0510 Search.tcl:137 $cmd -path_delay must be min, min_rise, min_fall, max, max_rise, max_fall or min_max.
|
||||||
0513 Search.tcl:174 -group_count must be >= 1.
|
0511 Search.tcl:147 $cmd command failed.
|
||||||
0514 Search.tcl:205 '$arg' is not a known keyword or flag.
|
0512 Search.tcl:172 -endpoint_path_count must be a positive integer.
|
||||||
0515 Search.tcl:207 positional arguments not supported.
|
0513 Search.tcl:186 -group_path_count must be >= 1.
|
||||||
0516 Search.tcl:328 report_clock_skew -setup and -hold are mutually exclusive options.
|
0514 Search.tcl:216 '$arg' is not a known keyword or flag.
|
||||||
0520 Search.tcl:532 analysis type single is not consistent with doing both setup/max and hold/min checks.
|
0515 Search.tcl:218 positional arguments not supported.
|
||||||
0521 Search.tcl:537 positional arguments not supported.
|
0516 Search.tcl:339 report_clock_skew -setup and -hold are mutually exclusive options.
|
||||||
0522 Search.tcl:791 -min and -max cannot both be specified.
|
0520 Search.tcl:543 analysis type single is not consistent with doing both setup/max and hold/min checks.
|
||||||
0523 Search.tcl:811 pin '$pin_arg' is hierarchical.
|
0521 Search.tcl:548 positional arguments not supported.
|
||||||
0524 Search.tcl:867 -format $format not recognized.
|
0522 Search.tcl:802 -min and -max cannot both be specified.
|
||||||
0526 Search.tcl:1015 specify one of -setup and -hold.
|
0523 Search.tcl:822 pin '$pin_arg' is hierarchical.
|
||||||
0527 Search.tcl:1065 unknown path group '$name'.
|
0524 Search.tcl:878 -format $format not recognized.
|
||||||
|
0526 Search.tcl:1026 specify one of -setup and -hold.
|
||||||
|
0527 Search.tcl:1076 unknown path group '$name'.
|
||||||
0540 Sta.tcl:158 -from/-to arguments not supported with -of_objects.
|
0540 Sta.tcl:158 -from/-to arguments not supported with -of_objects.
|
||||||
0560 Util.tcl:44 $cmd $key missing value.
|
0560 Util.tcl:44 $cmd $key missing value.
|
||||||
0561 Util.tcl:61 $cmd $key missing value.
|
0561 Util.tcl:61 $cmd $key missing value.
|
||||||
|
|
@ -292,17 +294,17 @@
|
||||||
0620 Sdf.tcl:41 -cond_use must be min, max or min_max.
|
0620 Sdf.tcl:41 -cond_use must be min, max or min_max.
|
||||||
0621 Sdf.tcl:46 -cond_use min_max cannot be used with analysis type single.
|
0621 Sdf.tcl:46 -cond_use min_max cannot be used with analysis type single.
|
||||||
0623 Sdf.tcl:154 SDF -divider must be / or .
|
0623 Sdf.tcl:154 SDF -divider must be / or .
|
||||||
0800 VcdReader.cc:110 unhandled vcd command.
|
0800 VcdReader.cc:112 unhandled vcd command.
|
||||||
0801 VcdReader.cc:148 timescale syntax error.
|
0801 VcdReader.cc:151 timescale syntax error.
|
||||||
0802 VcdReader.cc:162 Unknown timescale unit.
|
0802 VcdReader.cc:165 Unknown timescale unit.
|
||||||
0804 VcdReader.cc:219 Variable syntax error.
|
0804 VcdReader.cc:222 Variable syntax error.
|
||||||
1000 ConcreteNetwork.cc:1973 cell type %s can not be linked.
|
1000 ConcreteNetwork.cc:1973 cell type %s can not be linked.
|
||||||
1010 CycleAccting.cc:87 No common period was found between clocks %s and %s.
|
1010 CycleAccting.cc:87 No common period was found between clocks %s and %s.
|
||||||
1040 DmpCeff.cc:1510 parasitic Pi model has NaNs.
|
1040 DmpCeff.cc:1510 parasitic Pi model has NaNs.
|
||||||
1041 DmpCeff.cc:1536 cell %s delay model not supported on SPF parasitics by DMP delay calculator
|
1041 DmpCeff.cc:1536 cell %s delay model not supported on SPF parasitics by DMP delay calculator
|
||||||
1060 Genclks.cc:275 no master clock found for generated clock %s.
|
1060 Genclks.cc:275 no master clock found for generated clock %s.
|
||||||
1062 Genclks.cc:939 generated clock %s source pin %s missing paths from master clock %s.
|
1062 Genclks.cc:939 generated clock %s source pin %s missing paths from master clock %s.
|
||||||
1100 Power.cc:556 unknown cudd constant
|
1100 Power.cc:559 unknown cudd constant
|
||||||
1110 Liberty.cc:763 cell %s/%s port %s not found in cell %s/%s.
|
1110 Liberty.cc:763 cell %s/%s port %s not found in cell %s/%s.
|
||||||
1111 Liberty.cc:789 cell %s/%s %s -> %s timing group %s not found in cell %s/%s.
|
1111 Liberty.cc:789 cell %s/%s %s -> %s timing group %s not found in cell %s/%s.
|
||||||
1112 Liberty.cc:808 Liberty cell %s/%s for corner %s/%s not found.
|
1112 Liberty.cc:808 Liberty cell %s/%s for corner %s/%s not found.
|
||||||
|
|
@ -320,168 +322,168 @@
|
||||||
1127 LibertyParser.cc:420 LibertyStringAttrValue called for float value
|
1127 LibertyParser.cc:420 LibertyStringAttrValue called for float value
|
||||||
1130 LibertyExpr.cc:82 %s references unknown port %s.
|
1130 LibertyExpr.cc:82 %s references unknown port %s.
|
||||||
1131 LibertyExpr.cc:175 %s %s.
|
1131 LibertyExpr.cc:175 %s %s.
|
||||||
1140 LibertyReader.cc:629 library %s already exists.
|
1140 LibertyReader.cc:632 library %s already exists.
|
||||||
1141 LibertyReader.cc:662 library missing name.
|
1141 LibertyReader.cc:665 library missing name.
|
||||||
1142 LibertyReader.cc:688 default_wire_load %s not found.
|
1142 LibertyReader.cc:691 default_wire_load %s not found.
|
||||||
1143 LibertyReader.cc:699 default_wire_selection %s not found.
|
1143 LibertyReader.cc:702 default_wire_selection %s not found.
|
||||||
1144 LibertyReader.cc:711 default_operating_condition %s not found.
|
1144 LibertyReader.cc:714 default_operating_condition %s not found.
|
||||||
1145 LibertyReader.cc:721 input_threshold_pct_%s not found.
|
1145 LibertyReader.cc:724 input_threshold_pct_%s not found.
|
||||||
1146 LibertyReader.cc:725 output_threshold_pct_%s not found.
|
1146 LibertyReader.cc:728 output_threshold_pct_%s not found.
|
||||||
1147 LibertyReader.cc:729 slew_lower_threshold_pct_%s not found.
|
1147 LibertyReader.cc:732 slew_lower_threshold_pct_%s not found.
|
||||||
1148 LibertyReader.cc:733 slew_upper_threshold_pct_%s not found.
|
1148 LibertyReader.cc:736 slew_upper_threshold_pct_%s not found.
|
||||||
1149 LibertyReader.cc:738 Library %s is missing one or more thresholds.
|
1149 LibertyReader.cc:741 Library %s is missing one or more thresholds.
|
||||||
1150 LibertyReader.cc:817 unknown unit multiplier %s.
|
1150 LibertyReader.cc:820 unknown unit multiplier %s.
|
||||||
1151 LibertyReader.cc:840 unknown unit scale %c.
|
1151 LibertyReader.cc:843 unknown unit scale %c.
|
||||||
1152 LibertyReader.cc:843 unknown unit suffix %s.
|
1152 LibertyReader.cc:846 unknown unit suffix %s.
|
||||||
1153 LibertyReader.cc:846 unknown unit suffix %s.
|
1153 LibertyReader.cc:849 unknown unit suffix %s.
|
||||||
1154 LibertyReader.cc:871 capacitive_load_units are not ff or pf.
|
1154 LibertyReader.cc:874 capacitive_load_units are not ff or pf.
|
||||||
1155 LibertyReader.cc:874 capacitive_load_units are not a string.
|
1155 LibertyReader.cc:877 capacitive_load_units are not a string.
|
||||||
1156 LibertyReader.cc:877 capacitive_load_units missing suffix.
|
1156 LibertyReader.cc:880 capacitive_load_units missing suffix.
|
||||||
1157 LibertyReader.cc:880 capacitive_load_units scale is not a float.
|
1157 LibertyReader.cc:883 capacitive_load_units scale is not a float.
|
||||||
1158 LibertyReader.cc:883 capacitive_load_units missing scale and suffix.
|
1158 LibertyReader.cc:886 capacitive_load_units missing scale and suffix.
|
||||||
1159 LibertyReader.cc:886 capacitive_load_unit missing values suffix.
|
1159 LibertyReader.cc:889 capacitive_load_unit missing values suffix.
|
||||||
1160 LibertyReader.cc:904 delay_model %s not supported.
|
1160 LibertyReader.cc:907 delay_model %s not supported.
|
||||||
1161 LibertyReader.cc:908 delay_model %s not supported.
|
1161 LibertyReader.cc:911 delay_model %s not supported.
|
||||||
1162 LibertyReader.cc:912 delay_model %s not supported.
|
1162 LibertyReader.cc:915 delay_model %s not supported.
|
||||||
1163 LibertyReader.cc:917 delay_model %s not supported..
|
1163 LibertyReader.cc:920 delay_model %s not supported..
|
||||||
1164 LibertyReader.cc:920 unknown delay_model %s.
|
1164 LibertyReader.cc:923 unknown delay_model %s.
|
||||||
1165 LibertyReader.cc:939 unknown bus_naming_style format.
|
1165 LibertyReader.cc:942 unknown bus_naming_style format.
|
||||||
1166 LibertyReader.cc:960 voltage_map voltage is not a float.
|
1166 LibertyReader.cc:963 voltage_map voltage is not a float.
|
||||||
1167 LibertyReader.cc:963 voltage_map missing voltage.
|
1167 LibertyReader.cc:966 voltage_map missing voltage.
|
||||||
1168 LibertyReader.cc:966 voltage_map supply name is not a string.
|
1168 LibertyReader.cc:969 voltage_map supply name is not a string.
|
||||||
1169 LibertyReader.cc:969 voltage_map missing supply name and voltage.
|
1169 LibertyReader.cc:972 voltage_map missing supply name and voltage.
|
||||||
1170 LibertyReader.cc:972 voltage_map missing values suffix.
|
1170 LibertyReader.cc:975 voltage_map missing values suffix.
|
||||||
1171 LibertyReader.cc:1057 default_max_transition is 0.0.
|
1171 LibertyReader.cc:1060 default_max_transition is 0.0.
|
||||||
1172 LibertyReader.cc:1072 default_max_fanout is 0.0.
|
1172 LibertyReader.cc:1075 default_max_fanout is 0.0.
|
||||||
1173 LibertyReader.cc:1162 default_fanout_load is 0.0.
|
1173 LibertyReader.cc:1165 default_fanout_load is 0.0.
|
||||||
1174 LibertyReader.cc:1190 default_wire_load_mode %s not found.
|
1174 LibertyReader.cc:1193 default_wire_load_mode %s not found.
|
||||||
1175 LibertyReader.cc:1376 table template missing name.
|
1175 LibertyReader.cc:1379 table template missing name.
|
||||||
1176 LibertyReader.cc:1421 missing variable_%d attribute.
|
1176 LibertyReader.cc:1424 missing variable_%d attribute.
|
||||||
1177 LibertyReader.cc:1497 missing table index values.
|
1177 LibertyReader.cc:1500 missing table index values.
|
||||||
1178 LibertyReader.cc:1503 non-increasing table index values.
|
1178 LibertyReader.cc:1506 non-increasing table index values.
|
||||||
1179 LibertyReader.cc:1535 bus type %s missing bit_from.
|
1179 LibertyReader.cc:1538 bus type %s missing bit_from.
|
||||||
1180 LibertyReader.cc:1537 bus type %s missing bit_to.
|
1180 LibertyReader.cc:1540 bus type %s missing bit_to.
|
||||||
1181 LibertyReader.cc:1541 type missing name.
|
1181 LibertyReader.cc:1544 type missing name.
|
||||||
1182 LibertyReader.cc:1568 scaling_factors do not have a name.
|
1182 LibertyReader.cc:1571 scaling_factors do not have a name.
|
||||||
1183 LibertyReader.cc:1737 operating_conditions missing name.
|
1183 LibertyReader.cc:1740 operating_conditions missing name.
|
||||||
1184 LibertyReader.cc:1808 wire_load missing name.
|
1184 LibertyReader.cc:1811 wire_load missing name.
|
||||||
1185 LibertyReader.cc:1851 fanout_length is missing length and fanout.
|
1185 LibertyReader.cc:1854 fanout_length is missing length and fanout.
|
||||||
1186 LibertyReader.cc:1866 wire_load_selection missing name.
|
1186 LibertyReader.cc:1869 wire_load_selection missing name.
|
||||||
1187 LibertyReader.cc:1897 wireload %s not found.
|
1187 LibertyReader.cc:1900 wireload %s not found.
|
||||||
1189 LibertyReader.cc:1904 wire_load_from_area min not a float.
|
1189 LibertyReader.cc:1907 wire_load_from_area min not a float.
|
||||||
1190 LibertyReader.cc:1907 wire_load_from_area max not a float.
|
1190 LibertyReader.cc:1910 wire_load_from_area max not a float.
|
||||||
1191 LibertyReader.cc:1910 wire_load_from_area missing parameters.
|
1191 LibertyReader.cc:1913 wire_load_from_area missing parameters.
|
||||||
1192 LibertyReader.cc:1913 wire_load_from_area missing parameters.
|
1192 LibertyReader.cc:1916 wire_load_from_area missing parameters.
|
||||||
1193 LibertyReader.cc:1932 cell missing name.
|
1193 LibertyReader.cc:1935 cell missing name.
|
||||||
1194 LibertyReader.cc:1956 cell %s ocv_derate_group %s not found.
|
1194 LibertyReader.cc:1959 cell %s ocv_derate_group %s not found.
|
||||||
1195 LibertyReader.cc:1989 port %s function size does not match port size.
|
1195 LibertyReader.cc:1992 port %s function size does not match port size.
|
||||||
1196 LibertyReader.cc:2086 %s %s bus width mismatch.
|
1196 LibertyReader.cc:2089 %s %s bus width mismatch.
|
||||||
1197 LibertyReader.cc:2097 %s %s bus width mismatch.
|
1197 LibertyReader.cc:2100 %s %s bus width mismatch.
|
||||||
1198 LibertyReader.cc:2107 clear
|
1198 LibertyReader.cc:2110 clear
|
||||||
1199 LibertyReader.cc:2117 preset
|
1199 LibertyReader.cc:2120 preset
|
||||||
1200 LibertyReader.cc:2153 latch enable function is non-unate for port %s.
|
1200 LibertyReader.cc:2156 latch enable function is non-unate for port %s.
|
||||||
1201 LibertyReader.cc:2158 latch enable function is unknown for port %s.
|
1201 LibertyReader.cc:2161 latch enable function is unknown for port %s.
|
||||||
1202 LibertyReader.cc:2260 operating conditions %s not found.
|
1202 LibertyReader.cc:2263 operating conditions %s not found.
|
||||||
1203 LibertyReader.cc:2263 scaled_cell missing operating condition.
|
1203 LibertyReader.cc:2266 scaled_cell missing operating condition.
|
||||||
1204 LibertyReader.cc:2266 scaled_cell cell %s has not been defined.
|
1204 LibertyReader.cc:2269 scaled_cell cell %s has not been defined.
|
||||||
1205 LibertyReader.cc:2269 scaled_cell missing name.
|
1205 LibertyReader.cc:2272 scaled_cell missing name.
|
||||||
1206 LibertyReader.cc:2295 scaled_cell %s, %s port functions do not match cell port functions.
|
1206 LibertyReader.cc:2298 scaled_cell %s, %s port functions do not match cell port functions.
|
||||||
1207 LibertyReader.cc:2300 scaled_cell ports do not match cell ports.
|
1207 LibertyReader.cc:2303 scaled_cell ports do not match cell ports.
|
||||||
1208 LibertyReader.cc:2302 scaled_cell %s, %s timing does not match cell timing.
|
1208 LibertyReader.cc:2305 scaled_cell %s, %s timing does not match cell timing.
|
||||||
1209 LibertyReader.cc:2321 combinational timing to an input port.
|
1209 LibertyReader.cc:2324 combinational timing to an input port.
|
||||||
1210 LibertyReader.cc:2416 missing %s_transition.
|
1210 LibertyReader.cc:2419 missing %s_transition.
|
||||||
1211 LibertyReader.cc:2418 missing cell_%s.
|
1211 LibertyReader.cc:2421 missing cell_%s.
|
||||||
1212 LibertyReader.cc:2439 timing group from output port.
|
1212 LibertyReader.cc:2442 timing group from output port.
|
||||||
1213 LibertyReader.cc:2449 timing group from output port.
|
1213 LibertyReader.cc:2452 timing group from output port.
|
||||||
1214 LibertyReader.cc:2459 timing group from output port.
|
1214 LibertyReader.cc:2462 timing group from output port.
|
||||||
1215 LibertyReader.cc:2494 timing group from output port.
|
1215 LibertyReader.cc:2497 timing group from output port.
|
||||||
1217 LibertyReader.cc:2504 timing group from output port.
|
1217 LibertyReader.cc:2507 timing group from output port.
|
||||||
1218 LibertyReader.cc:2605 receiver_capacitance group not in timing or pin group.
|
1218 LibertyReader.cc:2608 receiver_capacitance group not in timing or pin group.
|
||||||
1219 LibertyReader.cc:2623 unsupported model axis.
|
1219 LibertyReader.cc:2626 unsupported model axis.
|
||||||
1220 LibertyReader.cc:2651 output_current_%s group not in timing group.
|
1220 LibertyReader.cc:2654 output_current_%s group not in timing group.
|
||||||
1221 LibertyReader.cc:2693 output current waveform %.2e %.2e not found.
|
1221 LibertyReader.cc:2696 output current waveform %.2e %.2e not found.
|
||||||
1222 LibertyReader.cc:2714 unsupported model axis.
|
1222 LibertyReader.cc:2717 unsupported model axis.
|
||||||
1223 LibertyReader.cc:2756 vector index_1 and index_2 must have exactly one value.
|
1223 LibertyReader.cc:2759 vector index_1 and index_2 must have exactly one value.
|
||||||
1224 LibertyReader.cc:2758 vector reference_time not found.
|
1224 LibertyReader.cc:2761 vector reference_time not found.
|
||||||
1225 LibertyReader.cc:2791 normalized_driver_waveform variable_2 must be normalized_voltage
|
1225 LibertyReader.cc:2794 normalized_driver_waveform variable_2 must be normalized_voltage
|
||||||
1226 LibertyReader.cc:2794 normalized_driver_waveform variable_1 must be input_net_transition
|
1226 LibertyReader.cc:2797 normalized_driver_waveform variable_1 must be input_net_transition
|
||||||
1228 LibertyReader.cc:3016 level_shifter_type must be HL, LH, or HL_LH
|
1228 LibertyReader.cc:3019 level_shifter_type must be HL, LH, or HL_LH
|
||||||
1229 LibertyReader.cc:3052 switch_cell_type must be coarse_grain or fine_grain
|
1229 LibertyReader.cc:3055 switch_cell_type must be coarse_grain or fine_grain
|
||||||
1230 LibertyReader.cc:3076 scaling_factors %s not found.
|
1230 LibertyReader.cc:3079 scaling_factors %s not found.
|
||||||
1231 LibertyReader.cc:3137 pin name is not a string.
|
1231 LibertyReader.cc:3140 pin name is not a string.
|
||||||
1232 LibertyReader.cc:3154 pin name is not a string.
|
1232 LibertyReader.cc:3157 pin name is not a string.
|
||||||
1233 LibertyReader.cc:3168 pin name is not a string.
|
1233 LibertyReader.cc:3171 pin name is not a string.
|
||||||
1234 LibertyReader.cc:3246 bus %s bus_type not found.
|
1234 LibertyReader.cc:3243 bus %s bus_type not found.
|
||||||
1235 LibertyReader.cc:3298 bus_type %s not found.
|
1235 LibertyReader.cc:3295 bus_type %s not found.
|
||||||
1236 LibertyReader.cc:3301 bus_type is not a string.
|
1236 LibertyReader.cc:3298 bus_type is not a string.
|
||||||
1237 LibertyReader.cc:3319 bundle %s member not found.
|
1237 LibertyReader.cc:3316 bundle %s member not found.
|
||||||
1238 LibertyReader.cc:3342 member is not a string.
|
1238 LibertyReader.cc:3339 member is not a string.
|
||||||
1239 LibertyReader.cc:3349 members attribute is missing values.
|
1239 LibertyReader.cc:3346 members attribute is missing values.
|
||||||
1240 LibertyReader.cc:3400 unknown port direction.
|
1240 LibertyReader.cc:3397 unknown port direction.
|
||||||
1241 LibertyReader.cc:3647 max_transition is 0.0.
|
1241 LibertyReader.cc:3644 max_transition is 0.0.
|
||||||
1242 LibertyReader.cc:3753 pulse_latch unknown pulse type.
|
1242 LibertyReader.cc:3750 pulse_latch unknown pulse type.
|
||||||
1243 LibertyReader.cc:4182 timing group missing related_pin/related_bus_pin.
|
1243 LibertyReader.cc:4194 timing group missing related_pin/related_bus_pin.
|
||||||
1244 LibertyReader.cc:4281 unknown timing_type %s.
|
1244 LibertyReader.cc:4293 unknown timing_type %s.
|
||||||
1245 LibertyReader.cc:4301 unknown timing_sense %s.
|
1245 LibertyReader.cc:4313 unknown timing_sense %s.
|
||||||
1246 LibertyReader.cc:4341 mode value is not a string.
|
1246 LibertyReader.cc:4353 mode value is not a string.
|
||||||
1247 LibertyReader.cc:4344 missing mode value.
|
1247 LibertyReader.cc:4356 missing mode value.
|
||||||
1248 LibertyReader.cc:4347 mode name is not a string.
|
1248 LibertyReader.cc:4359 mode name is not a string.
|
||||||
1249 LibertyReader.cc:4350 mode missing values.
|
1249 LibertyReader.cc:4362 mode missing values.
|
||||||
1250 LibertyReader.cc:4353 mode missing mode name and value.
|
1250 LibertyReader.cc:4365 mode missing mode name and value.
|
||||||
1251 LibertyReader.cc:4429 unsupported model axis.
|
1251 LibertyReader.cc:4441 unsupported model axis.
|
||||||
1252 LibertyReader.cc:4456 unsupported model axis.
|
1252 LibertyReader.cc:4468 unsupported model axis.
|
||||||
1253 LibertyReader.cc:4485 unsupported model axis.
|
1253 LibertyReader.cc:4497 unsupported model axis.
|
||||||
1254 LibertyReader.cc:4520 unsupported model axis.
|
1254 LibertyReader.cc:4532 unsupported model axis.
|
||||||
1255 LibertyReader.cc:4536 %s group not in timing group.
|
1255 LibertyReader.cc:4548 %s group not in timing group.
|
||||||
1256 LibertyReader.cc:4575 table template %s not found.
|
1256 LibertyReader.cc:4587 table template %s not found.
|
||||||
1257 LibertyReader.cc:4659 %s is missing values.
|
1257 LibertyReader.cc:4671 %s is missing values.
|
||||||
1258 LibertyReader.cc:4682 %s is not a list of floats.
|
1258 LibertyReader.cc:4694 %s is not a list of floats.
|
||||||
1259 LibertyReader.cc:4684 table row has %u columns but axis has %d.
|
1259 LibertyReader.cc:4696 table row has %u columns but axis has %d.
|
||||||
1260 LibertyReader.cc:4694 table has %u rows but axis has %d.
|
1260 LibertyReader.cc:4706 table has %u rows but axis has %d.
|
||||||
1261 LibertyReader.cc:4745 lut output is not a string.
|
1261 LibertyReader.cc:4757 lut output is not a string.
|
||||||
1262 LibertyReader.cc:4761 cell %s test_cell redefinition.
|
1262 LibertyReader.cc:4773 cell %s test_cell redefinition.
|
||||||
1263 LibertyReader.cc:4809 mode definition missing name.
|
1263 LibertyReader.cc:4821 mode definition missing name.
|
||||||
1264 LibertyReader.cc:4826 mode value missing name.
|
1264 LibertyReader.cc:4838 mode value missing name.
|
||||||
1265 LibertyReader.cc:4840 when attribute inside table model.
|
1265 LibertyReader.cc:4852 when attribute inside table model.
|
||||||
1266 LibertyReader.cc:4889 %s attribute is not a string.
|
1266 LibertyReader.cc:4901 %s attribute is not a string.
|
||||||
1267 LibertyReader.cc:4892 %s is not a simple attribute.
|
1267 LibertyReader.cc:4904 %s is not a simple attribute.
|
||||||
1268 LibertyReader.cc:4912 %s attribute is not an integer.
|
1268 LibertyReader.cc:4924 %s attribute is not an integer.
|
||||||
1269 LibertyReader.cc:4915 %s is not a simple attribute.
|
1269 LibertyReader.cc:4927 %s is not a simple attribute.
|
||||||
1270 LibertyReader.cc:4928 %s is not a simple attribute.
|
1270 LibertyReader.cc:4940 %s is not a simple attribute.
|
||||||
1271 LibertyReader.cc:4954 %s value %s is not a float.
|
1271 LibertyReader.cc:4966 %s value %s is not a float.
|
||||||
1272 LibertyReader.cc:4983 %s missing values.
|
1272 LibertyReader.cc:4995 %s missing values.
|
||||||
1273 LibertyReader.cc:4987 %s missing values.
|
1273 LibertyReader.cc:4999 %s missing values.
|
||||||
1274 LibertyReader.cc:4990 %s is not a complex attribute.
|
1274 LibertyReader.cc:5002 %s is not a complex attribute.
|
||||||
1275 LibertyReader.cc:5016 %s is not a float.
|
1275 LibertyReader.cc:5028 %s is not a float.
|
||||||
1276 LibertyReader.cc:5039 %s is missing values.
|
1276 LibertyReader.cc:5051 %s is missing values.
|
||||||
1277 LibertyReader.cc:5042 %s has more than one string.
|
1277 LibertyReader.cc:5054 %s has more than one string.
|
||||||
1278 LibertyReader.cc:5051 %s is missing values.
|
1278 LibertyReader.cc:5063 %s is missing values.
|
||||||
1279 LibertyReader.cc:5076 %s attribute is not boolean.
|
1279 LibertyReader.cc:5088 %s attribute is not boolean.
|
||||||
1280 LibertyReader.cc:5079 %s attribute is not boolean.
|
1280 LibertyReader.cc:5091 %s attribute is not boolean.
|
||||||
1281 LibertyReader.cc:5082 %s is not a simple attribute.
|
1281 LibertyReader.cc:5094 %s is not a simple attribute.
|
||||||
1282 LibertyReader.cc:5098 attribute %s value %s not recognized.
|
1282 LibertyReader.cc:5110 attribute %s value %s not recognized.
|
||||||
1283 LibertyReader.cc:5129 unknown early/late value.
|
1283 LibertyReader.cc:5141 unknown early/late value.
|
||||||
1284 LibertyReader.cc:5349 OCV derate group named %s not found.
|
1284 LibertyReader.cc:5361 OCV derate group named %s not found.
|
||||||
1285 LibertyReader.cc:5365 ocv_derate missing name.
|
1285 LibertyReader.cc:5377 ocv_derate missing name.
|
||||||
1286 LibertyReader.cc:5418 unknown rise/fall.
|
1286 LibertyReader.cc:5430 unknown rise/fall.
|
||||||
1287 LibertyReader.cc:5438 unknown derate type.
|
1287 LibertyReader.cc:5450 unknown derate type.
|
||||||
1288 LibertyReader.cc:5470 unsupported model axis.
|
1288 LibertyReader.cc:5482 unsupported model axis.
|
||||||
1289 LibertyReader.cc:5502 unsupported model axis.
|
1289 LibertyReader.cc:5514 unsupported model axis.
|
||||||
1290 LibertyReader.cc:5534 unsupported model axis.
|
1290 LibertyReader.cc:5546 unsupported model axis.
|
||||||
1291 LibertyReader.cc:5605 unknown pg_type.
|
1291 LibertyReader.cc:5617 unknown pg_type.
|
||||||
1292 LibertyReader.cc:6019 port %s subscript out of range.
|
1292 LibertyReader.cc:6031 port %s subscript out of range.
|
||||||
1293 LibertyReader.cc:6023 port range %s of non-bus port %s.
|
1293 LibertyReader.cc:6035 port range %s of non-bus port %s.
|
||||||
1294 LibertyReader.cc:6037 port %s not found.
|
1294 LibertyReader.cc:6049 port %s not found.
|
||||||
1295 LibertyReader.cc:6107 port %s not found.
|
1295 LibertyReader.cc:6119 port %s not found.
|
||||||
1297 LibertyReader.cc:1463 axis type %s not supported.
|
1297 LibertyReader.cc:1466 axis type %s not supported.
|
||||||
1298 LibertyReader.cc:2177 statetable input port %s not found.
|
1298 LibertyReader.cc:2180 statetable input port %s not found.
|
||||||
1299 LibertyReader.cc:3812 unknown signal_type %s.
|
1299 LibertyReader.cc:3809 unknown signal_type %s.
|
||||||
1300 LibertyReader.cc:4056 table row must have 3 groups separated by ':'.
|
1300 LibertyReader.cc:4068 table row must have 3 groups separated by ':'.
|
||||||
1301 LibertyReader.cc:4061 table row has %zu input values but %zu are required.
|
1301 LibertyReader.cc:4073 table row has %zu input values but %zu are required.
|
||||||
1302 LibertyReader.cc:4068 table row has %zu current values but %zu are required.
|
1302 LibertyReader.cc:4080 table row has %zu current values but %zu are required.
|
||||||
1303 LibertyReader.cc:4075 table row has %zu next values but %zu are required.
|
1303 LibertyReader.cc:4087 table row has %zu next values but %zu are required.
|
||||||
1304 LibertyReader.cc:4121 table input value '%s' not recognized.
|
1304 LibertyReader.cc:4133 table input value '%s' not recognized.
|
||||||
1305 LibertyReader.cc:4140 table internal value '%s' not recognized.
|
1305 LibertyReader.cc:4152 table internal value '%s' not recognized.
|
||||||
1340 LibertyWriter.cc:307 %s/%s bundled ports not supported.
|
1340 LibertyWriter.cc:307 %s/%s bundled ports not supported.
|
||||||
1341 LibertyWriter.cc:455 %s/%s/%s timing model not supported.
|
1341 LibertyWriter.cc:455 %s/%s/%s timing model not supported.
|
||||||
1342 LibertyWriter.cc:475 3 axis table models not supported.
|
1342 LibertyWriter.cc:475 3 axis table models not supported.
|
||||||
|
|
@ -489,7 +491,7 @@
|
||||||
1350 LumpedCapDelayCalc.cc:138 gate delay input variable is NaN
|
1350 LumpedCapDelayCalc.cc:138 gate delay input variable is NaN
|
||||||
1355 MakeTimingModel.cc:227 clock %s pin %s is inside model block.
|
1355 MakeTimingModel.cc:227 clock %s pin %s is inside model block.
|
||||||
1360 Vcd.cc:172 Unknown variable %s ID %s
|
1360 Vcd.cc:172 Unknown variable %s ID %s
|
||||||
1370 PathEnum.cc:476 path diversion missing edge.
|
1370 PathEnum.cc:478 path diversion missing edge.
|
||||||
1398 VerilogReader.cc:1860 %s is not a verilog module.
|
1398 VerilogReader.cc:1860 %s is not a verilog module.
|
||||||
1399 VerilogReader.cc:1865 %s is not a verilog module.
|
1399 VerilogReader.cc:1865 %s is not a verilog module.
|
||||||
1400 PathVertex.cc:236 missing arrivals.
|
1400 PathVertex.cc:236 missing arrivals.
|
||||||
|
|
@ -510,33 +512,33 @@
|
||||||
1554 Sta.cc:1996 '%s' is not a valid start point.
|
1554 Sta.cc:1996 '%s' is not a valid start point.
|
||||||
1570 Search.i:54 no network has been linked.
|
1570 Search.i:54 no network has been linked.
|
||||||
1571 Search.i:68 network does not support edits.
|
1571 Search.i:68 network does not support edits.
|
||||||
1574 Search.i:1120 POCV support requires compilation with SSTA=1.
|
1574 Search.i:1121 POCV support requires compilation with SSTA=1.
|
||||||
1575 Search.i:529 unknown report path field %s
|
1575 Search.i:530 unknown report path field %s
|
||||||
1576 Search.i:541 unknown report path field %s
|
1576 Search.i:542 unknown report path field %s
|
||||||
1600 WritePathSpice.cc:165 No liberty libraries found,
|
1600 WritePathSpice.cc:165 No liberty libraries found,
|
||||||
1602 WriteSpice.cc:458 Liberty pg_port %s/%s missing voltage_name attribute,
|
1602 WriteSpice.cc:458 Liberty pg_port %s/%s missing voltage_name attribute,
|
||||||
1603 WriteSpice.cc:428 %s pg_port %s not found,
|
1603 WriteSpice.cc:428 %s pg_port %s not found,
|
||||||
1604 WriteSpice.cc:1019 no register/latch found for path from %s to %s,
|
1604 WriteSpice.cc:1019 no register/latch found for path from %s to %s,
|
||||||
1605 WriteSpice.cc:241 The subkct file %s is missing definitions for %s
|
1605 WriteSpice.cc:241 The subkct file %s is missing definitions for %s
|
||||||
1606 WriteSpice.cc:270 subckt %s port %s has no corresponding liberty port, pg_port and is not power or ground.
|
1606 WriteSpice.cc:270 subckt %s port %s has no corresponding liberty port, pg_port and is not power or ground.
|
||||||
1640 SpefReader.cc:154 illegal bus delimiters.
|
1640 SpefReader.cc:157 illegal bus delimiters.
|
||||||
1641 SpefReader.cc:238 unknown units %s.
|
1641 SpefReader.cc:241 unknown units %s.
|
||||||
1642 SpefReader.cc:251 unknown units %s.
|
1642 SpefReader.cc:254 unknown units %s.
|
||||||
1643 SpefReader.cc:264 unknown units %s.
|
1643 SpefReader.cc:267 unknown units %s.
|
||||||
1644 SpefReader.cc:279 unknown units %s.
|
1644 SpefReader.cc:282 unknown units %s.
|
||||||
1645 SpefReader.cc:300 no name map entry for %d.
|
1645 SpefReader.cc:303 no name map entry for %d.
|
||||||
1646 SpefReader.cc:319 unknown port direction %s.
|
1646 SpefReader.cc:322 unknown port direction %s.
|
||||||
1647 SpefReader.cc:346 pin %s not found.
|
1647 SpefReader.cc:349 pin %s not found.
|
||||||
1648 SpefReader.cc:349 instance %s not found.
|
1648 SpefReader.cc:352 instance %s not found.
|
||||||
1650 SpefReader.cc:369 net %s not found.
|
1650 SpefReader.cc:372 net %s not found.
|
||||||
1651 SpefReader.cc:483 %s not connected to net %s.
|
1651 SpefReader.cc:486 %s not connected to net %s.
|
||||||
1652 SpefReader.cc:489 pin %s not found.
|
1652 SpefReader.cc:492 pin %s not found.
|
||||||
1653 SpefReader.cc:503 %s not connected to net %s.
|
1653 SpefReader.cc:506 %s not connected to net %s.
|
||||||
1654 SpefReader.cc:509 node %s not a pin or net:number
|
1654 SpefReader.cc:512 node %s not a pin or net:number
|
||||||
1655 SpefReader.cc:521 %s not connected to net %s.
|
1655 SpefReader.cc:524 %s not connected to net %s.
|
||||||
1656 SpefReader.cc:525 pin %s not found.
|
1656 SpefReader.cc:528 pin %s not found.
|
||||||
1657 SpefReader.cc:642 %s.
|
1657 SpefReader.cc:645 %s.
|
||||||
1658 SpefReader.cc:60 Delay calculator %s does not support reduction.
|
1658 SpefReader.cc:61 Delay calculator %s does not support reduction.
|
||||||
1700 CcsCeffDelayCalc.cc:102 VDD not defined in library %s
|
1700 CcsCeffDelayCalc.cc:102 VDD not defined in library %s
|
||||||
1701 CcsCeffDelayCalc.cc:273 unsupported ccs region count.
|
1701 CcsCeffDelayCalc.cc:273 unsupported ccs region count.
|
||||||
1720 PrimaDelayCalc.cc:229 VDD not defined in library %s
|
1720 PrimaDelayCalc.cc:229 VDD not defined in library %s
|
||||||
|
|
|
||||||
|
|
@ -40,15 +40,15 @@ public:
|
||||||
virtual ~PathGroup();
|
virtual ~PathGroup();
|
||||||
// Path group that compares compare slacks.
|
// Path group that compares compare slacks.
|
||||||
static PathGroup *makePathGroupArrival(const char *name,
|
static PathGroup *makePathGroupArrival(const char *name,
|
||||||
int group_count,
|
int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
const MinMax *min_max,
|
const MinMax *min_max,
|
||||||
const StaState *sta);
|
const StaState *sta);
|
||||||
// Path group that compares arrival time, sorted by min_max.
|
// Path group that compares arrival time, sorted by min_max.
|
||||||
static PathGroup *makePathGroupSlack(const char *name,
|
static PathGroup *makePathGroupSlack(const char *name,
|
||||||
int group_count,
|
int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
float min_slack,
|
float min_slack,
|
||||||
float max_slack,
|
float max_slack,
|
||||||
|
|
@ -57,20 +57,20 @@ public:
|
||||||
const MinMax *minMax() const { return min_max_;}
|
const MinMax *minMax() const { return min_max_;}
|
||||||
const PathEndSeq &pathEnds() const { return path_ends_; }
|
const PathEndSeq &pathEnds() const { return path_ends_; }
|
||||||
void insert(PathEnd *path_end);
|
void insert(PathEnd *path_end);
|
||||||
// Push group_count into path_ends.
|
// Push group_path_count into path_ends.
|
||||||
void pushEnds(PathEndSeq &path_ends);
|
void pushEnds(PathEndSeq &path_ends);
|
||||||
// Predicates to determine if a PathEnd is worth saving.
|
// Predicates to determine if a PathEnd is worth saving.
|
||||||
virtual bool savable(PathEnd *path_end);
|
virtual bool savable(PathEnd *path_end);
|
||||||
int maxPaths() const { return group_count_; }
|
int maxPaths() const { return group_path_count_; }
|
||||||
PathGroupIterator *iterator();
|
PathGroupIterator *iterator();
|
||||||
// This does NOT delete the path ends.
|
// This does NOT delete the path ends.
|
||||||
void clear();
|
void clear();
|
||||||
static int group_count_max;
|
static int group_path_count_max;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
PathGroup(const char *name,
|
PathGroup(const char *name,
|
||||||
int group_count,
|
int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
float min_slack,
|
float min_slack,
|
||||||
float max_slack,
|
float max_slack,
|
||||||
|
|
@ -82,8 +82,8 @@ protected:
|
||||||
void sort();
|
void sort();
|
||||||
|
|
||||||
const char *name_;
|
const char *name_;
|
||||||
int group_count_;
|
int group_path_count_;
|
||||||
int endpoint_count_;
|
int endpoint_path_count_;
|
||||||
bool unique_pins_;
|
bool unique_pins_;
|
||||||
float slack_min_;
|
float slack_min_;
|
||||||
float slack_max_;
|
float slack_max_;
|
||||||
|
|
@ -98,8 +98,8 @@ protected:
|
||||||
class PathGroups : public StaState
|
class PathGroups : public StaState
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PathGroups(int group_count,
|
PathGroups(int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
float slack_min,
|
float slack_min,
|
||||||
float slack_max,
|
float slack_max,
|
||||||
|
|
@ -130,8 +130,8 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void makeGroupPathEnds(ExceptionTo *to,
|
void makeGroupPathEnds(ExceptionTo *to,
|
||||||
int group_count,
|
int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
const Corner *corner,
|
const Corner *corner,
|
||||||
const MinMaxAll *min_max);
|
const MinMaxAll *min_max);
|
||||||
|
|
@ -144,8 +144,8 @@ protected:
|
||||||
const MinMaxAll *min_max,
|
const MinMaxAll *min_max,
|
||||||
PathEndVisitor *visitor);
|
PathEndVisitor *visitor);
|
||||||
void enumPathEnds(PathGroup *group,
|
void enumPathEnds(PathGroup *group,
|
||||||
int group_count,
|
int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
bool cmp_slack);
|
bool cmp_slack);
|
||||||
|
|
||||||
|
|
@ -153,8 +153,8 @@ protected:
|
||||||
void pushUnconstrainedPathEnds(PathEndSeq &path_ends,
|
void pushUnconstrainedPathEnds(PathEndSeq &path_ends,
|
||||||
const MinMaxAll *min_max);
|
const MinMaxAll *min_max);
|
||||||
|
|
||||||
void makeGroups(int group_count,
|
void makeGroups(int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
float slack_min,
|
float slack_min,
|
||||||
float slack_max,
|
float slack_max,
|
||||||
|
|
@ -168,8 +168,8 @@ protected:
|
||||||
PathGroupNameSet *group_names) const;
|
PathGroupNameSet *group_names) const;
|
||||||
GroupPath *groupPathTo(const PathEnd *path_end) const;
|
GroupPath *groupPathTo(const PathEnd *path_end) const;
|
||||||
|
|
||||||
int group_count_;
|
int group_path_count_;
|
||||||
int endpoint_count_;
|
int endpoint_path_count_;
|
||||||
bool unique_pins_;
|
bool unique_pins_;
|
||||||
float slack_min_;
|
float slack_min_;
|
||||||
float slack_max_;
|
float slack_max_;
|
||||||
|
|
|
||||||
|
|
@ -89,8 +89,8 @@ public:
|
||||||
bool unconstrained,
|
bool unconstrained,
|
||||||
const Corner *corner,
|
const Corner *corner,
|
||||||
const MinMaxAll *min_max,
|
const MinMaxAll *min_max,
|
||||||
int group_count,
|
int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
float slack_min,
|
float slack_min,
|
||||||
float slack_max,
|
float slack_max,
|
||||||
|
|
@ -156,8 +156,8 @@ public:
|
||||||
|
|
||||||
PathGroup *pathGroup(const PathEnd *path_end) const;
|
PathGroup *pathGroup(const PathEnd *path_end) const;
|
||||||
void deletePathGroups();
|
void deletePathGroups();
|
||||||
void makePathGroups(int group_count,
|
void makePathGroups(int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
float min_slack,
|
float min_slack,
|
||||||
float max_slack,
|
float max_slack,
|
||||||
|
|
|
||||||
|
|
@ -862,11 +862,11 @@ public:
|
||||||
const MinMaxAll *min_max,
|
const MinMaxAll *min_max,
|
||||||
// Number of path ends to report in
|
// Number of path ends to report in
|
||||||
// each group.
|
// each group.
|
||||||
int group_count,
|
int group_path_count,
|
||||||
// Number of paths to report for
|
// Number of paths to report for
|
||||||
// each endpoint.
|
// each endpoint.
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
// endpoint_count paths report unique pins
|
// endpoint_path_count paths report unique pins
|
||||||
// without rise/fall variations.
|
// without rise/fall variations.
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
// Min/max bounds for slack of
|
// Min/max bounds for slack of
|
||||||
|
|
|
||||||
|
|
@ -96,15 +96,15 @@ deleteDiversionPathEnd(Diversion *div)
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
PathEnum::PathEnum(int group_count,
|
PathEnum::PathEnum(int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
bool cmp_slack,
|
bool cmp_slack,
|
||||||
const StaState *sta) :
|
const StaState *sta) :
|
||||||
StaState(sta),
|
StaState(sta),
|
||||||
cmp_slack_(cmp_slack),
|
cmp_slack_(cmp_slack),
|
||||||
group_count_(group_count),
|
group_path_count_(group_path_count),
|
||||||
endpoint_count_(endpoint_count),
|
endpoint_path_count_(endpoint_path_count),
|
||||||
unique_pins_(unique_pins),
|
unique_pins_(unique_pins),
|
||||||
div_queue_(DiversionGreater(sta)),
|
div_queue_(DiversionGreater(sta)),
|
||||||
div_count_(0),
|
div_count_(0),
|
||||||
|
|
@ -181,7 +181,7 @@ PathEnum::findNext()
|
||||||
}
|
}
|
||||||
|
|
||||||
path_counts_[vertex]++;
|
path_counts_[vertex]++;
|
||||||
if (path_counts_[vertex] <= endpoint_count_) {
|
if (path_counts_[vertex] <= endpoint_path_count_) {
|
||||||
// Add diversions for all arcs converging on the path up to the
|
// Add diversions for all arcs converging on the path up to the
|
||||||
// diversion.
|
// diversion.
|
||||||
makeDiversions(path_end, div->divPath());
|
makeDiversions(path_end, div->divPath());
|
||||||
|
|
@ -191,8 +191,10 @@ PathEnum::findNext()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// We have endpoint_count paths for this endpoint, so we are done with it.
|
// We have endpoint_path_count paths for this endpoint,
|
||||||
debugPrint(debug_, "path_enum", 1, "endpoint_count reached for %s",
|
// so we are done with it.
|
||||||
|
debugPrint(debug_, "path_enum", 1,
|
||||||
|
"endpoint_path_count reached for %s",
|
||||||
vertex->name(sdc_network_));
|
vertex->name(sdc_network_));
|
||||||
deleteDiversionPathEnd(div);
|
deleteDiversionPathEnd(div);
|
||||||
}
|
}
|
||||||
|
|
@ -421,7 +423,7 @@ PathEnum::makeDiversion(PathEnd *div_end,
|
||||||
div_queue_.push(div);
|
div_queue_.push(div);
|
||||||
div_count_++;
|
div_count_++;
|
||||||
|
|
||||||
if (static_cast<int>(div_queue_.size()) > group_count_ * 2)
|
if (static_cast<int>(div_queue_.size()) > group_path_count_ * 2)
|
||||||
// We have more potenial paths than we will need.
|
// We have more potenial paths than we will need.
|
||||||
pruneDiversionQueue();
|
pruneDiversionQueue();
|
||||||
}
|
}
|
||||||
|
|
@ -432,14 +434,14 @@ PathEnum::pruneDiversionQueue()
|
||||||
debugPrint(debug_, "path_enum", 2, "prune queue");
|
debugPrint(debug_, "path_enum", 2, "prune queue");
|
||||||
VertexPathCountMap path_counts;
|
VertexPathCountMap path_counts;
|
||||||
int end_count = 0;
|
int end_count = 0;
|
||||||
// Collect endpoint_count diversions per vertex.
|
// Collect endpoint_path_count diversions per vertex.
|
||||||
DiversionSeq divs;
|
DiversionSeq divs;
|
||||||
while (!div_queue_.empty()) {
|
while (!div_queue_.empty()) {
|
||||||
Diversion *div = div_queue_.top();
|
Diversion *div = div_queue_.top();
|
||||||
Vertex *vertex = div->pathEnd()->vertex(this);
|
Vertex *vertex = div->pathEnd()->vertex(this);
|
||||||
if (end_count < group_count_
|
if (end_count < group_path_count_
|
||||||
&& ((unique_pins_ && path_counts[vertex] == 0)
|
&& ((unique_pins_ && path_counts[vertex] == 0)
|
||||||
|| (!unique_pins_ && path_counts[vertex] < endpoint_count_))) {
|
|| (!unique_pins_ && path_counts[vertex] < endpoint_path_count_))) {
|
||||||
divs.push_back(div);
|
divs.push_back(div);
|
||||||
path_counts[vertex]++;
|
path_counts[vertex]++;
|
||||||
end_count++;
|
end_count++;
|
||||||
|
|
|
||||||
|
|
@ -52,8 +52,8 @@ private:
|
||||||
class PathEnum : public Iterator<PathEnd*>, StaState
|
class PathEnum : public Iterator<PathEnd*>, StaState
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PathEnum(int group_count,
|
PathEnum(int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
bool cmp_slack,
|
bool cmp_slack,
|
||||||
const StaState *sta);
|
const StaState *sta);
|
||||||
|
|
@ -88,12 +88,12 @@ private:
|
||||||
void findNext();
|
void findNext();
|
||||||
|
|
||||||
bool cmp_slack_;
|
bool cmp_slack_;
|
||||||
int group_count_;
|
int group_path_count_;
|
||||||
int endpoint_count_;
|
int endpoint_path_count_;
|
||||||
bool unique_pins_;
|
bool unique_pins_;
|
||||||
DiversionQueue div_queue_;
|
DiversionQueue div_queue_;
|
||||||
int div_count_;
|
int div_count_;
|
||||||
// Number of paths returned for each endpoint (limited to endpoint_count).
|
// Number of paths returned for each endpoint (limit to endpoint_path_count).
|
||||||
VertexPathCountMap path_counts_;
|
VertexPathCountMap path_counts_;
|
||||||
bool inserts_pruned_;
|
bool inserts_pruned_;
|
||||||
PathEnd *next_;
|
PathEnd *next_;
|
||||||
|
|
|
||||||
|
|
@ -38,36 +38,36 @@
|
||||||
|
|
||||||
namespace sta {
|
namespace sta {
|
||||||
|
|
||||||
int PathGroup::group_count_max = std::numeric_limits<int>::max();
|
int PathGroup::group_path_count_max = std::numeric_limits<int>::max();
|
||||||
|
|
||||||
PathGroup *
|
PathGroup *
|
||||||
PathGroup::makePathGroupSlack(const char *name,
|
PathGroup::makePathGroupSlack(const char *name,
|
||||||
int group_count,
|
int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
float slack_min,
|
float slack_min,
|
||||||
float slack_max,
|
float slack_max,
|
||||||
const StaState *sta)
|
const StaState *sta)
|
||||||
{
|
{
|
||||||
return new PathGroup(name, group_count, endpoint_count, unique_pins,
|
return new PathGroup(name, group_path_count, endpoint_path_count, unique_pins,
|
||||||
slack_min, slack_max, true, MinMax::min(), sta);
|
slack_min, slack_max, true, MinMax::min(), sta);
|
||||||
}
|
}
|
||||||
|
|
||||||
PathGroup *
|
PathGroup *
|
||||||
PathGroup::makePathGroupArrival(const char *name,
|
PathGroup::makePathGroupArrival(const char *name,
|
||||||
int group_count,
|
int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
const MinMax *min_max,
|
const MinMax *min_max,
|
||||||
const StaState *sta)
|
const StaState *sta)
|
||||||
{
|
{
|
||||||
return new PathGroup(name, group_count, endpoint_count, unique_pins,
|
return new PathGroup(name, group_path_count, endpoint_path_count, unique_pins,
|
||||||
0.0, 0.0, false, min_max, sta);
|
0.0, 0.0, false, min_max, sta);
|
||||||
}
|
}
|
||||||
|
|
||||||
PathGroup::PathGroup(const char *name,
|
PathGroup::PathGroup(const char *name,
|
||||||
int group_count,
|
int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
float slack_min,
|
float slack_min,
|
||||||
float slack_max,
|
float slack_max,
|
||||||
|
|
@ -75,8 +75,8 @@ PathGroup::PathGroup(const char *name,
|
||||||
const MinMax *min_max,
|
const MinMax *min_max,
|
||||||
const StaState *sta) :
|
const StaState *sta) :
|
||||||
name_(name),
|
name_(name),
|
||||||
group_count_(group_count),
|
group_path_count_(group_path_count),
|
||||||
endpoint_count_(endpoint_count),
|
endpoint_path_count_(endpoint_path_count),
|
||||||
unique_pins_(unique_pins),
|
unique_pins_(unique_pins),
|
||||||
slack_min_(slack_min),
|
slack_min_(slack_min),
|
||||||
slack_max_(slack_max),
|
slack_max_(slack_max),
|
||||||
|
|
@ -128,8 +128,8 @@ PathGroup::insert(PathEnd *path_end)
|
||||||
{
|
{
|
||||||
LockGuard lock(lock_);
|
LockGuard lock(lock_);
|
||||||
path_ends_.push_back(path_end);
|
path_ends_.push_back(path_end);
|
||||||
if (group_count_ != group_count_max
|
if (group_path_count_ != group_path_count_max
|
||||||
&& static_cast<int>(path_ends_.size()) > group_count_ * 2)
|
&& static_cast<int>(path_ends_.size()) > group_path_count_ * 2)
|
||||||
prune();
|
prune();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -142,9 +142,10 @@ PathGroup::prune()
|
||||||
for (unsigned i = 0; i < path_ends_.size(); i++) {
|
for (unsigned i = 0; i < path_ends_.size(); i++) {
|
||||||
PathEnd *path_end = path_ends_[i];
|
PathEnd *path_end = path_ends_[i];
|
||||||
Vertex *vertex = path_end->vertex(sta_);
|
Vertex *vertex = path_end->vertex(sta_);
|
||||||
// Squish up to endpoint_count path ends per vertex up to the front of path_ends_.
|
// Squish up to endpoint_path_count path ends per vertex
|
||||||
if (end_count < group_count_
|
// up to the front of path_ends_.
|
||||||
&& path_counts[vertex] < endpoint_count_) {
|
if (end_count < group_path_count_
|
||||||
|
&& path_counts[vertex] < endpoint_path_count_) {
|
||||||
path_ends_[end_count++] = path_end;
|
path_ends_[end_count++] = path_end;
|
||||||
path_counts[vertex]++;
|
path_counts[vertex]++;
|
||||||
}
|
}
|
||||||
|
|
@ -180,7 +181,7 @@ PathGroup::iterator()
|
||||||
void
|
void
|
||||||
PathGroup::ensureSortedMaxPaths()
|
PathGroup::ensureSortedMaxPaths()
|
||||||
{
|
{
|
||||||
if (static_cast<int>(path_ends_.size()) > group_count_)
|
if (static_cast<int>(path_ends_.size()) > group_path_count_)
|
||||||
prune();
|
prune();
|
||||||
else
|
else
|
||||||
sort();
|
sort();
|
||||||
|
|
@ -216,8 +217,8 @@ PathGroups::isGroupPathName(const char *group_name)
|
||||||
|| stringEq(group_name, unconstrained_group_name_);
|
|| stringEq(group_name, unconstrained_group_name_);
|
||||||
}
|
}
|
||||||
|
|
||||||
PathGroups::PathGroups(int group_count,
|
PathGroups::PathGroups(int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
float slack_min,
|
float slack_min,
|
||||||
float slack_max,
|
float slack_max,
|
||||||
|
|
@ -231,23 +232,25 @@ PathGroups::PathGroups(int group_count,
|
||||||
bool unconstrained,
|
bool unconstrained,
|
||||||
const StaState *sta) :
|
const StaState *sta) :
|
||||||
StaState(sta),
|
StaState(sta),
|
||||||
group_count_(group_count),
|
group_path_count_(group_path_count),
|
||||||
endpoint_count_(endpoint_count),
|
endpoint_path_count_(endpoint_path_count),
|
||||||
unique_pins_(unique_pins),
|
unique_pins_(unique_pins),
|
||||||
slack_min_(slack_min),
|
slack_min_(slack_min),
|
||||||
slack_max_(slack_max)
|
slack_max_(slack_max)
|
||||||
{
|
{
|
||||||
makeGroups(group_count, endpoint_count, unique_pins, slack_min, slack_max, group_names,
|
makeGroups(group_path_count, endpoint_path_count, unique_pins,
|
||||||
|
slack_min, slack_max, group_names,
|
||||||
setup, recovery, clk_gating_setup, unconstrained,
|
setup, recovery, clk_gating_setup, unconstrained,
|
||||||
MinMax::max());
|
MinMax::max());
|
||||||
makeGroups(group_count, endpoint_count, unique_pins, slack_min, slack_max, group_names,
|
makeGroups(group_path_count, endpoint_path_count, unique_pins,
|
||||||
|
slack_min, slack_max, group_names,
|
||||||
hold, removal, clk_gating_hold, unconstrained,
|
hold, removal, clk_gating_hold, unconstrained,
|
||||||
MinMax::min());
|
MinMax::min());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PathGroups::makeGroups(int group_count,
|
PathGroups::makeGroups(int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
float slack_min,
|
float slack_min,
|
||||||
float slack_max,
|
float slack_max,
|
||||||
|
|
@ -262,8 +265,10 @@ PathGroups::makeGroups(int group_count,
|
||||||
if (setup_hold) {
|
if (setup_hold) {
|
||||||
for (const auto [name, group] : sdc_->groupPaths()) {
|
for (const auto [name, group] : sdc_->groupPaths()) {
|
||||||
if (reportGroup(name, group_names)) {
|
if (reportGroup(name, group_names)) {
|
||||||
PathGroup *group = PathGroup::makePathGroupSlack(name, group_count,
|
PathGroup *group = PathGroup::makePathGroupSlack(name,
|
||||||
endpoint_count, unique_pins,
|
group_path_count,
|
||||||
|
endpoint_path_count,
|
||||||
|
unique_pins,
|
||||||
slack_min, slack_max,
|
slack_min, slack_max,
|
||||||
this);
|
this);
|
||||||
named_map_[mm_index][name] = group;
|
named_map_[mm_index][name] = group;
|
||||||
|
|
@ -273,8 +278,10 @@ PathGroups::makeGroups(int group_count,
|
||||||
for (auto clk : sdc_->clks()) {
|
for (auto clk : sdc_->clks()) {
|
||||||
const char *clk_name = clk->name();
|
const char *clk_name = clk->name();
|
||||||
if (reportGroup(clk_name, group_names)) {
|
if (reportGroup(clk_name, group_names)) {
|
||||||
PathGroup *group = PathGroup::makePathGroupSlack(clk_name, group_count,
|
PathGroup *group = PathGroup::makePathGroupSlack(clk_name,
|
||||||
endpoint_count, unique_pins,
|
group_path_count,
|
||||||
|
endpoint_path_count,
|
||||||
|
unique_pins,
|
||||||
slack_min, slack_max,
|
slack_min, slack_max,
|
||||||
this);
|
this);
|
||||||
clk_map_[mm_index][clk] = group;
|
clk_map_[mm_index][clk] = group;
|
||||||
|
|
@ -285,7 +292,8 @@ PathGroups::makeGroups(int group_count,
|
||||||
if (setup_hold
|
if (setup_hold
|
||||||
&& reportGroup(path_delay_group_name_, group_names))
|
&& reportGroup(path_delay_group_name_, group_names))
|
||||||
path_delay_[mm_index] = PathGroup::makePathGroupSlack(path_delay_group_name_,
|
path_delay_[mm_index] = PathGroup::makePathGroupSlack(path_delay_group_name_,
|
||||||
group_count, endpoint_count,
|
group_path_count,
|
||||||
|
endpoint_path_count,
|
||||||
unique_pins,
|
unique_pins,
|
||||||
slack_min, slack_max,
|
slack_min, slack_max,
|
||||||
this);
|
this);
|
||||||
|
|
@ -295,7 +303,8 @@ PathGroups::makeGroups(int group_count,
|
||||||
if (gated_clk
|
if (gated_clk
|
||||||
&& reportGroup(gated_clk_group_name_, group_names))
|
&& reportGroup(gated_clk_group_name_, group_names))
|
||||||
gated_clk_[mm_index] = PathGroup::makePathGroupSlack(gated_clk_group_name_,
|
gated_clk_[mm_index] = PathGroup::makePathGroupSlack(gated_clk_group_name_,
|
||||||
group_count, endpoint_count,
|
group_path_count,
|
||||||
|
endpoint_path_count,
|
||||||
unique_pins,
|
unique_pins,
|
||||||
slack_min, slack_max,
|
slack_min, slack_max,
|
||||||
this);
|
this);
|
||||||
|
|
@ -305,7 +314,8 @@ PathGroups::makeGroups(int group_count,
|
||||||
if (async
|
if (async
|
||||||
&& reportGroup(async_group_name_, group_names))
|
&& reportGroup(async_group_name_, group_names))
|
||||||
async_[mm_index] = PathGroup::makePathGroupSlack(async_group_name_,
|
async_[mm_index] = PathGroup::makePathGroupSlack(async_group_name_,
|
||||||
group_count, endpoint_count,
|
group_path_count,
|
||||||
|
endpoint_path_count,
|
||||||
unique_pins,
|
unique_pins,
|
||||||
slack_min, slack_max,
|
slack_min, slack_max,
|
||||||
this);
|
this);
|
||||||
|
|
@ -316,8 +326,8 @@ PathGroups::makeGroups(int group_count,
|
||||||
&& reportGroup(unconstrained_group_name_, group_names))
|
&& reportGroup(unconstrained_group_name_, group_names))
|
||||||
unconstrained_[mm_index] =
|
unconstrained_[mm_index] =
|
||||||
PathGroup::makePathGroupArrival(unconstrained_group_name_,
|
PathGroup::makePathGroupArrival(unconstrained_group_name_,
|
||||||
group_count, endpoint_count, unique_pins,
|
group_path_count, endpoint_path_count,
|
||||||
min_max, this);
|
unique_pins, min_max, this);
|
||||||
else
|
else
|
||||||
unconstrained_[mm_index] = nullptr;
|
unconstrained_[mm_index] = nullptr;
|
||||||
}
|
}
|
||||||
|
|
@ -489,15 +499,15 @@ PathGroups::makePathEnds(ExceptionTo *to,
|
||||||
bool sort_by_slack)
|
bool sort_by_slack)
|
||||||
{
|
{
|
||||||
Stats stats(debug_, report_);
|
Stats stats(debug_, report_);
|
||||||
makeGroupPathEnds(to, group_count_, endpoint_count_, unique_pins_,
|
makeGroupPathEnds(to, group_path_count_, endpoint_path_count_, unique_pins_,
|
||||||
corner, min_max);
|
corner, min_max);
|
||||||
|
|
||||||
PathEndSeq path_ends;
|
PathEndSeq path_ends;
|
||||||
pushGroupPathEnds(path_ends);
|
pushGroupPathEnds(path_ends);
|
||||||
if (sort_by_slack) {
|
if (sort_by_slack) {
|
||||||
sort(path_ends, PathEndLess(this));
|
sort(path_ends, PathEndLess(this));
|
||||||
if (static_cast<int>(path_ends.size()) > group_count_)
|
if (static_cast<int>(path_ends.size()) > group_path_count_)
|
||||||
path_ends.resize(group_count_);
|
path_ends.resize(group_path_count_);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unconstrained_paths
|
if (unconstrained_paths
|
||||||
|
|
@ -595,7 +605,7 @@ MakePathEnds1::vertexEnd(Vertex *)
|
||||||
class MakePathEndsAll : public PathEndVisitor
|
class MakePathEndsAll : public PathEndVisitor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MakePathEndsAll(int endpoint_count,
|
MakePathEndsAll(int endpoint_path_count,
|
||||||
PathGroups *path_groups);
|
PathGroups *path_groups);
|
||||||
MakePathEndsAll(const MakePathEndsAll&) = default;
|
MakePathEndsAll(const MakePathEndsAll&) = default;
|
||||||
virtual ~MakePathEndsAll();
|
virtual ~MakePathEndsAll();
|
||||||
|
|
@ -607,7 +617,7 @@ private:
|
||||||
void visitPathEnd(PathEnd *path_end,
|
void visitPathEnd(PathEnd *path_end,
|
||||||
PathGroup *group);
|
PathGroup *group);
|
||||||
|
|
||||||
int endpoint_count_;
|
int endpoint_path_count_;
|
||||||
PathGroups *path_groups_;
|
PathGroups *path_groups_;
|
||||||
const StaState *sta_;
|
const StaState *sta_;
|
||||||
PathGroupEndsMap ends_;
|
PathGroupEndsMap ends_;
|
||||||
|
|
@ -615,9 +625,9 @@ private:
|
||||||
PathEndNoCrprLess path_no_crpr_cmp_;
|
PathEndNoCrprLess path_no_crpr_cmp_;
|
||||||
};
|
};
|
||||||
|
|
||||||
MakePathEndsAll::MakePathEndsAll(int endpoint_count,
|
MakePathEndsAll::MakePathEndsAll(int endpoint_path_count,
|
||||||
PathGroups *path_groups) :
|
PathGroups *path_groups) :
|
||||||
endpoint_count_(endpoint_count),
|
endpoint_path_count_(endpoint_path_count),
|
||||||
path_groups_(path_groups),
|
path_groups_(path_groups),
|
||||||
sta_(path_groups),
|
sta_(path_groups),
|
||||||
slack_cmp_(path_groups),
|
slack_cmp_(path_groups),
|
||||||
|
|
@ -679,7 +689,7 @@ MakePathEndsAll::vertexEnd(Vertex *)
|
||||||
PathEndSeq::Iterator end_iter(ends);
|
PathEndSeq::Iterator end_iter(ends);
|
||||||
int n = 0;
|
int n = 0;
|
||||||
while (end_iter.hasNext()
|
while (end_iter.hasNext()
|
||||||
&& n < endpoint_count_) {
|
&& n < endpoint_path_count_) {
|
||||||
PathEnd *path_end = end_iter.next();
|
PathEnd *path_end = end_iter.next();
|
||||||
// Only save the worst path end for each crpr tag.
|
// Only save the worst path end for each crpr tag.
|
||||||
// PathEnum will peel the others.
|
// PathEnum will peel the others.
|
||||||
|
|
@ -719,18 +729,18 @@ MakePathEndsAll::vertexEnd(Vertex *)
|
||||||
|
|
||||||
void
|
void
|
||||||
PathGroups::makeGroupPathEnds(ExceptionTo *to,
|
PathGroups::makeGroupPathEnds(ExceptionTo *to,
|
||||||
int group_count,
|
int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
const Corner *corner,
|
const Corner *corner,
|
||||||
const MinMaxAll *min_max)
|
const MinMaxAll *min_max)
|
||||||
{
|
{
|
||||||
if (endpoint_count == 1) {
|
if (endpoint_path_count == 1) {
|
||||||
MakePathEnds1 make_path_ends(this);
|
MakePathEnds1 make_path_ends(this);
|
||||||
makeGroupPathEnds(to, corner, min_max, &make_path_ends);
|
makeGroupPathEnds(to, corner, min_max, &make_path_ends);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
MakePathEndsAll make_path_ends(endpoint_count, this);
|
MakePathEndsAll make_path_ends(endpoint_path_count, this);
|
||||||
makeGroupPathEnds(to, corner, min_max, &make_path_ends);
|
makeGroupPathEnds(to, corner, min_max, &make_path_ends);
|
||||||
|
|
||||||
for (auto path_min_max : MinMax::range()) {
|
for (auto path_min_max : MinMax::range()) {
|
||||||
|
|
@ -739,41 +749,42 @@ PathGroups::makeGroupPathEnds(ExceptionTo *to,
|
||||||
const char *name = name_group.first;
|
const char *name = name_group.first;
|
||||||
PathGroup *group = findPathGroup(name, path_min_max);
|
PathGroup *group = findPathGroup(name, path_min_max);
|
||||||
if (group)
|
if (group)
|
||||||
enumPathEnds(group, group_count, endpoint_count, unique_pins, true);
|
enumPathEnds(group, group_path_count, endpoint_path_count, unique_pins, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto clk : sdc_->clks()) {
|
for (auto clk : sdc_->clks()) {
|
||||||
PathGroup *group = findPathGroup(clk, path_min_max);
|
PathGroup *group = findPathGroup(clk, path_min_max);
|
||||||
if (group)
|
if (group)
|
||||||
enumPathEnds(group, group_count, endpoint_count, unique_pins, true);
|
enumPathEnds(group, group_path_count, endpoint_path_count, unique_pins, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
PathGroup *group = unconstrained_[mm_index];
|
PathGroup *group = unconstrained_[mm_index];
|
||||||
if (group)
|
if (group)
|
||||||
enumPathEnds(group, group_count, endpoint_count, unique_pins, false);
|
enumPathEnds(group, group_path_count, endpoint_path_count, unique_pins, false);
|
||||||
group = path_delay_[mm_index];
|
group = path_delay_[mm_index];
|
||||||
if (group)
|
if (group)
|
||||||
enumPathEnds(group, group_count, endpoint_count, unique_pins, true);
|
enumPathEnds(group, group_path_count, endpoint_path_count, unique_pins, true);
|
||||||
group = gated_clk_[mm_index];
|
group = gated_clk_[mm_index];
|
||||||
if (group)
|
if (group)
|
||||||
enumPathEnds(group, group_count, endpoint_count, unique_pins, true);
|
enumPathEnds(group, group_path_count, endpoint_path_count, unique_pins, true);
|
||||||
group = async_[mm_index];
|
group = async_[mm_index];
|
||||||
if (group)
|
if (group)
|
||||||
enumPathEnds(group, group_count, endpoint_count, unique_pins, true);
|
enumPathEnds(group, group_path_count, endpoint_path_count, unique_pins, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PathGroups::enumPathEnds(PathGroup *group,
|
PathGroups::enumPathEnds(PathGroup *group,
|
||||||
int group_count,
|
int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
bool cmp_slack)
|
bool cmp_slack)
|
||||||
{
|
{
|
||||||
// Insert the worst max_path path ends in the group into a path
|
// Insert the worst max_path path ends in the group into a path
|
||||||
// enumerator.
|
// enumerator.
|
||||||
PathEnum path_enum(group_count, endpoint_count, unique_pins, cmp_slack, this);
|
PathEnum path_enum(group_path_count, endpoint_path_count,
|
||||||
|
unique_pins, cmp_slack, this);
|
||||||
PathGroupIterator *end_iter = group->iterator();
|
PathGroupIterator *end_iter = group->iterator();
|
||||||
while (end_iter->hasNext()) {
|
while (end_iter->hasNext()) {
|
||||||
PathEnd *end = end_iter->next();
|
PathEnd *end = end_iter->next();
|
||||||
|
|
@ -783,8 +794,8 @@ PathGroups::enumPathEnds(PathGroup *group,
|
||||||
delete end_iter;
|
delete end_iter;
|
||||||
group->clear();
|
group->clear();
|
||||||
|
|
||||||
// Parallel path enumeratation to find the endpoint_count/max path ends.
|
// Parallel path enumeratation to find the endpoint_path_count/max path ends.
|
||||||
for (int n = 0; path_enum.hasNext() && n < group_count; n++) {
|
for (int n = 0; path_enum.hasNext() && n < group_path_count; n++) {
|
||||||
PathEnd *end = path_enum.next();
|
PathEnd *end = path_enum.next();
|
||||||
group->insert(end);
|
group->insert(end);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -442,8 +442,8 @@ Search::findPathEnds(ExceptionFrom *from,
|
||||||
bool unconstrained,
|
bool unconstrained,
|
||||||
const Corner *corner,
|
const Corner *corner,
|
||||||
const MinMaxAll *min_max,
|
const MinMaxAll *min_max,
|
||||||
int group_count,
|
int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
float slack_min,
|
float slack_min,
|
||||||
float slack_max,
|
float slack_max,
|
||||||
|
|
@ -461,7 +461,7 @@ Search::findPathEnds(ExceptionFrom *from,
|
||||||
recovery = removal = false;
|
recovery = removal = false;
|
||||||
if (!sdc_->gatedClkChecksEnabled())
|
if (!sdc_->gatedClkChecksEnabled())
|
||||||
clk_gating_setup = clk_gating_hold = false;
|
clk_gating_setup = clk_gating_hold = false;
|
||||||
makePathGroups(group_count, endpoint_count, unique_pins,
|
makePathGroups(group_path_count, endpoint_path_count, unique_pins,
|
||||||
slack_min, slack_max,
|
slack_min, slack_max,
|
||||||
group_names, setup, hold,
|
group_names, setup, hold,
|
||||||
recovery, removal,
|
recovery, removal,
|
||||||
|
|
@ -3986,8 +3986,8 @@ Search::wnsSlack(Vertex *vertex,
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void
|
void
|
||||||
Search::makePathGroups(int group_count,
|
Search::makePathGroups(int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
float slack_min,
|
float slack_min,
|
||||||
float slack_max,
|
float slack_max,
|
||||||
|
|
@ -3999,7 +3999,8 @@ Search::makePathGroups(int group_count,
|
||||||
bool clk_gating_setup,
|
bool clk_gating_setup,
|
||||||
bool clk_gating_hold)
|
bool clk_gating_hold)
|
||||||
{
|
{
|
||||||
path_groups_ = new PathGroups(group_count, endpoint_count, unique_pins,
|
path_groups_ = new PathGroups(group_path_count, endpoint_path_count,
|
||||||
|
unique_pins,
|
||||||
slack_min, slack_max,
|
slack_min, slack_max,
|
||||||
group_names,
|
group_names,
|
||||||
setup, hold,
|
setup, hold,
|
||||||
|
|
|
||||||
|
|
@ -143,7 +143,7 @@ private:
|
||||||
|
|
||||||
%inline %{
|
%inline %{
|
||||||
|
|
||||||
int group_count_max = PathGroup::group_count_max;
|
int group_path_count_max = PathGroup::group_path_count_max;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
@ -217,7 +217,7 @@ endpoints()
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
endpoint_count()
|
endpoint_path_count()
|
||||||
{
|
{
|
||||||
return Sta::sta()->endpointPins().size();
|
return Sta::sta()->endpointPins().size();
|
||||||
}
|
}
|
||||||
|
|
@ -318,7 +318,7 @@ vertex_worst_slack_path(Vertex *vertex,
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
tag_group_count()
|
tag_group_path_count()
|
||||||
{
|
{
|
||||||
return Sta::sta()->tagGroupCount();
|
return Sta::sta()->tagGroupCount();
|
||||||
}
|
}
|
||||||
|
|
@ -429,8 +429,8 @@ find_path_ends(ExceptionFrom *from,
|
||||||
bool unconstrained,
|
bool unconstrained,
|
||||||
Corner *corner,
|
Corner *corner,
|
||||||
const MinMaxAll *delay_min_max,
|
const MinMaxAll *delay_min_max,
|
||||||
int group_count,
|
int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
float slack_min,
|
float slack_min,
|
||||||
float slack_max,
|
float slack_max,
|
||||||
|
|
@ -447,7 +447,8 @@ find_path_ends(ExceptionFrom *from,
|
||||||
Sta *sta = Sta::sta();
|
Sta *sta = Sta::sta();
|
||||||
PathEndSeq ends = sta->findPathEnds(from, thrus, to, unconstrained,
|
PathEndSeq ends = sta->findPathEnds(from, thrus, to, unconstrained,
|
||||||
corner, delay_min_max,
|
corner, delay_min_max,
|
||||||
group_count, endpoint_count, unique_pins,
|
group_path_count, endpoint_path_count,
|
||||||
|
unique_pins,
|
||||||
slack_min, slack_max,
|
slack_min, slack_max,
|
||||||
sort_by_slack,
|
sort_by_slack,
|
||||||
groups->size() ? groups : nullptr,
|
groups->size() ? groups : nullptr,
|
||||||
|
|
|
||||||
|
|
@ -91,8 +91,8 @@ define_cmd_args "find_timing_paths" \
|
||||||
[-path_delay min|min_rise|min_fall|max|max_rise|max_fall|min_max]\
|
[-path_delay min|min_rise|min_fall|max|max_rise|max_fall|min_max]\
|
||||||
[-unconstrained]
|
[-unconstrained]
|
||||||
[-corner corner]\
|
[-corner corner]\
|
||||||
[-group_count path_count] \
|
[-group_path_count path_count] \
|
||||||
[-endpoint_count path_count]\
|
[-endpoint_path_count path_count]\
|
||||||
[-unique_paths_to_endpoint]\
|
[-unique_paths_to_endpoint]\
|
||||||
[-slack_max slack_max]\
|
[-slack_max slack_max]\
|
||||||
[-slack_min slack_min]\
|
[-slack_min slack_min]\
|
||||||
|
|
@ -111,6 +111,7 @@ proc find_timing_paths_cmd { cmd args_var } {
|
||||||
parse_key_args $cmd args \
|
parse_key_args $cmd args \
|
||||||
keys {-from -rise_from -fall_from -to -rise_to -fall_to \
|
keys {-from -rise_from -fall_from -to -rise_to -fall_to \
|
||||||
-path_delay -corner -group_count -endpoint_count \
|
-path_delay -corner -group_count -endpoint_count \
|
||||||
|
-group_path_count -endpoint_path_count \
|
||||||
-slack_max -slack_min -path_group} \
|
-slack_max -slack_min -path_group} \
|
||||||
flags {-unconstrained -sort_by_slack -unique_paths_to_endpoint} 0
|
flags {-unconstrained -sort_by_slack -unique_paths_to_endpoint} 0
|
||||||
|
|
||||||
|
|
@ -158,21 +159,31 @@ proc find_timing_paths_cmd { cmd args_var } {
|
||||||
|
|
||||||
set corner [parse_corner_or_all keys]
|
set corner [parse_corner_or_all keys]
|
||||||
|
|
||||||
set endpoint_count 1
|
set endpoint_path_count 1
|
||||||
if [info exists keys(-endpoint_count)] {
|
if { [info exists keys(-endpoint_count)] } {
|
||||||
set endpoint_count $keys(-endpoint_count)
|
# deprecated 2024-11-22
|
||||||
if { $endpoint_count < 1 } {
|
sta_warn 502 "$cmd -endpoint_count is deprecated. Use -endpoint_path_count instead."
|
||||||
sta_error 512 "-endpoint_count must be a positive integer."
|
set endpoint_path_count $keys(-endpoint_count)
|
||||||
}
|
}
|
||||||
|
if [info exists keys(-endpoint_path_count)] {
|
||||||
|
set endpoint_path_count $keys(-endpoint_path_count)
|
||||||
|
}
|
||||||
|
if { $endpoint_path_count < 1 } {
|
||||||
|
sta_error 512 "-endpoint_path_count must be a positive integer."
|
||||||
}
|
}
|
||||||
|
|
||||||
set group_count $endpoint_count
|
set group_path_count $endpoint_path_count
|
||||||
if [info exists keys(-group_count)] {
|
if { [info exists keys(-group_count)] } {
|
||||||
set group_count $keys(-group_count)
|
# deprecated 2024-11-22
|
||||||
check_positive_integer "-group_count" $group_count
|
sta_warn 503 "$cmd -group_count is deprecated. Use -group_path_count instead."
|
||||||
if { $group_count < 1 } {
|
set group_path_count $keys(-group_count)
|
||||||
sta_error 513 "-group_count must be >= 1."
|
|
||||||
}
|
}
|
||||||
|
if [info exists keys(-group_path_count)] {
|
||||||
|
set group_path_count $keys(-group_path_count)
|
||||||
|
}
|
||||||
|
check_positive_integer "-group_path_count" $group_path_count
|
||||||
|
if { $group_path_count < 1 } {
|
||||||
|
sta_error 513 "-group_path_count must be >= 1."
|
||||||
}
|
}
|
||||||
|
|
||||||
set unique_pins [info exists flags(-unique_paths_to_endpoint)]
|
set unique_pins [info exists flags(-unique_paths_to_endpoint)]
|
||||||
|
|
@ -210,7 +221,7 @@ proc find_timing_paths_cmd { cmd args_var } {
|
||||||
|
|
||||||
set path_ends [find_path_ends $from $thrus $to $unconstrained \
|
set path_ends [find_path_ends $from $thrus $to $unconstrained \
|
||||||
$corner $min_max \
|
$corner $min_max \
|
||||||
$group_count $endpoint_count $unique_pins \
|
$group_path_count $endpoint_path_count $unique_pins \
|
||||||
$slack_min $slack_max \
|
$slack_min $slack_max \
|
||||||
$sort_by_slack $groups \
|
$sort_by_slack $groups \
|
||||||
1 1 1 1 1 1]
|
1 1 1 1 1 1]
|
||||||
|
|
@ -394,8 +405,8 @@ define_cmd_args "report_checks" \
|
||||||
[-unconstrained]\
|
[-unconstrained]\
|
||||||
[-path_delay min|min_rise|min_fall|max|max_rise|max_fall|min_max]\
|
[-path_delay min|min_rise|min_fall|max|max_rise|max_fall|min_max]\
|
||||||
[-corner corner]\
|
[-corner corner]\
|
||||||
[-group_count path_count] \
|
[-group_path_count path_count] \
|
||||||
[-endpoint_count path_count]\
|
[-endpoint_path_count path_count]\
|
||||||
[-unique_paths_to_endpoint]\
|
[-unique_paths_to_endpoint]\
|
||||||
[-slack_max slack_max]\
|
[-slack_max slack_max]\
|
||||||
[-slack_min slack_min]\
|
[-slack_min slack_min]\
|
||||||
|
|
@ -551,16 +562,16 @@ proc_redirect report_check_types {
|
||||||
set path_min_max "min"
|
set path_min_max "min"
|
||||||
}
|
}
|
||||||
if { $violators } {
|
if { $violators } {
|
||||||
set group_count $sta::group_count_max
|
set group_path_count $sta::group_path_count_max
|
||||||
set slack_min [expr -$sta::float_inf]
|
set slack_min [expr -$sta::float_inf]
|
||||||
set slack_max 0.0
|
set slack_max 0.0
|
||||||
} else {
|
} else {
|
||||||
set group_count 1
|
set group_path_count 1
|
||||||
set slack_min [expr -$sta::float_inf]
|
set slack_min [expr -$sta::float_inf]
|
||||||
set slack_max $sta::float_inf
|
set slack_max $sta::float_inf
|
||||||
}
|
}
|
||||||
set path_ends [find_path_ends "NULL" {} "NULL" 0 \
|
set path_ends [find_path_ends "NULL" {} "NULL" 0 \
|
||||||
$corner $path_min_max $group_count 1 0 \
|
$corner $path_min_max $group_path_count 1 0 \
|
||||||
$slack_min $slack_max \
|
$slack_min $slack_max \
|
||||||
0 {} \
|
0 {} \
|
||||||
$setup $hold \
|
$setup $hold \
|
||||||
|
|
|
||||||
|
|
@ -2422,8 +2422,8 @@ Sta::findPathEnds(ExceptionFrom *from,
|
||||||
bool unconstrained,
|
bool unconstrained,
|
||||||
const Corner *corner,
|
const Corner *corner,
|
||||||
const MinMaxAll *min_max,
|
const MinMaxAll *min_max,
|
||||||
int group_count,
|
int group_path_count,
|
||||||
int endpoint_count,
|
int endpoint_path_count,
|
||||||
bool unique_pins,
|
bool unique_pins,
|
||||||
float slack_min,
|
float slack_min,
|
||||||
float slack_max,
|
float slack_max,
|
||||||
|
|
@ -2438,7 +2438,7 @@ Sta::findPathEnds(ExceptionFrom *from,
|
||||||
{
|
{
|
||||||
searchPreamble();
|
searchPreamble();
|
||||||
return search_->findPathEnds(from, thrus, to, unconstrained,
|
return search_->findPathEnds(from, thrus, to, unconstrained,
|
||||||
corner, min_max, group_count, endpoint_count,
|
corner, min_max, group_path_count, endpoint_path_count,
|
||||||
unique_pins, slack_min, slack_max,
|
unique_pins, slack_min, slack_max,
|
||||||
sort_by_slack, group_names,
|
sort_by_slack, group_names,
|
||||||
setup, hold,
|
setup, hold,
|
||||||
|
|
@ -2678,7 +2678,7 @@ Sta::findGroupPathPins(const char *group_path_name)
|
||||||
nullptr, nullptr, nullptr, false,
|
nullptr, nullptr, nullptr, false,
|
||||||
// corner, min_max,
|
// corner, min_max,
|
||||||
nullptr, MinMaxAll::max(),
|
nullptr, MinMaxAll::max(),
|
||||||
// group_count, endpoint_count, unique_pins
|
// group_path_count, endpoint_path_count, unique_pins
|
||||||
1, 1, false,
|
1, 1, false,
|
||||||
-INF, INF, // slack_min, slack_max,
|
-INF, INF, // slack_min, slack_max,
|
||||||
false, // sort_by_slack
|
false, // sort_by_slack
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue