Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2022-11-17 10:03:42 -07:00
parent 48d6e00419
commit 9bdd01f01a
16 changed files with 212 additions and 542 deletions

Binary file not shown.

Binary file not shown.

View File

@ -105,8 +105,6 @@ public:
Clock *masterClk() const { return master_clk_; }
bool masterClkInfered() const { return master_clk_infered_; }
void setInferedMasterClk(Clock *master_clk);
Pin *pllOut() const { return pll_out_; }
Pin *pllFdbk() const { return pll_fdbk_; }
int divideBy() const { return divide_by_; }
int multiplyBy() const { return multiply_by_; }
float dutyCycle() const { return duty_cycle_; }
@ -138,8 +136,6 @@ protected:
bool add_to_pins,
Pin *src_pin,
Clock *master_clk,
Pin *pll_out,
Pin *pll_fdbk,
int divide_by,
int multiply_by,
float duty_cycle,
@ -165,8 +161,6 @@ protected:
bool add_to_pins_;
// Hierarchical pins in pins_ become driver pins through the pin.
PinSet leaf_pins_;
Pin *pll_out_;
Pin *pll_fdbk_;
float period_;
FloatSeq *waveform_;
bool waveform_valid_;

View File

@ -348,8 +348,6 @@ public:
bool add_to_pins,
Pin *src_pin,
Clock *master_clk,
Pin *pll_out,
Pin *pll_fdbk,
int divide_by,
int multiply_by,
float duty_cycle,

View File

@ -277,8 +277,6 @@ public:
bool add_to_pins,
Pin *src_pin,
Clock *master_clk,
Pin *pll_out,
Pin *pll_fdbk,
int divide_by,
int multiply_by,
float duty_cycle,

View File

