read_spef rm -incremental

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2022-10-05 21:46:05 -07:00
parent 21bbbcfee9
commit daef0031e2
10 changed files with 44 additions and 58 deletions

Binary file not shown.

Binary file not shown.

View File

@ -1113,7 +1113,6 @@ public:
Instance *instance, Instance *instance,
const Corner *corner, const Corner *corner,
const MinMaxAll *min_max, const MinMaxAll *min_max,
bool increment,
bool pin_cap_included, bool pin_cap_included,
bool keep_coupling_caps, bool keep_coupling_caps,
float coupling_cap_factor, float coupling_cap_factor,

View File

@ -1,19 +1,20 @@
Warning: 705 duplicated
0001 DmpCeff.cc:1597 cell %s delay model not supported on SPF parasitics by DMP delay calculator 0001 DmpCeff.cc:1597 cell %s delay model not supported on SPF parasitics by DMP delay calculator
0002 Liberty.cc:748 cell %s/%s port %s not found in cell %s/%s. 0002 Liberty.cc:748 cell %s/%s port %s not found in cell %s/%s.
0003 Liberty.cc:774 cell %s/%s %s -> %s timing group %s not found in cell %s/%s. 0003 Liberty.cc:774 cell %s/%s %s -> %s timing group %s not found in cell %s/%s.
0004 Liberty.cc:1638 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with %s -> %s setup_%s check. 0004 Liberty.cc:1680 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with %s -> %s setup_%s check.
0005 Liberty.cc:1652 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function positive sense. 0005 Liberty.cc:1694 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function positive sense.
0006 Liberty.cc:1660 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function negative sense. 0006 Liberty.cc:1702 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function negative sense.
0007 LibertyExpr.cc:78 %s references unknown port %s. 0007 LibertyExpr.cc:78 %s references unknown port %s.
0008 ConcreteNetwork.cc:1855 cell type %s can not be linked. 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. 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. 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. 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. 0013 Genclks.cc:987 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. 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. 0016 LibertyReader.cc:996 default_max_fanout is 0.0.
0017 Sta.cc:2083 '%s' is not a valid endpoint. 0017 Sta.cc:2094 '%s' is not a valid endpoint.
0018 Sta.cc:2007 '%s' is not a valid start point. 0018 Sta.cc:2018 '%s' is not a valid start point.
0021 SpefParse.yy:805 %d is not positive. 0021 SpefParse.yy:805 %d is not positive.
0022 SpefParse.yy:814 %.4f is not positive. 0022 SpefParse.yy:814 %.4f is not positive.
0023 SpefParse.yy:820 %.4f is not positive. 0023 SpefParse.yy:820 %.4f is not positive.
@ -161,7 +162,7 @@
0166 LibertyReader.cc:2290 timing group from output port. 0166 LibertyReader.cc:2290 timing group from output port.
0167 LibertyReader.cc:2308 timing group from output port. 0167 LibertyReader.cc:2308 timing group from output port.
0168 LibertyReader.cc:2323 timing group from output port. 0168 LibertyReader.cc:2323 timing group from output port.
0179 SpefReader.cc:728 %s. 0179 SpefReader.cc:725 %s.
0190 VerilogReader.cc:1728 %s is not a verilog module. 0190 VerilogReader.cc:1728 %s is not a verilog module.
0191 VerilogReader.cc:1733 %s is not a verilog module. 0191 VerilogReader.cc:1733 %s is not a verilog module.
0201 StaTcl.i:129 no network has been linked. 0201 StaTcl.i:129 no network has been linked.
@ -192,10 +193,10 @@
0261 Search.cc:2869 max tag index exceeded 0261 Search.cc:2869 max tag index exceeded
0262 Search.cc:3561 unexpected filter path 0262 Search.cc:3561 unexpected filter path
0263 Search.cc:3729 tns incr existing vertex 0263 Search.cc:3729 tns incr existing vertex
0264 Sta.cc:4132 corresponding timing arc set not found in equiv cells 0264 Sta.cc:4150 corresponding timing arc set not found in equiv cells
0265 TagGroup.cc:297 tag group missing tag 0265 TagGroup.cc:297 tag group missing tag
0266 Sta.cc:2080 '%s' is not a valid endpoint. 0266 Sta.cc:2091 '%s' is not a valid endpoint.
0267 Sta.cc:2004 '%s' is not a valid start point. 0267 Sta.cc:2015 '%s' is not a valid start point.
0272 StaTcl.i:4168 unknown common clk pessimism mode. 0272 StaTcl.i:4168 unknown common clk pessimism mode.
0273 StaTcl.i:5187 unknown clock sense 0273 StaTcl.i:5187 unknown clock sense
0300 Util.tcl:218 no commands match '$pattern'. 0300 Util.tcl:218 no commands match '$pattern'.
@ -294,8 +295,8 @@
0428 Sta.tcl:861 set_assigned_transition transition is not a float. 0428 Sta.tcl:861 set_assigned_transition transition is not a float.
0430 Sdf.tcl:46 -cond_use min_max cannot be used with analysis type single. 0430 Sdf.tcl:46 -cond_use min_max cannot be used with analysis type single.
0432 Sdf.tcl:157 SDF -divider must be / or . 0432 Sdf.tcl:157 SDF -divider must be / or .
0433 Parasitics.tcl:47 path instance '$path' not found. 0433 Parasitics.tcl:45 path instance '$path' not found.
0434 Parasitics.tcl:65 -reduce_to must be pi_elmore or pi_pole_residue2. 0434 Parasitics.tcl:62 -reduce_to must be pi_elmore or pi_pole_residue2.
0435 DelayCalc.tcl:119 delay calculator $alg not found. 0435 DelayCalc.tcl:119 delay calculator $alg not found.
0436 Variables.tcl:45 sta_report_default_digits must be a positive integer. 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. 0437 Variables.tcl:70 sta_crpr_mode must be pin or transition.
@ -485,3 +486,5 @@
0702 LibertyWriter.cc:436 3 axis table models not supported. 0702 LibertyWriter.cc:436 3 axis table models not supported.
0703 LibertyWriter.cc:576 %s/%s/%s timing arc type %s not supported. 0703 LibertyWriter.cc:576 %s/%s/%s timing arc type %s not supported.
0704 LibertyWriter.cc:289 %s/%s bundled ports not supported. 0704 LibertyWriter.cc:289 %s/%s bundled ports not supported.
0705 LumpedCapDelayCalc.cc:168 gate delay input variable is NaN
0705 Liberty.cc:793 Liberty cell %s/%s for corner %s/%s not found

