From 65feb976a595eeeb151b2f46f506deeb6e619af9 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sat, 14 Aug 2021 14:54:49 -0700 Subject: [PATCH] create_clock waveform checks Signed-off-by: James Cherry --- messages.txt | 232 ++++++++++++++++++++++++++------------------------- tcl/Sdc.tcl | 9 +- 2 files changed, 121 insertions(+), 120 deletions(-) diff --git a/messages.txt b/messages.txt index 0ab8b008..f97771e0 100644 --- a/messages.txt +++ b/messages.txt @@ -1,12 +1,12 @@ 0001 DmpCeff.cc:1589 cell %s delay model not supported on SPF parasitics by DMP delay calculator -0008 ConcreteNetwork.cc:1867 cell type %s can not be linked. +0008 ConcreteNetwork.cc:1869 cell type %s can not be linked. 0009 Sdc.cc:2465 No common period was found between clocks %s and %s. 0010 Genclks.cc:289 no master clock found for generated clock %s. 0011 Genclks.cc:331 generated clock %s is in the fanout of multiple clocks. 0013 Genclks.cc:990 generated clock %s source pin %s missing paths from master clock %s. -0015 Sim.cc:868 propagated logic value %c differs from constraint value of %c on pin %s. -0016 Sta.cc:2010 '%s' is not a valid startoint. -0017 Sta.cc:2085 '%s' is not a valid endpoint. +0015 Sim.cc:878 propagated logic value %c differs from constraint value of %c on pin %s. +0016 Sta.cc:2013 '%s' is not a valid startoint. +0017 Sta.cc:2088 '%s' is not a valid endpoint. 0021 SpefParse.yy:805 %d is not positive. 0022 SpefParse.yy:814 %.4f is not positive. 0023 SpefParse.yy:820 %.4f is not positive. @@ -16,8 +16,8 @@ 0027 WritePathSpice.cc:1016 no register/latch found for path from %s to %s, 0028 WritePathSpice.cc:1383 The following subkcts are missing from %s 0029 WritePathSpice.cc:1441 subckt %s port %s has no corresponding liberty port, pg_port and is not power or ground. -0160 Sta.cc:2007 '%s' is not a valid startpoint. -0161 Sta.cc:2082 '%s' is not a valid endpoint. +0160 Sta.cc:2010 '%s' is not a valid startpoint. +0161 Sta.cc:2085 '%s' is not a valid endpoint. 0162 VerilogReader.cc:1744 %s is not a verilog module. 0163 VerilogReader.cc:1749 %s is not a verilog module. 0179 SpefReader.cc:723 %s. @@ -31,9 +31,9 @@ 0211 SdcNetwork.cc:1026 inst path string lenth estimate busted 0212 SdcNetwork.cc:1098 inst path string lenth estimate exceeded 0213 Sdc.cc:4181 group path name and is_default are mutually exclusive. -0214 WriteSdc.cc:1332 unknown exception type -0215 WriteSdc.cc:1903 illegal set_logic value -0216 WriteSdc.cc:1947 invalid set_case_analysis value +0214 WriteSdc.cc:1339 unknown exception type +0215 WriteSdc.cc:1910 illegal set_logic value +0216 WriteSdc.cc:1954 invalid set_case_analysis value 0228 Graph.cc:784 arc_delay_annotated array bounds exceeded 0251 PathEnumed.cc:126 enumerated path required time 0252 PathEnumed.cc:135 enumerated path required time @@ -48,7 +48,7 @@ 0261 Search.cc:2895 max tag index exceeded 0262 Search.cc:3579 unexpected filter path 0263 Search.cc:3747 tns incr existing vertex -0264 Sta.cc:3951 corresponding timing arc set not found in equiv cells +0264 Sta.cc:3994 corresponding timing arc set not found in equiv cells 0265 TagGroup.cc:337 tag group missing tag 0300 Util.tcl:218 no commands match '$pattern'. 0301 Power.tcl:207 activity should be 0.0 to 1.0 or 2.0 @@ -60,7 +60,7 @@ 0314 Cmds.tcl:850 $arg_name must be a single net. 0315 Cmds.tcl:856 $arg_name '$object_type' is not a net. 0316 Cmds.tcl:861 $arg_name '$arg' not found. -0318 Search.tcl:1025 unknown path group '$name'. +0318 Search.tcl:1043 unknown path group '$name'. 0319 Sdc.tcl:277 $unit scale [format %.0e $scale] does not match library scale [format %.0e $unit_scale]. 0320 Sdc.tcl:478 current_design for other than top cell not supported. 0321 Sdc.tcl:515 patterns argument not supported with -of_objects. @@ -80,39 +80,40 @@ 0335 Sdc.tcl:937 pin '$pattern' not found. 0336 Sdc.tcl:994 patterns argument not supported with -of_objects. 0337 Sdc.tcl:1008 port '$pattern' not found. -0338 Sdc.tcl:1109 adjusting non-increasing clock -waveform edge times. -0339 Sdc.tcl:1113 -waveform time greater than two periods. -0341 Sdc.tcl:1471 extra positional argument $arg. -0342 Sdc.tcl:1504 -clock ignored for clock objects. -0343 Sdc.tcl:1550 set_sense -type data not supported. -0344 Sdc.tcl:1565 set_clock_sense is deprecated as of SDC 2.1. Use set_sense -type clock. -0345 Sdc.tcl:1577 -pulse argument not supported. -0346 Sdc.tcl:1586 -positive, -negative, -stop_propagation and -pulse are mutually exclusive. -0347 Sdc.tcl:1599 hierarchical pin '[get_full_name $pin]' not supported. -0348 Sdc.tcl:1801 -from/-to keywords ignored for lib_pin, port and pin arguments. -0349 Sdc.tcl:1469 unknown keyword argument $arg. -0350 Sdc.tcl:1949 -from, -through or -to required. -0351 Sdc.tcl:2028 -source_latency_included ignored with -reference_pin. -0352 Sdc.tcl:2031 -network_latency_included ignored with -reference_pin. -0353 Sdc.tcl:2050 $cmd not allowed on [pin_direction $pin] port '[get_full_name $pin]'. -0354 Sdc.tcl:2052 $cmd relative to a clock defined on the same port/pin not allowed. -0355 Sdc.tcl:2095 '$args' ignored. -0356 Sdc.tcl:2225 '$args' ignored. -0357 Sdc.tcl:2272 virtual clock [get_name $clk] can not be propagated. -0358 Sdc.tcl:2421 -multiply_by ignored. -0359 Sdc.tcl:2424 -dont_scale ignored. -0360 Sdc.tcl:2427 -no_design_rule ignored. -0361 Sdc.tcl:2468 -clock not supported. -0362 Sdc.tcl:2471 -clock_fall not supported. -0363 Sdc.tcl:2517 -pin_load not allowed for net objects. -0364 Sdc.tcl:2520 -wire_load not allowed for net objects. -0365 Sdc.tcl:2523 -rise/-fall not allowed for net objects. -0366 Sdc.tcl:2656 -data_path, -clock_path, -rise, -fall ignored for ports and designs. -0367 Sdc.tcl:2726 derating factor greater than 2.0. -0368 Sdc.tcl:2763 -cell_delay and -cell_check flags ignored for net objects. -0369 Sdc.tcl:2822 no valid objects specified for $key. -0370 Sdc.tcl:2855 no valid objects specified for $key -0371 Sdc.tcl:3016 set_wire_load_min_block_size not supported. +0338 Sdc.tcl:1109 non-increasing clock -waveform edge times. +0339 Sdc.tcl:1112 -waveform time greater than two periods. +0340 Sdc.tcl:1106 negative clock -waveform edge time. +0341 Sdc.tcl:1470 extra positional argument $arg. +0342 Sdc.tcl:1503 -clock ignored for clock objects. +0343 Sdc.tcl:1549 set_sense -type data not supported. +0344 Sdc.tcl:1564 set_clock_sense is deprecated as of SDC 2.1. Use set_sense -type clock. +0345 Sdc.tcl:1576 -pulse argument not supported. +0346 Sdc.tcl:1585 -positive, -negative, -stop_propagation and -pulse are mutually exclusive. +0347 Sdc.tcl:1598 hierarchical pin '[get_full_name $pin]' not supported. +0348 Sdc.tcl:1800 -from/-to keywords ignored for lib_pin, port and pin arguments. +0349 Sdc.tcl:1468 unknown keyword argument $arg. +0350 Sdc.tcl:1948 -from, -through or -to required. +0351 Sdc.tcl:2027 -source_latency_included ignored with -reference_pin. +0352 Sdc.tcl:2030 -network_latency_included ignored with -reference_pin. +0353 Sdc.tcl:2049 $cmd not allowed on [pin_direction $pin] port '[get_full_name $pin]'. +0354 Sdc.tcl:2051 $cmd relative to a clock defined on the same port/pin not allowed. +0355 Sdc.tcl:2094 '$args' ignored. +0356 Sdc.tcl:2224 '$args' ignored. +0357 Sdc.tcl:2271 virtual clock [get_name $clk] can not be propagated. +0358 Sdc.tcl:2420 -multiply_by ignored. +0359 Sdc.tcl:2423 -dont_scale ignored. +0360 Sdc.tcl:2426 -no_design_rule ignored. +0361 Sdc.tcl:2467 -clock not supported. +0362 Sdc.tcl:2470 -clock_fall not supported. +0363 Sdc.tcl:2516 -pin_load not allowed for net objects. +0364 Sdc.tcl:2519 -wire_load not allowed for net objects. +0365 Sdc.tcl:2522 -rise/-fall not allowed for net objects. +0366 Sdc.tcl:2655 -data_path, -clock_path, -rise, -fall ignored for ports and designs. +0367 Sdc.tcl:2725 derating factor greater than 2.0. +0368 Sdc.tcl:2762 -cell_delay and -cell_check flags ignored for net objects. +0369 Sdc.tcl:2821 no valid objects specified for $key. +0370 Sdc.tcl:2854 no valid objects specified for $key +0371 Sdc.tcl:3015 set_wire_load_min_block_size not supported. 0372 NetworkEdit.tcl:80 connect_pins is deprecated. Use connect_pin. 0400 Util.tcl:44 $cmd $key missing value. 0401 Util.tcl:61 $cmd $key missing value. @@ -147,8 +148,8 @@ 0430 Sdf.tcl:60 -cond_use min_max cannot be used with analysis type single. 0431 Sdf.tcl:108 $key must be sdf_min, sdf_typ, or sdf_max. 0432 Sdf.tcl:210 SDF -divider must be / or . -0433 Parasitics.tcl:46 path instance '$path' not found. -0434 Parasitics.tcl:63 -reduce_to must be pi_elmore or pi_pole_residue2. +0433 Parasitics.tcl:47 path instance '$path' not found. +0434 Parasitics.tcl:65 -reduce_to must be pi_elmore or pi_pole_residue2. 0435 DelayCalc.tcl:119 delay calculator $alg not found. 0436 Variables.tcl:45 sta_report_default_digits must be a positive integer. 0437 Variables.tcl:70 sta_crpr_mode must be pin or transition. @@ -237,69 +238,69 @@ 0520 Sdc.tcl:1083 -name or port_pin_list must be specified. 0521 Sdc.tcl:1091 missing -period argument. 0522 Sdc.tcl:1097 -waveform edge_list must have an even number of edge times. -0523 Sdc.tcl:1154 empty ports/pins/nets argument. -0524 Sdc.tcl:1162 -add requires -name. -0525 Sdc.tcl:1167 name or port_pin_list must be specified. -0526 Sdc.tcl:1174 missing -source argument. -0527 Sdc.tcl:1191 -master_clock argument empty. -0528 Sdc.tcl:1194 -add requireds -master_clock. -0529 Sdc.tcl:1198 -multiply_by and -divide_by options are exclusive. -0530 Sdc.tcl:1202 -divide_by is not an integer greater than one. -0531 Sdc.tcl:1205 -combinational implies -divide_by 1. -0532 Sdc.tcl:1210 -multiply_by is not an integer greater than one. -0533 Sdc.tcl:1216 -duty_cycle is not a float between 0 and 100. -0534 Sdc.tcl:1222 -edges only supported for three edges. -0535 Sdc.tcl:1228 edges times are not monotonically increasing. -0536 Sdc.tcl:1237 -edge_shift length does not match -edges length. -0537 Sdc.tcl:1243 missing -multiply_by, -divide_by, -combinational or -edges argument. -0538 Sdc.tcl:1251 cannot specify -invert without -multiply_by, -divide_by or -combinational. -0539 Sdc.tcl:1257 -duty_cycle requires -multiply_by value. -0540 Sdc.tcl:1262 missing -pll_output argument. -0541 Sdc.tcl:1265 missing -pll_feedback argument. -0542 Sdc.tcl:1271 PLL output and feedback pins must be on the same instance. -0543 Sdc.tcl:1274 source pin must be on the same instance as the PLL output pin. -0544 Sdc.tcl:1277 PLL output must be one of the clock pins. -0545 Sdc.tcl:1315 group_path command failed. -0546 Sdc.tcl:1322 positional arguments not supported. -0547 Sdc.tcl:1326 -from, -through or -to required. -0548 Sdc.tcl:1332 -name and -default are mutually exclusive. -0549 Sdc.tcl:1334 -name or -default option is required. -0550 Sdc.tcl:1375 cannot specify both -high and -low. -0551 Sdc.tcl:1383 missing -setup or -hold argument. -0552 Sdc.tcl:1397 -high and -low only permitted for pins and instances. -0553 Sdc.tcl:1404 -high and -low only permitted for pins and instances. -0554 Sdc.tcl:1447 one of -logically_exclusive, -physically_exclusive or -asynchronous is required. -0555 Sdc.tcl:1450 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive. -0556 Sdc.tcl:1518 -source '[get_full_name $pin]' is not a clock pin. -0557 Sdc.tcl:1525 -early/-late is only allowed with -source. -0558 Sdc.tcl:1554 set_sense -type clock|data -0559 Sdc.tcl:1623 transition time can not be specified for virtual clocks. -0560 Sdc.tcl:1644 missing uncertainty value. -0561 Sdc.tcl:1686 -from/-to must be used together. -0562 Sdc.tcl:1706 -rise, -fall options not allowed for single clock uncertainty. -0563 Sdc.tcl:1747 missing -from, -rise_from or -fall_from argument. -0564 Sdc.tcl:1759 missing -to, -rise_to or -fall_to argument. -0565 Sdc.tcl:1831 -from/-to hierarchical instance not supported. -0566 Sdc.tcl:1863 pin '[get_full_name $inst]${hierarchy_separator}${port_name}' not found. -0567 Sdc.tcl:1904 pin '[get_name $cell]${hierarchy_separator}${port_name}' not found. -0568 Sdc.tcl:2089 missing delay argument. -0569 Sdc.tcl:2220 missing path multiplier argument. -0570 Sdc.tcl:2232 cannot use -start with -end. -0571 Sdc.tcl:2300 value must be 0, zero, 1, one, rise, rising, fall, or falling. -0572 Sdc.tcl:2358 cell '$lib_name:$cell_name' not found. -0573 Sdc.tcl:2364 '$cell_name' not found. -0574 Sdc.tcl:2368 missing -lib_cell argument. -0575 Sdc.tcl:2376 port '$to_port_name' not found. -0576 Sdc.tcl:2388 -pin argument required for cells with multiple outputs. -0577 Sdc.tcl:2403 port '$from_port_name' not found. -0578 Sdc.tcl:2610 port '[get_name $port]' is not an input. -0579 Sdc.tcl:2972 operating condition '$op_cond_name' not found. -0580 Sdc.tcl:2990 operating condition '$op_cond_name' not found. -0581 Sdc.tcl:3004 -analysis_type must be single, bc_wc or on_chip_variation. -0582 Sdc.tcl:3029 mode must be top, enclosed or segmented. -0583 Sdc.tcl:3044 no wire load model specified. -0584 Sdc.tcl:3105 wire load selection group '$selection_name' not found. -0585 Sdc.tcl:3233 no default operating conditions found. +0523 Sdc.tcl:1153 empty ports/pins/nets argument. +0524 Sdc.tcl:1161 -add requires -name. +0525 Sdc.tcl:1166 name or port_pin_list must be specified. +0526 Sdc.tcl:1173 missing -source argument. +0527 Sdc.tcl:1190 -master_clock argument empty. +0528 Sdc.tcl:1193 -add requireds -master_clock. +0529 Sdc.tcl:1197 -multiply_by and -divide_by options are exclusive. +0530 Sdc.tcl:1201 -divide_by is not an integer greater than one. +0531 Sdc.tcl:1204 -combinational implies -divide_by 1. +0532 Sdc.tcl:1209 -multiply_by is not an integer greater than one. +0533 Sdc.tcl:1215 -duty_cycle is not a float between 0 and 100. +0534 Sdc.tcl:1221 -edges only supported for three edges. +0535 Sdc.tcl:1227 edges times are not monotonically increasing. +0536 Sdc.tcl:1236 -edge_shift length does not match -edges length. +0537 Sdc.tcl:1242 missing -multiply_by, -divide_by, -combinational or -edges argument. +0538 Sdc.tcl:1250 cannot specify -invert without -multiply_by, -divide_by or -combinational. +0539 Sdc.tcl:1256 -duty_cycle requires -multiply_by value. +0540 Sdc.tcl:1261 missing -pll_output argument. +0541 Sdc.tcl:1264 missing -pll_feedback argument. +0542 Sdc.tcl:1270 PLL output and feedback pins must be on the same instance. +0543 Sdc.tcl:1273 source pin must be on the same instance as the PLL output pin. +0544 Sdc.tcl:1276 PLL output must be one of the clock pins. +0545 Sdc.tcl:1314 group_path command failed. +0546 Sdc.tcl:1321 positional arguments not supported. +0547 Sdc.tcl:1325 -from, -through or -to required. +0548 Sdc.tcl:1331 -name and -default are mutually exclusive. +0549 Sdc.tcl:1333 -name or -default option is required. +0550 Sdc.tcl:1374 cannot specify both -high and -low. +0551 Sdc.tcl:1382 missing -setup or -hold argument. +0552 Sdc.tcl:1396 -high and -low only permitted for pins and instances. +0553 Sdc.tcl:1403 -high and -low only permitted for pins and instances. +0554 Sdc.tcl:1446 one of -logically_exclusive, -physically_exclusive or -asynchronous is required. +0555 Sdc.tcl:1449 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive. +0556 Sdc.tcl:1517 -source '[get_full_name $pin]' is not a clock pin. +0557 Sdc.tcl:1524 -early/-late is only allowed with -source. +0558 Sdc.tcl:1553 set_sense -type clock|data +0559 Sdc.tcl:1622 transition time can not be specified for virtual clocks. +0560 Sdc.tcl:1643 missing uncertainty value. +0561 Sdc.tcl:1685 -from/-to must be used together. +0562 Sdc.tcl:1705 -rise, -fall options not allowed for single clock uncertainty. +0563 Sdc.tcl:1746 missing -from, -rise_from or -fall_from argument. +0564 Sdc.tcl:1758 missing -to, -rise_to or -fall_to argument. +0565 Sdc.tcl:1830 -from/-to hierarchical instance not supported. +0566 Sdc.tcl:1862 pin '[get_full_name $inst]${hierarchy_separator}${port_name}' not found. +0567 Sdc.tcl:1903 pin '[get_name $cell]${hierarchy_separator}${port_name}' not found. +0568 Sdc.tcl:2088 missing delay argument. +0569 Sdc.tcl:2219 missing path multiplier argument. +0570 Sdc.tcl:2231 cannot use -start with -end. +0571 Sdc.tcl:2299 value must be 0, zero, 1, one, rise, rising, fall, or falling. +0572 Sdc.tcl:2357 cell '$lib_name:$cell_name' not found. +0573 Sdc.tcl:2363 '$cell_name' not found. +0574 Sdc.tcl:2367 missing -lib_cell argument. +0575 Sdc.tcl:2375 port '$to_port_name' not found. +0576 Sdc.tcl:2387 -pin argument required for cells with multiple outputs. +0577 Sdc.tcl:2402 port '$from_port_name' not found. +0578 Sdc.tcl:2609 port '[get_name $port]' is not an input. +0579 Sdc.tcl:2971 operating condition '$op_cond_name' not found. +0580 Sdc.tcl:2989 operating condition '$op_cond_name' not found. +0581 Sdc.tcl:3003 -analysis_type must be single, bc_wc or on_chip_variation. +0582 Sdc.tcl:3028 mode must be top, enclosed or segmented. +0583 Sdc.tcl:3043 no wire load model specified. +0584 Sdc.tcl:3104 wire load selection group '$selection_name' not found. +0585 Sdc.tcl:3232 no default operating conditions found. 0586 NetworkEdit.tcl:50 unsupported object type $object_type. 0587 NetworkEdit.tcl:119 unsupported object type $object_type. 0588 NetworkEdit.tcl:135 unsupported object type $object_type. @@ -307,17 +308,17 @@ 0590 Network.tcl:55 instance $instance_path not found. 0591 Network.tcl:283 net $net_path not found. 0592 Network.tcl:286 net $net_path not found. -0593 Link.tcl:28 missing top_cell_name argument and no current_design. +0593 Link.tcl:34 missing top_cell_name argument and no current_design. 0594 DelayNormal1.cc:203 unknown early/late value. 0595 DelayNormal2.cc:378 unknown early/late value. -0596 Sim.cc:199 unknown function operator +0596 Sim.cc:200 unknown function operator 0597 EstimateParasitics.cc:188 load pin not leaf or top level -0600 Sdc.tcl:1945 '$args' ignored. -0601 Sdc.tcl:2444 set_fanout_load not supported. -0602 Sdc.tcl:2904 no valid objects specified for $key. +0600 Sdc.tcl:1944 '$args' ignored. +0601 Sdc.tcl:2443 set_fanout_load not supported. +0602 Sdc.tcl:2903 no valid objects specified for $key. 0603 NetworkEdit.tcl:172 disconnect_pins is deprecated. Use disconnect_pin. 0604 Sdc.tcl:270 unknown $unit prefix '$prefix'. -0605 Sdc.tcl:3066 wire load model '$model_name' not found. +0605 Sdc.tcl:3065 wire load model '$model_name' not found. 0606 Sta.tcl:1136 get_property unsupported object type $object_type. 0607 StaTcl.i:4394 unknown report path field %s 0608 StaTcl.i:4406 unknown report path field %s @@ -328,3 +329,4 @@ 0613 Sdf.tcl:74 -min_type ignored by analysis_type single. 0614 Sdf.tcl:77 -max_type ignored by analysis_type single. 0615 Sdf.tcl:93 -type ignored by analysis_type $analysis_type. +0616 Search.tcl:1022 specify one of -setup and -hold. diff --git a/tcl/Sdc.tcl b/tcl/Sdc.tcl index cc95e6a6..73cdf4fd 100644 --- a/tcl/Sdc.tcl +++ b/tcl/Sdc.tcl @@ -1102,15 +1102,14 @@ proc create_clock { args } { foreach edge $wave_arg { check_float "-waveform edge" $edge set edge [time_ui_sta $edge] - if { $first_edge && $edge > $period } { - set edge [expr $edge - $period] + if { $edge < 0 } { + sta_error 340 "negative clock -waveform edge time." } if { !$first_edge && $edge < $prev_edge } { - sta_warn 338 "adjusting non-increasing clock -waveform edge times." - set edge [expr $edge + $period] + sta_error 338 "non-increasing clock -waveform edge times." } if { $edge > [expr $period * 2] } { - sta_warn 339 "-waveform time greater than two periods." + sta_error 339 "-waveform time greater than two periods." } lappend waveform $edge set prev_edge $edge