@ -7,13 +7,12 @@
0007 LibertyExpr.cc:78 %s references unknown port %s.
0008 ConcreteNetwork.cc:1857 cell type %s can not be linked.
0009 CycleAccting.cc:87 No common period was found between clocks %s and %s.
0010 Genclks.cc:287 no master clock found for generated clock %s.
0011 Genclks.cc:329 generated clock %s is in the fanout of multiple clocks.
0013 Genclks.cc:987 generated clock %s source pin %s missing paths from master clock %s.
0010 Genclks.cc:274 no master clock found for generated clock %s.
0013 Genclks.cc:938 generated clock %s source pin %s missing paths from master clock %s.
0015 Sim.cc:871 propagated logic value %c differs from constraint value of %c on pin %s.
0016 LibertyReader.cc:996 default_max_fanout is 0.0.
0017 Sta.cc:2094 '%s' is not a valid endpoint.
0018 Sta.cc:2018 '%s' is not a valid start point.
0017 Sta.cc:2091 '%s' is not a valid endpoint.
0018 Sta.cc:2015 '%s' is not a valid start point.
0021 SpefParse.yy:805 %d is not positive.
0022 SpefParse.yy:814 %.4f is not positive.
0023 SpefParse.yy:820 %.4f is not positive.
@ -166,7 +165,7 @@
0191 VerilogReader.cc:1733 %s is not a verilog module.
0201 StaTcl.i:128 no network has been linked.
0202 StaTcl.i:142 network does not support edits.
0204 StaTcl.i:4181 POCV support requires compilation with SSTA=1.
0204 StaTcl.i:4179 POCV support requires compilation with SSTA=1.
0206 LibertyExpr.cc:171 %s %s.
0207 GraphDelayCalc1.cc:738 port not found in cell
0208 Graph.cc:793 arc_delay_annotated array bounds exceeded
@ -174,10 +173,10 @@
0210 Graph.cc:820 arc_delay_annotated array bounds exceeded
0211 SdcNetwork.cc:1026 inst path string lenth estimate busted
0212 SdcNetwork.cc:1098 inst path string lenth estimate exceeded
0213 Sdc.cc:4101 group path name and is_default are mutually exclusive.
0214 WriteSdc.cc:1317 unknown exception type
0215 WriteSdc.cc:1888 illegal set_logic value
0216 WriteSdc.cc:1932 invalid set_case_analysis value
0213 Sdc.cc:4098 group path name and is_default are mutually exclusive.
0214 WriteSdc.cc:1307 unknown exception type
0215 WriteSdc.cc:1878 illegal set_logic value
0216 WriteSdc.cc:1922 invalid set_case_analysis value
0228 Graph.cc:833 arc_delay_annotated array bounds exceeded
0251 PathEnumed.cc:126 enumerated path required time
0252 PathEnumed.cc:135 enumerated path required time
@ -186,18 +185,17 @@
0255 ReportPath.cc:289 unsupported path type
0256 ReportPath.cc:310 unsupported path type
0257 ReportPath.cc:349 unsupported path type
0258 ReportPath.cc:2228 generated clock pll source path too short.
0259 ReportPath.cc:2392 unsupported path type
0260 Search.cc:2637 max tag group index exceeded
0261 Search.cc:2869 max tag index exceeded
0262 Search.cc:3561 unexpected filter path
0263 Search.cc:3729 tns incr existing vertex
0264 Sta.cc:4150 corresponding timing arc set not found in equiv cells
0259 ReportPath.cc:2378 unsupported path type
0260 Search.cc:2628 max tag group index exceeded
0261 Search.cc:2860 max tag index exceeded
0262 Search.cc:3543 unexpected filter path
0263 Search.cc:3711 tns incr existing vertex
0264 Sta.cc:4147 corresponding timing arc set not found in equiv cells
0265 TagGroup.cc:297 tag group missing tag
0266 Sta.cc:2091 '%s' is not a valid endpoint.
0267 Sta.cc:2015 '%s' is not a valid start point.
0272 StaTcl.i:4167 unknown common clk pessimism mode.
0273 StaTcl.i:5123 unknown clock sense
0266 Sta.cc:2088 '%s' is not a valid endpoint.
0267 Sta.cc:2012 '%s' is not a valid start point.
0272 StaTcl.i:4165 unknown common clk pessimism mode.
0273 StaTcl.i:5121 unknown clock sense
0300 Util.tcl:218 no commands match '$pattern'.
0301 Power.tcl:218 activity should be 0.0 to 1.0 or 2.0
0302 Power.tcl:226 duty should be 0.0 to 1.0
@ -209,60 +207,60 @@
0315 Cmds.tcl:856 $arg_name '$object_type' is not a net.
0316 Cmds.tcl:861 $arg_name '$arg' not found.
0318 Search.tcl:1073 unknown path group '$name'.
0319 Sdc.tcl:279 $unit scale [format %.0e $scale] does not match library scale [format %.0e $unit_scale].
0320 Sdc.tcl:480 current_design for other than top cell not supported.
0321 Sdc.tcl:517 patterns argument not supported with -of_objects.
0322 Sdc.tcl:552 instance '$pattern' not found.
0323 Sdc.tcl:613 clock '$pattern' not found.
0324 Sdc.tcl:640 positional arguments not supported with -of_objects.
0325 Sdc.tcl:666 library '$lib_name' not found.
0326 Sdc.tcl:678 cell '$cell_pattern' not found.
0327 Sdc.tcl:725 library/cell/port '$pattern' not found.
0328 Sdc.tcl:745 port '$port_pattern' not found.
0329 Sdc.tcl:750 library '$lib_name' not found.
0330 Sdc.tcl:760 -nocase ignored without -regexp.
0331 Sdc.tcl:786 library '$pattern' not found.
0332 Sdc.tcl:849 patterns argument not supported with -of_objects.
0333 Sdc.tcl:873 net '$pattern' not found.
0334 Sdc.tcl:902 patterns argument not supported with -of_objects.
0335 Sdc.tcl:939 pin '$pattern' not found.
0336 Sdc.tcl:996 patterns argument not supported with -of_objects.
0337 Sdc.tcl:1010 port '$pattern' not found.
0338 Sdc.tcl:1108 non-increasing clock -waveform edge times.
0339 Sdc.tcl:1111 -waveform time greater than two periods.
0341 Sdc.tcl:1469 extra positional argument $arg.
0342 Sdc.tcl:1502 -clock ignored for clock objects.
0343 Sdc.tcl:1548 set_sense -type data not supported.
0344 Sdc.tcl:1563 set_clock_sense is deprecated as of SDC 2.1. Use set_sense -type clock.
0345 Sdc.tcl:1575 -pulse argument not supported.
0346 Sdc.tcl:1584 -positive, -negative, -stop_propagation and -pulse are mutually exclusive.
0347 Sdc.tcl:1597 hierarchical pin '[get_full_name $pin]' not supported.
0348 Sdc.tcl:1805 -from/-to keywords ignored for lib_pin, port and pin arguments.
0349 Sdc.tcl:1467 unknown keyword argument $arg.
0350 Sdc.tcl:1953 -from, -through or -to required.
0351 Sdc.tcl:2032 -source_latency_included ignored with -reference_pin.
0352 Sdc.tcl:2035 -network_latency_included ignored with -reference_pin.
0353 Sdc.tcl:2054 $cmd not allowed on [pin_direction $pin] port '[get_full_name $pin]'.
0354 Sdc.tcl:2056 $cmd relative to a clock defined on the same port/pin not allowed.
0355 Sdc.tcl:2099 '$args' ignored.
0356 Sdc.tcl:2229 '$args' ignored.
0357 Sdc.tcl:2276 virtual clock [get_name $clk] can not be propagated.
0358 Sdc.tcl:2425 -multiply_by ignored.
0359 Sdc.tcl:2428 -dont_scale ignored.
0360 Sdc.tcl:2431 -no_design_rule ignored.
0361 Sdc.tcl:2472 -clock not supported.
0362 Sdc.tcl:2475 -clock_fall not supported.
0363 Sdc.tcl:2521 -pin_load not allowed for net objects.
0364 Sdc.tcl:2524 -wire_load not allowed for net objects.
0365 Sdc.tcl:2527 -rise/-fall not allowed for net objects.
0366 Sdc.tcl:2660 -data_path, -clock_path, -rise, -fall ignored for ports and designs.
0367 Sdc.tcl:2730 derating factor greater than 2.0.
0368 Sdc.tcl:2767 -cell_delay and -cell_check flags ignored for net objects.
0369 Sdc.tcl:2826 no valid objects specified for $key.
0370 Sdc.tcl:2859 no valid objects specified for $key
0371 Sdc.tcl:3020 set_wire_load_min_block_size not supported.
0319 Sdc.tcl:288 $unit scale [format %.0e $scale] does not match library scale [format %.0e $unit_scale].
0320 Sdc.tcl:496 current_design for other than top cell not supported.
0321 Sdc.tcl:533 patterns argument not supported with -of_objects.
0322 Sdc.tcl:568 instance '$pattern' not found.
0323 Sdc.tcl:629 clock '$pattern' not found.
0324 Sdc.tcl:656 positional arguments not supported with -of_objects.
0325 Sdc.tcl:682 library '$lib_name' not found.
0326 Sdc.tcl:694 cell '$cell_pattern' not found.
0327 Sdc.tcl:741 library/cell/port '$pattern' not found.
0328 Sdc.tcl:761 port '$port_pattern' not found.
0329 Sdc.tcl:766 library '$lib_name' not found.
0330 Sdc.tcl:776 -nocase ignored without -regexp.
0331 Sdc.tcl:802 library '$pattern' not found.
0332 Sdc.tcl:865 patterns argument not supported with -of_objects.
0333 Sdc.tcl:889 net '$pattern' not found.
0334 Sdc.tcl:918 patterns argument not supported with -of_objects.
0335 Sdc.tcl:955 pin '$pattern' not found.
0336 Sdc.tcl:1012 patterns argument not supported with -of_objects.
0337 Sdc.tcl:1026 port '$pattern' not found.
0338 Sdc.tcl:1124 non-increasing clock -waveform edge times.
0339 Sdc.tcl:1127 -waveform time greater than two periods.
0341 Sdc.tcl:1461 extra positional argument $arg.
0342 Sdc.tcl:1494 -clock ignored for clock objects.
0343 Sdc.tcl:1540 set_sense -type data not supported.
0344 Sdc.tcl:1555 set_clock_sense is deprecated as of SDC 2.1. Use set_sense -type clock.
0345 Sdc.tcl:1567 -pulse argument not supported.
0346 Sdc.tcl:1576 -positive, -negative, -stop_propagation and -pulse are mutually exclusive.
0347 Sdc.tcl:1589 hierarchical pin '[get_full_name $pin]' not supported.
0348 Sdc.tcl:1797 -from/-to keywords ignored for lib_pin, port and pin arguments.
0349 Sdc.tcl:1459 unknown keyword argument $arg.
0350 Sdc.tcl:1945 -from, -through or -to required.
0351 Sdc.tcl:2024 -source_latency_included ignored with -reference_pin.
0352 Sdc.tcl:2027 -network_latency_included ignored with -reference_pin.
0353 Sdc.tcl:2046 $cmd not allowed on [pin_direction $pin] port '[get_full_name $pin]'.
0354 Sdc.tcl:2048 $cmd relative to a clock defined on the same port/pin not allowed.
0355 Sdc.tcl:2091 '$args' ignored.
0356 Sdc.tcl:2221 '$args' ignored.
0357 Sdc.tcl:2268 virtual clock [get_name $clk] can not be propagated.
0358 Sdc.tcl:2417 -multiply_by ignored.
0359 Sdc.tcl:2420 -dont_scale ignored.
0360 Sdc.tcl:2423 -no_design_rule ignored.
0361 Sdc.tcl:2464 -clock not supported.
0362 Sdc.tcl:2467 -clock_fall not supported.
0363 Sdc.tcl:2513 -pin_load not allowed for net objects.
0364 Sdc.tcl:2516 -wire_load not allowed for net objects.
0365 Sdc.tcl:2519 -rise/-fall not allowed for net objects.
0366 Sdc.tcl:2652 -data_path, -clock_path, -rise, -fall ignored for ports and designs.
0367 Sdc.tcl:2722 derating factor greater than 2.0.
0368 Sdc.tcl:2759 -cell_delay and -cell_check flags ignored for net objects.
0369 Sdc.tcl:2818 no valid objects specified for $key.
0370 Sdc.tcl:2851 no valid objects specified for $key
0371 Sdc.tcl:3012 set_wire_load_min_block_size not supported.
0372 NetworkEdit.tcl:80 connect_pins is deprecated. Use connect_pin.
0373 Sdc.tcl:3170 define_corners must be called before read_liberty.
0373 Sdc.tcl:3162 define_corners must be called before read_liberty.
0400 Util.tcl:44 $cmd $key missing value.
0401 Util.tcl:61 $cmd $key missing value.
0402 Util.tcl:71 $cmd $arg is not a known keyword or flag.
@ -372,81 +370,76 @@
0508 Search.tcl:794 -min and -max cannot both be specified.
0509 Search.tcl:814 pin '$pin_arg' is hierarchical.
0510 Search.tcl:880 -format $format not recognized.
0511 Sdc.tcl:64 cannot open '$filename'.
0512 Sdc.tcl:119 incomplete command at end of file.
0513 Sdc.tcl:203 hierarchy separator must be one of '$sdc_dividers'.
0514 Sdc.tcl:250 unknown unit $unit '$suffix'.
0515 Sdc.tcl:323 unknown $unit unit '$suffix'.
0516 Sdc.tcl:586 unsupported instance -filter expression.
0517 Sdc.tcl:971 unsupported pin -filter expression.
0518 Sdc.tcl:1047 unsupported port -filter expression.
0519 Sdc.tcl:1080 -add requires -name.
0520 Sdc.tcl:1085 -name or port_pin_list must be specified.
0521 Sdc.tcl:1093 missing -period argument.
0522 Sdc.tcl:1099 -waveform edge_list must have an even number of edge times.
0523 Sdc.tcl:1152 empty ports/pins/nets argument.
0524 Sdc.tcl:1160 -add requires -name.
0525 Sdc.tcl:1165 name or port_pin_list must be specified.
0526 Sdc.tcl:1172 missing -source argument.
0527 Sdc.tcl:1189 -master_clock argument empty.
0528 Sdc.tcl:1192 -add requireds -master_clock.
0529 Sdc.tcl:1196 -multiply_by and -divide_by options are exclusive.
0530 Sdc.tcl:1200 -divide_by is not an integer greater than one.
0531 Sdc.tcl:1203 -combinational implies -divide_by 1.
0532 Sdc.tcl:1208 -multiply_by is not an integer greater than one.
0533 Sdc.tcl:1214 -duty_cycle is not a float between 0 and 100.
0534 Sdc.tcl:1220 -edges only supported for three edges.
0535 Sdc.tcl:1226 edges times are not monotonically increasing.
0536 Sdc.tcl:1235 -edge_shift length does not match -edges length.
0537 Sdc.tcl:1241 missing -multiply_by, -divide_by, -combinational or -edges argument.
0538 Sdc.tcl:1249 cannot specify -invert without -multiply_by, -divide_by or -combinational.
0539 Sdc.tcl:1255 -duty_cycle requires -multiply_by value.
0540 Sdc.tcl:1260 missing -pll_output argument.
0541 Sdc.tcl:1263 missing -pll_feedback argument.
0542 Sdc.tcl:1269 PLL output and feedback pins must be on the same instance.
0543 Sdc.tcl:1272 source pin must be on the same instance as the PLL output pin.
0544 Sdc.tcl:1275 PLL output must be one of the clock pins.
0545 Sdc.tcl:1313 group_path command failed.
0546 Sdc.tcl:1320 positional arguments not supported.
0547 Sdc.tcl:1324 -from, -through or -to required.
0548 Sdc.tcl:1330 -name and -default are mutually exclusive.
0549 Sdc.tcl:1332 -name or -default option is required.
0550 Sdc.tcl:1373 cannot specify both -high and -low.
0551 Sdc.tcl:1381 missing -setup or -hold argument.
0552 Sdc.tcl:1395 -high and -low only permitted for pins and instances.
0553 Sdc.tcl:1402 -high and -low only permitted for pins and instances.
0554 Sdc.tcl:1445 one of -logically_exclusive, -physically_exclusive or -asynchronous is required.
0555 Sdc.tcl:1448 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive.
0556 Sdc.tcl:1516 -source '[get_full_name $pin]' is not a clock pin.
0557 Sdc.tcl:1523 -early/-late is only allowed with -source.
0558 Sdc.tcl:1552 set_sense -type clock|data
0559 Sdc.tcl:1621 transition time can not be specified for virtual clocks.
0560 Sdc.tcl:1642 missing uncertainty value.
0561 Sdc.tcl:1690 -from/-to must be used together.
0562 Sdc.tcl:1710 -rise, -fall options not allowed for single clock uncertainty.
0563 Sdc.tcl:1751 missing -from, -rise_from or -fall_from argument.
0564 Sdc.tcl:1763 missing -to, -rise_to or -fall_to argument.
0565 Sdc.tcl:1835 -from/-to hierarchical instance not supported.
0566 Sdc.tcl:1867 pin '[get_full_name $inst]${hierarchy_separator}${port_name}' not found.
0567 Sdc.tcl:1908 pin '[get_name $cell]${hierarchy_separator}${port_name}' not found.
0568 Sdc.tcl:2093 missing delay argument.
0569 Sdc.tcl:2224 missing path multiplier argument.
0570 Sdc.tcl:2236 cannot use -start with -end.
0571 Sdc.tcl:2304 value must be 0, zero, 1, one, rise, rising, fall, or falling.
0572 Sdc.tcl:2362 cell '$lib_name:$cell_name' not found.
0573 Sdc.tcl:2368 '$cell_name' not found.
0574 Sdc.tcl:2372 missing -lib_cell argument.
0575 Sdc.tcl:2380 port '$to_port_name' not found.
0576 Sdc.tcl:2392 -pin argument required for cells with multiple outputs.
0577 Sdc.tcl:2407 port '$from_port_name' not found.
0578 Sdc.tcl:2614 port '[get_name $port]' is not an input.
0579 Sdc.tcl:2976 operating condition '$op_cond_name' not found.
0580 Sdc.tcl:2994 operating condition '$op_cond_name' not found.
0581 Sdc.tcl:3008 -analysis_type must be single, bc_wc or on_chip_variation.
0582 Sdc.tcl:3033 mode must be top, enclosed or segmented.
0583 Sdc.tcl:3048 no wire load model specified.
0584 Sdc.tcl:3109 wire load selection group '$selection_name' not found.
0585 Sdc.tcl:3240 no default operating conditions found.
0511 Sdc.tcl:73 cannot open '$filename'.
0512 Sdc.tcl:128 incomplete command at end of file.
0513 Sdc.tcl:212 hierarchy separator must be one of '$sdc_dividers'.
0514 Sdc.tcl:259 unknown unit $unit '$suffix'.
0515 Sdc.tcl:332 unknown $unit unit '$suffix'.
0516 Sdc.tcl:602 unsupported instance -filter expression.
0517 Sdc.tcl:987 unsupported pin -filter expression.
0518 Sdc.tcl:1063 unsupported port -filter expression.
0519 Sdc.tcl:1096 -add requires -name.
0520 Sdc.tcl:1101 -name or port_pin_list must be specified.
0521 Sdc.tcl:1109 missing -period argument.
0522 Sdc.tcl:1115 -waveform edge_list must have an even number of edge times.
0523 Sdc.tcl:1168 empty ports/pins/nets argument.
0524 Sdc.tcl:1176 -add requires -name.
0525 Sdc.tcl:1181 name or port_pin_list must be specified.
0526 Sdc.tcl:1188 missing -source argument.
0527 Sdc.tcl:1203 -master_clock argument empty.
0528 Sdc.tcl:1206 -add requireds -master_clock.
0529 Sdc.tcl:1210 -multiply_by and -divide_by options are exclusive.
0530 Sdc.tcl:1214 -divide_by is not an integer greater than one.
0531 Sdc.tcl:1217 -combinational implies -divide_by 1.
0532 Sdc.tcl:1222 -multiply_by is not an integer greater than one.
0533 Sdc.tcl:1228 -duty_cycle is not a float between 0 and 100.
0534 Sdc.tcl:1234 -edges only supported for three edges.
0535 Sdc.tcl:1240 edges times are not monotonically increasing.
0536 Sdc.tcl:1249 -edge_shift length does not match -edges length.
0537 Sdc.tcl:1255 missing -multiply_by, -divide_by, -combinational or -edges argument.
0538 Sdc.tcl:1263 cannot specify -invert without -multiply_by, -divide_by or -combinational.
0539 Sdc.tcl:1269 -duty_cycle requires -multiply_by value.
0545 Sdc.tcl:1305 group_path command failed.
0546 Sdc.tcl:1312 positional arguments not supported.
0547 Sdc.tcl:1316 -from, -through or -to required.
0548 Sdc.tcl:1322 -name and -default are mutually exclusive.
0549 Sdc.tcl:1324 -name or -default option is required.
0550 Sdc.tcl:1365 cannot specify both -high and -low.
0551 Sdc.tcl:1373 missing -setup or -hold argument.
0552 Sdc.tcl:1387 -high and -low only permitted for pins and instances.
0553 Sdc.tcl:1394 -high and -low only permitted for pins and instances.
0554 Sdc.tcl:1437 one of -logically_exclusive, -physically_exclusive or -asynchronous is required.
0555 Sdc.tcl:1440 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive.
0556 Sdc.tcl:1508 -source '[get_full_name $pin]' is not a clock pin.
0557 Sdc.tcl:1515 -early/-late is only allowed with -source.
0558 Sdc.tcl:1544 set_sense -type clock|data
0559 Sdc.tcl:1613 transition time can not be specified for virtual clocks.
0560 Sdc.tcl:1634 missing uncertainty value.
0561 Sdc.tcl:1682 -from/-to must be used together.
0562 Sdc.tcl:1702 -rise, -fall options not allowed for single clock uncertainty.
0563 Sdc.tcl:1743 missing -from, -rise_from or -fall_from argument.
0564 Sdc.tcl:1755 missing -to, -rise_to or -fall_to argument.
0565 Sdc.tcl:1827 -from/-to hierarchical instance not supported.
0566 Sdc.tcl:1859 pin '[get_full_name $inst]${hierarchy_separator}${port_name}' not found.
0567 Sdc.tcl:1900 pin '[get_name $cell]${hierarchy_separator}${port_name}' not found.
0568 Sdc.tcl:2085 missing delay argument.
0569 Sdc.tcl:2216 missing path multiplier argument.
0570 Sdc.tcl:2228 cannot use -start with -end.
0571 Sdc.tcl:2296 value must be 0, zero, 1, one, rise, rising, fall, or falling.
0572 Sdc.tcl:2354 cell '$lib_name:$cell_name' not found.
0573 Sdc.tcl:2360 '$cell_name' not found.
0574 Sdc.tcl:2364 missing -lib_cell argument.
0575 Sdc.tcl:2372 port '$to_port_name' not found.
0576 Sdc.tcl:2384 -pin argument required for cells with multiple outputs.
0577 Sdc.tcl:2399 port '$from_port_name' not found.
0578 Sdc.tcl:2606 port '[get_name $port]' is not an input.
0579 Sdc.tcl:2968 operating condition '$op_cond_name' not found.
0580 Sdc.tcl:2986 operating condition '$op_cond_name' not found.
0581 Sdc.tcl:3000 -analysis_type must be single, bc_wc or on_chip_variation.
0582 Sdc.tcl:3025 mode must be top, enclosed or segmented.
0583 Sdc.tcl:3040 no wire load model specified.
0584 Sdc.tcl:3101 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.
@ -459,15 +452,15 @@
0595 DelayNormal2.cc:378 unknown early/late value.
0596 Sim.cc:205 unknown function operator
0597 EstimateParasitics.cc:188 load pin not leaf or top level
0600 Sdc.tcl:1949 '$args' ignored.
0601 Sdc.tcl:2448 set_fanout_load not supported.
0602 Sdc.tcl:2908 no valid objects specified for $key.
0600 Sdc.tcl:1941 '$args' ignored.
0601 Sdc.tcl:2440 set_fanout_load not supported.
0602 Sdc.tcl:2900 no valid objects specified for $key.
0603 NetworkEdit.tcl:172 disconnect_pins is deprecated. Use disconnect_pin.
0604 Sdc.tcl:272 unknown $unit prefix '$prefix'.
0605 Sdc.tcl:3070 wire load model '$model_name' not found.
0604 Sdc.tcl:281 unknown $unit prefix '$prefix'.
0605 Sdc.tcl:3062 wire load model '$model_name' not found.
0606 Sta.tcl:1130 get_property unsupported object type $object_type.
0607 StaTcl.i:4417 unknown report path field %s
0608 StaTcl.i:4429 unknown report path field %s
0607 StaTcl.i:4415 unknown report path field %s
0608 StaTcl.i:4427 unknown report path field %s
0609 Search.tcl:427 -all_violators is deprecated. Use -violators
0610 Search.tcl:507 -max_transition deprecated. Use -max_slew.
0611 Search.tcl:512 -min_transition deprecated. Use -min_slew.
@ -488,9 +481,11 @@
0705 Liberty.cc:793 Liberty cell %s/%s for corner %s/%s not found
0706 Parasitics.tcl:70 read_spef -increment is deprecated.
0710 LumpedCapDelayCalc.cc:168 gate delay input variable is NaN
0800 VcdReader.cc:108 unhandled vcd command.
0801 VcdReader.cc:143 timescale syntax error.
0802 VcdReader.cc:157 Unknown timescale unit.
0804 VcdReader.cc:198 Variable syntax error.
0805 Vcd.cc:170 Unknown variable %s ID %s
0806 ReadVcdActivities.cc:216 clock %s vcd period %s differs from clock definition %s
0800 VcdReader.cc:109 unhandled vcd command.
0801 VcdReader.cc:145 timescale syntax error.
0802 VcdReader.cc:159 Unknown timescale unit.
0804 VcdReader.cc:200 Variable syntax error.
0805 Vcd.cc:172 Unknown variable %s ID %s
0806 ReadVcdActivities.cc:227 clock %s vcd period %s differs from SDC clock period %s
0807 Sdc.tcl:453 only one of -cells, -data_pins, -clock_pins, -async_pins, -output_pins are suppported.
0810 MakeTimingModel.cc:167 clock %s pin %s is inside model block.