View File

@ -38,7 +38,6 @@ read_spef_cmd(const char *filename,
Instance *instance, Instance *instance,
const Corner *corner, const Corner *corner,
const MinMaxAll *min_max, const MinMaxAll *min_max,
bool increment,
bool pin_cap_included, bool pin_cap_included,
bool keep_coupling_caps, bool keep_coupling_caps,
float coupling_cap_factor, float coupling_cap_factor,
@ -48,9 +47,9 @@ read_spef_cmd(const char *filename,
{ {
cmdLinkedNetwork(); cmdLinkedNetwork();
return Sta::sta()->readSpef(filename, instance, corner, min_max, return Sta::sta()->readSpef(filename, instance, corner, min_max,
increment, pin_cap_included, pin_cap_included, keep_coupling_caps,
keep_coupling_caps, coupling_cap_factor, coupling_cap_factor, reduce_to,
reduce_to, delete_after_reduce, quiet); delete_after_reduce, quiet);
} }
void void

View File

@ -21,7 +21,6 @@ define_cmd_args "read_spef" \
[-min]\ [-min]\
[-max]\ [-max]\
[-path path]\ [-path path]\
[-increment]\
[-pin_cap_included]\ [-pin_cap_included]\
[-keep_capacitive_coupling]\ [-keep_capacitive_coupling]\
[-coupling_reduction_factor factor]\ [-coupling_reduction_factor factor]\
@ -34,8 +33,7 @@ define_cmd_args "read_spef" \
proc_redirect read_spef { proc_redirect read_spef {
parse_key_args "read_spef" args \ parse_key_args "read_spef" args \
keys {-path -coupling_reduction_factor -reduce_to -corner} \ keys {-path -coupling_reduction_factor -reduce_to -corner} \
flags {-min -max -increment -pin_cap_included \ flags {-min -max -increment -pin_cap_included -keep_capacitive_coupling \
-keep_capacitive_coupling \
-delete_after_reduce -quiet -save} -delete_after_reduce -quiet -save}
check_argc_eq1 "report_spef" $args check_argc_eq1 "report_spef" $args
@ -49,7 +47,6 @@ proc_redirect read_spef {
} }
set corner [parse_corner_or_all keys] set corner [parse_corner_or_all keys]
set min_max [parse_min_max_all_flags flags] set min_max [parse_min_max_all_flags flags]
set increment [info exists flags(-increment)]
set coupling_reduction_factor 1.0 set coupling_reduction_factor 1.0
if [info exists keys(-coupling_reduction_factor)] { if [info exists keys(-coupling_reduction_factor)] {
set coupling_reduction_factor $keys(-coupling_reduction_factor) set coupling_reduction_factor $keys(-coupling_reduction_factor)
@ -69,7 +66,10 @@ proc_redirect read_spef {
set quiet [info exists flags(-quiet)] set quiet [info exists flags(-quiet)]
set save [info exists flags(-save)] set save [info exists flags(-save)]
set filename [file nativename [lindex $args 0]] set filename [file nativename [lindex $args 0]]
return [read_spef_cmd $filename $instance $corner $min_max $increment \ if { [info exists flags(-increment)] } {
sta_warn 706 "read_spef -increment is deprecated."
}
return [read_spef_cmd $filename $instance $corner $min_max \
$pin_cap_included $keep_coupling_caps $coupling_reduction_factor \ $pin_cap_included $keep_coupling_caps $coupling_reduction_factor \
$reduce_to $delete_after_reduce $quiet] $reduce_to $delete_after_reduce $quiet]
} }

View File

@ -45,7 +45,6 @@ bool
readSpefFile(const char *filename, readSpefFile(const char *filename,
Instance *instance, Instance *instance,
ParasiticAnalysisPt *ap, ParasiticAnalysisPt *ap,
bool increment,
bool pin_cap_included, bool pin_cap_included,
bool keep_coupling_caps, bool keep_coupling_caps,
float coupling_cap_factor, float coupling_cap_factor,
@ -63,7 +62,7 @@ readSpefFile(const char *filename,
// Use zlib to uncompress gzip'd files automagically. // Use zlib to uncompress gzip'd files automagically.
gzFile stream = gzopen(filename, "rb"); gzFile stream = gzopen(filename, "rb");
if (stream) { if (stream) {
SpefReader reader(filename, stream, instance, ap, increment, SpefReader reader(filename, stream, instance, ap,
pin_cap_included, keep_coupling_caps, coupling_cap_factor, pin_cap_included, keep_coupling_caps, coupling_cap_factor,
reduce_to, delete_after_reduce, op_cond, corner, reduce_to, delete_after_reduce, op_cond, corner,
cnst_min_max, quiet, report, network, parasitics); cnst_min_max, quiet, report, network, parasitics);
@ -83,7 +82,6 @@ SpefReader::SpefReader(const char *filename,
gzFile stream, gzFile stream,
Instance *instance, Instance *instance,
ParasiticAnalysisPt *ap, ParasiticAnalysisPt *ap,
bool increment,
bool pin_cap_included, bool pin_cap_included,
bool keep_coupling_caps, bool keep_coupling_caps,
float coupling_cap_factor, float coupling_cap_factor,
@ -99,7 +97,6 @@ SpefReader::SpefReader(const char *filename,
filename_(filename), filename_(filename),
instance_(instance), instance_(instance),
ap_(ap), ap_(ap),
increment_(increment),
pin_cap_included_(pin_cap_included), pin_cap_included_(pin_cap_included),
keep_coupling_caps_(keep_coupling_caps), keep_coupling_caps_(keep_coupling_caps),
reduce_to_(reduce_to), reduce_to_(reduce_to),
@ -391,7 +388,7 @@ void
SpefReader::rspfBegin(Net *net, SpefReader::rspfBegin(Net *net,
SpefTriple *total_cap) SpefTriple *total_cap)
{ {
if (net && !increment_) if (net)
parasitics_->deleteParasitics(net, ap_); parasitics_->deleteParasitics(net, ap_);
// Net total capacitance is ignored. // Net total capacitance is ignored.
delete total_cap; delete total_cap;
@ -407,19 +404,15 @@ SpefReader::rspfDrvrBegin(Pin *drvr_pin,
SpefRspfPi *pi) SpefRspfPi *pi)
{ {
if (drvr_pin) { if (drvr_pin) {
// Incremental parasitics do not overwrite existing parasitics. float c2 = pi->c2()->value(triple_index_) * cap_scale_;
if (!(increment_ && float rpi = pi->r1()->value(triple_index_) * res_scale_;
parasitics_->findPiElmore(drvr_pin, RiseFall::rise(), ap_))) { float c1 = pi->c1()->value(triple_index_) * cap_scale_;
float c2 = pi->c2()->value(triple_index_) * cap_scale_; // Delete pi model and elmore delays.
float rpi = pi->r1()->value(triple_index_) * res_scale_; parasitics_->deleteParasitics(drvr_pin, ap_);
float c1 = pi->c1()->value(triple_index_) * cap_scale_; // Only one parasitic, save it under rise transition.
// Delete pi model and elmore delays. parasitic_ = parasitics_->makePiElmore(drvr_pin,
parasitics_->deleteParasitics(drvr_pin, ap_); RiseFall::rise(),
// Only one parasitic, save it under rise transition. ap_, c2, rpi, c1);
parasitic_ = parasitics_->makePiElmore(drvr_pin,
RiseFall::rise(),
ap_, c2, rpi, c1);
}
} }
delete pi; delete pi;
} }
@ -447,8 +440,12 @@ SpefReader::dspfBegin(Net *net,
SpefTriple *total_cap) SpefTriple *total_cap)
{ {
if (net) { if (net) {
Net *parasitic_owner = net; if (network_->isTopInstance(instance_)) {
if (!network_->isTopInstance(instance_)) { parasitics_->deleteReducedParasitics(net, ap_);
parasitic_ = parasitics_->makeParasiticNetwork(net, pin_cap_included_, ap_);
}
else {
Net *parasitic_owner = net;
NetTermIterator *term_iter = network_->termIterator(net); NetTermIterator *term_iter = network_->termIterator(net);
if (term_iter->hasNext()) { if (term_iter->hasNext()) {
Term *term = term_iter->next(); Term *term = term_iter->next();
@ -456,19 +453,11 @@ SpefReader::dspfBegin(Net *net,
parasitic_owner = network_->net(hpin); parasitic_owner = network_->net(hpin);
} }
delete term_iter; delete term_iter;
}
// Incremental parasitics do not overwrite existing parasitics.
if (increment_) {
parasitic_ = parasitics_->findParasiticNetwork(parasitic_owner, ap_); parasitic_ = parasitics_->findParasiticNetwork(parasitic_owner, ap_);
if( parasitic_ == nullptr) if (parasitic_ == nullptr)
parasitic_ = parasitics_->makeParasiticNetwork(parasitic_owner, parasitic_ = parasitics_->makeParasiticNetwork(parasitic_owner,
pin_cap_included_, ap_); pin_cap_included_, ap_);
} }
else {
parasitics_->deleteReducedParasitics(parasitic_owner, ap_);
parasitic_ = parasitics_->makeParasiticNetwork(parasitic_owner,
pin_cap_included_, ap_);
}
net_ = net; net_ = net;
} }
else { else {

View File

@ -39,7 +39,6 @@ bool
readSpefFile(const char *filename, readSpefFile(const char *filename,
Instance *instance, Instance *instance,
ParasiticAnalysisPt *ap, ParasiticAnalysisPt *ap,
bool increment,
bool pin_cap_included, bool pin_cap_included,
bool keep_coupling_caps, bool keep_coupling_caps,
float coupling_cap_factor, float coupling_cap_factor,

View File

@ -49,7 +49,6 @@ public:
gzFile stream, gzFile stream,
Instance *instance, Instance *instance,
ParasiticAnalysisPt *ap, ParasiticAnalysisPt *ap,
bool increment,
bool pin_cap_included, bool pin_cap_included,
bool keep_coupling_caps, bool keep_coupling_caps,
float coupling_cap_factor, float coupling_cap_factor,
@ -143,7 +142,6 @@ private:
const char *filename_; const char *filename_;
Instance *instance_; Instance *instance_;
const ParasiticAnalysisPt *ap_; const ParasiticAnalysisPt *ap_;
bool increment_;
bool pin_cap_included_; bool pin_cap_included_;
bool keep_coupling_caps_; bool keep_coupling_caps_;
ReducedParasiticType reduce_to_; ReducedParasiticType reduce_to_;

View File

@ -3827,7 +3827,6 @@ Sta::readSpef(const char *filename,
Instance *instance, Instance *instance,
const Corner *corner, const Corner *corner,
const MinMaxAll *min_max, const MinMaxAll *min_max,
bool increment,
bool pin_cap_included, bool pin_cap_included,
bool keep_coupling_caps, bool keep_coupling_caps,
float coupling_cap_factor, float coupling_cap_factor,
@ -3845,9 +3844,9 @@ Sta::readSpef(const char *filename,
ParasiticAnalysisPt *ap = corner->findParasiticAnalysisPt(cnst_min_max); ParasiticAnalysisPt *ap = corner->findParasiticAnalysisPt(cnst_min_max);
const OperatingConditions *op_cond = const OperatingConditions *op_cond =
sdc_->operatingConditions(cnst_min_max); sdc_->operatingConditions(cnst_min_max);
bool success = readSpefFile(filename, instance, ap, increment, bool success = readSpefFile(filename, instance, ap,
pin_cap_included, pin_cap_included, keep_coupling_caps,
keep_coupling_caps, coupling_cap_factor, coupling_cap_factor,
reduce_to, delete_after_reduce, reduce_to, delete_after_reduce,
op_cond, corner, cnst_min_max, quiet, op_cond, corner, cnst_min_max, quiet,
report_, network_, parasitics_); report_, network_, parasitics_);