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