View File

@ -36,8 +36,6 @@ Clock::Clock(const char *name,
int index) :
name_(stringCopy(name)),
add_to_pins_(false),
pll_out_(nullptr),
pll_fdbk_(nullptr),
period_(0.0),
waveform_(nullptr),
waveform_valid_(false),
@ -312,8 +310,6 @@ Clock::initGeneratedClk(PinSet *pins,
bool add_to_pins,
Pin *src_pin,
Clock *master_clk,
Pin *pll_out,
Pin *pll_fdbk,
int divide_by,
int multiply_by,
float duty_cycle,
@ -332,8 +328,6 @@ Clock::initGeneratedClk(PinSet *pins,
master_clk_ = master_clk;
master_clk_infered_ = false;
waveform_valid_ = false;
pll_out_= pll_out;
pll_fdbk_ = pll_fdbk;
divide_by_ = divide_by;
multiply_by_ = multiply_by;
duty_cycle_ = duty_cycle;

View File

@ -993,8 +993,6 @@ Sdc::makeGeneratedClock(const char *name,
bool add_to_pins,
Pin *src_pin,
Clock *master_clk,
Pin *pll_out,
Pin *pll_fdbk,
int divide_by,
int multiply_by,
float duty_cycle,
@ -1015,7 +1013,6 @@ Sdc::makeGeneratedClock(const char *name,
clock_name_map_[clk->name()] = clk;
}
clk->initGeneratedClk(pins, add_to_pins, src_pin, master_clk,
pll_out, pll_fdbk,
divide_by, multiply_by, duty_cycle,
invert, combinational,
edges, edge_shifts, propagate_all_clks_,

View File

@ -433,16 +433,6 @@ WriteSdc::writeGeneratedClock(Clock *clk) const
gzprintf(stream_, " -master_clock ");
writeGetClock(master);
}
Pin *pll_out = clk->pllOut();
if (pll_out) {
gzprintf(stream_, " -pll_out ");
writeGetPin(pll_out, true);
}
Pin *pll_fdbk = clk->pllFdbk();
if (pll_fdbk) {
gzprintf(stream_, " -pll_feedback ");
writeGetPin(pll_fdbk, false);
}
if (clk->combinational())
gzprintf(stream_, " -combinational");
int divide_by = clk->divideBy();

View File

@ -51,8 +51,6 @@ public:
VertexSet *fanins() const { return fanins_; }
Level gclkLevel() const { return gclk_level_; }
FilterPath *srcFilter() const { return src_filter_; }
FilterPath *pllFilter() const { return pll_filter_; }
void setPllFilter(FilterPath *pll_filter);
void setLatchFdbkEdges(EdgeSet *fdbk_edges);
bool foundLatchFdbkEdges() const { return found_latch_fdbk_edges_; }
void setFoundLatchFdbkEdges(bool found);
@ -64,7 +62,6 @@ protected:
EdgeSet *fdbk_edges_;
bool found_latch_fdbk_edges_;
FilterPath *src_filter_;
FilterPath *pll_filter_;
};
GenclkInfo::GenclkInfo(Clock *gclk,
@ -76,8 +73,7 @@ GenclkInfo::GenclkInfo(Clock *gclk,
fanins_(fanins),
fdbk_edges_(nullptr),
found_latch_fdbk_edges_(false),
src_filter_(src_filter),
pll_filter_(nullptr)
src_filter_(src_filter)
{
}
@ -86,13 +82,6 @@ GenclkInfo::~GenclkInfo()
delete fanins_;
delete fdbk_edges_;
delete src_filter_;
delete pll_filter_;
}
void
GenclkInfo::setPllFilter(FilterPath *pll_filter)
{
pll_filter_ = pll_filter;
}
void
@ -217,8 +206,6 @@ Genclks::ensureInsertionDelays()
Clock *gclk = gclk_iter.next();
if (gclk->masterClk()) {
findInsertionDelays(gclk);
if (gclk->pllOut())
findPllDelays(gclk);
recordSrcPaths(gclk);
}
}
@ -295,41 +282,6 @@ Genclks::ensureMaster(Clock *gclk)
if (master_clk == nullptr) {
int master_clk_count = 0;
bool found_master = false;
if (gclk->pllOut()) {
// Search backward from generated clock source pin to a clock pin.
GenClkMasterSearchPred pred(this);
BfsBkwdIterator iter(BfsIndex::other, &pred, this);
seedSrcPins(gclk, iter);
while (iter.hasNext()) {
Vertex *vertex = iter.next();
Pin *pin = vertex->pin();
if (sdc_->isLeafPinClock(pin)) {
ClockSet *master_clks = sdc_->findLeafPinClocks(pin);
if (master_clks) {
ClockSet::Iterator master_iter(master_clks);
while (master_iter.hasNext()) {
master_clk = master_iter.next();
// Master source pin can actually be a clock source pin.
if (master_clk != gclk) {
gclk->setInferedMasterClk(master_clk);
debugPrint(debug_, "genclk", 2, " %s master clk %s",
gclk->name(),
master_clk->name());
found_master = true;
master_clk_count++;
}
}
}
}
if (found_master)
break;
iter.enqueueAdjacentVertices(vertex);
}
if (master_clk_count > 1)
report_->warn(11, "generated clock %s is in the fanout of multiple clocks.",
gclk->name());
}
else {
Pin *src_pin = gclk->srcPin();
ClockSet *master_clks = sdc_->findClocks(src_pin);
ClockSet::Iterator master_iter(master_clks);
@ -383,7 +335,6 @@ Genclks::ensureMaster(Clock *gclk)
network_->pathName(src_pin));
}
}
}
void
Genclks::seedSrcPins(Clock *clk,
@ -1066,23 +1017,7 @@ Genclks::insertionDelay(const Clock *clk,
PathVertex src_path;
PathAnalysisPt *insert_ap = path_ap->insertionAnalysisPt(early_late);
srcPath(clk, pin, rf, insert_ap, src_path);
if (clk->pllFdbk()) {
const MinMax *min_max = path_ap->pathMinMax();
PathAnalysisPt *pll_ap = path_ap->insertionAnalysisPt(min_max->opposite());
Arrival pll_delay = pllDelay(clk, rf, pll_ap);
if (src_path.isNull())
return -pll_delay;
else {
PathRef prev;
src_path.prevPath(this, prev);
if (prev.isNull())
return -pll_delay;
else
// PLL delay replaces clkin->clkout delay.
return prev.arrival(this) - pll_delay;
}
}
else if (!src_path.isNull())
if (!src_path.isNull())
return src_path.arrival(this);
else
return 0.0;
@ -1090,170 +1025,6 @@ Genclks::insertionDelay(const Clock *clk,
////////////////////////////////////////////////////////////////
void
Genclks::findPllDelays(Clock *gclk)
{
debugPrint(debug_, "genclk", 2, "find gen clk %s pll delay",
gclk->name());
FilterPath *pll_filter = makePllFilter(gclk);
GenclkInfo *genclk_info = genclkInfo(gclk);
if (genclk_info) {
genclk_info->setPllFilter(pll_filter);
ClkTreeSearchPred srch_pred(this);
BfsFwdIterator pll_iter(BfsIndex::other, &srch_pred, this);
seedPllPin(gclk, pll_filter, pll_iter);
// Propagate arrivals to pll feedback pin level.
findPllArrivals(gclk, pll_iter);
sdc_->unrecordException(pll_filter);
}
}
FilterPath *
Genclks::makePllFilter(const Clock *gclk)
{
PinSet *from_pins = new PinSet;
from_pins->insert(gclk->pllOut());
RiseFallBoth *rf = RiseFallBoth::riseFall();
ExceptionFrom *from = sdc_->makeExceptionFrom(from_pins,nullptr,nullptr,rf);
PinSet *to_pins = new PinSet;
to_pins->insert(gclk->pllFdbk());
ExceptionTo *to = sdc_->makeExceptionTo(to_pins, nullptr, nullptr, rf, rf);
return sdc_->makeFilterPath(from, nullptr, to);
}
void
Genclks::seedPllPin(const Clock *gclk,
FilterPath *pll_filter,
BfsFwdIterator &pll_iter)
{
Pin *pll_out_pin = gclk->pllOut();
Vertex *vertex = graph_->pinDrvrVertex(pll_out_pin);
if (vertex) {
debugPrint(debug_, "genclk", 2, " seed pllout pin %s",
network_->pathName(pll_out_pin));
TagGroupBldr tag_bldr(true, this);
tag_bldr.init(vertex);
copyGenClkSrcPaths(vertex, &tag_bldr);
for (auto path_ap : corners_->pathAnalysisPts()) {
for (auto tr : RiseFall::range()) {
Tag *tag = makeTag(gclk, gclk, pll_out_pin, tr, pll_filter, path_ap);
tag_bldr.setArrival(tag, 0.0, nullptr);
}
}
search_->setVertexArrivals(vertex, &tag_bldr);
pll_iter.enqueueAdjacentVertices(vertex);
}
}
class PllEvalPred : public EvalPred
{
public:
explicit PllEvalPred(const StaState *sta);
// Override EvalPred::searchTo to allow eval at generated clk root.
virtual bool searchTo(const Vertex *to_vertex);
};
PllEvalPred::PllEvalPred(const StaState *sta) :
EvalPred(sta)
{
}
bool
PllEvalPred::searchTo(const Vertex *)
{
return true;
}
class PllArrivalVisitor : public ArrivalVisitor
{
public:
PllArrivalVisitor(const StaState *sta,
BfsFwdIterator &pll_iter);
virtual void visit(Vertex *vertex);
protected:
BfsFwdIterator &pll_iter_;
};
PllArrivalVisitor::PllArrivalVisitor(const StaState *sta,
BfsFwdIterator &pll_iter) :
ArrivalVisitor(sta),
pll_iter_(pll_iter)
{
}
void
PllArrivalVisitor::visit(Vertex *vertex)
{
Genclks *genclks = search_->genclks();
debugPrint(debug_, "genclk", 2, "find gen clk pll arrival %s",
vertex->name(sdc_network_));
tag_bldr_->init(vertex);
genclks->copyGenClkSrcPaths(vertex, tag_bldr_);
has_fanin_one_ = graph_->hasFaninOne(vertex);
visitFaninPaths(vertex);
pll_iter_.enqueueAdjacentVertices(vertex);
search_->setVertexArrivals(vertex, tag_bldr_);
}
void
Genclks::findPllArrivals(const Clock *gclk,
BfsFwdIterator &pll_iter)
{
Pin *fdbk_pin = gclk->pllFdbk();
Vertex *fdbk_vertex = graph_->pinLoadVertex(fdbk_pin);
Level fdbk_level = fdbk_vertex->level();
PllArrivalVisitor arrival_visitor(this, pll_iter);
PllEvalPred eval_pred(this);
arrival_visitor.init(true, &eval_pred);
while (pll_iter.hasNext(fdbk_level)) {
Vertex *vertex = pll_iter.next();
arrival_visitor.visit(vertex);
}
}
Arrival
Genclks::pllDelay(const Clock *clk,
const RiseFall *rf,
const PathAnalysisPt *path_ap) const
{
Vertex *fdbk_vertex = graph_->pinLoadVertex(clk->pllFdbk());
GenclkInfo *genclk_info = genclkInfo(clk);
if (genclk_info) {
FilterPath *pll_filter = genclk_info->pllFilter();
VertexPathIterator fdbk_path_iter(fdbk_vertex, rf, path_ap, this);
while (fdbk_path_iter.hasNext()) {
Path *path = fdbk_path_iter.next();
if (matchesPllFilter(path, pll_filter))
return path->arrival(this);
}
}
return delay_zero;
}
bool
Genclks::matchesPllFilter(Path *path,
FilterPath *pll_filter) const
{
Tag *tag = path->tag(this);
const ExceptionStateSet *states = tag->states();
if (tag->isGenClkSrcPath()
&& states) {
ExceptionStateSet::ConstIterator state_iter(states);
while (state_iter.hasNext()) {
ExceptionState *state = state_iter.next();
ExceptionPath *except = state->exception();
if (except == pll_filter)
return true;
}
}
return false;
}
////////////////////////////////////////////////////////////////
bool
ClockPinPairLess::operator()(const ClockPinPair &pair1,
const ClockPinPair &pair2) const

View File

@ -78,9 +78,6 @@ public:
const PathAnalysisPt *path_ap,
// Return value.
PathVertex &src_path) const;
Arrival pllDelay(const Clock *clk,
const RiseFall *rf,
const PathAnalysisPt *path_ap) const;
Vertex *srcPathVertex(const Pin *pin) const;
Level clkPinMaxLevel(const Clock *clk) const;
void copyGenClkSrcPaths(Vertex *vertex,
@ -99,15 +96,6 @@ private:
const PathAnalysisPt *path_ap) const;
bool matchesSrcFilter(Path *path,
const Clock *gclk) const;
void findPllDelays(Clock *gclk);
FilterPath *makePllFilter(const Clock *gclk);
bool matchesPllFilter(Path *path,
FilterPath *pll_filter) const;
void seedPllPin(const Clock *gclk,
FilterPath *pll_filter,
BfsFwdIterator &pll_iter);
void findPllArrivals(const Clock *gclk,
BfsFwdIterator &pll_iter);
void seedSrcPins(Clock *gclk,
FilterPath *src_filter,
BfsFwdIterator &insert_iter);

View File

@ -2218,20 +2218,6 @@ ReportPath::reportGenClkSrcPath1(Clock *clk,
reportClkSrcLatency(insertion, gclk_time, early_late);
}
PathExpanded src_expanded(&src_path, this);
if (clk->pllOut()) {
reportPath4(&src_path, src_expanded, skip_first_path, true,
clk_used_as_data, gclk_time);
PathAnalysisPt *pll_ap=path_ap->insertionAnalysisPt(min_max->opposite());
Arrival pll_delay = search_->genclks()->pllDelay(clk, clk_rf, pll_ap);
size_t path_length = src_expanded.size();
if (path_length < 2)
report_->critical(258, "generated clock pll source path too short.");
PathRef *path0 = src_expanded.path(path_length - 2);
Arrival time0 = path0->arrival(this) + gclk_time;
PathRef *path1 = src_expanded.path(path_length - 1);
reportPathLine(path1, -pll_delay, time0 - pll_delay, "pll_delay");
}
else
reportPath4(&src_path, src_expanded, skip_first_path, false,
clk_used_as_data, gclk_time);
if (!clk->isPropagated())

View File

@ -2097,15 +2097,6 @@ PathVisitor::visitFromPath(const Pin *from_pin,
}
}
}
else {
// PLL out to feedback path.
to_tag = search_->thruTag(from_tag, edge, to_rf, min_max, path_ap);
if (to_tag) {
arc_delay = search_->deratedDelay(from_vertex, arc, edge, true,
path_ap);
to_arrival = from_arrival + arc_delay;
}
}
}
}
else if (role->genericRole() == TimingRole::regClkToQ()) {
@ -3497,15 +3488,6 @@ Search::ensureDownstreamClkPins()
for (Vertex *vertex : *graph_->regClkVertices())
iter.enqueue(vertex);
// Enqueue PLL feedback pins.
VertexIterator vertex_iter(graph_);
while (vertex_iter.hasNext()) {
Vertex *vertex = vertex_iter.next();
Pin *pin = vertex->pin();
const LibertyPort *port = network_->libertyPort(pin);
if (port && port->isPllFeedbackPin())
iter.enqueue(vertex);
}
while (iter.hasNext()) {
Vertex *vertex = iter.next();
vertex->setHasDownstreamClkPin(true);

View File

@ -1096,8 +1096,6 @@ Sta::makeGeneratedClock(const char *name,
bool add_to_pins,
Pin *src_pin,
Clock *master_clk,
Pin *pll_out,
Pin *pll_fdbk,
int divide_by,
int multiply_by,
float duty_cycle,
@ -1109,7 +1107,6 @@ Sta::makeGeneratedClock(const char *name,
{
sdc_->makeGeneratedClock(name, pins, add_to_pins,
src_pin, master_clk,
pll_out, pll_fdbk,
divide_by, multiply_by, duty_cycle,
invert, combinational,
edges, edge_shifts, comment);

View File

@ -445,6 +445,13 @@ proc all_registers { args } {
set edge_triggered 1
set level_sensitive 1
}
if { [expr [info exists flags(-cells)] \
+ [info exists flags(-data_pins)] \
+ [info exists flags(-clock_pins)] \
+ [info exists flags(-async_pins)] \
+ [info exists flags(-output_pins)]] > 1 } {
sta_error 807 "only one of -cells, -data_pins, -clock_pins, -async_pins, -output_pins are suppported."
}
if [info exists flags(-cells)] {
return [find_register_instances $clks $clk_rf \
$edge_triggered $level_sensitive]
@ -1139,13 +1146,12 @@ define_cmd_args "create_generated_clock" \
[-divide_by divisor | -multiply_by multiplier]\
[-duty_cycle duty_cycle] [-invert] [-edges edge_list]\
[-edge_shift edge_shift_list] [-combinational] [-add]\
[-pll_output pll_out_pin] [-pll_feedback pll_fdbk_pin]\
[-comment comment] port_pin_list}
proc create_generated_clock { args } {
parse_key_args "create_generated_clock" args keys \
{-name -source -master_clock -divide_by -multiply_by \
-duty_cycle -edges -edge_shift -pll_output -pll_feedback -comment} \
-duty_cycle -edges -edge_shift -comment} \
flags {-invert -combinational -add}
check_argc_eq1 "create_generated_clock" $args
@ -1187,8 +1193,6 @@ proc create_generated_clock { args } {
set duty_cycle 0
set edges {}
set edge_shifts {}
set pll_out "NULL"
set pll_feedback "NULL"
set combinational [info exists flags(-combinational)]
@ -1264,31 +1268,9 @@ proc create_generated_clock { args } {
sta_error 539 "-duty_cycle requires -multiply_by value."
}
if { [info exists keys(-pll_feedback)] || [info exists keys(-pll_output)] } {
if {![info exists keys(-pll_output)] } {
sta_error 540 "missing -pll_output argument."
}
if { ![info exists keys(-pll_feedback)] } {
sta_error 541 "missing -pll_feedback argument."
}
set pll_feedback [get_pin_error "-pll_feedback" $keys(-pll_feedback)]
set pll_out [get_pin_error "-pll_output" $keys(-pll_output)]
set pll_inst [$pll_out instance]
if { [$pll_feedback instance] != $pll_inst } {
sta_error 542 "PLL output and feedback pins must be on the same instance."
}
if { [$source_pin instance] != $pll_inst } {
sta_error 543 "source pin must be on the same instance as the PLL output pin."
}
if { [lsearch $pins $pll_out] == -1 } {
sta_error 544 "PLL output must be one of the clock pins."
}
}
set comment [parse_comment_key keys]
make_generated_clock $name $pins $add $source_pin $master_clk \
$pll_out $pll_feedback \
$divide_by $multiply_by $duty_cycle $invert $combinational \
$edges $edge_shifts $comment
}

View File

@ -2990,8 +2990,6 @@ make_generated_clock(const char *name,
bool add_to_pins,
Pin *src_pin,
Clock *master_clk,
Pin *pll_out,
Pin *pll_fdbk,
int divide_by,
int multiply_by,
float duty_cycle,
@ -3003,7 +3001,7 @@ make_generated_clock(const char *name,
{
cmdLinkedNetwork();
Sta::sta()->makeGeneratedClock(name, pins, add_to_pins,
src_pin, master_clk, pll_out, pll_fdbk,
src_pin, master_clk,
divide_by, multiply_by, duty_cycle, invert,
combinational, edges, edge_shifts,
comment);