From a0ac0dbf16368e152193907f0443ccead98c8bdd Mon Sep 17 00:00:00 2001 From: James Cherry Date: Fri, 22 Dec 2023 12:46:40 -0700 Subject: [PATCH 01/43] CLA Signed-off-by: James Cherry --- doc/CLA.txt | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 doc/CLA.txt diff --git a/doc/CLA.txt b/doc/CLA.txt new file mode 100644 index 00000000..7f479167 --- /dev/null +++ b/doc/CLA.txt @@ -0,0 +1,52 @@ +Parallax Software maintains a responsible open source policy and +promotes good practices in intellectual property management. Please +read this Agreement carefully. By submitting your Contributions (see +definition below) and clicking ["Sign in with GitHub to agree"], you +agree to all of the terms and conditions defined herein. + +Parallax Software, Inc. appreciates your willingness to grant +permission to use your software code checked directly into a source +control system that is available by GitHub Inc ("Contributions") in +conjunction with OpenSTA. By clicking ["Sign in with GitHub to +agree"], you hereby grant to Parallax Software and to recipients of +software distributed with OpenSTA a perpetual, worldwide, +non-exclusive, no-charge, royalty-free, irrevocable license to use, +make, have made, offer to sell, sell, import, reproduce, prepare +derivative works of, publicly display, publicly perform, sublicense, +and distribute your present and future Contributions and such +derivative works as part of OpenSTA. + +Nothing in this license shall constitute a copyright transfer or in +any other way infringe your rights to use your own Contributions for +any other purpose. This license is for your protection as a +Contributor as well as the protection of OpenSTA and its users. + +1. You represent and warrant that you are the sole owner of the +Contributions and/or have sufficient rights in your Contribution to +grant all rights you grant hereunder. + +2. You represent that the Contributions are your original works of +authorship, that you created the Contributions and did not copy them +from another source, and no other person claims, or has the right to +claim, any right in any invention or patent related to the +Contributions. + +3. You represent that you are legally entitled to grant the above +license. If your employer has rights to intellectual property that you +create, you represent that you have received permission to make the +Contributions on behalf of that employer, or that your employer has +waived such rights for the Contributions. + +4. Finally, it means that you have not entered into any agreements +that would prevent you from granting the rights provided in this +Agreement. + +5. You understand that the decision to include the Contribution in any +product or source repository is entirely that of Parallax Software and +this Agreement does not guarantee that the Contributions will be +included in any product, technology or services. + +If you become aware of any facts or circumstances related to the +representation above that would make these representations inaccurate +or untrue, you agree to notify Parallax Software promptly with any +details. From e83607d6611ae2e1603991fd8a4dbf0f28f7fb74 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Fri, 22 Dec 2023 12:51:44 -0700 Subject: [PATCH 02/43] gcc -Wnonnull warning Signed-off-by: James Cherry --- liberty/LibertyBuilder.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/liberty/LibertyBuilder.cc b/liberty/LibertyBuilder.cc index c80a1de7..76de519a 100644 --- a/liberty/LibertyBuilder.cc +++ b/liberty/LibertyBuilder.cc @@ -655,17 +655,17 @@ LibertyBuilder::makeTristateDisableArcs(LibertyCell *cell, TimingArcSet * LibertyBuilder::makeClockTreePathArcs(LibertyCell *cell, - LibertyPort *to_port, - LibertyPort *related_out, - TimingRole *role, - TimingArcAttrsPtr attrs) + LibertyPort *to_port, + LibertyPort *related_out, + TimingRole *role, + TimingArcAttrsPtr attrs) { TimingArcSet *arc_set = makeTimingArcSet(cell, nullptr, to_port, related_out, role, attrs); for (auto to_rf : RiseFall::range()) { TimingModel *model = attrs->model(to_rf); if (model) - makeTimingArc(arc_set, nullptr, to_rf, model); + makeTimingArc(arc_set, nullptr, to_rf->asTransition(), model); } return arc_set; } From 308512670ed3c37843172241772c1d32f61ec6df Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sun, 31 Dec 2023 14:05:58 -0700 Subject: [PATCH 03/43] OutputWaveforms Signed-off-by: James Cherry --- include/sta/TableModel.hh | 27 ++-- liberty/TableModel.cc | 255 ++++++++++++++++++++------------------ 2 files changed, 152 insertions(+), 130 deletions(-) diff --git a/include/sta/TableModel.hh b/include/sta/TableModel.hh index b7d91e6b..039b21e2 100644 --- a/include/sta/TableModel.hh +++ b/include/sta/TableModel.hh @@ -344,7 +344,6 @@ public: bool &extrapolated) const; float findValue(float axis_value1) const; float findValueClip(float axis_value1) const; - float findValueClipZero(float axis_value1) const; FloatSeq *values() const { return values_; } using Table::findValue; @@ -499,23 +498,35 @@ public: float timeCurrent(float slew, float cap, float time); + float timeVoltage(float slew, + float cap, + float time); float voltageCurrent(float slew, float cap, float volt); + float currentVoltage(float slew, + float cap, + float current); float referenceTime(float slew); void setVdd(float vdd); static bool checkAxes(const TableTemplate *tbl_template); private: + float waveformValue(float slew, + float cap, + float axis_value, + Table1Seq &waveforms); float voltageTime1(float voltage, - size_t wave_index, - float cap); - FloatSeq *voltageTimes(size_t wave_index, - float cap); + size_t wave_index); + void ensureVoltages(); void findVoltages(size_t wave_index, float cap); - const Table1 *voltageCurrents(size_t wave_index, - float cap); + void waveformMinMaxTime(float slew, + float cap, + Table1Seq &waveforms, + // Return values. + float &min_time, + float &max_time); // Row. TableAxisPtr slew_axis_; @@ -523,7 +534,9 @@ private: TableAxisPtr cap_axis_; const RiseFall *rf_; Table1Seq current_waveforms_; + Table1Seq voltage_waveforms_; Table1Seq voltage_currents_; + Table1Seq current_voltages_; FloatTable voltage_times_; Table1 *ref_times_; float vdd_; diff --git a/liberty/TableModel.cc b/liberty/TableModel.cc index 43063b56..ff9753dd 100644 --- a/liberty/TableModel.cc +++ b/liberty/TableModel.cc @@ -876,7 +876,7 @@ Table1::findValueClip(float axis_value1) const float x1l = axis1_->axisValue(axis_index1); float x1u = axis1_->axisValue(axis_index1 + 1); if (x1 < x1l) - return this->value(0); + return 0.0; else if (x1 > x1u) return this->value(axis1_->size() - 1); else { @@ -888,27 +888,6 @@ Table1::findValueClip(float axis_value1) const } } -float -Table1::findValueClipZero(float axis_value1) const -{ - if (axis1_->size() == 1) - return this->value(axis_value1); - else { - size_t axis_index1 = axis1_->findAxisIndex(axis_value1); - float x1 = axis_value1; - float x1l = axis1_->axisValue(axis_index1); - float x1u = axis1_->axisValue(axis_index1 + 1); - if (x1 < x1l || x1 > x1u) - return 0.0; - else { - float y1 = this->value(axis_index1); - float y2 = this->value(axis_index1 + 1); - float dx1 = (x1 - x1l) / (x1u - x1l); - return (1 - dx1) * y1 + dx1 * y2; - } - } -} - string Table1::reportValue(const char *result_name, const LibertyCell *cell, @@ -1588,8 +1567,6 @@ OutputWaveforms::OutputWaveforms(TableAxisPtr slew_axis, cap_axis_(cap_axis), rf_(rf), current_waveforms_(current_waveforms), - voltage_currents_(current_waveforms.size()), - voltage_times_(current_waveforms.size()), ref_times_(ref_times), vdd_(0.0) { @@ -1598,7 +1575,9 @@ OutputWaveforms::OutputWaveforms(TableAxisPtr slew_axis, OutputWaveforms::~OutputWaveforms() { current_waveforms_.deleteContents(); + voltage_waveforms_.deleteContents(); voltage_currents_.deleteContents(); + current_voltages_.deleteContents(); voltage_times_.deleteContents(); delete ref_times_; } @@ -1634,6 +1613,42 @@ float OutputWaveforms::timeCurrent(float slew, float cap, float time) +{ + return waveformValue(slew, cap, time, current_waveforms_); +} + +float +OutputWaveforms::timeVoltage(float slew, + float cap, + float time) +{ + ensureVoltages(); + return waveformValue(slew, cap, time, voltage_waveforms_); +} + +float +OutputWaveforms::voltageCurrent(float slew, + float cap, + float volt) +{ + ensureVoltages(); + return waveformValue(slew, cap, volt, voltage_currents_); +} + +float +OutputWaveforms::currentVoltage(float slew, + float cap, + float current) +{ + ensureVoltages(); + return waveformValue(slew, cap, current, current_voltages_); +} + +float +OutputWaveforms::waveformValue(float slew, + float cap, + float axis_value, + Table1Seq &waveforms) { size_t slew_index = slew_axis_->findAxisIndex(slew); size_t cap_index = cap_axis_->findAxisIndex(cap); @@ -1643,10 +1658,10 @@ OutputWaveforms::timeCurrent(float slew, size_t wave_index10 = (slew_index + 1) * cap_count + cap_index; size_t wave_index11 = (slew_index + 1) * cap_count + (cap_index + 1); - const Table1 *waveform00 = current_waveforms_[wave_index00]; - const Table1 *waveform01 = current_waveforms_[wave_index01]; - const Table1 *waveform10 = current_waveforms_[wave_index10]; - const Table1 *waveform11 = current_waveforms_[wave_index11]; + const Table1 *waveform00 = waveforms[wave_index00]; + const Table1 *waveform01 = waveforms[wave_index01]; + const Table1 *waveform10 = waveforms[wave_index10]; + const Table1 *waveform11 = waveforms[wave_index11]; // Interpolate waveform samples at voltage steps. size_t index1 = slew_index; @@ -1660,16 +1675,16 @@ OutputWaveforms::timeCurrent(float slew, float x2u = cap_axis_->axisValue(index2 + 1); float dx2 = (x2 - x2l) / (x2u - x2l); - float y00 = waveform00->findValueClipZero(time); - float y01 = waveform01->findValueClipZero(time); - float y10 = waveform10->findValueClipZero(time); - float y11 = waveform11->findValueClipZero(time); - float current + float y00 = waveform00->findValueClip(axis_value); + float y01 = waveform01->findValueClip(axis_value); + float y10 = waveform10->findValueClip(axis_value); + float y11 = waveform11->findValueClip(axis_value); + float wave_value = (1 - dx1) * (1 - dx2) * y00 + dx1 * (1 - dx2) * y10 + dx1 * dx2 * y11 + (1 - dx1) * dx2 * y01; - return current; + return wave_value; } float @@ -1688,12 +1703,15 @@ Table1 OutputWaveforms::voltageWaveform(float slew, float cap) { - float volt_step = vdd_ / voltage_waveform_step_count_; + ensureVoltages(); + float min_time, max_time; + waveformMinMaxTime(slew, cap, voltage_waveforms_, min_time, max_time); + float time_step = (max_time - min_time) / voltage_waveform_step_count_; FloatSeq *times = new FloatSeq; FloatSeq *volts = new FloatSeq; - for (size_t v = 0; v <= voltage_waveform_step_count_; v++) { - float volt = v * volt_step; - float time = voltageTime(slew, cap, volt); + for (size_t i = 0; i < voltage_waveform_step_count_; i++) { + float time = min_time + i * time_step; + float volt = timeVoltage(slew, cap, time); times->push_back(time); volts->push_back(volt); } @@ -1701,10 +1719,13 @@ OutputWaveforms::voltageWaveform(float slew, return Table1(volts, time_axis); } -float -OutputWaveforms::voltageTime(float slew, - float cap, - float volt) +void +OutputWaveforms::waveformMinMaxTime(float slew, + float cap, + Table1Seq &waveforms, + // Return values. + float &min_time, + float &max_time) { size_t slew_index = slew_axis_->findAxisIndex(slew); size_t cap_index = cap_axis_->findAxisIndex(cap); @@ -1713,8 +1734,36 @@ OutputWaveforms::voltageTime(float slew, size_t wave_index01 = slew_index * cap_count + (cap_index + 1); size_t wave_index10 = (slew_index + 1) * cap_count + cap_index; size_t wave_index11 = (slew_index + 1) * cap_count + (cap_index + 1); - float cap0 = cap_axis_->axisValue(cap_index); - float cap1 = cap_axis_->axisValue(cap_index + 1); + + const Table1 *waveform00 = waveforms[wave_index00]; + const Table1 *waveform01 = waveforms[wave_index01]; + const Table1 *waveform10 = waveforms[wave_index10]; + const Table1 *waveform11 = waveforms[wave_index11]; + + min_time = waveform00->axis1()->min(); + min_time = min(min_time, waveform01->axis1()->min()); + min_time = min(min_time, waveform10->axis1()->min()); + min_time = min(min_time, waveform11->axis1()->min()); + + max_time = waveform00->axis1()->max(); + max_time = max(max_time, waveform01->axis1()->max()); + max_time = max(max_time, waveform10->axis1()->max()); + max_time = max(max_time, waveform11->axis1()->max()); +} + +float +OutputWaveforms::voltageTime(float slew, + float cap, + float volt) +{ + ensureVoltages(); + size_t slew_index = slew_axis_->findAxisIndex(slew); + size_t cap_index = cap_axis_->findAxisIndex(cap); + size_t cap_count = cap_axis_->size(); + size_t wave_index00 = slew_index * cap_count + cap_index; + size_t wave_index01 = slew_index * cap_count + (cap_index + 1); + size_t wave_index10 = (slew_index + 1) * cap_count + cap_index; + size_t wave_index11 = (slew_index + 1) * cap_count + (cap_index + 1); // Interpolate waveform samples at voltage steps. size_t index1 = slew_index; @@ -1728,10 +1777,10 @@ OutputWaveforms::voltageTime(float slew, float x2u = cap_axis_->axisValue(index2 + 1); float dx2 = (x2 - x2l) / (x2u - x2l); - float y00 = voltageTime1(volt, wave_index00, cap0); - float y01 = voltageTime1(volt, wave_index01, cap1); - float y10 = voltageTime1(volt, wave_index10, cap0); - float y11 = voltageTime1(volt, wave_index11, cap1); + float y00 = voltageTime1(volt, wave_index00); + float y01 = voltageTime1(volt, wave_index01); + float y10 = voltageTime1(volt, wave_index10); + float y11 = voltageTime1(volt, wave_index11); float time = (1 - dx1) * (1 - dx2) * y00 + dx1 * (1 - dx2) * y10 @@ -1742,10 +1791,9 @@ OutputWaveforms::voltageTime(float slew, float OutputWaveforms::voltageTime1(float voltage, - size_t wave_index, - float cap) + size_t wave_index) { - FloatSeq *voltage_times = voltageTimes(wave_index, cap); + FloatSeq *voltage_times = voltage_times_[wave_index]; float volt_step = vdd_ / voltage_waveform_step_count_; size_t volt_idx = voltage / volt_step; float time0 = (*voltage_times)[volt_idx]; @@ -1754,16 +1802,23 @@ OutputWaveforms::voltageTime1(float voltage, return time; } -FloatSeq * -OutputWaveforms::voltageTimes(size_t wave_index, - float cap) +void +OutputWaveforms::ensureVoltages() { - FloatSeq *voltage_times = voltage_times_[wave_index]; - if (voltage_times == nullptr) { - findVoltages(wave_index, cap); - voltage_times = voltage_times_[wave_index]; + if (voltage_waveforms_.empty()) { + size_t size = current_waveforms_.size(); + voltage_waveforms_.resize(size); + voltage_currents_.resize(size); + current_voltages_.resize(size); + voltage_times_.resize(size); + size_t cap_count = cap_axis_->size(); + for (size_t slew_index = 0; slew_index < slew_axis_->size(); slew_index++) { + for (size_t cap_index = 0; cap_index < cap_axis_->size(); cap_index++) { + size_t wave_index = slew_index * cap_count + cap_index; + findVoltages(wave_index, cap_axis_->axisValue(cap_index)); + } + } } - return voltage_times; } void @@ -1774,13 +1829,13 @@ OutputWaveforms::findVoltages(size_t wave_index, criticalError(239, "output waveform vdd = 0.0"); // Integrate current waveform to find voltage waveform. // i = C dv/dt - FloatSeq volts; + FloatSeq *volts = new FloatSeq; Table1 *currents = current_waveforms_[wave_index]; const TableAxis *time_axis = currents->axis1(); float prev_time = time_axis->axisValue(0); float prev_current = currents->value(0); float voltage = 0.0; - volts.push_back(voltage); + volts->push_back(voltage); bool always_rise = true; bool invert = (always_rise && rf_ == RiseFall::fall()); for (size_t i = 1; i < time_axis->size(); i++) { @@ -1788,37 +1843,47 @@ OutputWaveforms::findVoltages(size_t wave_index, float current = currents->value(i); float dv = (current + prev_current) / 2.0 * (time - prev_time) / cap; voltage += invert ? -dv : dv; - volts.push_back(voltage); + volts->push_back(voltage); prev_time = time; prev_current = current; } + Table1 *volt_table = new Table1(volts, currents->axis1ptr()); + voltage_waveforms_[wave_index] = volt_table; // Make voltage -> current table. - FloatSeq *axis_volts = new FloatSeq(volts); + FloatSeq *axis_volts = new FloatSeq(*volts); TableAxisPtr volt_axis = make_shared(TableAxisVariable::input_voltage, axis_volts); FloatSeq *currents1 = new FloatSeq(*currents->values()); Table1 *volt_currents = new Table1(currents1, volt_axis); voltage_currents_[wave_index] = volt_currents; + // Make current -> voltage table. + FloatSeq *axis_currents = new FloatSeq(*currents->values()); + TableAxisPtr current_axis = + make_shared(TableAxisVariable::input_voltage, axis_currents); + FloatSeq *volts1 = new FloatSeq(*volts); + Table1 *current_volts = new Table1(volts1, current_axis); + current_voltages_[wave_index] = current_volts; + // Sample the voltage waveform at uniform intervals to speed up // voltage time lookup. FloatSeq *voltage_times = new FloatSeq; float volt_step = vdd_ / voltage_waveform_step_count_; size_t i = 0; float time0 = time_axis->axisValue(i); - float volt0 = volts[i]; + float volt0 = (*volts)[i]; i = 1; float time1 = time_axis->axisValue(i); - float volt1 = volts[i]; + float volt1 = (*volts)[i]; for (size_t v = 0; v <= voltage_waveform_step_count_; v++) { float volt3 = v * volt_step; - while (volt3 > volt1 && i < volts.size() - 1) { + while (volt3 > volt1 && i < volts->size() - 1) { time0 = time1; volt0 = volt1; i++; time1 = time_axis->axisValue(i); - volt1 = volts[i]; + volt1 = (*volts)[i]; } float time3 = time0 + (time1 - time0) * (volt3 - volt0) / (volt1 - volt0); voltage_times->push_back(time3); @@ -1826,62 +1891,6 @@ OutputWaveforms::findVoltages(size_t wave_index, voltage_times_[wave_index] = voltage_times; } -float -OutputWaveforms::voltageCurrent(float slew, - float cap, - float volt) -{ - size_t slew_index = slew_axis_->findAxisIndex(slew); - size_t cap_index = cap_axis_->findAxisIndex(cap); - size_t cap_count = cap_axis_->size(); - size_t wave_index00 = slew_index * cap_count + cap_index; - size_t wave_index01 = slew_index * cap_count + (cap_index + 1); - size_t wave_index10 = (slew_index + 1) * cap_count + cap_index; - size_t wave_index11 = (slew_index + 1) * cap_count + (cap_index + 1); - float cap0 = cap_axis_->axisValue(cap_index); - float cap1 = cap_axis_->axisValue(cap_index + 1); - - // Interpolate waveform samples at voltage steps. - size_t index1 = slew_index; - size_t index2 = cap_index; - float x1 = slew; - float x2 = cap; - float x1l = slew_axis_->axisValue(index1); - float x1u = slew_axis_->axisValue(index1 + 1); - float dx1 = (x1 - x1l) / (x1u - x1l); - float x2l = cap_axis_->axisValue(index2); - float x2u = cap_axis_->axisValue(index2 + 1); - float dx2 = (x2 - x2l) / (x2u - x2l); - - const Table1 *waveform00 = voltageCurrents(wave_index00, cap0); - const Table1 *waveform01 = voltageCurrents(wave_index01, cap1); - const Table1 *waveform10 = voltageCurrents(wave_index10, cap0); - const Table1 *waveform11 = voltageCurrents(wave_index11, cap1); - - float y00 = waveform00->findValueClipZero(volt); - float y01 = waveform01->findValueClipZero(volt); - float y10 = waveform10->findValueClipZero(volt); - float y11 = waveform11->findValueClipZero(volt); - float current - = (1 - dx1) * (1 - dx2) * y00 - + dx1 * (1 - dx2) * y10 - + dx1 * dx2 * y11 - + (1 - dx1) * dx2 * y01; - return current; -} - -const Table1 * -OutputWaveforms::voltageCurrents(size_t wave_index, - float cap) -{ - const Table1 *waveform = voltage_currents_[wave_index]; - if (waveform == nullptr) { - findVoltages(wave_index, cap); - waveform = voltage_currents_[wave_index]; - } - return waveform; -} - //////////////////////////////////////////////////////////////// DriverWaveform::DriverWaveform(const char *name, From b7522cdd253b24bf9a2d775d58d2c44390074f2d Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sun, 31 Dec 2023 14:06:13 -0700 Subject: [PATCH 04/43] write_path_spice check for default lib Signed-off-by: James Cherry --- search/WritePathSpice.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/search/WritePathSpice.cc b/search/WritePathSpice.cc index 55b763b1..372b9752 100644 --- a/search/WritePathSpice.cc +++ b/search/WritePathSpice.cc @@ -283,6 +283,8 @@ writePathSpice(Path *path, const char *gnd_name, StaState *sta) { + if (sta->network()->defaultLibertyLibrary() == nullptr) + sta->report()->error(20, "No liberty libraries found,"); WritePathSpice writer(path, spice_filename, subckt_filename, lib_subckt_filename, model_filename, off_path_pin_names, power_name, gnd_name, sta); @@ -313,7 +315,7 @@ WritePathSpice::WritePathSpice(Path *path, short_ckt_resistance_(.0001), clk_cycle_count_(3) { - bool exists; + bool exists = false; default_library_->supplyVoltage(power_name_, power_voltage_, exists); if (!exists) { DcalcAnalysisPt *dcalc_ap = path_->dcalcAnalysisPt(this); From 7e329b10de7c1c78e6ecf6c75cd6e44d04a51f05 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sun, 31 Dec 2023 14:06:58 -0700 Subject: [PATCH 05/43] error number conflict Signed-off-by: James Cherry --- messages.txt | 655 +++++++++++++++++++++++++------------------------ power/Power.cc | 2 +- 2 files changed, 332 insertions(+), 325 deletions(-) diff --git a/messages.txt b/messages.txt index 7fb38f8f..14719e8c 100644 --- a/messages.txt +++ b/messages.txt @@ -1,183 +1,185 @@ -0001 DmpCeff.cc:1597 cell %s delay model not supported on SPF parasitics by DMP delay calculator -0002 Liberty.cc:770 cell %s/%s port %s not found in cell %s/%s. -0003 Liberty.cc:796 cell %s/%s %s -> %s timing group %s not found in cell %s/%s. -0004 Liberty.cc:1745 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with %s -> %s setup_%s check. -0005 Liberty.cc:1759 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function positive sense. -0006 Liberty.cc:1767 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function negative sense. +0001 DmpCeff.cc:1598 cell %s delay model not supported on SPF parasitics by DMP delay calculator +0002 Liberty.cc:766 cell %s/%s port %s not found in cell %s/%s. +0003 Liberty.cc:792 cell %s/%s %s -> %s timing group %s not found in cell %s/%s. +0004 Liberty.cc:1748 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with %s -> %s setup_%s check. +0005 Liberty.cc:1762 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function positive sense. +0006 Liberty.cc:1770 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function negative sense. 0007 LibertyExpr.cc:82 %s references unknown port %s. -0008 ConcreteNetwork.cc:1909 cell type %s can not be linked. +0008 ConcreteNetwork.cc:1923 cell type %s can not be linked. 0009 CycleAccting.cc:87 No common period was found between clocks %s and %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:865 propagated logic value %c differs from constraint value of %c on pin %s. -0016 LibertyReader.cc:1041 default_max_fanout is 0.0. -0017 Sta.cc:2093 '%s' is not a valid endpoint. -0018 Sta.cc:2017 '%s' is not a valid start point. +0015 Sim.cc:864 propagated logic value %c differs from constraint value of %c on pin %s. +0016 LibertyReader.cc:1042 default_max_fanout is 0.0. +0017 Sta.cc:2108 '%s' is not a valid endpoint. +0018 Sta.cc:2032 '%s' is not a valid start point. +0020 WritePathSpice.cc:287 No liberty libraries found, 0021 SpefParse.yy:805 %d is not positive. 0022 SpefParse.yy:814 %.4f is not positive. 0023 SpefParse.yy:820 %.4f is not positive. -0024 WritePathSpice.cc:508 pg_pin %s/%s voltage %s not found, -0025 WritePathSpice.cc:515 Liberty pg_port %s/%s missing voltage_name attribute, -0026 WritePathSpice.cc:1094 %s pg_port %s not found, -0027 WritePathSpice.cc:1149 no register/latch found for path from %s to %s, -0028 WritePathSpice.cc:1615 The subkct file %s is missing definitions for %s -0029 WritePathSpice.cc:1713 subckt %s port %s has no corresponding liberty port, pg_port and is not power or ground. -0030 LibertyReader.cc:631 library missing name. -0031 LibertyReader.cc:657 default_wire_load %s not found. -0032 LibertyReader.cc:668 default_wire_selection %s not found. -0033 LibertyReader.cc:690 input_threshold_pct_%s not found. -0034 LibertyReader.cc:694 output_threshold_pct_%s not found. -0035 LibertyReader.cc:698 slew_lower_threshold_pct_%s not found. -0036 LibertyReader.cc:702 slew_upper_threshold_pct_%s not found. -0037 LibertyReader.cc:707 Library %s is missing one or more thresholds. -0038 LibertyReader.cc:786 unknown unit multiplier %s. -0039 LibertyReader.cc:809 unknown unit scale %c. -0040 LibertyReader.cc:812 unknown unit suffix %s. -0041 LibertyReader.cc:840 capacitive_load_units are not ff or pf. -0042 LibertyReader.cc:843 capacitive_load_units are not a string. -0043 LibertyReader.cc:846 capacitive_load_units missing suffix. -0044 LibertyReader.cc:849 capacitive_load_units scale is not a float. -0045 LibertyReader.cc:852 capacitive_load_units missing scale and suffix. -0046 LibertyReader.cc:855 capacitive_load_unit missing values suffix. -0047 LibertyReader.cc:873 delay_model %s not supported. -0048 LibertyReader.cc:877 delay_model %s not supported. -0049 LibertyReader.cc:881 delay_model %s not supported. -0050 LibertyReader.cc:886 delay_model %s not supported. +0024 WritePathSpice.cc:510 pg_pin %s/%s voltage %s not found, +0025 WritePathSpice.cc:517 Liberty pg_port %s/%s missing voltage_name attribute, +0026 WritePathSpice.cc:1096 %s pg_port %s not found, +0027 WritePathSpice.cc:1151 no register/latch found for path from %s to %s, +0028 WritePathSpice.cc:1617 The subkct file %s is missing definitions for %s +0029 WritePathSpice.cc:1715 subckt %s port %s has no corresponding liberty port, pg_port and is not power or ground. +0030 LibertyReader.cc:632 library missing name. +0031 LibertyReader.cc:658 default_wire_load %s not found. +0032 LibertyReader.cc:669 default_wire_selection %s not found. +0033 LibertyReader.cc:691 input_threshold_pct_%s not found. +0034 LibertyReader.cc:695 output_threshold_pct_%s not found. +0035 LibertyReader.cc:699 slew_lower_threshold_pct_%s not found. +0036 LibertyReader.cc:703 slew_upper_threshold_pct_%s not found. +0037 LibertyReader.cc:708 Library %s is missing one or more thresholds. +0038 LibertyReader.cc:787 unknown unit multiplier %s. +0039 LibertyReader.cc:810 unknown unit scale %c. +0040 LibertyReader.cc:813 unknown unit suffix %s. +0041 LibertyReader.cc:841 capacitive_load_units are not ff or pf. +0042 LibertyReader.cc:844 capacitive_load_units are not a string. +0043 LibertyReader.cc:847 capacitive_load_units missing suffix. +0044 LibertyReader.cc:850 capacitive_load_units scale is not a float. +0045 LibertyReader.cc:853 capacitive_load_units missing scale and suffix. +0046 LibertyReader.cc:856 capacitive_load_unit missing values suffix. +0047 LibertyReader.cc:874 delay_model %s not supported. +0048 LibertyReader.cc:878 delay_model %s not supported. +0049 LibertyReader.cc:882 delay_model %s not supported. +0050 LibertyReader.cc:887 delay_model %s not supported. . -0051 LibertyReader.cc:889 unknown delay_model %s +0051 LibertyReader.cc:890 unknown delay_model %s . -0052 LibertyReader.cc:908 unknown bus_naming_style format. -0053 LibertyReader.cc:597 library %s already exists. -0054 LibertyReader.cc:929 voltage_map voltage is not a float. -0055 LibertyReader.cc:932 voltage_map missing voltage. -0056 LibertyReader.cc:935 voltage_map supply name is not a string. -0057 LibertyReader.cc:938 voltage_map missing supply name and voltage. -0058 LibertyReader.cc:941 voltage_map missing values suffix. -0059 LibertyReader.cc:1159 default_wire_load_mode %s not found. -0060 LibertyReader.cc:680 default_operating_condition %s not found. -0061 LibertyReader.cc:1330 table template missing name. -0062 LibertyReader.cc:1375 missing variable_%d attribute. +0052 LibertyReader.cc:909 unknown bus_naming_style format. +0053 LibertyReader.cc:598 library %s already exists. +0054 LibertyReader.cc:930 voltage_map voltage is not a float. +0055 LibertyReader.cc:933 voltage_map missing voltage. +0056 LibertyReader.cc:936 voltage_map supply name is not a string. +0057 LibertyReader.cc:939 voltage_map missing supply name and voltage. +0058 LibertyReader.cc:942 voltage_map missing values suffix. +0059 LibertyReader.cc:1160 default_wire_load_mode %s not found. +0060 LibertyReader.cc:681 default_operating_condition %s not found. +0061 LibertyReader.cc:1331 table template missing name. +0062 LibertyReader.cc:1376 missing variable_%d attribute. 0063 LibertyReader.cc:1418 axis type %s not supported. -0064 LibertyReader.cc:1478 bus type %s missing bit_from. -0065 LibertyReader.cc:1480 bus type %s missing bit_to. -0066 LibertyReader.cc:1484 type missing name. -0067 LibertyReader.cc:1511 scaling_factors do not have a name. -0068 LibertyReader.cc:1679 operating_conditions missing name. -0069 LibertyReader.cc:1749 wire_load missing name. -0070 LibertyReader.cc:1792 fanout_length is missing length and fanout. -0071 LibertyReader.cc:1807 wire_load_selection missing name. -0072 LibertyReader.cc:1838 wireload %s not found. -0074 LibertyReader.cc:1845 wire_load_from_area min not a float. -0075 LibertyReader.cc:1848 wire_load_from_area max not a float. -0076 LibertyReader.cc:1851 wire_load_from_area missing parameters. -0077 LibertyReader.cc:1854 wire_load_from_area missing parameters. -0078 LibertyReader.cc:1871 cell missing name. -0079 LibertyReader.cc:1894 cell %s ocv_derate_group %s not found. -0080 LibertyReader.cc:1925 port %s function size does not match port size. -0081 LibertyReader.cc:1981 %s %s bus width mismatch. -0082 LibertyReader.cc:1992 %s %s bus width mismatch. -0083 LibertyReader.cc:2002 clear -0084 LibertyReader.cc:2012 preset -0085 LibertyReader.cc:2048 latch enable function is non-unate for port %s. -0086 LibertyReader.cc:2053 latch enable function is unknown for port %s. -0087 LibertyReader.cc:2125 operating conditions %s not found. -0088 LibertyReader.cc:2128 scaled_cell missing operating condition. -0089 LibertyReader.cc:2131 scaled_cell cell %s has not been defined. -0090 LibertyReader.cc:2134 scaled_cell missing name. -0091 LibertyReader.cc:2160 scaled_cell %s, %s port functions do not match cell port functions. -0092 LibertyReader.cc:2165 scaled_cell ports do not match cell ports. -0093 LibertyReader.cc:2167 scaled_cell %s, %s timing does not match cell timing. -0094 LibertyReader.cc:2186 combinational timing to an input port. -0095 LibertyReader.cc:2277 missing %s_transition. -0096 LibertyReader.cc:2279 missing cell_%s. -0099 LibertyReader.cc:2877 scaling_factors %s not found. -0100 LibertyReader.cc:2918 pin name is not a string. -0101 LibertyReader.cc:2935 pin name is not a string. -0102 LibertyReader.cc:2949 pin name is not a string. -0103 LibertyReader.cc:3027 bus %s bus_type not found. -0104 LibertyReader.cc:3079 bus_type %s not found. -0105 LibertyReader.cc:3082 bus_type is not a string. -0106 LibertyReader.cc:3100 bundle %s member not found. -0107 LibertyReader.cc:3123 member is not a string. -0108 LibertyReader.cc:3130 members attribute is missing values. -0109 LibertyReader.cc:3181 unknown port direction. -0110 LibertyReader.cc:3521 pulse_latch unknown pulse type. -0111 LibertyReader.cc:3891 unknown timing_type %s. -0112 LibertyReader.cc:3911 unknown timing_sense %s. -0113 LibertyReader.cc:3951 mode value is not a string. -0114 LibertyReader.cc:3954 missing mode value. -0115 LibertyReader.cc:3957 mode name is not a string. -0116 LibertyReader.cc:3960 mode missing values. -0117 LibertyReader.cc:3963 mode missing mode name and value. -0118 LibertyReader.cc:2526 unsupported model axis. -0119 LibertyReader.cc:4066 unsupported model axis. -0120 LibertyReader.cc:4095 unsupported model axis. -0121 LibertyReader.cc:4130 unsupported model axis. -0122 LibertyReader.cc:4185 table template %s not found. -0123 LibertyReader.cc:4264 %s is missing values. -0124 LibertyReader.cc:4287 %s is not a list of floats. -0125 LibertyReader.cc:4289 table row has %u columns but axis has %d. -0126 LibertyReader.cc:4299 table has %u rows but axis has %d. -0127 LibertyReader.cc:4350 lut output is not a string. -0128 LibertyReader.cc:4392 mode definition missing name. -0129 LibertyReader.cc:4409 mode value missing name. -0130 LibertyReader.cc:4423 when attribute inside table model. -0131 LibertyReader.cc:4472 %s attribute is not a string. -0132 LibertyReader.cc:4475 %s is not a simple attribute. -0133 LibertyReader.cc:4498 %s is not a simple attribute. -0134 LibertyReader.cc:4511 %s is not a simple attribute. -0135 LibertyReader.cc:4537 %s value %s is not a float. -0136 LibertyReader.cc:4566 %s missing values. -0137 LibertyReader.cc:4570 %s missing values. -0138 LibertyReader.cc:4573 %s is not a complex attribute. -0139 LibertyReader.cc:4599 %s is not a float. -0140 LibertyReader.cc:4622 %s is missing values. -0141 LibertyReader.cc:4625 %s has more than one string. -0142 LibertyReader.cc:4634 %s is missing values. -0143 LibertyReader.cc:4659 %s attribute is not boolean. -0144 LibertyReader.cc:4662 %s attribute is not boolean. -0145 LibertyReader.cc:4665 %s is not a simple attribute. -0146 LibertyReader.cc:4681 attribute %s value %s not recognized. -0147 LibertyReader.cc:4712 unknown early/late value. -0148 LibertyReader.cc:4932 OCV derate group named %s not found. -0149 LibertyReader.cc:4948 ocv_derate missing name. -0150 LibertyReader.cc:5001 unknown rise/fall. -0151 LibertyReader.cc:5021 unknown derate type. -0152 LibertyReader.cc:5053 unsupported model axis. -0153 LibertyReader.cc:5085 unsupported model axis. -0154 LibertyReader.cc:5117 unsupported model axis. -0155 LibertyReader.cc:5188 unknown pg_type. -0156 LibertyReader.cc:5583 port %s subscript out of range. -0157 LibertyReader.cc:5587 port range %s of non-bus port %s. -0158 LibertyReader.cc:5601 port %s not found. -0159 LibertyReader.cc:5671 port %s not found. -0160 LibertyReader.cc:1026 default_max_transition is 0.0. -0161 LibertyReader.cc:3415 max_transition is 0.0. -0162 LibertyReader.cc:4495 %s attribute is not an integer. -0163 LibertyReader.cc:1131 default_fanout_load is 0.0. -0164 LibertyReader.cc:2299 timing group from output port. -0165 LibertyReader.cc:2309 timing group from output port. -0166 LibertyReader.cc:2319 timing group from output port. -0167 LibertyReader.cc:2337 timing group from output port. -0168 LibertyReader.cc:2353 timing group from output port. -0169 LibertyReader.cc:4367 cell %s test_cell redefinition. -0170 LibertyReader.cc:3810 timing group missing related_pin/related_bus_pin. -0171 LibertyReader.cc:815 unknown unit suffix %s. -0179 SpefReader.cc:734 %s. +0064 LibertyReader.cc:1490 bus type %s missing bit_from. +0065 LibertyReader.cc:1492 bus type %s missing bit_to. +0066 LibertyReader.cc:1496 type missing name. +0067 LibertyReader.cc:1523 scaling_factors do not have a name. +0068 LibertyReader.cc:1692 operating_conditions missing name. +0069 LibertyReader.cc:1763 wire_load missing name. +0070 LibertyReader.cc:1806 fanout_length is missing length and fanout. +0071 LibertyReader.cc:1821 wire_load_selection missing name. +0072 LibertyReader.cc:1852 wireload %s not found. +0074 LibertyReader.cc:1859 wire_load_from_area min not a float. +0075 LibertyReader.cc:1862 wire_load_from_area max not a float. +0076 LibertyReader.cc:1865 wire_load_from_area missing parameters. +0077 LibertyReader.cc:1868 wire_load_from_area missing parameters. +0078 LibertyReader.cc:1887 cell missing name. +0079 LibertyReader.cc:1910 cell %s ocv_derate_group %s not found. +0080 LibertyReader.cc:1941 port %s function size does not match port size. +0081 LibertyReader.cc:1997 %s %s bus width mismatch. +0082 LibertyReader.cc:2008 %s %s bus width mismatch. +0083 LibertyReader.cc:2018 clear +0084 LibertyReader.cc:2028 preset +0085 LibertyReader.cc:2064 latch enable function is non-unate for port %s. +0086 LibertyReader.cc:2069 latch enable function is unknown for port %s. +0087 LibertyReader.cc:2141 operating conditions %s not found. +0088 LibertyReader.cc:2144 scaled_cell missing operating condition. +0089 LibertyReader.cc:2147 scaled_cell cell %s has not been defined. +0090 LibertyReader.cc:2150 scaled_cell missing name. +0091 LibertyReader.cc:2176 scaled_cell %s, %s port functions do not match cell port functions. +0092 LibertyReader.cc:2181 scaled_cell ports do not match cell ports. +0093 LibertyReader.cc:2183 scaled_cell %s, %s timing does not match cell timing. +0094 LibertyReader.cc:2202 combinational timing to an input port. +0095 LibertyReader.cc:2297 missing %s_transition. +0096 LibertyReader.cc:2299 missing cell_%s. +0099 LibertyReader.cc:2928 scaling_factors %s not found. +0100 LibertyReader.cc:2969 pin name is not a string. +0101 LibertyReader.cc:2986 pin name is not a string. +0102 LibertyReader.cc:3000 pin name is not a string. +0103 LibertyReader.cc:3078 bus %s bus_type not found. +0104 LibertyReader.cc:3130 bus_type %s not found. +0105 LibertyReader.cc:3133 bus_type is not a string. +0106 LibertyReader.cc:3151 bundle %s member not found. +0107 LibertyReader.cc:3174 member is not a string. +0108 LibertyReader.cc:3181 members attribute is missing values. +0109 LibertyReader.cc:3232 unknown port direction. +0110 LibertyReader.cc:3572 pulse_latch unknown pulse type. +0111 LibertyReader.cc:3942 unknown timing_type %s. +0112 LibertyReader.cc:3962 unknown timing_sense %s. +0113 LibertyReader.cc:4002 mode value is not a string. +0114 LibertyReader.cc:4005 missing mode value. +0115 LibertyReader.cc:4008 mode name is not a string. +0116 LibertyReader.cc:4011 mode missing values. +0117 LibertyReader.cc:4014 mode missing mode name and value. +0118 LibertyReader.cc:2566 unsupported model axis. +0119 LibertyReader.cc:4117 unsupported model axis. +0120 LibertyReader.cc:4146 unsupported model axis. +0121 LibertyReader.cc:4181 unsupported model axis. +0122 LibertyReader.cc:4236 table template %s not found. +0123 LibertyReader.cc:4320 %s is missing values. +0124 LibertyReader.cc:4343 %s is not a list of floats. +0125 LibertyReader.cc:4345 table row has %u columns but axis has %d. +0126 LibertyReader.cc:4355 table has %u rows but axis has %d. +0127 LibertyReader.cc:4406 lut output is not a string. +0128 LibertyReader.cc:4448 mode definition missing name. +0129 LibertyReader.cc:4465 mode value missing name. +0130 LibertyReader.cc:4479 when attribute inside table model. +0131 LibertyReader.cc:4528 %s attribute is not a string. +0132 LibertyReader.cc:4531 %s is not a simple attribute. +0133 LibertyReader.cc:4554 %s is not a simple attribute. +0134 LibertyReader.cc:4567 %s is not a simple attribute. +0135 LibertyReader.cc:4593 %s value %s is not a float. +0136 LibertyReader.cc:4622 %s missing values. +0137 LibertyReader.cc:4626 %s missing values. +0138 LibertyReader.cc:4629 %s is not a complex attribute. +0139 LibertyReader.cc:4655 %s is not a float. +0140 LibertyReader.cc:4678 %s is missing values. +0141 LibertyReader.cc:4681 %s has more than one string. +0142 LibertyReader.cc:4690 %s is missing values. +0143 LibertyReader.cc:4715 %s attribute is not boolean. +0144 LibertyReader.cc:4718 %s attribute is not boolean. +0145 LibertyReader.cc:4721 %s is not a simple attribute. +0146 LibertyReader.cc:4737 attribute %s value %s not recognized. +0147 LibertyReader.cc:4768 unknown early/late value. +0148 LibertyReader.cc:4988 OCV derate group named %s not found. +0149 LibertyReader.cc:5004 ocv_derate missing name. +0150 LibertyReader.cc:5057 unknown rise/fall. +0151 LibertyReader.cc:5077 unknown derate type. +0152 LibertyReader.cc:5109 unsupported model axis. +0153 LibertyReader.cc:5141 unsupported model axis. +0154 LibertyReader.cc:5173 unsupported model axis. +0155 LibertyReader.cc:5244 unknown pg_type. +0156 LibertyReader.cc:5639 port %s subscript out of range. +0157 LibertyReader.cc:5643 port range %s of non-bus port %s. +0158 LibertyReader.cc:5657 port %s not found. +0159 LibertyReader.cc:5727 port %s not found. +0160 LibertyReader.cc:1027 default_max_transition is 0.0. +0161 LibertyReader.cc:3466 max_transition is 0.0. +0162 LibertyReader.cc:4551 %s attribute is not an integer. +0163 LibertyReader.cc:1132 default_fanout_load is 0.0. +0164 LibertyReader.cc:2319 timing group from output port. +0165 LibertyReader.cc:2329 timing group from output port. +0166 LibertyReader.cc:2339 timing group from output port. +0167 LibertyReader.cc:2357 timing group from output port. +0168 LibertyReader.cc:2373 timing group from output port. +0169 LibertyReader.cc:4423 cell %s test_cell redefinition. +0170 LibertyReader.cc:3861 timing group missing related_pin/related_bus_pin. +0171 LibertyReader.cc:816 unknown unit suffix %s. +0172 LibertyReader.cc:1452 missing table index values. +0173 LibertyReader.cc:1458 non-increasing table index values. 0201 StaTcl.i:118 no network has been linked. 0202 StaTcl.i:132 network does not support edits. 0204 StaTcl.i:4129 POCV support requires compilation with SSTA=1. 0206 LibertyExpr.cc:175 %s %s. -0207 GraphDelayCalc1.cc:738 port not found in cell +0207 GraphDelayCalc.cc:491 port not found in cell 0208 Graph.cc:793 arc_delay_annotated array bounds exceeded 0209 Graph.cc:808 arc_delay_annotated array bounds exceeded 0210 Graph.cc:820 arc_delay_annotated array bounds exceeded 0211 SdcNetwork.cc:1095 inst path string lenth estimate busted 0212 SdcNetwork.cc:1167 inst path string lenth estimate exceeded -0213 Sdc.cc:4021 group path name and is_default are mutually exclusive. +0213 Sdc.cc:4058 group path name and is_default are mutually exclusive. 0214 WriteSdc.cc:1254 unknown exception type -0215 WriteSdc.cc:1795 illegal set_logic value -0216 WriteSdc.cc:1836 invalid set_case_analysis value +0215 WriteSdc.cc:1796 illegal set_logic value +0216 WriteSdc.cc:1837 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 @@ -191,81 +193,82 @@ 0261 Search.cc:2890 max tag index exceeded 0262 Search.cc:3617 unexpected filter path 0263 Search.cc:3785 tns incr existing vertex -0264 Sta.cc:4215 corresponding timing arc set not found in equiv cells +0264 Sta.cc:4228 corresponding timing arc set not found in equiv cells 0265 TagGroup.cc:297 tag group missing tag -0266 Sta.cc:2090 '%s' is not a valid endpoint. -0267 Sta.cc:2014 '%s' is not a valid start point. +0266 Sta.cc:2105 '%s' is not a valid endpoint. +0267 Sta.cc:2029 '%s' is not a valid start point. 0272 StaTcl.i:4115 unknown common clk pessimism mode. 0273 StaTcl.i:5064 unknown clock sense 0274 VerilogReader.cc:1782 %s is not a verilog module. 0275 VerilogReader.cc:1787 %s is not a verilog module. -0299 Power.tcl:241 activity cannot be set on clock ports. +0299 Power.tcl:243 activity cannot be set on clock ports. 0300 CmdUtil.tcl:44 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 -0303 Sdc.tcl:1586 -clock ignored for clock objects. -0304 Sdc.tcl:2178 -from/-to keywords ignored for lib_pin, port and pin arguments. +0301 Power.tcl:220 activity should be 0.0 to 1.0 or 2.0 +0302 Power.tcl:228 duty should be 0.0 to 1.0 +0303 Sdc.tcl:1582 -clock ignored for clock objects. +0304 Sdc.tcl:2174 -from/-to keywords ignored for lib_pin, port and pin arguments. 0305 CmdArgs.tcl:166 object '$obj' not found. 0313 CmdArgs.tcl:873 unsupported object type $object_type. 0314 CmdArgs.tcl:888 $arg_name must be a single net. 0315 CmdArgs.tcl:894 $arg_name '$object_type' is not a net. 0316 CmdArgs.tcl:899 $arg_name '$arg' not found. +0317 CmdArgs.tcl:918 unsupported object type $object_type. 0318 Search.tcl:1060 unknown path group '$name'. 0319 Sdc.tcl:288 $unit scale [format %.0e $scale] does not match library scale [format %.0e $unit_scale]. 0320 Sdc.tcl:437 current_design for other than top cell not supported. -0321 Sdc.tcl:474 patterns argument not supported with -of_objects. -0322 Sdc.tcl:509 instance '$pattern' not found. -0323 Sdc.tcl:570 clock '$pattern' not found. -0324 Sdc.tcl:597 positional arguments not supported with -of_objects. -0325 Sdc.tcl:623 library '$lib_name' not found. -0326 Sdc.tcl:635 cell '$cell_pattern' not found. -0327 Sdc.tcl:682 library/cell/port '$pattern' not found. -0328 Sdc.tcl:702 port '$port_pattern' not found. -0329 Sdc.tcl:707 library '$lib_name' not found. -0330 Sdc.tcl:717 -nocase ignored without -regexp. -0331 Sdc.tcl:743 library '$pattern' not found. -0332 Sdc.tcl:806 patterns argument not supported with -of_objects. -0333 Sdc.tcl:830 net '$pattern' not found. -0334 Sdc.tcl:859 patterns argument not supported with -of_objects. -0335 Sdc.tcl:896 pin '$pattern' not found. -0336 Sdc.tcl:953 patterns argument not supported with -of_objects. -0337 Sdc.tcl:967 port '$pattern' not found. -0338 Sdc.tcl:1065 non-increasing clock -waveform edge times. -0339 Sdc.tcl:1068 -waveform time greater than two periods. -0341 Sdc.tcl:1443 extra positional argument $arg. -0342 Sdc.tcl:1536 -clock ignored for clock objects. -0343 Sdc.tcl:1626 set_sense -type data not supported. -0344 Sdc.tcl:1641 set_clock_sense is deprecated as of SDC 2.1. Use set_sense -type clock. -0345 Sdc.tcl:1653 -pulse argument not supported. -0346 Sdc.tcl:1662 -positive, -negative, -stop_propagation and -pulse are mutually exclusive. -0347 Sdc.tcl:1675 hierarchical pin '[get_full_name $pin]' not supported. -0348 Sdc.tcl:2041 -from/-to keywords ignored for lib_pin, port and pin arguments. -0349 Sdc.tcl:1441 unknown keyword argument $arg. -0350 Sdc.tcl:2288 -from, -through or -to required. -0351 Sdc.tcl:2367 -source_latency_included ignored with -reference_pin. -0352 Sdc.tcl:2370 -network_latency_included ignored with -reference_pin. -0353 Sdc.tcl:2389 $cmd not allowed on [pin_direction $pin] port '[get_full_name $pin]'. -0354 Sdc.tcl:2391 $cmd relative to a clock defined on the same port/pin not allowed. -0355 Sdc.tcl:2445 '$args' ignored. -0356 Sdc.tcl:2575 '$args' ignored. -0357 Sdc.tcl:2710 virtual clock [get_name $clk] can not be propagated. -0358 Sdc.tcl:2884 -multiply_by ignored. -0359 Sdc.tcl:2887 -dont_scale ignored. -0360 Sdc.tcl:2890 -no_design_rule ignored. -0361 Sdc.tcl:2937 -clock not supported. -0362 Sdc.tcl:2940 -clock_fall not supported. -0363 Sdc.tcl:2986 -pin_load not allowed for net objects. -0364 Sdc.tcl:2989 -wire_load not allowed for net objects. -0365 Sdc.tcl:2992 -rise/-fall not allowed for net objects. -0366 Sdc.tcl:3125 -data_path, -clock_path, -rise, -fall ignored for ports and designs. -0367 Sdc.tcl:3196 derating factor greater than 2.0. -0368 Sdc.tcl:3233 -cell_delay and -cell_check flags ignored for net objects. -0369 Sdc.tcl:3303 no valid objects specified for $key. -0370 Sdc.tcl:3336 no valid objects specified for $key -0371 Sdc.tcl:3497 set_wire_load_min_block_size not supported. +0321 Sdc.tcl:473 patterns argument not supported with -of_objects. +0322 Sdc.tcl:506 instance '$pattern' not found. +0323 Sdc.tcl:566 clock '$pattern' not found. +0324 Sdc.tcl:592 positional arguments not supported with -of_objects. +0325 Sdc.tcl:619 library '$lib_name' not found. +0326 Sdc.tcl:631 cell '$cell_pattern' not found. +0327 Sdc.tcl:678 library/cell/port '$pattern' not found. +0328 Sdc.tcl:698 port '$port_pattern' not found. +0329 Sdc.tcl:703 library '$lib_name' not found. +0330 Sdc.tcl:713 -nocase ignored without -regexp. +0331 Sdc.tcl:739 library '$pattern' not found. +0332 Sdc.tcl:802 patterns argument not supported with -of_objects. +0333 Sdc.tcl:826 net '$pattern' not found. +0334 Sdc.tcl:855 patterns argument not supported with -of_objects. +0335 Sdc.tcl:892 pin '$pattern' not found. +0336 Sdc.tcl:949 patterns argument not supported with -of_objects. +0337 Sdc.tcl:963 port '$pattern' not found. +0338 Sdc.tcl:1061 non-increasing clock -waveform edge times. +0339 Sdc.tcl:1064 -waveform time greater than two periods. +0341 Sdc.tcl:1439 extra positional argument $arg. +0342 Sdc.tcl:1532 -clock ignored for clock objects. +0343 Sdc.tcl:1622 set_sense -type data not supported. +0344 Sdc.tcl:1637 set_clock_sense is deprecated as of SDC 2.1. Use set_sense -type clock. +0345 Sdc.tcl:1649 -pulse argument not supported. +0346 Sdc.tcl:1658 -positive, -negative, -stop_propagation and -pulse are mutually exclusive. +0347 Sdc.tcl:1671 hierarchical pin '[get_full_name $pin]' not supported. +0348 Sdc.tcl:2037 -from/-to keywords ignored for lib_pin, port and pin arguments. +0349 Sdc.tcl:1437 unknown keyword argument $arg. +0350 Sdc.tcl:2284 -from, -through or -to required. +0351 Sdc.tcl:2363 -source_latency_included ignored with -reference_pin. +0352 Sdc.tcl:2366 -network_latency_included ignored with -reference_pin. +0353 Sdc.tcl:2385 $cmd not allowed on [pin_direction $pin] port '[get_full_name $pin]'. +0354 Sdc.tcl:2387 $cmd relative to a clock defined on the same port/pin not allowed. +0355 Sdc.tcl:2441 '$args' ignored. +0356 Sdc.tcl:2571 '$args' ignored. +0357 Sdc.tcl:2706 virtual clock [get_name $clk] can not be propagated. +0358 Sdc.tcl:2880 -multiply_by ignored. +0359 Sdc.tcl:2883 -dont_scale ignored. +0360 Sdc.tcl:2886 -no_design_rule ignored. +0361 Sdc.tcl:2933 -clock not supported. +0362 Sdc.tcl:2936 -clock_fall not supported. +0363 Sdc.tcl:2982 -pin_load not allowed for net objects. +0364 Sdc.tcl:2985 -wire_load not allowed for net objects. +0365 Sdc.tcl:2988 -rise/-fall not allowed for net objects. +0366 Sdc.tcl:3121 -data_path, -clock_path, -rise, -fall ignored for ports and designs. +0367 Sdc.tcl:3192 derating factor greater than 2.0. +0368 Sdc.tcl:3229 -cell_delay and -cell_check flags ignored for net objects. +0369 Sdc.tcl:3299 no valid objects specified for $key. +0370 Sdc.tcl:3332 no valid objects specified for $key +0371 Sdc.tcl:3493 set_wire_load_min_block_size not supported. 0372 NetworkEdit.tcl:137 connect_pins is deprecated. Use connect_pin. -0373 Sdc.tcl:3663 define_corners must be called before read_liberty. -0374 Sta.cc:2416 maximum corner count exceeded +0373 Sdc.tcl:3670 define_corners must be called before read_liberty. +0374 Sta.cc:2431 maximum corner count exceeded 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. @@ -318,19 +321,19 @@ 0451 DelayCalc.tcl:259 $cmd missing -to argument. 0452 DelayCalc.tcl:274 $cmd missing -setup|-hold|-recovery|-removal check type.. 0453 DelayCalc.tcl:282 $cmd check_value is not a float. -0454 Sdc.tcl:1472 the -all and -name options are mutually exclusive. -0455 Sdc.tcl:1475 either -all or -name options must be specified. -0456 Sdc.tcl:1483 one of -logically_exclusive, -physically_exclusive or -asynchronous is required. -0457 Sdc.tcl:1486 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive. -0458 Sdc.tcl:1598 -source '[$pin path_name]' is not a clock pin. -0459 Sdc.tcl:1866 -from/-to must be used together. -0460 Sdc.tcl:1886 -rise, -fall options not allowed for single clock uncertainty. -0461 Sdc.tcl:1987 missing -from, -rise_from or -fall_from argument. -0462 Sdc.tcl:1999 missing -to, -rise_to or -fall_to argument. -0463 Sdc.tcl:2230 -from/-to hierarchical instance not supported. -0464 Sdc.tcl:2632 $cmd command failed. -0465 Sdc.tcl:2639 positional arguments not supported. -0466 Sdc.tcl:2643 -from, -through or -to required. +0454 Sdc.tcl:1468 the -all and -name options are mutually exclusive. +0455 Sdc.tcl:1471 either -all or -name options must be specified. +0456 Sdc.tcl:1479 one of -logically_exclusive, -physically_exclusive or -asynchronous is required. +0457 Sdc.tcl:1482 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive. +0458 Sdc.tcl:1594 -source '[$pin path_name]' is not a clock pin. +0459 Sdc.tcl:1862 -from/-to must be used together. +0460 Sdc.tcl:1882 -rise, -fall options not allowed for single clock uncertainty. +0461 Sdc.tcl:1983 missing -from, -rise_from or -fall_from argument. +0462 Sdc.tcl:1995 missing -to, -rise_to or -fall_to argument. +0463 Sdc.tcl:2226 -from/-to hierarchical instance not supported. +0464 Sdc.tcl:2628 $cmd command failed. +0465 Sdc.tcl:2635 positional arguments not supported. +0466 Sdc.tcl:2639 -from, -through or -to required. 0467 CmdArgs.tcl:108 unsupported object type $object_type. 0468 CmdArgs.tcl:405 $corner_name is not the name of process corner. 0469 CmdArgs.tcl:410 -corner keyword required with multi-corner analysis. @@ -380,71 +383,71 @@ 0513 Sdc.tcl:212 hierarchy separator must be one of '$sdc_dividers'. 0514 Sdc.tcl:259 unknown unit $unit '$suffix'. 0515 CmdUtil.tcl:161 unknown $unit unit '$suffix'. -0516 Sdc.tcl:543 unsupported instance -filter expression. -0517 Sdc.tcl:928 unsupported pin -filter expression. -0518 Sdc.tcl:1004 unsupported port -filter expression. -0519 Sdc.tcl:1037 -add requires -name. -0520 Sdc.tcl:1042 -name or port_pin_list must be specified. -0521 Sdc.tcl:1050 missing -period argument. -0522 Sdc.tcl:1056 -waveform edge_list must have an even number of edge times. -0523 Sdc.tcl:1126 empty ports/pins/nets argument. -0524 Sdc.tcl:1134 -add requires -name. -0525 Sdc.tcl:1139 name or port_pin_list must be specified. -0526 Sdc.tcl:1146 missing -source argument. -0527 Sdc.tcl:1161 -master_clock argument empty. -0528 Sdc.tcl:1164 -add requireds -master_clock. -0529 Sdc.tcl:1168 -multiply_by and -divide_by options are exclusive. -0530 Sdc.tcl:1172 -divide_by is not an integer greater than one. -0531 Sdc.tcl:1175 -combinational implies -divide_by 1. -0532 Sdc.tcl:1180 -multiply_by is not an integer greater than one. -0533 Sdc.tcl:1186 -duty_cycle is not a float between 0 and 100. -0534 Sdc.tcl:1192 -edges only supported for three edges. -0535 Sdc.tcl:1198 edges times are not monotonically increasing. -0536 Sdc.tcl:1207 -edge_shift length does not match -edges length. -0537 Sdc.tcl:1213 missing -multiply_by, -divide_by, -combinational or -edges argument. -0538 Sdc.tcl:1221 cannot specify -invert without -multiply_by, -divide_by or -combinational. -0539 Sdc.tcl:1227 -duty_cycle requires -multiply_by value. -0545 Sdc.tcl:1287 group_path command failed. -0546 Sdc.tcl:1294 positional arguments not supported. -0547 Sdc.tcl:1298 -from, -through or -to required. -0548 Sdc.tcl:1304 -name and -default are mutually exclusive. -0549 Sdc.tcl:1306 -name or -default option is required. -0550 Sdc.tcl:1347 cannot specify both -high and -low. -0551 Sdc.tcl:1355 missing -setup or -hold argument. -0552 Sdc.tcl:1369 -high and -low only permitted for pins and instances. -0553 Sdc.tcl:1376 -high and -low only permitted for pins and instances. -0554 Sdc.tcl:1419 one of -logically_exclusive, -physically_exclusive or -asynchronous is required. -0555 Sdc.tcl:1422 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive. -0556 Sdc.tcl:1550 -source '[get_full_name $pin]' is not a clock pin. -0557 Sdc.tcl:1557 -early/-late is only allowed with -source. -0558 Sdc.tcl:1630 set_sense -type clock|data -0559 Sdc.tcl:1699 transition time can not be specified for virtual clocks. -0560 Sdc.tcl:1732 missing uncertainty value. -0561 Sdc.tcl:1780 -from/-to must be used together. -0562 Sdc.tcl:1800 -rise, -fall options not allowed for single clock uncertainty. -0563 Sdc.tcl:1927 missing -from, -rise_from or -fall_from argument. -0564 Sdc.tcl:1939 missing -to, -rise_to or -fall_to argument. -0565 Sdc.tcl:2071 -from/-to hierarchical instance not supported. -0566 Sdc.tcl:2103 pin '[get_full_name $inst]${hierarchy_separator}${port_name}' not found. -0567 Sdc.tcl:2144 pin '[get_name $cell]${hierarchy_separator}${port_name}' not found. -0568 Sdc.tcl:2439 missing delay argument. -0569 Sdc.tcl:2570 missing path multiplier argument. -0570 Sdc.tcl:2582 cannot use -start with -end. -0571 Sdc.tcl:2752 value must be 0, zero, 1, one, rise, rising, fall, or falling. -0572 Sdc.tcl:2821 cell '$lib_name:$cell_name' not found. -0573 Sdc.tcl:2827 '$cell_name' not found. -0574 Sdc.tcl:2831 missing -lib_cell argument. -0575 Sdc.tcl:2839 port '$to_port_name' not found. -0576 Sdc.tcl:2851 -pin argument required for cells with multiple outputs. -0577 Sdc.tcl:2866 port '$from_port_name' not found. -0578 Sdc.tcl:3079 port '[get_name $port]' is not an input. -0579 Sdc.tcl:3453 operating condition '$op_cond_name' not found. -0580 Sdc.tcl:3471 operating condition '$op_cond_name' not found. -0581 Sdc.tcl:3485 -analysis_type must be single, bc_wc or on_chip_variation. -0582 Sdc.tcl:3510 mode must be top, enclosed or segmented. -0583 Sdc.tcl:3525 no wire load model specified. -0584 Sdc.tcl:3586 wire load selection group '$selection_name' not found. -0585 Sdc.tcl:3733 no default operating conditions found. +0516 Sdc.tcl:539 unsupported instance -filter expression. +0517 Sdc.tcl:924 unsupported pin -filter expression. +0518 Sdc.tcl:1000 unsupported port -filter expression. +0519 Sdc.tcl:1033 -add requires -name. +0520 Sdc.tcl:1038 -name or port_pin_list must be specified. +0521 Sdc.tcl:1046 missing -period argument. +0522 Sdc.tcl:1052 -waveform edge_list must have an even number of edge times. +0523 Sdc.tcl:1122 empty ports/pins/nets argument. +0524 Sdc.tcl:1130 -add requires -name. +0525 Sdc.tcl:1135 name or port_pin_list must be specified. +0526 Sdc.tcl:1142 missing -source argument. +0527 Sdc.tcl:1157 -master_clock argument empty. +0528 Sdc.tcl:1160 -add requireds -master_clock. +0529 Sdc.tcl:1164 -multiply_by and -divide_by options are exclusive. +0530 Sdc.tcl:1168 -divide_by is not an integer greater than one. +0531 Sdc.tcl:1171 -combinational implies -divide_by 1. +0532 Sdc.tcl:1176 -multiply_by is not an integer greater than one. +0533 Sdc.tcl:1182 -duty_cycle is not a float between 0 and 100. +0534 Sdc.tcl:1188 -edges only supported for three edges. +0535 Sdc.tcl:1194 edges times are not monotonically increasing. +0536 Sdc.tcl:1203 -edge_shift length does not match -edges length. +0537 Sdc.tcl:1209 missing -multiply_by, -divide_by, -combinational or -edges argument. +0538 Sdc.tcl:1217 cannot specify -invert without -multiply_by, -divide_by or -combinational. +0539 Sdc.tcl:1223 -duty_cycle requires -multiply_by value. +0545 Sdc.tcl:1283 group_path command failed. +0546 Sdc.tcl:1290 positional arguments not supported. +0547 Sdc.tcl:1294 -from, -through or -to required. +0548 Sdc.tcl:1300 -name and -default are mutually exclusive. +0549 Sdc.tcl:1302 -name or -default option is required. +0550 Sdc.tcl:1343 cannot specify both -high and -low. +0551 Sdc.tcl:1351 missing -setup or -hold argument. +0552 Sdc.tcl:1365 -high and -low only permitted for pins and instances. +0553 Sdc.tcl:1372 -high and -low only permitted for pins and instances. +0554 Sdc.tcl:1415 one of -logically_exclusive, -physically_exclusive or -asynchronous is required. +0555 Sdc.tcl:1418 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive. +0556 Sdc.tcl:1546 -source '[get_full_name $pin]' is not a clock pin. +0557 Sdc.tcl:1553 -early/-late is only allowed with -source. +0558 Sdc.tcl:1626 set_sense -type clock|data +0559 Sdc.tcl:1695 transition time can not be specified for virtual clocks. +0560 Sdc.tcl:1728 missing uncertainty value. +0561 Sdc.tcl:1776 -from/-to must be used together. +0562 Sdc.tcl:1796 -rise, -fall options not allowed for single clock uncertainty. +0563 Sdc.tcl:1923 missing -from, -rise_from or -fall_from argument. +0564 Sdc.tcl:1935 missing -to, -rise_to or -fall_to argument. +0565 Sdc.tcl:2067 -from/-to hierarchical instance not supported. +0566 Sdc.tcl:2099 pin '[get_full_name $inst]${hierarchy_separator}${port_name}' not found. +0567 Sdc.tcl:2140 pin '[get_name $cell]${hierarchy_separator}${port_name}' not found. +0568 Sdc.tcl:2435 missing delay argument. +0569 Sdc.tcl:2566 missing path multiplier argument. +0570 Sdc.tcl:2578 cannot use -start with -end. +0571 Sdc.tcl:2748 value must be 0, zero, 1, one, rise, rising, fall, or falling. +0572 Sdc.tcl:2817 cell '$lib_name:$cell_name' not found. +0573 Sdc.tcl:2823 '$cell_name' not found. +0574 Sdc.tcl:2827 missing -lib_cell argument. +0575 Sdc.tcl:2835 port '$to_port_name' not found. +0576 Sdc.tcl:2847 -pin argument required for cells with multiple outputs. +0577 Sdc.tcl:2862 port '$from_port_name' not found. +0578 Sdc.tcl:3075 port '[get_name $port]' is not an input. +0579 Sdc.tcl:3449 operating condition '$op_cond_name' not found. +0580 Sdc.tcl:3467 operating condition '$op_cond_name' not found. +0581 Sdc.tcl:3481 -analysis_type must be single, bc_wc or on_chip_variation. +0582 Sdc.tcl:3506 mode must be top, enclosed or segmented. +0583 Sdc.tcl:3521 no wire load model specified. +0584 Sdc.tcl:3582 wire load selection group '$selection_name' not found. +0585 Sdc.tcl:3740 no default operating conditions found. 0586 NetworkEdit.tcl:107 unsupported object type $object_type. 0587 NetworkEdit.tcl:206 unsupported object type $object_type. 0588 NetworkEdit.tcl:224 unsupported object type $object_type. @@ -455,13 +458,14 @@ 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:210 unknown function operator +0596 Sim.cc:209 unknown function operator 0597 EstimateParasitics.cc:188 load pin not leaf or top level -0600 Sdc.tcl:2284 '$args' ignored. -0601 Sdc.tcl:2913 set_fanout_load not supported. -0602 Sdc.tcl:3385 no valid objects specified for $key. +0598 Power.cc:610 unknown function operator +0600 Sdc.tcl:2280 '$args' ignored. +0601 Sdc.tcl:2909 set_fanout_load not supported. +0602 Sdc.tcl:3381 no valid objects specified for $key. 0604 Sdc.tcl:281 unknown $unit prefix '$prefix'. -0605 Sdc.tcl:3547 wire load model '$model_name' not found. +0605 Sdc.tcl:3543 wire load model '$model_name' not found. 0606 Property.tcl:77 get_property unsupported object type $object_type. 0607 StaTcl.i:4367 unknown report path field %s 0608 StaTcl.i:4379 unknown report path field %s @@ -471,7 +475,7 @@ 0612 Sdf.tcl:41 -cond_use must be min, max or min_max. 0616 Search.tcl:1011 specify one of -setup and -hold. 0617 Sdf.tcl:50 -analysis_type is deprecated. Use set_operating_conditions -analysis_type. -0618 DmpCeff.cc:1581 parasitic Pi model has NaNs. +0618 DmpCeff.cc:1582 parasitic Pi model has NaNs. 0619 PathEnum.cc:474 path diversion missing edge. 0620 PathVertex.cc:236 missing arrivals. 0621 PathVertex.cc:250 missing arrivals. @@ -479,31 +483,34 @@ 0623 PathVertexRep.cc:153 missing arrivals. 0624 PathVertexRep.cc:150 missing arrivals 0625 Liberty.tcl:33 -no_latch_infer is deprecated. -0701 LibertyWriter.cc:413 %s/%s/%s timing model not supported. -0702 LibertyWriter.cc:433 3 axis table models not supported. -0703 LibertyWriter.cc:573 %s/%s/%s timing arc type %s not supported. +0701 LibertyWriter.cc:417 %s/%s/%s timing model not supported. +0702 LibertyWriter.cc:437 3 axis table models not supported. +0703 LibertyWriter.cc:581 %s/%s/%s timing arc type %s not supported. 0704 LibertyWriter.cc:286 %s/%s bundled ports not supported. -0705 Liberty.cc:815 Liberty cell %s/%s for corner %s/%s not found. +0705 Liberty.cc:811 Liberty cell %s/%s for corner %s/%s not found. 0706 Parasitics.tcl:70 read_spef -increment is deprecated. -0710 LumpedCapDelayCalc.cc:173 gate delay input variable is NaN +0707 SpefReader.cc:732 %s. +0710 LumpedCapDelayCalc.cc:147 gate delay input variable is NaN 0800 VcdReader.cc:110 unhandled vcd command. 0801 VcdReader.cc:146 timescale syntax error. 0802 VcdReader.cc:160 Unknown timescale unit. -0804 VcdReader.cc:212 Variable syntax error. +0804 VcdReader.cc:217 Variable syntax error. 0805 Vcd.cc:172 Unknown variable %s ID %s -0806 ReadVcdActivities.cc:247 clock %s vcd period %s differs from SDC clock period %s +0806 ReadVcdActivities.cc:251 clock %s vcd period %s differs from SDC clock period %s 0807 Sdc.tcl:394 only one of -cells, -data_pins, -clock_pins, -async_pins, -output_pins are suppported. -0810 MakeTimingModel.cc:203 clock %s pin %s is inside model block. -0900 LibertyReader.cc:2817 level_shifter_type must be HL, LH, or HL_LH -0901 LibertyReader.cc:2853 switch_cell_type must be coarse_grain or fine_grain -0902 LibertyReader.cc:2437 unsupported model axis. -0903 LibertyReader.cc:4146 %s group not in timing group. -0904 LibertyReader.cc:2420 receiver_capacitance group not in timing or pin group. -0906 LibertyReader.cc:4039 unsupported model axis. -0907 LibertyReader.cc:2465 output_current_%s group not in timing group. -0908 LibertyReader.cc:2570 vector reference_time not found. -0912 LibertyReader.cc:2568 vector index_1 and index_2 must have exactly one value. -0913 LibertyReader.cc:2506 output current waveform %.2e %.2e not found. -0914 LibertyReader.cc:2603 normalized_driver_waveform variable_2 must be normalized_voltage -0915 LibertyReader.cc:2606 normalized_driver_waveform variable_1 must be input_net_transition +0808 ReadVcdActivities.cc:107 VCD max time is zero. +0809 ReadVcdActivities.cc:174 problem parsing bus %s. +0810 MakeTimingModel.cc:206 clock %s pin %s is inside model block. +0900 LibertyReader.cc:2868 level_shifter_type must be HL, LH, or HL_LH +0901 LibertyReader.cc:2904 switch_cell_type must be coarse_grain or fine_grain +0902 LibertyReader.cc:2477 unsupported model axis. +0903 LibertyReader.cc:4197 %s group not in timing group. +0904 LibertyReader.cc:2460 receiver_capacitance group not in timing or pin group. +0906 LibertyReader.cc:4090 unsupported model axis. +0907 LibertyReader.cc:2505 output_current_%s group not in timing group. +0908 LibertyReader.cc:2610 vector reference_time not found. +0912 LibertyReader.cc:2608 vector index_1 and index_2 must have exactly one value. +0913 LibertyReader.cc:2546 output current waveform %.2e %.2e not found. +0914 LibertyReader.cc:2643 normalized_driver_waveform variable_2 must be normalized_voltage +0915 LibertyReader.cc:2646 normalized_driver_waveform variable_1 must be input_net_transition 1640 Search.tcl:904 The transition_time field is deprecated. Use slew instead. diff --git a/power/Power.cc b/power/Power.cc index 5350a331..88ab8685 100644 --- a/power/Power.cc +++ b/power/Power.cc @@ -607,7 +607,7 @@ Power::funcBdd(const FuncExpr *expr) result = Cudd_ReadLogicZero(cudd_mgr_); break; default: - report_->critical(596, "unknown function operator"); + report_->critical(598, "unknown function operator"); } if (result) Cudd_Ref(result); From 6ee4340de8d9e8db21e8a0f807aeb1ade4141c4d Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sun, 31 Dec 2023 14:07:11 -0700 Subject: [PATCH 06/43] tags include .i files Signed-off-by: James Cherry --- CMakeLists.txt | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 25573174..f706de89 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -325,8 +325,7 @@ set_property(SOURCE ${STA_SWIG_FILE} -I${STA_HOME}/verilog ) -set_property(SOURCE ${STA_SWIG_FILE} - PROPERTY DEPENDS +set(SWIG_FILES ${STA_HOME}/dcalc/DelayCalc.i ${STA_HOME}/parasitics/Parasitics.i ${STA_HOME}/power/Power.i @@ -335,6 +334,10 @@ set_property(SOURCE ${STA_SWIG_FILE} ${STA_HOME}/tcl/StaTcl.i ${STA_HOME}/tcl/NetworkEdit.i ${STA_HOME}/verilog/Verilog.i + ) + +set_property(SOURCE ${STA_SWIG_FILE} + PROPERTY DEPENDS ${SWIG_FILES} ) swig_add_library(sta_swig @@ -343,16 +346,14 @@ swig_add_library(sta_swig SOURCES ${STA_SWIG_FILE} ) -get_target_property(SWIG_FILES sta_swig SOURCES) +get_target_property(STA_SWIG_CXX_FILE sta_swig SOURCES) -foreach(SWIG_FILE ${SWIG_FILES}) - set_source_files_properties(${SWIG_FILE} - PROPERTIES - # No simple way to modify the swig template that emits code full of warnings - # so suppress them. - COMPILE_OPTIONS "-Wno-cast-qual;-Wno-missing-braces;-Wno-deprecated-declarations" +set_source_files_properties(${STA_SWIG_CXX_FILE} + PROPERTIES + # No simple way to modify the swig template that emits code full of warnings + # so suppress them. + COMPILE_OPTIONS "-Wno-cast-qual;-Wno-missing-braces;-Wno-deprecated-declarations" ) -endforeach() target_link_libraries(sta_swig PUBLIC @@ -578,6 +579,7 @@ add_custom_target(sta_tags etags -o TAGS ${STA_SOURCE} */*.hh include/sta/*.hh + ${SWIG_FILES} ${STA_TCL_FILES} ${SWIG_TCL_FILES} WORKING_DIRECTORY ${STA_HOME} From 03afb36d01969b8dd30773969fc7ef8879a2c712 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sun, 7 Jan 2024 13:44:04 -0700 Subject: [PATCH 07/43] ArcDelayCalc api update for multiple drivers commit a78442d7d6672bfcbea5f5007803ab27891b9eab Author: James Cherry Date: Sun Jan 7 13:40:02 2024 -0700 rm OutputWaveforms::currentVoltage Signed-off-by: James Cherry commit 074e1c93d4957425c0f2a3afdfce8f0e06ff98a1 Author: James Cherry Date: Wed Dec 13 16:49:08 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry commit 0f6deec2ffcbe85a1c473525b93f6a6514692181 Author: James Cherry Date: Wed Dec 13 16:43:24 2023 -0700 MultiDrvrNet remove instead of update Signed-off-by: James Cherry commit 2f5f48fe09bacd101d1e909f45e087ba8c620561 Author: James Cherry Date: Mon Dec 11 09:24:54 2023 -0700 compile errors Signed-off-by: James Cherry commit e8fc4292e325f7ac10bd8e5d57b5a8111abb05ed Author: James Cherry Date: Sat Dec 9 18:25:04 2023 -0700 ArcDcalcWaveforms Signed-off-by: James Cherry commit be114b10adca194d80ac9529e8635c11ed9c1c32 Author: James Cherry Date: Sat Dec 9 11:34:59 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry commit 7b71e137b088c1293e628e594dde6a8223927ee8 Author: James Cherry Date: Sat Dec 9 10:39:30 2023 -0700 GraphDelayCalc::findDriverArcDelays Signed-off-by: James Cherry commit b13a791cd57c5b9f9b454b3cf22959fbe3b9667e Author: James Cherry Date: Fri Dec 8 13:14:09 2023 -0700 unused arg Signed-off-by: James Cherry commit abf90ca7c08fd349cfb68554bdeae5a9c3b91a23 Author: James Cherry Date: Fri Dec 8 13:12:52 2023 -0700 unused arg Signed-off-by: James Cherry commit 6bda70448ef133586594503d78b8838421f7a52d Author: James Cherry Date: Fri Dec 8 13:10:04 2023 -0700 gateDelay rm pvt arg Signed-off-by: James Cherry commit 2f51ed07fa14f039a048c3a146ca1b017fb45f16 Author: James Cherry Date: Fri Dec 8 10:24:57 2023 -0700 dcalc api Signed-off-by: James Cherry commit 362950b9d9aa52f3c331c1007a6ee6a34140812e Author: James Cherry Date: Wed Dec 6 17:00:45 2023 -0700 ArcDcalcResult gateDelay Signed-off-by: James Cherry commit 91f1307ac04752e00dfde42b34e84f66fdb60a57 Author: James Cherry Date: Mon Dec 4 17:22:40 2023 -0700 ArcDcalcArg/Result Signed-off-by: James Cherry commit 74d289e450edf54b1a9215b92c85b1d6a011820d Author: James Cherry Date: Fri Dec 1 17:45:04 2023 -0700 multi drvr init Signed-off-by: James Cherry commit c956838aba74c2f27280253f0452e0350bb05c33 Author: James Cherry Date: Fri Dec 1 12:10:23 2023 -0800 arc dcalc api Signed-off-by: James Cherry commit 5aa2c42833e5f68e901d4ac61d8bef426252e5ab Author: James Cherry Date: Thu Nov 30 15:42:43 2023 -0800 dcalc api Signed-off-by: James Cherry commit 434327b7d80fdf8fe3410390c88b299b46e9139b Author: James Cherry Date: Thu Nov 30 11:36:21 2023 -0800 arc api Signed-off-by: James Cherry commit 263e1dee49d7133653fbe0bad9b8243ba5259548 Author: James Cherry Date: Wed Nov 29 18:48:32 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry commit a9f05513c09564d75cb377a5a89399a250ab5d6b Author: James Cherry Date: Mon Nov 27 10:48:59 2023 -0800 ArcDelayCalc api Signed-off-by: James Cherry Signed-off-by: James Cherry --- CMakeLists.txt | 2 +- ...gradeDelayCalc.hh => ArcDcalcWaveforms.cc} | 26 +- dcalc/ArcDcalcWaveforms.hh | 59 ++ dcalc/ArcDelayCalc.cc | 119 ++- dcalc/Arnoldi.hh | 1 - dcalc/ArnoldiDelayCalc.cc | 261 ++++--- dcalc/DelayCalc.cc | 2 - dcalc/DelayCalc.i | 74 ++ dcalc/DelayCalcBase.cc | 154 ++-- dcalc/DelayCalcBase.hh | 49 +- dcalc/DmpCeff.cc | 159 ++-- dcalc/DmpCeff.hh | 67 +- dcalc/DmpDelayCalc.cc | 270 ++++--- dcalc/GraphDelayCalc.cc | 677 ++++++++++-------- dcalc/LumpedCapDelayCalc.cc | 154 ++-- dcalc/LumpedCapDelayCalc.hh | 64 +- dcalc/ParallelDelayCalc.cc | 182 ++--- dcalc/ParallelDelayCalc.hh | 45 +- dcalc/SlewDegradeDelayCalc.cc | 141 ---- dcalc/UnitDelayCalc.cc | 109 ++- dcalc/UnitDelayCalc.hh | 86 +-- include/sta/ArcDelayCalc.hh | 158 ++-- include/sta/GraphDelayCalc.hh | 76 +- include/sta/LinearModel.hh | 14 +- include/sta/TableModel.hh | 26 +- include/sta/TimingModel.hh | 14 +- liberty/Liberty.cc | 2 +- liberty/LibertyBuilder.cc | 92 +-- liberty/LibertyBuilder.hh | 12 +- liberty/LinearModel.cc | 9 +- liberty/TableModel.cc | 69 +- liberty/TimingArc.cc | 2 +- search/MakeTimingModel.cc | 10 +- 33 files changed, 1619 insertions(+), 1566 deletions(-) rename dcalc/{SlewDegradeDelayCalc.hh => ArcDcalcWaveforms.cc} (54%) create mode 100644 dcalc/ArcDcalcWaveforms.hh delete mode 100644 dcalc/SlewDegradeDelayCalc.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index f706de89..83457ea8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,6 +62,7 @@ set(STA_SOURCE app/StaMain.cc dcalc/ArcDelayCalc.cc + dcalc/ArcDcalcWaveforms.cc dcalc/ArnoldiDelayCalc.cc dcalc/ArnoldiReduce.cc dcalc/DcalcAnalysisPt.cc @@ -73,7 +74,6 @@ set(STA_SOURCE dcalc/LumpedCapDelayCalc.cc dcalc/NetCaps.cc dcalc/ParallelDelayCalc.cc - dcalc/SlewDegradeDelayCalc.cc dcalc/UnitDelayCalc.cc graph/DelayFloat.cc diff --git a/dcalc/SlewDegradeDelayCalc.hh b/dcalc/ArcDcalcWaveforms.cc similarity index 54% rename from dcalc/SlewDegradeDelayCalc.hh rename to dcalc/ArcDcalcWaveforms.cc index 7195985d..6b282596 100644 --- a/dcalc/SlewDegradeDelayCalc.hh +++ b/dcalc/ArcDcalcWaveforms.cc @@ -14,14 +14,30 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -#pragma once +#include "ArcDcalcWaveforms.hh" + namespace sta { -class ArcDelayCalc; -class StaState; +Table1 +ArcDcalcWaveforms::inputWaveform(const Pin *, + const RiseFall *, + const Corner *, + const MinMax *) +{ + return Table1(); +} -ArcDelayCalc * -makeSlewDegradeDelayCalc(StaState *sta); +Table1 +ArcDcalcWaveforms::drvrRampWaveform(const Pin *, + const RiseFall *, + const Pin *, + const RiseFall *, + const Pin *, + const Corner *, + const MinMax *) +{ + return Table1(); +} } // namespace diff --git a/dcalc/ArcDcalcWaveforms.hh b/dcalc/ArcDcalcWaveforms.hh new file mode 100644 index 00000000..a47eff0b --- /dev/null +++ b/dcalc/ArcDcalcWaveforms.hh @@ -0,0 +1,59 @@ +// OpenSTA, Static Timing Analyzer +// Copyright (c) 2023, Parallax Software, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#pragma once + +#include "MinMax.hh" +#include "TableModel.hh" +#include "NetworkClass.hh" + +namespace sta { + +class Corner; +class DcalcAnalysisPt; + +// Abstract class for the graph delay calculator traversal to interface +class ArcDcalcWaveforms +{ +public: + virtual Table1 inputWaveform(const Pin *in_pin, + const RiseFall *in_rf, + const Corner *corner, + const MinMax *min_max); + virtual Table1 drvrWaveform(const Pin *in_pin, + const RiseFall *in_rf, + const Pin *drvr_pin, + const RiseFall *drvr_rf, + const Corner *corner, + const MinMax *min_max) = 0; + virtual Table1 loadWaveform(const Pin *in_pin, + const RiseFall *in_rf, + const Pin *drvr_pin, + const RiseFall *drvr_rf, + const Pin *load_pin, + const Corner *corner, + const MinMax *min_max) = 0; + virtual Table1 drvrRampWaveform(const Pin *in_pin, + const RiseFall *in_rf, + const Pin *drvr_pin, + const RiseFall *drvr_rf, + const Pin *load_pin, + const Corner *corner, + const MinMax *min_max); +}; + +} // namespace + diff --git a/dcalc/ArcDelayCalc.cc b/dcalc/ArcDelayCalc.cc index 56825b3b..8999a3af 100644 --- a/dcalc/ArcDelayCalc.cc +++ b/dcalc/ArcDelayCalc.cc @@ -16,10 +16,6 @@ #include "ArcDelayCalc.hh" -#include "TimingModel.hh" -#include "TimingArc.hh" -#include "GraphDelayCalc.hh" - namespace sta { ArcDelayCalc::ArcDelayCalc(StaState *sta): @@ -27,27 +23,114 @@ ArcDelayCalc::ArcDelayCalc(StaState *sta): { } -TimingModel * -ArcDelayCalc::model(const TimingArc *arc, - const DcalcAnalysisPt *dcalc_ap) const +void +ArcDelayCalc::gateDelay(const TimingArc *arc, + const Slew &in_slew, + float load_cap, + const Parasitic *parasitic, + float, + const Pvt *, + const DcalcAnalysisPt *dcalc_ap, + // Return values. + ArcDelay &gate_delay, + Slew &drvr_slew) { - const OperatingConditions *op_cond = dcalc_ap->operatingConditions(); - const TimingArc *corner_arc = arc->cornerArc(dcalc_ap->libertyIndex()); - return corner_arc->model(op_cond); + LoadPinIndexMap load_pin_index_map(network_); + ArcDcalcResult dcalc_result = gateDelay(nullptr, arc, in_slew, load_cap, parasitic, + load_pin_index_map, dcalc_ap); + gate_delay = dcalc_result.gateDelay(); + drvr_slew = dcalc_result.drvrSlew(); } -GateTimingModel * -ArcDelayCalc::gateModel(const TimingArc *arc, - const DcalcAnalysisPt *dcalc_ap) const +//////////////////////////////////////////////////////////////// + +ArcDcalcArg::ArcDcalcArg() : + drvr_pin_(nullptr), + edge_(nullptr), + arc_(nullptr), + in_slew_(0.0), + parasitic_(nullptr) { - return dynamic_cast(model(arc, dcalc_ap)); } -CheckTimingModel * -ArcDelayCalc::checkModel(const TimingArc *arc, - const DcalcAnalysisPt *dcalc_ap) const +ArcDcalcArg::ArcDcalcArg(const Pin *drvr_pin, + Edge *edge, + const TimingArc *arc, + const Slew in_slew, + const Parasitic *parasitic) : + drvr_pin_(drvr_pin), + edge_(edge), + arc_(arc), + in_slew_(in_slew), + parasitic_(parasitic) { - return dynamic_cast(model(arc, dcalc_ap)); +} + +void +ArcDcalcArg::setParasitic(const Parasitic *parasitic) +{ + parasitic_ = parasitic; +} + +//////////////////////////////////////////////////////////////// + +ArcDcalcResult::ArcDcalcResult() : + gate_delay_(0.0), + drvr_slew_(0.0) +{ +} + +ArcDcalcResult::ArcDcalcResult(size_t load_count) : + gate_delay_(0.0), + drvr_slew_(0.0) +{ + wire_delays_.resize(load_count); + load_slews_.resize(load_count); +} + +void +ArcDcalcResult::setGateDelay(ArcDelay gate_delay) +{ + gate_delay_ = gate_delay; +} + +void +ArcDcalcResult::setDrvrSlew(Slew drvr_slew) +{ + drvr_slew_ = drvr_slew; +} + +ArcDelay +ArcDcalcResult::wireDelay(size_t load_idx) const +{ + return wire_delays_[load_idx]; +} + +void +ArcDcalcResult::setWireDelay(size_t load_idx, + ArcDelay wire_delay) +{ + wire_delays_[load_idx] = wire_delay; +} + +void +ArcDcalcResult::setLoadCount(size_t load_count) +{ + wire_delays_.resize(load_count); + load_slews_.resize(load_count); +} + +Slew +ArcDcalcResult::loadSlew(size_t load_idx) const +{ + return load_slews_[load_idx]; +} + +void +ArcDcalcResult::setLoadSlew(size_t load_idx, + Slew load_slew) +{ + load_slews_[load_idx] = load_slew; } } // namespace diff --git a/dcalc/Arnoldi.hh b/dcalc/Arnoldi.hh index 0437e914..79f3a77a 100644 --- a/dcalc/Arnoldi.hh +++ b/dcalc/Arnoldi.hh @@ -74,7 +74,6 @@ struct timing_table const LibertyCell *cell; const Pvt *pvt; float in_slew; - float relcap; }; } // namespace diff --git a/dcalc/ArnoldiDelayCalc.cc b/dcalc/ArnoldiDelayCalc.cc index 15610b41..11f8d775 100644 --- a/dcalc/ArnoldiDelayCalc.cc +++ b/dcalc/ArnoldiDelayCalc.cc @@ -117,32 +117,26 @@ public: Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) override; - ReducedParasiticType reducedParasiticType() const override; - void inputPortDelay(const Pin *port_pin, - float in_slew, - const RiseFall *rf, - const Parasitic *parasitic, - const DcalcAnalysisPt *dcalc_ap) override; - void gateDelay(const TimingArc *arc, - const Slew &in_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - // Return values. - ArcDelay &gate_delay, - Slew &drvr_slew) override; - void loadDelay(const Pin *load_pin, - // Return values. - ArcDelay &wire_delay, - Slew &load_slew) override; - string reportGateDelay(const TimingArc *arc, + ArcDcalcResult inputPortDelay(const Pin *port_pin, + float in_slew, + const RiseFall *rf, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) override; + ArcDcalcResult gateDelay(const Pin *drvr_pin, + const TimingArc *arc, + const Slew &in_slew, + // Pass in load_cap or parasitic. + float load_cap, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) override; + string reportGateDelay(const Pin *drvr_pin, + const TimingArc *arc, const Slew &in_slew, float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, const DcalcAnalysisPt *dcalc_ap, int digits) override; void delay_work_set_thresholds(delay_work *D, @@ -152,14 +146,12 @@ public: double derate); private: - void gateDelaySlew(const LibertyCell *drvr_cell, - const GateTableModel *table_model, - const Slew &in_slew, - float related_out_cap, - const Pvt *pvt, - // Return values. - ArcDelay &gate_delay, - Slew &drvr_slew); + ArcDcalcResult gateDelaySlew(const LibertyCell *drvr_cell, + const TimingArc *arc, + const GateTableModel *table_model, + const Slew &in_slew, + const LoadPinIndexMap &load_pin_index_map, + const Pvt *pvt); void ar1_ceff_delay(delay_work *D, timing_table *tab, arnoldi1 *mod, @@ -224,7 +216,6 @@ private: double *_delayV; double *_slewV; int pin_n_; - bool input_port_; ArnoldiReduce *reduce_; delay_work *delay_work_; }; @@ -306,25 +297,20 @@ ArnoldiDelayCalc::findParasitic(const Pin *drvr_pin, return parasitic; } -ReducedParasiticType -ArnoldiDelayCalc::reducedParasiticType() const +ArcDcalcResult +ArnoldiDelayCalc::inputPortDelay(const Pin *, + float in_slew, + const RiseFall *rf, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *) { - return ReducedParasiticType::arnoldi; -} - -void -ArnoldiDelayCalc::inputPortDelay(const Pin *drvr_pin, - float in_slew, - const RiseFall *rf, - const Parasitic *parasitic, - const DcalcAnalysisPt *dcalc_ap) -{ - LumpedCapDelayCalc::inputPortDelay(drvr_pin, in_slew, rf, parasitic, dcalc_ap); rcmodel_ = nullptr; _delayV[0] = 0.0; _slewV[0] = in_slew; - int j; + LibertyLibrary *drvr_library = network_->defaultLibertyLibrary(); + ArcDcalcResult dcalc_result(load_pin_index_map.size()); if (parasitic) { rcmodel_ = reinterpret_cast(const_cast(parasitic)); pin_n_ = rcmodel_->n; @@ -335,69 +321,67 @@ ArnoldiDelayCalc::inputPortDelay(const Pin *drvr_pin, _delayV = (double*)realloc(_delayV,_pinNmax * sizeof(double)); _slewV = (double*)realloc(_slewV,_pinNmax * sizeof(double)); } - pin_n_ = 1; pin_n_ = rcmodel_->n; - double slew_derate = drvr_library_->slewDerateFromLibrary(); - double lo_thresh = drvr_library_->slewLowerThreshold(drvr_rf_); - double hi_thresh = drvr_library_->slewUpperThreshold(drvr_rf_); - bool rising = (drvr_rf_ == RiseFall::rise()); - delay_work_set_thresholds(delay_work_, lo_thresh, hi_thresh, rising, - slew_derate); + double slew_derate = drvr_library->slewDerateFromLibrary(); + double lo_thresh = drvr_library->slewLowerThreshold(rf); + double hi_thresh = drvr_library->slewUpperThreshold(rf); + bool rising = (rf == RiseFall::rise()); + delay_work_set_thresholds(delay_work_, lo_thresh, hi_thresh, rising, slew_derate); delay_c *c = delay_work_->c; double c_log = c->vlg; - for (j=1;jelmore(j); - _delayV[j] = 0.6931472*elmore; - _slewV[j] = in_slew + c_log*elmore/slew_derate; + double wire_delay = 0.6931472*elmore; + double load_slew = in_slew + c_log*elmore/slew_derate; + _delayV[j] = wire_delay; + _slewV[j] = load_slew; + + const Pin *load_pin = rcmodel_->pinV[j]; + auto load_idx_itr = load_pin_index_map.find(load_pin); + if (load_idx_itr != load_pin_index_map.end()) { + size_t load_idx = load_idx_itr->second; + dcalc_result.setWireDelay(load_idx, wire_delay); + dcalc_result.setLoadSlew(load_idx, load_slew); + } } } -} - -void -ArnoldiDelayCalc::gateDelay(const TimingArc *arc, - const Slew &in_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - // Return values. - ArcDelay &gate_delay, - Slew &drvr_slew) -{ - input_port_ = false; - drvr_rf_ = arc->toEdge()->asRiseFall(); - const LibertyCell *drvr_cell = arc->from()->libertyCell(); - drvr_library_ = drvr_cell->libertyLibrary(); - drvr_parasitic_ = drvr_parasitic; - ConcreteParasitic *drvr_cparasitic = - reinterpret_cast(const_cast(drvr_parasitic)); - rcmodel_ = dynamic_cast(drvr_cparasitic); - GateTimingModel *model = gateModel(arc, dcalc_ap); - GateTableModel *table_model = dynamic_cast(model); - if (table_model && rcmodel_) - gateDelaySlew(drvr_cell, table_model, in_slew, - related_out_cap, pvt, - gate_delay, drvr_slew); else - LumpedCapDelayCalc::gateDelay(arc, in_slew, load_cap, drvr_parasitic, - related_out_cap, pvt, dcalc_ap, - gate_delay, drvr_slew); - drvr_slew_ = drvr_slew; - multi_drvr_slew_factor_ = 1.0F; + dcalc_result = makeResult(drvr_library, rf, 0.0, in_slew, load_pin_index_map); + return dcalc_result; } -void +ArcDcalcResult +ArnoldiDelayCalc::gateDelay(const Pin *drvr_pin, + const TimingArc *arc, + const Slew &in_slew, + float load_cap, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) +{ + const LibertyCell *drvr_cell = arc->from()->libertyCell(); + ConcreteParasitic *cparasitic = + reinterpret_cast(const_cast(parasitic)); + rcmodel_ = dynamic_cast(cparasitic); + GateTableModel *table_model = gateTableModel(arc, dcalc_ap); + if (table_model && rcmodel_) { + const Pvt *pvt = pinPvt(drvr_pin, dcalc_ap); + return gateDelaySlew(drvr_cell, arc, table_model, in_slew, load_pin_index_map, pvt); + } + else + return LumpedCapDelayCalc::gateDelay(drvr_pin, arc, in_slew, load_cap, + parasitic, load_pin_index_map, dcalc_ap); +} + +ArcDcalcResult ArnoldiDelayCalc::gateDelaySlew(const LibertyCell *drvr_cell, + const TimingArc *arc, const GateTableModel *table_model, const Slew &in_slew, - float related_out_cap, - const Pvt *pvt, - // Return values. - ArcDelay &gate_delay, - Slew &drvr_slew) + const LoadPinIndexMap &load_pin_index_map, + const Pvt *pvt) { pin_n_ = rcmodel_->n; if (pin_n_ >= _pinNmax) { @@ -407,12 +391,15 @@ ArnoldiDelayCalc::gateDelaySlew(const LibertyCell *drvr_cell, _slewV = (double*)realloc(_slewV,_pinNmax * sizeof(double)); } + ArcDcalcResult dcalc_result(load_pin_index_map.size()); pin_n_ = rcmodel_->n; - if (table_model) { - double slew_derate = drvr_library_->slewDerateFromLibrary(); - double lo_thresh = drvr_library_->slewLowerThreshold(drvr_rf_); - double hi_thresh = drvr_library_->slewUpperThreshold(drvr_rf_); - bool rising = (drvr_rf_ == RiseFall::rise()); + const RiseFall *rf = arc->toEdge()->asRiseFall(); + if (table_model && rf) { + const LibertyLibrary *drvr_library = drvr_cell->libertyLibrary(); + double slew_derate = drvr_library->slewDerateFromLibrary(); + double lo_thresh = drvr_library->slewLowerThreshold(rf); + double hi_thresh = drvr_library->slewUpperThreshold(rf); + bool rising = (rf == RiseFall::rise()); delay_work_set_thresholds(delay_work_, lo_thresh, hi_thresh, rising, slew_derate); if (rcmodel_->order > 0) { @@ -421,48 +408,43 @@ ArnoldiDelayCalc::gateDelaySlew(const LibertyCell *drvr_cell, tab.cell = drvr_cell; tab.pvt = pvt; tab.in_slew = delayAsFloat(in_slew); - tab.relcap = related_out_cap; ar1_ceff_delay(delay_work_, &tab, rcmodel_, _delayV, _slewV); } - gate_delay = _delayV[0]; - drvr_slew = _slewV[0]; - } -} + dcalc_result.setGateDelay(_delayV[0]); + dcalc_result.setDrvrSlew(_slewV[0]); -void -ArnoldiDelayCalc::loadDelay(const Pin *load_pin, - // Return values. - ArcDelay &wire_delay, - Slew &load_slew) -{ - // This does not appear to handle input port parasitics correctly. - wire_delay = 0.0; - load_slew = drvr_slew_ * multi_drvr_slew_factor_; - if (rcmodel_) { - // HACK - for (int i = 0; i < rcmodel_->n; i++) { - if (rcmodel_->pinV[i] == load_pin) { - wire_delay = _delayV[i] - _delayV[0]; - load_slew = _slewV[i] * multi_drvr_slew_factor_; - break; + if (rcmodel_) { + for (int i = 0; i < rcmodel_->n; i++) { + const Pin *load_pin = rcmodel_->pinV[i]; + auto load_idx_itr = load_pin_index_map.find(load_pin); + if (load_idx_itr != load_pin_index_map.end()) { + size_t load_idx = load_idx_itr->second; + ArcDelay wire_delay = _delayV[i] - _delayV[0]; + Slew load_slew = _slewV[i]; + thresholdAdjust(load_pin, drvr_library, rf, wire_delay, load_slew); + dcalc_result.setWireDelay(load_idx, wire_delay); + dcalc_result.setLoadSlew(load_idx, load_slew); + } } } } - thresholdAdjust(load_pin, wire_delay, load_slew); + return dcalc_result; } string -ArnoldiDelayCalc::reportGateDelay(const TimingArc *, - const Slew &, - float, - const Parasitic *, - float, - const Pvt *, - const DcalcAnalysisPt *, - int) +ArnoldiDelayCalc::reportGateDelay(const Pin *drvr_pin, + const TimingArc *arc, + const Slew &in_slew, + float load_cap, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap, + int digits) { - return ""; + return LumpedCapDelayCalc::reportGateDelay(drvr_pin, arc, in_slew, load_cap, + parasitic, load_pin_index_map, + dcalc_ap, digits); } //////////////////////////////////////////////////////////////// @@ -1310,7 +1292,7 @@ ArnoldiDelayCalc::ra_get_r(delay_work *D, c1 = ctot; ArcDelay d1; Slew s1; - tab->table->gateDelay(tab->pvt, tab->in_slew, c1, tab->relcap, pocv_enabled_, d1, s1); + tab->table->gateDelay(tab->pvt, tab->in_slew, c1, pocv_enabled_, d1, s1); tlohi = slew_derate*delayAsFloat(s1); r = tlohi/(c_log*c1); if (rdelay>0.0 && r > rdelay) @@ -1332,7 +1314,7 @@ ArnoldiDelayCalc::ra_get_s(delay_work *D, double tlohi,smin,s; ArcDelay d1; Slew s1; - tab->table->gateDelay(tab->pvt, tab->in_slew, c, tab->relcap, pocv_enabled_, d1, s1); + tab->table->gateDelay(tab->pvt, tab->in_slew, c, pocv_enabled_, d1, s1); tlohi = slew_derate*delayAsFloat(s1); smin = r*c*c_smin; // c_smin = ra_hinv((1-vhi)/vhi-log(vhi)) + log(vhi); if (c_log*r*c >= tlohi) { @@ -1365,8 +1347,8 @@ ArnoldiDelayCalc::ra_rdelay_1(timing_table *tab, return 0.0; ArcDelay d1, d2; Slew s1, s2; - tab->table->gateDelay(tab->pvt, tab->in_slew, c1, tab->relcap, pocv_enabled_, d1, s1); - tab->table->gateDelay(tab->pvt, tab->in_slew, c2, tab->relcap, pocv_enabled_, d2, s2); + tab->table->gateDelay(tab->pvt, tab->in_slew, c1, pocv_enabled_, d1, s1); + tab->table->gateDelay(tab->pvt, tab->in_slew, c2, pocv_enabled_, d2, s2); double dt50 = delayAsFloat(d1)-delayAsFloat(d2); if (dt50 <= 0.0) return 0.0; @@ -1418,8 +1400,7 @@ ArnoldiDelayCalc::ar1_ceff_delay(delay_work *D, units_->timeUnit()->asString(s)); thix = ra_solve_for_t(p,s,vhi); tlox = ra_solve_for_t(p,s,vlo); - tab->table->gateDelay(tab->pvt,tab->in_slew, ctot, tab->relcap, pocv_enabled_, - df, sf); + tab->table->gateDelay(tab->pvt,tab->in_slew, ctot, pocv_enabled_, df, sf); debugPrint(debug_, "arnoldi", 1, "table slew (in_slew %s ctot %s) = %s", units_->timeUnit()->asString(tab->in_slew), units_->capacitanceUnit()->asString(ctot), @@ -1430,7 +1411,7 @@ ArnoldiDelayCalc::ar1_ceff_delay(delay_work *D, units_->timeUnit()->asString(tlox-thix)); } ceff = ctot; - tab->table->gateDelay(tab->pvt, tab->in_slew, ceff, tab->relcap, pocv_enabled_, + tab->table->gateDelay(tab->pvt, tab->in_slew, ceff, pocv_enabled_, df, sf); t50_sy = delayAsFloat(df); t50_sr = ra_solve_for_t(1.0/(r*ceff),s,0.5); @@ -1472,7 +1453,7 @@ ArnoldiDelayCalc::ar1_ceff_delay(delay_work *D, units_->timeUnit()->asString(ceff_time), units_->capacitanceUnit()->asString(ceff)); - tab->table->gateDelay(tab->pvt, tab->in_slew, ceff, tab->relcap, pocv_enabled_, df, sf); + tab->table->gateDelay(tab->pvt, tab->in_slew, ceff, pocv_enabled_, df, sf); t50_sy = delayAsFloat(df); t50_sr = ra_solve_for_t(1.0/(r*ceff),s,0.5); for (j=0;jn;j++) { diff --git a/dcalc/DelayCalc.cc b/dcalc/DelayCalc.cc index 2c5c1ba0..cfb940de 100644 --- a/dcalc/DelayCalc.cc +++ b/dcalc/DelayCalc.cc @@ -20,7 +20,6 @@ #include "StringUtil.hh" #include "UnitDelayCalc.hh" #include "LumpedCapDelayCalc.hh" -#include "SlewDegradeDelayCalc.hh" #include "DmpDelayCalc.hh" #include "ArnoldiDelayCalc.hh" @@ -35,7 +34,6 @@ registerDelayCalcs() { registerDelayCalc("unit", makeUnitDelayCalc); registerDelayCalc("lumped_cap", makeLumpedCapDelayCalc); - registerDelayCalc("slew_degrade", makeSlewDegradeDelayCalc); registerDelayCalc("dmp_ceff_elmore", makeDmpCeffElmoreDelayCalc); registerDelayCalc("dmp_ceff_two_pole", makeDmpCeffTwoPoleDelayCalc); registerDelayCalc("arnoldi", makeArnoldiDelayCalc); diff --git a/dcalc/DelayCalc.i b/dcalc/DelayCalc.i index 52711847..b96b0470 100644 --- a/dcalc/DelayCalc.i +++ b/dcalc/DelayCalc.i @@ -19,6 +19,8 @@ // along with this program. If not, see . #include "Sta.hh" +#include "ArcDelayCalc.hh" +#include "dcalc/ArcDcalcWaveforms.hh" %} @@ -59,4 +61,76 @@ report_delay_calc_cmd(Edge *edge, return Sta::sta()->reportDelayCalc(edge, arc, corner, min_max, digits); } +//////////////////////////////////////////////////////////////// + +Table1 +ccs_input_waveform(const Pin *in_pin, + const RiseFall *in_rf, + const Corner *corner, + const MinMax *min_max) +{ + cmdLinkedNetwork(); + Sta *sta = Sta::sta(); + ArcDcalcWaveforms *arc_dcalc = dynamic_cast(sta->arcDelayCalc()); + if (arc_dcalc) + return arc_dcalc->inputWaveform(in_pin, in_rf, corner, min_max); + else + return Table1(); +} + +Table1 +ccs_driver_waveform(const Pin *in_pin, + const RiseFall *in_rf, + const Pin *drvr_pin, + const RiseFall *drvr_rf, + const Corner *corner, + const MinMax *min_max) +{ + cmdLinkedNetwork(); + Sta *sta = Sta::sta(); + ArcDcalcWaveforms *arc_dcalc = dynamic_cast(sta->arcDelayCalc()); + if (arc_dcalc) + return arc_dcalc->drvrWaveform(in_pin, in_rf, drvr_pin, drvr_rf, corner, min_max); + else + return Table1(); +} + +Table1 +ccs_driver_ramp_waveform(const Pin *in_pin, + const RiseFall *in_rf, + const Pin *drvr_pin, + const RiseFall *drvr_rf, + const Pin *load_pin, + const Corner *corner, + const MinMax *min_max) +{ + cmdLinkedNetwork(); + Sta *sta = Sta::sta(); + ArcDcalcWaveforms *arc_dcalc = dynamic_cast(sta->arcDelayCalc()); + if (arc_dcalc) + return arc_dcalc->drvrRampWaveform(in_pin, in_rf, drvr_pin, drvr_rf, + load_pin, corner, min_max); + else + return Table1(); +} + +Table1 +ccs_load_waveform(const Pin *in_pin, + const RiseFall *in_rf, + const Pin *drvr_pin, + const RiseFall *drvr_rf, + const Pin *load_pin, + const Corner *corner, + const MinMax *min_max) +{ + cmdLinkedNetwork(); + Sta *sta = Sta::sta(); + ArcDcalcWaveforms *arc_dcalc = dynamic_cast(sta->arcDelayCalc()); + if (arc_dcalc) + return arc_dcalc->loadWaveform(in_pin, in_rf, drvr_pin, drvr_rf, + load_pin, corner, min_max); + else + return Table1(); +} + %} // inline diff --git a/dcalc/DelayCalcBase.cc b/dcalc/DelayCalcBase.cc index c2639664..d4adc760 100644 --- a/dcalc/DelayCalcBase.cc +++ b/dcalc/DelayCalcBase.cc @@ -18,16 +18,52 @@ #include "Liberty.hh" #include "TimingArc.hh" +#include "TimingModel.hh" +#include "TableModel.hh" #include "Network.hh" #include "Parasitics.hh" +#include "Sdc.hh" +#include "DcalcAnalysisPt.hh" namespace sta { +using std::log; + DelayCalcBase::DelayCalcBase(StaState *sta) : ArcDelayCalc(sta) { } +TimingModel * +DelayCalcBase::model(const TimingArc *arc, + const DcalcAnalysisPt *dcalc_ap) const +{ + const OperatingConditions *op_cond = dcalc_ap->operatingConditions(); + const TimingArc *corner_arc = arc->cornerArc(dcalc_ap->libertyIndex()); + return corner_arc->model(op_cond); +} + +GateTimingModel * +DelayCalcBase::gateModel(const TimingArc *arc, + const DcalcAnalysisPt *dcalc_ap) const +{ + return dynamic_cast(model(arc, dcalc_ap)); +} + +GateTableModel * +DelayCalcBase::gateTableModel(const TimingArc *arc, + const DcalcAnalysisPt *dcalc_ap) const +{ + return dynamic_cast(model(arc, dcalc_ap)); +} + +CheckTimingModel * +DelayCalcBase::checkModel(const TimingArc *arc, + const DcalcAnalysisPt *dcalc_ap) const +{ + return dynamic_cast(model(arc, dcalc_ap)); +} + void DelayCalcBase::finishDrvrPin() { @@ -39,74 +75,53 @@ DelayCalcBase::finishDrvrPin() reduced_parasitic_drvrs_.clear(); } -void -DelayCalcBase::inputPortDelay(const Pin *, - float in_slew, - const RiseFall *rf, - const Parasitic *parasitic, - const DcalcAnalysisPt *) -{ - drvr_cell_ = nullptr; - drvr_library_ = network_->defaultLibertyLibrary(); - drvr_slew_ = in_slew; - drvr_rf_ = rf; - drvr_parasitic_ = parasitic; - input_port_ = true; -} - -void -DelayCalcBase::gateDelayInit(const TimingArc *arc, - const Slew &in_slew, - const Parasitic *drvr_parasitic) -{ - drvr_cell_ = arc->from()->libertyCell(); - drvr_library_ = drvr_cell_->libertyLibrary(); - drvr_rf_ = arc->toEdge()->asRiseFall(); - drvr_slew_ = in_slew; - drvr_parasitic_ = drvr_parasitic; - input_port_ = false; -} - // For DSPF on an input port the elmore delay is used as the time // constant of an exponential waveform. The delay to the logic // threshold and slew are computed for the exponential waveform. // Note that this uses the driver thresholds and relies on // thresholdAdjust to convert the delay and slew to the load's thresholds. void -DelayCalcBase::dspfWireDelaySlew(const Pin *, +DelayCalcBase::dspfWireDelaySlew(const Pin *load_pin, + const RiseFall *rf, + Slew drvr_slew, float elmore, ArcDelay &wire_delay, Slew &load_slew) { - float vth = drvr_library_->inputThreshold(drvr_rf_); - float vl = drvr_library_->slewLowerThreshold(drvr_rf_); - float vh = drvr_library_->slewUpperThreshold(drvr_rf_); - float slew_derate = drvr_library_->slewDerateFromLibrary(); + + LibertyLibrary *load_library = thresholdLibrary(load_pin); + float vth = load_library->inputThreshold(rf); + float vl = load_library->slewLowerThreshold(rf); + float vh = load_library->slewUpperThreshold(rf); + float slew_derate = load_library->slewDerateFromLibrary(); wire_delay = -elmore * log(1.0 - vth); - load_slew = drvr_slew_ + elmore * log((1.0 - vl) / (1.0 - vh)) / slew_derate; + load_slew = drvr_slew + elmore * log((1.0 - vl) / (1.0 - vh)) / slew_derate; + load_slew = drvr_slew + elmore * log((1.0 - vl) / (1.0 - vh)) / slew_derate; } void DelayCalcBase::thresholdAdjust(const Pin *load_pin, + const LibertyLibrary *drvr_library, + const RiseFall *rf, ArcDelay &load_delay, Slew &load_slew) { LibertyLibrary *load_library = thresholdLibrary(load_pin); if (load_library - && drvr_library_ - && load_library != drvr_library_) { - float drvr_vth = drvr_library_->outputThreshold(drvr_rf_); - float load_vth = load_library->inputThreshold(drvr_rf_); - float drvr_slew_delta = drvr_library_->slewUpperThreshold(drvr_rf_) - - drvr_library_->slewLowerThreshold(drvr_rf_); + && drvr_library + && load_library != drvr_library) { + float drvr_vth = drvr_library->outputThreshold(rf); + float load_vth = load_library->inputThreshold(rf); + float drvr_slew_delta = drvr_library->slewUpperThreshold(rf) + - drvr_library->slewLowerThreshold(rf); float load_delay_delta = delayAsFloat(load_slew) * ((load_vth - drvr_vth) / drvr_slew_delta); - load_delay += (drvr_rf_ == RiseFall::rise()) + load_delay += (rf == RiseFall::rise()) ? load_delay_delta : -load_delay_delta; - float load_slew_delta = load_library->slewUpperThreshold(drvr_rf_) - - load_library->slewLowerThreshold(drvr_rf_); - float drvr_slew_derate = drvr_library_->slewDerateFromLibrary(); + float load_slew_delta = load_library->slewUpperThreshold(rf) + - load_library->slewLowerThreshold(rf); + float drvr_slew_derate = drvr_library->slewDerateFromLibrary(); float load_slew_derate = load_library->slewDerateFromLibrary(); load_slew = load_slew * ((load_slew_delta / load_slew_derate) / (drvr_slew_delta / drvr_slew_derate)); @@ -129,4 +144,55 @@ DelayCalcBase::thresholdLibrary(const Pin *load_pin) } } +ArcDelay +DelayCalcBase::checkDelay(const Pin *check_pin, + const TimingArc *arc, + const Slew &from_slew, + const Slew &to_slew, + float related_out_cap, + const DcalcAnalysisPt *dcalc_ap) +{ + CheckTimingModel *model = checkModel(arc, dcalc_ap); + if (model) { + float from_slew1 = delayAsFloat(from_slew); + float to_slew1 = delayAsFloat(to_slew); + return model->checkDelay(pinPvt(check_pin, dcalc_ap), from_slew1, to_slew1, + related_out_cap, pocv_enabled_); + } + else + return delay_zero; +} + +string +DelayCalcBase::reportCheckDelay(const Pin *check_pin, + const TimingArc *arc, + const Slew &from_slew, + const char *from_slew_annotation, + const Slew &to_slew, + float related_out_cap, + const DcalcAnalysisPt *dcalc_ap, + int digits) +{ + CheckTimingModel *model = checkModel(arc, dcalc_ap); + if (model) { + float from_slew1 = delayAsFloat(from_slew); + float to_slew1 = delayAsFloat(to_slew); + return model->reportCheckDelay(pinPvt(check_pin, dcalc_ap), from_slew1, + from_slew_annotation, to_slew1, + related_out_cap, false, digits); + } + return ""; +} + +const Pvt * +DelayCalcBase::pinPvt(const Pin *pin, + const DcalcAnalysisPt *dcalc_ap) +{ + const Instance *drvr_inst = network_->instance(pin); + const Pvt *pvt = sdc_->pvt(drvr_inst, dcalc_ap->constraintMinMax()); + if (pvt == nullptr) + pvt = dcalc_ap->operatingConditions(); + return pvt; +} + } // namespace diff --git a/dcalc/DelayCalcBase.hh b/dcalc/DelayCalcBase.hh index 248e8e5a..973f758c 100644 --- a/dcalc/DelayCalcBase.hh +++ b/dcalc/DelayCalcBase.hh @@ -20,39 +20,58 @@ namespace sta { +class GateTableModel; + class DelayCalcBase : public ArcDelayCalc { public: explicit DelayCalcBase(StaState *sta); - void inputPortDelay(const Pin *port_pin, - float in_slew, - const RiseFall *rf, - const Parasitic *parasitic, + void finishDrvrPin() override; + + ArcDelay checkDelay(const Pin *check_pin, + const TimingArc *arc, + const Slew &from_slew, + const Slew &to_slew, + float related_out_cap, const DcalcAnalysisPt *dcalc_ap) override; - void finishDrvrPin() override; + + string reportCheckDelay(const Pin *check_pin, + const TimingArc *arc, + const Slew &from_slew, + const char *from_slew_annotation, + const Slew &to_slew, + float related_out_cap, + const DcalcAnalysisPt *dcalc_ap, + int digits) override; protected: - void gateDelayInit(const TimingArc *arc, - const Slew &in_slew, - const Parasitic *drvr_parasitic); + GateTimingModel *gateModel(const TimingArc *arc, + const DcalcAnalysisPt *dcalc_ap) const; + GateTableModel *gateTableModel(const TimingArc *arc, + const DcalcAnalysisPt *dcalc_ap) const; + CheckTimingModel *checkModel(const TimingArc *arc, + const DcalcAnalysisPt *dcalc_ap) const; + TimingModel *model(const TimingArc *arc, + const DcalcAnalysisPt *dcalc_ap) const; // Find the liberty library to use for logic/slew thresholds. LibertyLibrary *thresholdLibrary(const Pin *load_pin); // Adjust load_delay and load_slew from driver thresholds to load thresholds. void thresholdAdjust(const Pin *load_pin, + const LibertyLibrary *drvr_library, + const RiseFall *rf, ArcDelay &load_delay, Slew &load_slew); // Helper function for input ports driving dspf parasitic. void dspfWireDelaySlew(const Pin *load_pin, - float elmore, + const RiseFall *rf, + Slew drvr_slew, + float elmore, + // Return values. ArcDelay &wire_delay, Slew &load_slew); + const Pvt *pinPvt(const Pin *pin, + const DcalcAnalysisPt *dcalc_ap); - Slew drvr_slew_; - const LibertyCell *drvr_cell_; - const LibertyLibrary *drvr_library_; - const Parasitic *drvr_parasitic_; - bool input_port_; - const RiseFall *drvr_rf_; // Parasitics returned by findParasitic that are reduced or estimated // that can be deleted after delay calculation for the driver pin // is finished. diff --git a/dcalc/DmpCeff.cc b/dcalc/DmpCeff.cc index 0d298a78..da9351a6 100644 --- a/dcalc/DmpCeff.cc +++ b/dcalc/DmpCeff.cc @@ -88,7 +88,6 @@ gateModelRd(const LibertyCell *cell, double in_slew, double c2, double c1, - float related_out_cap, const Pvt *pvt, bool pocv_enabled); static void @@ -155,7 +154,6 @@ public: const RiseFall *rf, double rd, double in_slew, - float related_out_cap, double c2, double rpi, double c1); @@ -235,7 +233,6 @@ protected: const Pvt *pvt_; const GateTableModel *gate_model_; double in_slew_; - float related_out_cap_; double c2_; double rpi_; double c1_; @@ -319,7 +316,6 @@ DmpAlg::init(const LibertyLibrary *drvr_library, const RiseFall *rf, double rd, double in_slew, - float related_out_cap, // Pi model. double c2, double rpi, @@ -331,7 +327,6 @@ DmpAlg::init(const LibertyLibrary *drvr_library, gate_model_ = gate_model; rd_ = rd; in_slew_ = in_slew; - related_out_cap_ = related_out_cap; c2_ = c2; rpi_ = rpi; c1_ = c1; @@ -381,8 +376,8 @@ DmpAlg::gateCapDelaySlew(double ceff, { ArcDelay model_delay; Slew model_slew; - gate_model_->gateDelay(pvt_, in_slew_, ceff, related_out_cap_, - pocv_enabled_, model_delay, model_slew); + gate_model_->gateDelay(pvt_, in_slew_, ceff, pocv_enabled_, + model_delay, model_slew); delay = delayAsFloat(model_delay); slew = delayAsFloat(model_slew); } @@ -696,7 +691,6 @@ public: const RiseFall *rf, double rd, double in_slew, - float related_out_cap, double c2, double rpi, double c1); @@ -729,14 +723,13 @@ DmpCap::init(const LibertyLibrary *drvr_library, const RiseFall *rf, double rd, double in_slew, - float related_out_cap, double c2, double rpi, double c1) { debugPrint(debug_, "dmp_ceff", 3, "Using DMP cap"); DmpAlg::init(drvr_library, drvr_cell, pvt, gate_model, rf, - rd, in_slew, related_out_cap, c2, rpi, c1); + rd, in_slew, c2, rpi, c1); ceff_ = c1 + c2; } @@ -810,7 +803,6 @@ public: const RiseFall *rf, double rd, double in_slew, - float related_out_cap, double c2, double rpi, double c1); @@ -870,14 +862,13 @@ DmpPi::init(const LibertyLibrary *drvr_library, const RiseFall *rf, double rd, double in_slew, - float related_out_cap, double c2, double rpi, double c1) { debugPrint(debug_, "dmp_ceff", 3, "Using DMP Pi"); DmpAlg::init(drvr_library, drvr_cell, pvt, gate_model, rf, rd, - in_slew, related_out_cap, c2, rpi, c1); + in_slew, c2, rpi, c1); // Find poles/zeros. z1_ = 1.0 / (rpi_ * c1_); @@ -1144,7 +1135,6 @@ public: const RiseFall *rf, double rd, double in_slew, - float related_out_cap, double c2, double rpi, double c1); @@ -1187,14 +1177,13 @@ DmpZeroC2::init(const LibertyLibrary *drvr_library, const RiseFall *rf, double rd, double in_slew, - float related_out_cap, double c2, double rpi, double c1) { debugPrint(debug_, "dmp_ceff", 3, "Using DMP C2=0"); DmpAlg::init(drvr_library, drvr_cell, pvt, gate_model, rf, rd, - in_slew, related_out_cap, c2, rpi, c1); + in_slew, c2, rpi, c1); ceff_ = c1; z1_ = 1.0 / (rpi_ * c1_); @@ -1543,64 +1532,58 @@ DmpCeffDelayCalc::~DmpCeffDelayCalc() delete dmp_zero_c2_; } -void -DmpCeffDelayCalc::inputPortDelay(const Pin *port_pin, - float in_slew, - const RiseFall *rf, - const Parasitic *parasitic, - const DcalcAnalysisPt *dcalc_ap) +ArcDcalcResult +DmpCeffDelayCalc::gateDelay(const Pin *drvr_pin, + const TimingArc *arc, + const Slew &in_slew, + float load_cap, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) { - dmp_alg_ = nullptr; - LumpedCapDelayCalc::inputPortDelay(port_pin, in_slew, rf, parasitic, dcalc_ap); -} - -void -DmpCeffDelayCalc::gateDelay(const TimingArc *arc, - const Slew &in_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - // Return values. - ArcDelay &gate_delay, - Slew &drvr_slew) -{ - input_port_ = false; - drvr_rf_ = arc->toEdge()->asRiseFall(); + const RiseFall *rf = arc->toEdge()->asRiseFall(); const LibertyCell *drvr_cell = arc->from()->libertyCell(); - drvr_library_ = drvr_cell->libertyLibrary(); - drvr_parasitic_ = drvr_parasitic; + const LibertyLibrary *drvr_library = drvr_cell->libertyLibrary(); - GateTimingModel *model = gateModel(arc, dcalc_ap); - GateTableModel *table_model = dynamic_cast(model); - if (table_model && drvr_parasitic) { + GateTableModel *table_model = gateTableModel(arc, dcalc_ap); + if (table_model && parasitic) { float in_slew1 = delayAsFloat(in_slew); float c2, rpi, c1; - parasitics_->piModel(drvr_parasitic, c2, rpi, c1); + parasitics_->piModel(parasitic, c2, rpi, c1); if (isnan(c2) || isnan(c1) || isnan(rpi)) report_->error(618, "parasitic Pi model has NaNs."); - setCeffAlgorithm(drvr_library_, drvr_cell, pvt, table_model, - drvr_rf_, in_slew1, related_out_cap, - c2, rpi, c1); - double dmp_gate_delay, dmp_drvr_slew; - gateDelaySlew(dmp_gate_delay, dmp_drvr_slew); - gate_delay = dmp_gate_delay; - drvr_slew = dmp_drvr_slew; + setCeffAlgorithm(drvr_library, drvr_cell, pinPvt(drvr_pin, dcalc_ap), + table_model, rf, in_slew1, c2, rpi, c1); + double gate_delay, drvr_slew; + gateDelaySlew(gate_delay, drvr_slew); + ArcDcalcResult dcalc_result(load_pin_index_map.size()); + dcalc_result.setGateDelay(gate_delay); + dcalc_result.setDrvrSlew(drvr_slew); + + for (auto load_pin_index : load_pin_index_map) { + const Pin *load_pin = load_pin_index.first; + size_t load_idx = load_pin_index.second; + ArcDelay wire_delay; + Slew load_slew; + loadDelaySlew(load_pin, drvr_slew, rf, drvr_library, parasitic, + wire_delay, load_slew); + dcalc_result.setWireDelay(load_idx, wire_delay); + dcalc_result.setLoadSlew(load_idx, load_slew); + } + return dcalc_result; } else { - LumpedCapDelayCalc::gateDelay(arc, in_slew, load_cap, drvr_parasitic, - related_out_cap, pvt, dcalc_ap, - gate_delay, drvr_slew); - if (drvr_parasitic + ArcDcalcResult dcalc_result = + LumpedCapDelayCalc::gateDelay(drvr_pin, arc, in_slew, load_cap, parasitic, + load_pin_index_map, dcalc_ap); + if (parasitic && !unsuppored_model_warned_) { unsuppored_model_warned_ = true; report_->warn(1, "cell %s delay model not supported on SPF parasitics by DMP delay calculator", drvr_cell->name()); } + return dcalc_result; } - drvr_slew_ = drvr_slew; - multi_drvr_slew_factor_ = 1.0F; } void @@ -1610,7 +1593,6 @@ DmpCeffDelayCalc::setCeffAlgorithm(const LibertyLibrary *drvr_library, const GateTableModel *gate_model, const RiseFall *rf, double in_slew, - float related_out_cap, double c2, double rpi, double c1) @@ -1618,7 +1600,7 @@ DmpCeffDelayCalc::setCeffAlgorithm(const LibertyLibrary *drvr_library, double rd = 0.0; if (gate_model) { rd = gateModelRd(drvr_cell, gate_model, rf, in_slew, c2, c1, - related_out_cap, pvt, pocv_enabled_); + pvt, pocv_enabled_); // Zero Rd means the table is constant and thus independent of load cap. if (rd < 1e-2 // Rpi is small compared to Rd, which makes the load capacitive. @@ -1635,7 +1617,7 @@ DmpCeffDelayCalc::setCeffAlgorithm(const LibertyLibrary *drvr_library, else dmp_alg_ = dmp_cap_; dmp_alg_->init(drvr_library, drvr_cell, pvt, gate_model, - drvr_rf_, rd, in_slew, related_out_cap, c2, rpi, c1); + rf, rd, in_slew, c2, rpi, c1); debugPrint(debug_, "dmp_ceff", 3, " DMP in_slew = %s c2 = %s rpi = %s c1 = %s Rd = %s (%s alg)", units_->timeUnit()->asString(in_slew), @@ -1646,51 +1628,29 @@ DmpCeffDelayCalc::setCeffAlgorithm(const LibertyLibrary *drvr_library, dmp_alg_->name()); } -float -DmpCeffDelayCalc::ceff(const TimingArc *arc, - const Slew &in_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap) -{ - ArcDelay gate_delay; - Slew drvr_slew; - gateDelay(arc, in_slew, load_cap, drvr_parasitic, related_out_cap, pvt, dcalc_ap, - gate_delay, drvr_slew); - if (dmp_alg_) - return dmp_alg_->ceff(); - else - return load_cap; -} - string -DmpCeffDelayCalc::reportGateDelay(const TimingArc *arc, +DmpCeffDelayCalc::reportGateDelay(const Pin *drvr_pin, + const TimingArc *arc, const Slew &in_slew, float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, const DcalcAnalysisPt *dcalc_ap, int digits) { - ArcDelay gate_delay; - Slew drvr_slew; - gateDelay(arc, in_slew, load_cap, drvr_parasitic, related_out_cap, pvt, dcalc_ap, - gate_delay, drvr_slew); + gateDelay(drvr_pin, arc, in_slew, load_cap, parasitic, load_pin_index_map, dcalc_ap); GateTimingModel *model = gateModel(arc, dcalc_ap); float c_eff = 0.0; string result; - if (drvr_parasitic_ && dmp_alg_) { + if (parasitic && dmp_alg_) { c_eff = dmp_alg_->ceff(); - const LibertyCell *drvr_cell = arc->from()->libertyCell(); + const LibertyCell *drvr_cell = arc->to()->libertyCell(); const LibertyLibrary *drvr_library = drvr_cell->libertyLibrary(); const Units *units = drvr_library->units(); const Unit *cap_unit = units->capacitanceUnit(); const Unit *res_unit = units->resistanceUnit(); float c2, rpi, c1; - parasitics_->piModel(drvr_parasitic_, c2, rpi, c1); + parasitics_->piModel(parasitic, c2, rpi, c1); result += "Pi model C2="; result += cap_unit->asString(c2, digits); result += " Rpi="; @@ -1705,7 +1665,7 @@ DmpCeffDelayCalc::reportGateDelay(const TimingArc *arc, c_eff = load_cap; if (model) { float in_slew1 = delayAsFloat(in_slew); - result += model->reportGateDelay(pvt, in_slew1, c_eff, related_out_cap, + result += model->reportGateDelay(pinPvt(drvr_pin, dcalc_ap), in_slew1, c_eff, pocv_enabled_, digits); } return result; @@ -1718,7 +1678,6 @@ gateModelRd(const LibertyCell *cell, double in_slew, double c2, double c1, - float related_out_cap, const Pvt *pvt, bool pocv_enabled) { @@ -1726,8 +1685,8 @@ gateModelRd(const LibertyCell *cell, float cap2 = cap1 + 1e-15; ArcDelay d1, d2; Slew s1, s2; - gate_model->gateDelay(pvt, in_slew, cap1, related_out_cap, pocv_enabled, d1, s1); - gate_model->gateDelay(pvt, in_slew, cap2, related_out_cap, pocv_enabled, d2, s2); + gate_model->gateDelay(pvt, in_slew, cap1, pocv_enabled, d1, s1); + gate_model->gateDelay(pvt, in_slew, cap2, pocv_enabled, d2, s2); double vth = cell->libertyLibrary()->outputThreshold(rf); float rd = -log(vth) * abs(delayAsFloat(d1) - delayAsFloat(d2)) / (cap2 - cap1); return rd; @@ -1741,10 +1700,10 @@ DmpCeffDelayCalc::gateDelaySlew(double &delay, } void -DmpCeffDelayCalc::loadDelaySlew(const Pin *load_pin, - double elmore, - ArcDelay &delay, - Slew &slew) +DmpCeffDelayCalc::loadDelaySlewElmore(const Pin *load_pin, + double elmore, + ArcDelay &delay, + Slew &slew) { if (dmp_alg_) dmp_alg_->loadDelaySlew(load_pin, elmore, delay, slew); diff --git a/dcalc/DmpCeff.hh b/dcalc/DmpCeff.hh index b79dbdc6..960b8336 100644 --- a/dcalc/DmpCeff.hh +++ b/dcalc/DmpCeff.hh @@ -34,45 +34,39 @@ class DmpCeffDelayCalc : public LumpedCapDelayCalc public: DmpCeffDelayCalc(StaState *sta); virtual ~DmpCeffDelayCalc(); - virtual void inputPortDelay(const Pin *port_pin, - float in_slew, - const RiseFall *rf, - const Parasitic *parasitic, - const DcalcAnalysisPt *dcalc_ap); - virtual void gateDelay(const TimingArc *arc, - const Slew &in_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - // return values - ArcDelay &gate_delay, - Slew &drvr_slew); - virtual float ceff(const TimingArc *arc, - const Slew &in_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap); - virtual string reportGateDelay(const TimingArc *arc, - const Slew &in_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - int digits); - virtual void copyState(const StaState *sta); + ArcDcalcResult gateDelay(const Pin *drvr_pin, + const TimingArc *arc, + const Slew &in_slew, + float load_cap, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) override; + string reportGateDelay(const Pin *drvr_pin, + const TimingArc *arc, + const Slew &in_slew, + float load_cap, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap, + int digits) override; + void copyState(const StaState *sta) override; protected: - void gateDelaySlew(double &delay, + virtual void loadDelaySlew(const Pin *load_pin, + double drvr_slew, + const RiseFall *rf, + const LibertyLibrary *drvr_library, + const Parasitic *parasitic, + // Return values. + ArcDelay &wire_delay, + Slew &load_slew) = 0; + void gateDelaySlew(// Return values. + double &delay, double &slew); - void loadDelaySlew(const Pin *load_pin, - double elmore, - ArcDelay &delay, - Slew &slew); + void loadDelaySlewElmore(const Pin *load_pin, + double elmore, + ArcDelay &delay, + Slew &slew); // Select the appropriate special case Dartu/Menezes/Pileggi algorithm. void setCeffAlgorithm(const LibertyLibrary *library, const LibertyCell *cell, @@ -80,7 +74,6 @@ protected: const GateTableModel *gate_model, const RiseFall *rf, double in_slew, - float related_out_cap, double c2, double rpi, double c1); diff --git a/dcalc/DmpDelayCalc.cc b/dcalc/DmpDelayCalc.cc index ed97468a..bf0c7802 100644 --- a/dcalc/DmpDelayCalc.cc +++ b/dcalc/DmpDelayCalc.cc @@ -35,9 +35,22 @@ class DmpCeffElmoreDelayCalc : public DmpCeffDelayCalc public: DmpCeffElmoreDelayCalc(StaState *sta); ArcDelayCalc *copy() override; - void loadDelay(const Pin *load_pin, - ArcDelay &wire_delay, - Slew &load_slew) override; + ArcDcalcResult inputPortDelay(const Pin *port_pin, + float in_slew, + const RiseFall *rf, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) override; + +protected: + void loadDelaySlew(const Pin *load_pin, + double drvr_slew, + const RiseFall *rf, + const LibertyLibrary *drvr_library, + const Parasitic *parasitic, + // Return values. + ArcDelay &wire_delay, + Slew &load_slew) override; }; ArcDelayCalc * @@ -57,26 +70,54 @@ DmpCeffElmoreDelayCalc::copy() return new DmpCeffElmoreDelayCalc(this); } -void -DmpCeffElmoreDelayCalc::loadDelay(const Pin *load_pin, - ArcDelay &wire_delay, - Slew &load_slew) +ArcDcalcResult +DmpCeffElmoreDelayCalc::inputPortDelay(const Pin *, + float in_slew, + const RiseFall *rf, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *) { - ArcDelay wire_delay1 = 0.0; - Slew load_slew1 = drvr_slew_; + ArcDcalcResult dcalc_result(load_pin_index_map.size()); + LibertyLibrary *drvr_library = network_->defaultLibertyLibrary(); + for (auto load_pin_index : load_pin_index_map) { + const Pin *load_pin = load_pin_index.first; + size_t load_idx = load_pin_index.second; + ArcDelay wire_delay = 0.0; + Slew load_slew = in_slew; + bool elmore_exists = false; + float elmore = 0.0; + if (parasitic) + parasitics_->findElmore(parasitic, load_pin, elmore, elmore_exists); + if (elmore_exists) + // Input port with no external driver. + dspfWireDelaySlew(load_pin, rf, in_slew, elmore, wire_delay, load_slew); + thresholdAdjust(load_pin, drvr_library, rf, wire_delay, load_slew); + dcalc_result.setWireDelay(load_idx, wire_delay); + dcalc_result.setLoadSlew(load_idx, load_slew); + } + return dcalc_result; +} + +void +DmpCeffElmoreDelayCalc::loadDelaySlew(const Pin *load_pin, + double drvr_slew, + const RiseFall *rf, + const LibertyLibrary *drvr_library, + const Parasitic *parasitic, + // Return values. + ArcDelay &wire_delay, + Slew &load_slew) +{ + wire_delay = 0.0; + load_slew = drvr_slew; bool elmore_exists = false; float elmore = 0.0; - if (drvr_parasitic_) - parasitics_->findElmore(drvr_parasitic_, load_pin, elmore, elmore_exists); - if (elmore_exists) { - if (input_port_) - dspfWireDelaySlew(load_pin, elmore, wire_delay1, load_slew1); - else - loadDelaySlew(load_pin, elmore, wire_delay1, load_slew1); - } - thresholdAdjust(load_pin, wire_delay1, load_slew1); - wire_delay = wire_delay1; - load_slew = load_slew1 * multi_drvr_slew_factor_; + if (parasitic) + parasitics_->findElmore(parasitic, load_pin, elmore, elmore_exists); + if (elmore_exists) + loadDelaySlewElmore(load_pin, elmore, wire_delay, load_slew); + thresholdAdjust(load_pin, drvr_library, rf, wire_delay, load_slew); } //////////////////////////////////////////////////////////////// @@ -91,28 +132,31 @@ public: Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) override; - ReducedParasiticType reducedParasiticType() const override; - void inputPortDelay(const Pin *port_pin, - float in_slew, - const RiseFall *rf, - const Parasitic *parasitic, - const DcalcAnalysisPt *dcalc_ap) override; - void gateDelay(const TimingArc *arc, - const Slew &in_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - // Return values. - ArcDelay &gate_delay, - Slew &drvr_slew) override; - void loadDelay(const Pin *load_pin, - ArcDelay &wire_delay, - Slew &load_slew) override; + ArcDcalcResult inputPortDelay(const Pin *port_pin, + float in_slew, + const RiseFall *rf, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) override; + ArcDcalcResult gateDelay(const Pin *drvr_pin, + const TimingArc *arc, + const Slew &in_slew, + float load_cap, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) override; private: - void loadDelay(Parasitic *pole_residue, + void loadDelaySlew(const Pin *load_pin, + double drvr_slew, + const RiseFall *rf, + const LibertyLibrary *drvr_library, + const Parasitic *parasitic, + // Return values. + ArcDelay &wire_delay, + Slew &load_slew) override; + void loadDelay(double drvr_slew, + Parasitic *pole_residue, double p1, double k1, ArcDelay &wire_delay, @@ -211,57 +255,81 @@ DmpCeffTwoPoleDelayCalc::findParasitic(const Pin *drvr_pin, return parasitic; } -ReducedParasiticType -DmpCeffTwoPoleDelayCalc::reducedParasiticType() const +ArcDcalcResult +DmpCeffTwoPoleDelayCalc::inputPortDelay(const Pin *, + float in_slew, + const RiseFall *rf, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *) { - return ReducedParasiticType::pi_pole_residue2; + ArcDcalcResult dcalc_result(load_pin_index_map.size()); + ArcDelay wire_delay = 0.0; + Slew load_slew = in_slew; + LibertyLibrary *drvr_library = network_->defaultLibertyLibrary(); + for (auto load_pin_index : load_pin_index_map) { + const Pin *load_pin = load_pin_index.first; + size_t load_idx = load_pin_index.second; + if (parasitics_->isPiPoleResidue(parasitic)) { + const Parasitic *pole_residue = parasitics_->findPoleResidue(parasitic, load_pin); + if (pole_residue) { + size_t pole_count = parasitics_->poleResidueCount(pole_residue); + if (pole_count >= 1) { + ComplexFloat pole1, residue1; + // Find the 1st (elmore) pole. + parasitics_->poleResidue(pole_residue, 0, pole1, residue1); + if (pole1.imag() == 0.0 + && residue1.imag() == 0.0) { + float p1 = pole1.real(); + float elmore = 1.0F / p1; + dspfWireDelaySlew(load_pin, rf, in_slew, elmore, wire_delay, load_slew); + thresholdAdjust(load_pin, drvr_library, rf, wire_delay, load_slew); + } + } + } + } + dcalc_result.setWireDelay(load_idx, wire_delay); + dcalc_result.setLoadSlew(load_idx, load_slew); + } + return dcalc_result; +} + +ArcDcalcResult +DmpCeffTwoPoleDelayCalc::gateDelay(const Pin *drvr_pin, + const TimingArc *arc, + const Slew &in_slew, + float load_cap, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) +{ + const LibertyLibrary *drvr_library = arc->to()->libertyLibrary(); + const RiseFall *rf = arc->toEdge()->asRiseFall(); + vth_ = drvr_library->outputThreshold(rf); + vl_ = drvr_library->slewLowerThreshold(rf); + vh_ = drvr_library->slewUpperThreshold(rf); + slew_derate_ = drvr_library->slewDerateFromLibrary(); + return DmpCeffDelayCalc::gateDelay(drvr_pin, arc, in_slew, load_cap, parasitic, + load_pin_index_map, dcalc_ap) ; } void -DmpCeffTwoPoleDelayCalc::inputPortDelay(const Pin *port_pin, - float in_slew, - const RiseFall *rf, - const Parasitic *parasitic, - const DcalcAnalysisPt *dcalc_ap) +DmpCeffTwoPoleDelayCalc::loadDelaySlew(const Pin *load_pin, + double drvr_slew, + const RiseFall *rf, + const LibertyLibrary *drvr_library, + const Parasitic *parasitic, + // Return values. + ArcDelay &wire_delay, + Slew &load_slew) { parasitic_is_pole_residue_ = parasitics_->isPiPoleResidue(parasitic); - DmpCeffDelayCalc::inputPortDelay(port_pin, in_slew, rf, parasitic, dcalc_ap); -} - -void -DmpCeffTwoPoleDelayCalc::gateDelay(const TimingArc *arc, - const Slew &in_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - // Return values. - ArcDelay &gate_delay, - Slew &drvr_slew) -{ - gateDelayInit(arc, in_slew, drvr_parasitic); - parasitic_is_pole_residue_ = parasitics_->isPiPoleResidue(drvr_parasitic); - vth_ = drvr_library_->outputThreshold(drvr_rf_); - vl_ = drvr_library_->slewLowerThreshold(drvr_rf_); - vh_ = drvr_library_->slewUpperThreshold(drvr_rf_); - slew_derate_ = drvr_library_->slewDerateFromLibrary(); - DmpCeffDelayCalc::gateDelay(arc, in_slew, load_cap, drvr_parasitic, - related_out_cap, pvt, dcalc_ap, - gate_delay, drvr_slew); -} - -void -DmpCeffTwoPoleDelayCalc::loadDelay(const Pin *load_pin, - ArcDelay &wire_delay, - Slew &load_slew) -{ // Should handle PiElmore parasitic. - ArcDelay wire_delay1 = 0.0; - Slew load_slew1 = drvr_slew_; + wire_delay = 0.0; + load_slew = drvr_slew; Parasitic *pole_residue = 0; if (parasitic_is_pole_residue_) - pole_residue = parasitics_->findPoleResidue(drvr_parasitic_, load_pin); + pole_residue = parasitics_->findPoleResidue(parasitic, load_pin); if (pole_residue) { size_t pole_count = parasitics_->poleResidueCount(pole_residue); if (pole_count >= 1) { @@ -272,37 +340,31 @@ DmpCeffTwoPoleDelayCalc::loadDelay(const Pin *load_pin, && residue1.imag() == 0.0) { float p1 = pole1.real(); float k1 = residue1.real(); - if (input_port_) { - float elmore = 1.0F / p1; - // Input port with no external driver. - dspfWireDelaySlew(load_pin, elmore, wire_delay1, load_slew1); - } - else { - if (pole_count >= 2) - loadDelay(pole_residue, p1, k1, wire_delay1, load_slew1); - else { - float elmore = 1.0F / p1; - wire_delay1 = elmore; - load_slew1 = drvr_slew_; - } - } + if (pole_count >= 2) + loadDelay(drvr_slew, pole_residue, p1, k1, wire_delay, load_slew); + else { + float elmore = 1.0F / p1; + wire_delay = elmore; + load_slew = drvr_slew; + } } } } - thresholdAdjust(load_pin, wire_delay1, load_slew1); - wire_delay = wire_delay1; - load_slew = load_slew1 * multi_drvr_slew_factor_; + thresholdAdjust(load_pin, drvr_library, rf, wire_delay, load_slew); } void -DmpCeffTwoPoleDelayCalc::loadDelay(Parasitic *pole_residue, - double p1, double k1, - ArcDelay &wire_delay, +DmpCeffTwoPoleDelayCalc::loadDelay(double drvr_slew, + Parasitic *pole_residue, + double p1, + double k1, + // Return values. + ArcDelay &wire_delay, Slew &load_slew) { ComplexFloat pole2, residue2; parasitics_->poleResidue(pole_residue, 1, pole2, residue2); - if (!delayZero(drvr_slew_) + if (!delayZero(drvr_slew) && pole2.imag() == 0.0 && residue2.imag() == 0.0) { double p2 = pole2.real(); @@ -311,7 +373,7 @@ DmpCeffTwoPoleDelayCalc::loadDelay(Parasitic *pole_residue, double k2_p2_2 = k2 / (p2 * p2); double B = k1_p1_2 + k2_p2_2; // Convert tt to 0:1 range. - float tt = delayAsFloat(drvr_slew_) * slew_derate_ / (vh_ - vl_); + float tt = delayAsFloat(drvr_slew) * slew_derate_ / (vh_ - vl_); double y_tt = (tt - B + k1_p1_2 * exp(-p1 * tt) + k2_p2_2 * exp(-p2 * tt)) / tt; wire_delay = loadDelay(vth_, p1, p2, k1, k2, B, k1_p1_2, k2_p2_2, tt, y_tt) diff --git a/dcalc/GraphDelayCalc.cc b/dcalc/GraphDelayCalc.cc index 3f18bd2f..f0414b98 100644 --- a/dcalc/GraphDelayCalc.cc +++ b/dcalc/GraphDelayCalc.cc @@ -183,25 +183,10 @@ GraphDelayCalc::deleteVertexBefore(Vertex *vertex) invalid_delays_->erase(vertex); MultiDrvrNet *multi_drvr = multiDrvrNet(vertex); if (multi_drvr) { - VertexSet *drvrs = multi_drvr->drvrs(); - drvrs->erase(vertex); - multi_drvr_net_map_.erase(vertex); - if (drvrs->empty()) - delete multi_drvr; - else { - Level max_drvr_level = 0; - Vertex *max_drvr = nullptr; - for (Vertex *drvr_vertex : *drvrs) { - Level drvr_level = drvr_vertex->level(); - if (max_drvr == nullptr - || drvr_level > max_drvr_level) { - max_drvr = drvr_vertex; - max_drvr_level = drvr_level; - } - } - multi_drvr->setDcalcDrvr(max_drvr); - multi_drvr->findCaps(sdc_); - } + // Don't bother incrementally updating MultiDrvrNet. + for (Vertex *drvr_vertex : *multi_drvr->drvrs()) + multi_drvr_net_map_.erase(drvr_vertex); + delete multi_drvr; } } @@ -391,10 +376,12 @@ GraphDelayCalc::seedNoDrvrCellSlew(Vertex *drvr_vertex, const MinMax *slew_min_max = dcalc_ap->slewMinMax(); if (!drvr_vertex->slewAnnotated(rf, slew_min_max)) graph_->setSlew(drvr_vertex, rf, ap_index, slew); - arc_delay_calc->inputPortDelay(drvr_pin, delayAsFloat(slew), rf, - parasitic, dcalc_ap); - annotateLoadDelays(drvr_vertex, rf, drive_delay, false, dcalc_ap, - arc_delay_calc); + LoadPinIndexMap load_pin_index_map = makeLoadPinIndexMap(drvr_vertex); + ArcDcalcResult dcalc_result = + arc_delay_calc->inputPortDelay(drvr_pin, delayAsFloat(slew), rf, parasitic, + load_pin_index_map, dcalc_ap); + annotateLoadDelays(drvr_vertex, rf, dcalc_result, load_pin_index_map, + drive_delay, false, dcalc_ap); arc_delay_calc->finishDrvrPin(); } @@ -417,10 +404,12 @@ GraphDelayCalc::seedNoDrvrSlew(Vertex *drvr_vertex, if (!drvr_vertex->slewAnnotated(rf, slew_min_max)) graph_->setSlew(drvr_vertex, rf, ap_index, slew); Parasitic *parasitic = arc_delay_calc->findParasitic(drvr_pin, rf, dcalc_ap); - arc_delay_calc->inputPortDelay(drvr_pin, delayAsFloat(slew), rf, - parasitic, dcalc_ap); - annotateLoadDelays(drvr_vertex, rf, delay_zero, false, dcalc_ap, - arc_delay_calc); + LoadPinIndexMap load_pin_index_map = makeLoadPinIndexMap(drvr_vertex); + ArcDcalcResult dcalc_result = + arc_delay_calc->inputPortDelay(drvr_pin, delayAsFloat(slew), rf, parasitic, + load_pin_index_map, dcalc_ap); + annotateLoadDelays(drvr_vertex, rf, dcalc_result, load_pin_index_map, delay_zero, + false, dcalc_ap); arc_delay_calc->finishDrvrPin(); } @@ -531,25 +520,26 @@ GraphDelayCalc::findInputArcDelay(const Pin *drvr_pin, arc->to()->name(), arc->toEdge()->asString(), arc->role()->asString()); - RiseFall *drvr_rf = arc->toEdge()->asRiseFall(); + const RiseFall *drvr_rf = arc->toEdge()->asRiseFall(); if (drvr_rf) { DcalcAPIndex ap_index = dcalc_ap->index(); - const Pvt *pvt = dcalc_ap->operatingConditions(); - Parasitic *drvr_parasitic = arc_delay_calc_->findParasitic(drvr_pin, drvr_rf, - dcalc_ap); - float load_cap = loadCap(drvr_pin, drvr_parasitic, drvr_rf, dcalc_ap); + Parasitic *parasitic = arc_delay_calc_->findParasitic(drvr_pin, drvr_rf, dcalc_ap); + float load_cap = loadCap(drvr_pin, parasitic, drvr_rf, dcalc_ap); - ArcDelay intrinsic_delay; - Slew intrinsic_slew; - arc_delay_calc_->gateDelay(arc, Slew(from_slew), 0.0, 0, 0.0, pvt, dcalc_ap, - intrinsic_delay, intrinsic_slew); + LoadPinIndexMap load_pin_index_map = makeLoadPinIndexMap(drvr_vertex); + ArcDcalcResult intrinsic_result = + arc_delay_calc_->gateDelay(drvr_pin, arc, Slew(from_slew), 0.0, nullptr, + load_pin_index_map, dcalc_ap); + ArcDelay intrinsic_delay = intrinsic_result.gateDelay(); + + ArcDcalcResult gate_result = arc_delay_calc_->gateDelay(drvr_pin, arc, + Slew(from_slew), load_cap, + parasitic, + load_pin_index_map, + dcalc_ap); + ArcDelay gate_delay = gate_result.gateDelay(); + Slew gate_slew = gate_result.drvrSlew(); - // For input drivers there is no instance to find a related_output_pin. - ArcDelay gate_delay; - Slew gate_slew; - arc_delay_calc_->gateDelay(arc, Slew(from_slew), load_cap, - drvr_parasitic, 0.0, pvt, dcalc_ap, - gate_delay, gate_slew); ArcDelay load_delay = gate_delay - intrinsic_delay; debugPrint(debug_, "delay_calc", 3, " gate delay = %s intrinsic = %s slew = %s", @@ -557,8 +547,8 @@ GraphDelayCalc::findInputArcDelay(const Pin *drvr_pin, delayAsString(intrinsic_delay, this), delayAsString(gate_slew, this)); graph_->setSlew(drvr_vertex, drvr_rf, ap_index, gate_slew); - annotateLoadDelays(drvr_vertex, drvr_rf, load_delay, false, dcalc_ap, - arc_delay_calc_); + annotateLoadDelays(drvr_vertex, drvr_rf, gate_result, load_pin_index_map, + load_delay, false, dcalc_ap); } } @@ -651,19 +641,12 @@ GraphDelayCalc::findDriverDelays(Vertex *drvr_vertex, { bool delay_changed = false; MultiDrvrNet *multi_drvr = findMultiDrvrNet(drvr_vertex); - if (multi_drvr - && multi_drvr->parallelGates(network_)) { - Vertex *dcalc_drvr = multi_drvr->dcalcDrvr(); - if (drvr_vertex == dcalc_drvr) { - initLoadSlews(drvr_vertex); - arc_delay_calc->findParallelGateDelays(multi_drvr, this); - for (Vertex *drvr_vertex : *multi_drvr->drvrs()) - delay_changed |= findDriverDelays1(drvr_vertex, multi_drvr, arc_delay_calc); - } - } - else { + if (multi_drvr == nullptr + || (multi_drvr + && (!multi_drvr->parallelGates(network_) + || drvr_vertex == multi_drvr->dcalcDrvr()))) { initLoadSlews(drvr_vertex); - delay_changed = findDriverDelays1(drvr_vertex, nullptr, arc_delay_calc); + delay_changed |= findDriverDelays1(drvr_vertex, multi_drvr, arc_delay_calc); } arc_delay_calc->finishDrvrPin(); return delay_changed; @@ -763,10 +746,17 @@ GraphDelayCalc::findDriverDelays1(Vertex *drvr_vertex, MultiDrvrNet *multi_drvr, ArcDelayCalc *arc_delay_calc) { - const Pin *drvr_pin = drvr_vertex->pin(); - Instance *drvr_inst = network_->instance(drvr_pin); initSlew(drvr_vertex); - initWireDelays(drvr_vertex); + if (multi_drvr + && multi_drvr->parallelGates(network_)) { + // Only init on the trigger driver. + if (drvr_vertex == multi_drvr->dcalcDrvr()) { + for (auto vertex : *multi_drvr->drvrs()) + initWireDelays(vertex); + } + } + else + initWireDelays(drvr_vertex); bool delay_changed = false; bool has_delays = false; VertexInEdgeIterator edge_iter(drvr_vertex, graph_); @@ -777,8 +767,8 @@ GraphDelayCalc::findDriverDelays1(Vertex *drvr_vertex, if (search_pred_->searchFrom(from_vertex) && search_pred_->searchThru(edge) && !edge->role()->isLatchDtoQ()) { - delay_changed |= findDriverEdgeDelays(drvr_inst, drvr_pin, drvr_vertex, - multi_drvr, edge, arc_delay_calc); + delay_changed |= findDriverEdgeDelays(drvr_vertex, multi_drvr, edge, + arc_delay_calc); has_delays = true; } } @@ -812,53 +802,329 @@ GraphDelayCalc::findLatchEdgeDelays(Edge *edge) Instance *drvr_inst = network_->instance(drvr_pin); debugPrint(debug_, "delay_calc", 2, "find latch D->Q %s", sdc_network_->pathName(drvr_inst)); - bool delay_changed = findDriverEdgeDelays(drvr_inst, drvr_pin, drvr_vertex, - nullptr, edge, arc_delay_calc_); + bool delay_changed = findDriverEdgeDelays(drvr_vertex, nullptr, edge, + arc_delay_calc_); if (delay_changed && observer_) observer_->delayChangedTo(drvr_vertex); } bool -GraphDelayCalc::findDriverEdgeDelays(const Instance *drvr_inst, - const Pin *drvr_pin, - Vertex *drvr_vertex, +GraphDelayCalc::findDriverEdgeDelays(Vertex *drvr_vertex, const MultiDrvrNet *multi_drvr, Edge *edge, ArcDelayCalc *arc_delay_calc) { - Vertex *in_vertex = edge->from(graph_); + Vertex *from_vertex = edge->from(graph_); const TimingArcSet *arc_set = edge->timingArcSet(); - const LibertyPort *related_out_port = arc_set->relatedOut(); - const Pin *related_out_pin = 0; bool delay_changed = false; - if (related_out_port) - related_out_pin = network_->findPin(drvr_inst, related_out_port); + PinSeq load_pins = loadPins(drvr_vertex); + LoadPinIndexMap load_pin_index_map = makeLoadPinIndexMap(drvr_vertex); for (auto dcalc_ap : corners_->dcalcAnalysisPts()) { - const Pvt *pvt = sdc_->pvt(drvr_inst, dcalc_ap->constraintMinMax()); - if (pvt == nullptr) - pvt = dcalc_ap->operatingConditions(); - for (TimingArc *arc : arc_set->arcs()) { - const RiseFall *rf = arc->toEdge()->asRiseFall(); - Parasitic *parasitic = arc_delay_calc->findParasitic(drvr_pin, rf, dcalc_ap); - float related_out_cap = 0.0; - if (related_out_pin) { - Parasitic *related_out_parasitic = - arc_delay_calc->findParasitic(related_out_pin, rf, dcalc_ap); - related_out_cap = loadCap(related_out_pin, related_out_parasitic, rf, dcalc_ap); - } - delay_changed |= findArcDelay(drvr_pin, drvr_vertex, arc, parasitic, - related_out_cap, in_vertex, edge, pvt, dcalc_ap, - multi_drvr, arc_delay_calc); - } + for (const TimingArc *arc : arc_set->arcs()) + delay_changed |= findDriverArcDelays(drvr_vertex, multi_drvr, edge, arc, + load_pin_index_map, dcalc_ap, + arc_delay_calc); } - if (delay_changed && observer_) { - observer_->delayChangedFrom(in_vertex); + observer_->delayChangedFrom(from_vertex); observer_->delayChangedFrom(drvr_vertex); } return delay_changed; } +void +GraphDelayCalc::findDriverArcDelays(Vertex *drvr_vertex, + Edge *edge, + const TimingArc *arc, + const DcalcAnalysisPt *dcalc_ap, + ArcDelayCalc *arc_delay_calc) +{ + MultiDrvrNet *multi_drvr = multiDrvrNet(drvr_vertex); + LoadPinIndexMap load_pin_index_map = makeLoadPinIndexMap(drvr_vertex); + findDriverArcDelays(drvr_vertex, multi_drvr, edge, arc, + load_pin_index_map, dcalc_ap, + arc_delay_calc); +} + +bool +GraphDelayCalc::findDriverArcDelays(Vertex *drvr_vertex, + const MultiDrvrNet *multi_drvr, + Edge *edge, + const TimingArc *arc, + LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap, + ArcDelayCalc *arc_delay_calc) +{ + bool delay_changed = false; + const RiseFall *from_rf = arc->fromEdge()->asRiseFall(); + const RiseFall *drvr_rf = arc->toEdge()->asRiseFall(); + if (from_rf && drvr_rf) { + const Pin *drvr_pin = drvr_vertex->pin(); + Parasitic *parasitic = arc_delay_calc->findParasitic(drvr_pin, drvr_rf, + dcalc_ap); + float load_cap = loadCap(drvr_pin, parasitic, drvr_rf, dcalc_ap, multi_drvr); + if (multi_drvr + && multi_drvr->parallelGates(network_)) { + ArcDcalcArgSeq dcalc_args = makeArcDcalcArgs(drvr_vertex, multi_drvr, + edge, arc, dcalc_ap, + arc_delay_calc); + ArcDcalcResultSeq dcalc_results = + arc_delay_calc->gateDelays(dcalc_args, load_cap, load_pin_index_map, + dcalc_ap); + size_t drvr_count = multi_drvr->drvrs()->size(); + for (size_t drvr_idx = 0; drvr_idx < drvr_count; drvr_idx++) { + ArcDcalcArg &dcalc_arg = dcalc_args[drvr_idx]; + ArcDcalcResult &dcalc_result = dcalc_results[drvr_idx]; + delay_changed |= annotateDelaysSlews(dcalc_arg.edge(), dcalc_arg.arc(), + dcalc_result, load_pin_index_map, + dcalc_ap); + } + } + else { + Vertex *from_vertex = edge->from(graph_); + const Slew in_slew = edgeFromSlew(from_vertex, from_rf, edge, dcalc_ap); + ArcDcalcResult dcalc_result = arc_delay_calc->gateDelay(drvr_pin, arc, in_slew, + load_cap, parasitic, + load_pin_index_map, + dcalc_ap); + delay_changed |= annotateDelaysSlews(edge, arc, dcalc_result, + load_pin_index_map, dcalc_ap); + } + } + return delay_changed; +} + +ArcDcalcArgSeq +GraphDelayCalc::makeArcDcalcArgs(Vertex *drvr_vertex, + const MultiDrvrNet *multi_drvr, + Edge *edge, + const TimingArc *arc, + const DcalcAnalysisPt *dcalc_ap, + ArcDelayCalc *arc_delay_calc) +{ + ArcDcalcArgSeq dcalc_args; + for (auto drvr_vertex1 : *multi_drvr->drvrs()) { + Edge *edge1; + const TimingArc *arc1; + if (drvr_vertex1 == drvr_vertex) { + edge1 = edge; + arc1 = arc; + } + else + findParallelEdge(drvr_vertex1, edge, arc, edge1, arc1); + Vertex *from_vertex = edge1->from(graph_); + const RiseFall *from_rf = arc1->fromEdge()->asRiseFall(); + const RiseFall *drvr_rf = arc1->toEdge()->asRiseFall(); + const Slew in_slew = edgeFromSlew(from_vertex, from_rf, edge1, dcalc_ap); + const Pin *drvr_pin1 = drvr_vertex1->pin(); + Parasitic *parasitic = arc_delay_calc->findParasitic(drvr_pin1, drvr_rf, + dcalc_ap); + dcalc_args.push_back(ArcDcalcArg(drvr_pin1, edge1, arc1, in_slew, + parasitic)); + } + return dcalc_args; +} + +// Find an edge/arc for parallel driver vertex to go along with the +// primary driver drvr_edge/drvr_arc. +void +GraphDelayCalc::findParallelEdge(Vertex *vertex, + Edge *drvr_edge, + const TimingArc *drvr_arc, + // Return values. + Edge *&edge, + const TimingArc *&arc) +{ + LibertyCell *drvr_cell = network_->libertyCell(network_->instance(drvr_edge->to(graph_)->pin())); + LibertyCell *vertex_cell = network_->libertyCell(network_->instance(vertex->pin())); + if (vertex_cell == drvr_cell) { + // Homogeneous drivers. + arc = drvr_arc; + LibertyPort *from_port = network_->libertyPort(edge->from(graph_)->pin()); + VertexInEdgeIterator edge_iter(vertex, graph_); + while (edge_iter.hasNext()) { + edge = edge_iter.next(); + if (network_->libertyPort(edge->from(graph_)->pin()) == from_port) + return; + } + } + else { + VertexInEdgeIterator edge_iter(vertex, graph_); + while (edge_iter.hasNext()) { + edge = edge_iter.next(); + for (TimingArc *arc1 : edge->timingArcSet()->arcs()) { + if (arc1->fromEdge() == drvr_arc->fromEdge() + && arc1->toEdge() == drvr_arc->toEdge()) { + arc = arc1; + return; + } + } + } + } + edge = nullptr; + arc = nullptr; +} + +bool +GraphDelayCalc::annotateDelaysSlews(Edge *edge, + const TimingArc *arc, + ArcDcalcResult &dcalc_result, + LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) +{ + bool delay_changed = annotateDelaySlew(edge, arc, + dcalc_result.gateDelay(), + dcalc_result.drvrSlew(), dcalc_ap); + if (!edge->role()->isLatchDtoQ()) { + Vertex *drvr_vertex = edge->to(graph_); + annotateLoadDelays(drvr_vertex, arc->toEdge()->asRiseFall(), dcalc_result, + load_pin_index_map, delay_zero, true, dcalc_ap); + } + return delay_changed; +} + +// Annotate the gate delay and merge the slew at the driver pin. +// Annotate the wire delays from the gate output to +// each load pin, and the merge the slews at each load pin. +bool +GraphDelayCalc::annotateDelaySlew(Edge *edge, + const TimingArc *arc, + ArcDelay &gate_delay, + Slew &gate_slew, + const DcalcAnalysisPt *dcalc_ap) +{ + bool delay_changed = false; + DcalcAPIndex ap_index = dcalc_ap->index(); + debugPrint(debug_, "delay_calc", 3, + " %s %s -> %s %s (%s) corner:%s/%s", + arc->from()->name(), + arc->fromEdge()->asString(), + arc->to()->name(), + arc->toEdge()->asString(), + arc->role()->asString(), + dcalc_ap->corner()->name(), + dcalc_ap->delayMinMax()->asString()); + debugPrint(debug_, "delay_calc", 3, + " gate delay = %s slew = %s", + delayAsString(gate_delay, this), + delayAsString(gate_slew, this)); + Vertex *drvr_vertex = edge->to(graph_); + const RiseFall *drvr_rf = arc->toEdge()->asRiseFall(); + // Merge slews. + const Slew &drvr_slew = graph_->slew(drvr_vertex, drvr_rf, ap_index); + const MinMax *slew_min_max = dcalc_ap->slewMinMax(); + if (delayGreater(gate_slew, drvr_slew, dcalc_ap->slewMinMax(), this) + && !drvr_vertex->slewAnnotated(drvr_rf, slew_min_max) + && !edge->role()->isLatchDtoQ()) + graph_->setSlew(drvr_vertex, drvr_rf, ap_index, gate_slew); + if (!graph_->arcDelayAnnotated(edge, arc, ap_index)) { + const ArcDelay &prev_gate_delay = graph_->arcDelay(edge,arc,ap_index); + float gate_delay1 = delayAsFloat(gate_delay); + float prev_gate_delay1 = delayAsFloat(prev_gate_delay); + if (prev_gate_delay1 == 0.0 + || (abs(gate_delay1 - prev_gate_delay1) / prev_gate_delay1 + > incremental_delay_tolerance_)) + delay_changed = true; + graph_->setArcDelay(edge, arc, ap_index, gate_delay); + } + return delay_changed; +} + +// Annotate wire arc delays and load pin slews. +// extra_delay is additional wire delay to add to delay returned +// by the delay calculator. +void +GraphDelayCalc::annotateLoadDelays(Vertex *drvr_vertex, + const RiseFall *drvr_rf, + ArcDcalcResult &dcalc_result, + LoadPinIndexMap &load_pin_index_map, + const ArcDelay &extra_delay, + bool merge, + const DcalcAnalysisPt *dcalc_ap) +{ + DcalcAPIndex ap_index = dcalc_ap->index(); + const MinMax *slew_min_max = dcalc_ap->slewMinMax(); + VertexOutEdgeIterator edge_iter(drvr_vertex, graph_); + while (edge_iter.hasNext()) { + Edge *wire_edge = edge_iter.next(); + if (wire_edge->isWire()) { + Vertex *load_vertex = wire_edge->to(graph_); + Pin *load_pin = load_vertex->pin(); + size_t load_idx = load_pin_index_map[load_pin]; + ArcDelay wire_delay = dcalc_result.wireDelay(load_idx); + Slew load_slew = dcalc_result.loadSlew(load_idx); + debugPrint(debug_, "delay_calc", 3, + " %s load delay = %s slew = %s", + load_vertex->name(sdc_network_), + delayAsString(wire_delay, this), + delayAsString(load_slew, this)); + if (!load_vertex->slewAnnotated(drvr_rf, slew_min_max)) { + if (drvr_vertex->slewAnnotated(drvr_rf, slew_min_max)) { + // Copy the driver slew to the load if it is annotated. + const Slew &drvr_slew = graph_->slew(drvr_vertex,drvr_rf,ap_index); + graph_->setSlew(load_vertex, drvr_rf, ap_index, drvr_slew); + } + else { + const Slew &slew = graph_->slew(load_vertex, drvr_rf, ap_index); + if (!merge + || delayGreater(load_slew, slew, slew_min_max, this)) + graph_->setSlew(load_vertex, drvr_rf, ap_index, load_slew); + } + } + if (!graph_->wireDelayAnnotated(wire_edge, drvr_rf, ap_index)) { + // Multiple timing arcs with the same output transition + // annotate the same wire edges so they must be combined + // rather than set. + const ArcDelay &delay = graph_->wireArcDelay(wire_edge, drvr_rf, ap_index); + Delay wire_delay_extra = extra_delay + wire_delay; + const MinMax *delay_min_max = dcalc_ap->delayMinMax(); + if (!merge + || delayGreater(wire_delay_extra, delay, delay_min_max, this)) { + graph_->setWireArcDelay(wire_edge, drvr_rf, ap_index, wire_delay_extra); + if (observer_) + observer_->delayChangedTo(load_vertex); + } + } + // Enqueue bidirect driver from load vertex. + if (sdc_->bidirectDrvrSlewFromLoad(load_pin)) + iter_->enqueue(graph_->pinDrvrVertex(load_pin)); + } + } +} + +PinSeq +GraphDelayCalc::loadPins(Vertex *drvr_vertex) +{ + PinSeq load_pins; + VertexOutEdgeIterator edge_iter(drvr_vertex, graph_); + while (edge_iter.hasNext()) { + Edge *wire_edge = edge_iter.next(); + if (wire_edge->isWire()) { + Vertex *load_vertex = wire_edge->to(graph_); + load_pins.push_back(load_vertex->pin()); + } + } + return load_pins; +} + +LoadPinIndexMap +GraphDelayCalc::makeLoadPinIndexMap(Vertex *drvr_vertex) +{ + LoadPinIndexMap load_pin_index_map(network_); + size_t load_idx = 0; + VertexOutEdgeIterator edge_iter(drvr_vertex, graph_); + while (edge_iter.hasNext()) { + Edge *wire_edge = edge_iter.next(); + if (wire_edge->isWire()) { + Vertex *load_vertex = wire_edge->to(graph_); + const Pin *load_pin = load_vertex->pin(); + load_pin_index_map[load_pin] = load_idx; + load_idx++; + } + } + return load_pin_index_map; +} + float GraphDelayCalc::loadCap(const Pin *drvr_pin, const DcalcAnalysisPt *dcalc_ap) const @@ -866,9 +1132,8 @@ GraphDelayCalc::loadCap(const Pin *drvr_pin, const MinMax *min_max = dcalc_ap->constraintMinMax(); float load_cap = 0.0; for (auto drvr_rf : RiseFall::range()) { - Parasitic *drvr_parasitic = arc_delay_calc_->findParasitic(drvr_pin, drvr_rf, - dcalc_ap); - float cap = loadCap(drvr_pin, drvr_parasitic, drvr_rf, dcalc_ap, nullptr); + Parasitic *parasitic = arc_delay_calc_->findParasitic(drvr_pin, drvr_rf, dcalc_ap); + float cap = loadCap(drvr_pin, parasitic, drvr_rf, dcalc_ap, nullptr); arc_delay_calc_->finishDrvrPin(); if (min_max->compare(cap, load_cap)) load_cap = cap; @@ -881,24 +1146,24 @@ GraphDelayCalc::loadCap(const Pin *drvr_pin, const RiseFall *drvr_rf, const DcalcAnalysisPt *dcalc_ap) const { - Parasitic *drvr_parasitic = arc_delay_calc_->findParasitic(drvr_pin, drvr_rf, + Parasitic *parasitic = arc_delay_calc_->findParasitic(drvr_pin, drvr_rf, dcalc_ap); - float cap = loadCap(drvr_pin, drvr_parasitic, drvr_rf, dcalc_ap, nullptr); + float cap = loadCap(drvr_pin, parasitic, drvr_rf, dcalc_ap, nullptr); return cap; } float GraphDelayCalc::loadCap(const Pin *drvr_pin, - const Parasitic *drvr_parasitic, + const Parasitic *parasitic, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) const { - return loadCap(drvr_pin, drvr_parasitic, rf, dcalc_ap, nullptr); + return loadCap(drvr_pin, parasitic, rf, dcalc_ap, nullptr); } float GraphDelayCalc::loadCap(const Pin *drvr_pin, - const Parasitic *drvr_parasitic, + const Parasitic *parasitic, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap, const MultiDrvrNet *multi_drvr) const @@ -912,13 +1177,13 @@ GraphDelayCalc::loadCap(const Pin *drvr_pin, else netCaps(drvr_pin, rf, dcalc_ap, pin_cap, wire_cap, fanout, has_net_load); - loadCap(drvr_parasitic, has_net_load, pin_cap, wire_cap); + loadCap(parasitic, has_net_load, pin_cap, wire_cap); return wire_cap + pin_cap; } void GraphDelayCalc::loadCap(const Pin *drvr_pin, - const Parasitic *drvr_parasitic, + const Parasitic *parasitic, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap, // Return values. @@ -930,23 +1195,23 @@ GraphDelayCalc::loadCap(const Pin *drvr_pin, // Find pin and external pin/wire capacitance. netCaps(drvr_pin, rf, dcalc_ap, pin_cap, wire_cap, fanout, has_net_load); - loadCap(drvr_parasitic, has_net_load, pin_cap, wire_cap); + loadCap(parasitic, has_net_load, pin_cap, wire_cap); } void -GraphDelayCalc::loadCap(const Parasitic *drvr_parasitic, +GraphDelayCalc::loadCap(const Parasitic *parasitic, bool has_net_load, // Return values. float &pin_cap, float &wire_cap) const { // set_load net has precidence over parasitics. - if (!has_net_load && drvr_parasitic) { - if (parasitics_->isParasiticNetwork(drvr_parasitic)) - wire_cap += parasitics_->capacitance(drvr_parasitic); + if (!has_net_load && parasitic) { + if (parasitics_->isParasiticNetwork(parasitic)) + wire_cap += parasitics_->capacitance(parasitic); else { // PiModel includes both pin and external caps. - float cap = parasitics_->capacitance(drvr_parasitic); + float cap = parasitics_->capacitance(parasitic); if (pin_cap > cap) { pin_cap = 0.0; wire_cap = cap; @@ -1049,80 +1314,6 @@ GraphDelayCalc::initWireDelays(Vertex *drvr_vertex) } } -// Call the arc delay calculator to find the delay thru a single gate -// input to output timing arc, The wire delays from the gate output to -// each load pin, and the slew at each load pin. Annotate the graph -// with the results. -bool -GraphDelayCalc::findArcDelay(const Pin *drvr_pin, - Vertex *drvr_vertex, - const TimingArc *arc, - const Parasitic *drvr_parasitic, - float related_out_cap, - Vertex *from_vertex, - Edge *edge, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - const MultiDrvrNet *multi_drvr, - ArcDelayCalc *arc_delay_calc) -{ - bool delay_changed = false; - RiseFall *from_rf = arc->fromEdge()->asRiseFall(); - RiseFall *drvr_rf = arc->toEdge()->asRiseFall(); - if (from_rf && drvr_rf) { - DcalcAPIndex ap_index = dcalc_ap->index(); - debugPrint(debug_, "delay_calc", 3, - " %s %s -> %s %s (%s) corner:%s/%s", - arc->from()->name(), - arc->fromEdge()->asString(), - arc->to()->name(), - arc->toEdge()->asString(), - arc->role()->asString(), - dcalc_ap->corner()->name(), - dcalc_ap->delayMinMax()->asString()); - // Delay calculation is done even when the gate delays/slews are - // annotated because the wire delays may not be annotated. - const Slew from_slew = edgeFromSlew(from_vertex, from_rf, edge, dcalc_ap); - ArcDelay gate_delay; - Slew gate_slew; - float load_cap = loadCap(drvr_pin, drvr_parasitic, drvr_rf, dcalc_ap, multi_drvr); - if (multi_drvr - && multi_drvr->parallelGates(network_)) - arc_delay_calc->parallelGateDelay(drvr_pin, arc, from_slew, load_cap, - drvr_parasitic, related_out_cap, pvt, dcalc_ap, - gate_delay, gate_slew); - else - arc_delay_calc->gateDelay(arc, from_slew, load_cap, drvr_parasitic, - related_out_cap, pvt, dcalc_ap, - gate_delay, gate_slew); - debugPrint(debug_, "delay_calc", 3, - " gate delay = %s slew = %s", - delayAsString(gate_delay, this), - delayAsString(gate_slew, this)); - // Merge slews. - const Slew &drvr_slew = graph_->slew(drvr_vertex, drvr_rf, ap_index); - const MinMax *slew_min_max = dcalc_ap->slewMinMax(); - if (delayGreater(gate_slew, drvr_slew, dcalc_ap->slewMinMax(), this) - && !drvr_vertex->slewAnnotated(drvr_rf, slew_min_max) - && !edge->role()->isLatchDtoQ()) - graph_->setSlew(drvr_vertex, drvr_rf, ap_index, gate_slew); - if (!graph_->arcDelayAnnotated(edge, arc, ap_index)) { - const ArcDelay &prev_gate_delay = graph_->arcDelay(edge,arc,ap_index); - float gate_delay1 = delayAsFloat(gate_delay); - float prev_gate_delay1 = delayAsFloat(prev_gate_delay); - if (prev_gate_delay1 == 0.0 - || (abs(gate_delay1 - prev_gate_delay1) / prev_gate_delay1 - > incremental_delay_tolerance_)) - delay_changed = true; - graph_->setArcDelay(edge, arc, ap_index, gate_delay); - } - if (!edge->role()->isLatchDtoQ()) - annotateLoadDelays(drvr_vertex, drvr_rf, delay_zero, true, dcalc_ap, - arc_delay_calc); - } - return delay_changed; -} - // Use clock slew for register/latch clk->q edges. Slew GraphDelayCalc::edgeFromSlew(const Vertex *from_vertex, @@ -1139,69 +1330,6 @@ GraphDelayCalc::edgeFromSlew(const Vertex *from_vertex, return graph_->slew(from_vertex, from_rf, dcalc_ap->index()); } -// Annotate wire arc delays and load pin slews. -// extra_delay is additional wire delay to add to delay returned -// by the delay calculator. -void -GraphDelayCalc::annotateLoadDelays(Vertex *drvr_vertex, - const RiseFall *drvr_rf, - const ArcDelay &extra_delay, - bool merge, - const DcalcAnalysisPt *dcalc_ap, - ArcDelayCalc *arc_delay_calc) -{ - DcalcAPIndex ap_index = dcalc_ap->index(); - const MinMax *slew_min_max = dcalc_ap->slewMinMax(); - VertexOutEdgeIterator edge_iter(drvr_vertex, graph_); - while (edge_iter.hasNext()) { - Edge *wire_edge = edge_iter.next(); - if (wire_edge->isWire()) { - Vertex *load_vertex = wire_edge->to(graph_); - Pin *load_pin = load_vertex->pin(); - ArcDelay wire_delay; - Slew load_slew; - arc_delay_calc->loadDelay(load_pin, wire_delay, load_slew); - debugPrint(debug_, "delay_calc", 3, - " %s load delay = %s slew = %s", - load_vertex->name(sdc_network_), - delayAsString(wire_delay, this), - delayAsString(load_slew, this)); - if (!load_vertex->slewAnnotated(drvr_rf, slew_min_max)) { - if (drvr_vertex->slewAnnotated(drvr_rf, slew_min_max)) { - // Copy the driver slew to the load if it is annotated. - const Slew &drvr_slew = graph_->slew(drvr_vertex,drvr_rf,ap_index); - graph_->setSlew(load_vertex, drvr_rf, ap_index, drvr_slew); - } - else { - const Slew &slew = graph_->slew(load_vertex, drvr_rf, ap_index); - if (!merge - || delayGreater(load_slew, slew, slew_min_max, this)) - graph_->setSlew(load_vertex, drvr_rf, ap_index, load_slew); - } - } - if (!graph_->wireDelayAnnotated(wire_edge, drvr_rf, ap_index)) { - // Multiple timing arcs with the same output transition - // annotate the same wire edges so they must be combined - // rather than set. - const ArcDelay &delay = graph_->wireArcDelay(wire_edge, drvr_rf, - ap_index); - Delay wire_delay_extra = extra_delay + wire_delay; - const MinMax *delay_min_max = dcalc_ap->delayMinMax(); - if (!merge - || delayGreater(wire_delay_extra, delay, delay_min_max, this)) { - graph_->setWireArcDelay(wire_edge, drvr_rf, ap_index, - wire_delay_extra); - if (observer_) - observer_->delayChangedTo(load_vertex); - } - } - // Enqueue bidirect driver from load vertex. - if (sdc_->bidirectDrvrSlewFromLoad(load_pin)) - iter_->enqueue(graph_->pinDrvrVertex(load_pin)); - } - } -} - void GraphDelayCalc::findCheckEdgeDelays(Edge *edge, ArcDelayCalc *arc_delay_calc) @@ -1227,9 +1355,6 @@ GraphDelayCalc::findCheckEdgeDelays(Edge *edge, for (auto dcalc_ap : corners_->dcalcAnalysisPts()) { DcalcAPIndex ap_index = dcalc_ap->index(); if (!graph_->arcDelayAnnotated(edge, arc, ap_index)) { - const Pvt *pvt = sdc_->pvt(inst,dcalc_ap->constraintMinMax()); - if (pvt == nullptr) - pvt = dcalc_ap->operatingConditions(); const Slew &from_slew = checkEdgeClkSlew(from_vertex, from_rf, dcalc_ap); int slew_index = dcalc_ap->checkDataSlewIndex(); @@ -1253,9 +1378,9 @@ GraphDelayCalc::findCheckEdgeDelays(Edge *edge, related_out_parasitic, to_rf, dcalc_ap); } - ArcDelay check_delay; - arc_delay_calc->checkDelay(arc, from_slew, to_slew, related_out_cap, - pvt, dcalc_ap, check_delay); + ArcDelay check_delay = arc_delay_calc->checkDelay(to_pin, arc, from_slew, + to_slew, related_out_cap, + dcalc_ap); debugPrint(debug_, "delay_calc", 3, " check_delay = %s", delayAsString(check_delay, this)); @@ -1285,47 +1410,6 @@ GraphDelayCalc::checkEdgeClkSlew(const Vertex *from_vertex, //////////////////////////////////////////////////////////////// -float -GraphDelayCalc::ceff(Edge *edge, - TimingArc *arc, - const DcalcAnalysisPt *dcalc_ap) -{ - Vertex *from_vertex = edge->from(graph_); - Vertex *to_vertex = edge->to(graph_); - Pin *to_pin = to_vertex->pin(); - Instance *inst = network_->instance(to_pin); - const TimingArcSet *arc_set = edge->timingArcSet(); - float ceff = 0.0; - const Pvt *pvt = sdc_->pvt(inst, dcalc_ap->constraintMinMax()); - if (pvt == nullptr) - pvt = dcalc_ap->operatingConditions(); - RiseFall *from_rf = arc->fromEdge()->asRiseFall(); - RiseFall *to_rf = arc->toEdge()->asRiseFall(); - if (from_rf && to_rf) { - const LibertyPort *related_out_port = arc_set->relatedOut(); - const Pin *related_out_pin = 0; - if (related_out_port) - related_out_pin = network_->findPin(inst, related_out_port); - float related_out_cap = 0.0; - if (related_out_pin) { - Parasitic *related_out_parasitic = - arc_delay_calc_->findParasitic(related_out_pin, to_rf, dcalc_ap); - related_out_cap = loadCap(related_out_pin, related_out_parasitic, - to_rf, dcalc_ap); - } - Parasitic *to_parasitic = arc_delay_calc_->findParasitic(to_pin, to_rf, - dcalc_ap); - const Slew &from_slew = edgeFromSlew(from_vertex, from_rf, edge, dcalc_ap); - float load_cap = loadCap(to_pin, to_parasitic, to_rf, dcalc_ap); - ceff = arc_delay_calc_->ceff(arc, from_slew, load_cap, to_parasitic, - related_out_cap, pvt, dcalc_ap); - arc_delay_calc_->finishDrvrPin(); - } - return ceff; -} - -//////////////////////////////////////////////////////////////// - string GraphDelayCalc::reportDelayCalc(const Edge *edge, const TimingArc *arc, @@ -1341,9 +1425,6 @@ GraphDelayCalc::reportDelayCalc(const Edge *edge, const TimingArcSet *arc_set = edge->timingArcSet(); string result; DcalcAnalysisPt *dcalc_ap = corner->findDcalcAnalysisPt(min_max); - const Pvt *pvt = sdc_->pvt(inst, dcalc_ap->constraintMinMax()); - if (pvt == nullptr) - pvt = dcalc_ap->operatingConditions(); RiseFall *from_rf = arc->fromEdge()->asRiseFall(); RiseFall *to_rf = arc->toEdge()->asRiseFall(); if (from_rf && to_rf) { @@ -1364,17 +1445,19 @@ GraphDelayCalc::reportDelayCalc(const Edge *edge, const Slew &to_slew = graph_->slew(to_vertex, to_rf, slew_index); bool from_ideal_clk = clk_network_->isIdealClock(from_vertex->pin()); const char *from_slew_annotation = from_ideal_clk ? " (ideal clock)" : nullptr; - result = arc_delay_calc_->reportCheckDelay(arc, from_slew, from_slew_annotation, - to_slew, related_out_cap, pvt, - dcalc_ap, digits); + result = arc_delay_calc_->reportCheckDelay(to_pin, arc, from_slew, + from_slew_annotation, to_slew, + related_out_cap, dcalc_ap, digits); } else { Parasitic *to_parasitic = arc_delay_calc_->findParasitic(to_pin, to_rf, dcalc_ap); const Slew &from_slew = edgeFromSlew(from_vertex, from_rf, edge, dcalc_ap); float load_cap = loadCap(to_pin, to_parasitic, to_rf, dcalc_ap); - result = arc_delay_calc_->reportGateDelay(arc, from_slew, load_cap, to_parasitic, - related_out_cap, pvt, dcalc_ap, digits); + LoadPinIndexMap load_pin_index_map = makeLoadPinIndexMap(to_vertex); + result = arc_delay_calc_->reportGateDelay(to_pin, arc, from_slew, load_cap, + to_parasitic, load_pin_index_map, + dcalc_ap, digits); } arc_delay_calc_->finishDrvrPin(); } diff --git a/dcalc/LumpedCapDelayCalc.cc b/dcalc/LumpedCapDelayCalc.cc index 5e99dd7a..3f91a37f 100644 --- a/dcalc/LumpedCapDelayCalc.cc +++ b/dcalc/LumpedCapDelayCalc.cc @@ -101,132 +101,88 @@ LumpedCapDelayCalc::findParasitic(const Pin *drvr_pin, return parasitic; } -ReducedParasiticType -LumpedCapDelayCalc::reducedParasiticType() const +ArcDcalcResult +LumpedCapDelayCalc::inputPortDelay(const Pin *, + float in_slew, + const RiseFall *rf, + const Parasitic *, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *) { - return ReducedParasiticType::pi_elmore; + const LibertyLibrary *drvr_library = network_->defaultLibertyLibrary(); + return makeResult(drvr_library,rf, 0.0, in_slew, load_pin_index_map); } -float -LumpedCapDelayCalc::ceff(const TimingArc *, - const Slew &, - float load_cap, - const Parasitic *, - float, - const Pvt *, - const DcalcAnalysisPt *) -{ - return load_cap; -} - -void -LumpedCapDelayCalc::gateDelay(const TimingArc *arc, +ArcDcalcResult +LumpedCapDelayCalc::gateDelay(const Pin *drvr_pin, + const TimingArc *arc, const Slew &in_slew, float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - // Return values. - ArcDelay &gate_delay, - Slew &drvr_slew) + const Parasitic *, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) { - gateDelayInit(arc, in_slew, drvr_parasitic); GateTimingModel *model = gateModel(arc, dcalc_ap); debugPrint(debug_, "delay_calc", 3, - " in_slew = %s load_cap = %s related_load_cap = %s lumped", + " in_slew = %s load_cap = %s lumped", delayAsString(in_slew, this), - units()->capacitanceUnit()->asString(load_cap), - units()->capacitanceUnit()->asString(related_out_cap)); + units()->capacitanceUnit()->asString(load_cap)); + const RiseFall *rf = arc->toEdge()->asRiseFall(); + const LibertyLibrary *drvr_library = arc->to()->libertyLibrary(); if (model) { - ArcDelay gate_delay1; - Slew drvr_slew1; + ArcDelay gate_delay; + Slew drvr_slew; float in_slew1 = delayAsFloat(in_slew); // NaNs cause seg faults during table lookup. - if (isnan(load_cap) || isnan(related_out_cap) || isnan(delayAsFloat(in_slew))) + if (isnan(load_cap) || isnan(delayAsFloat(in_slew))) report_->error(710, "gate delay input variable is NaN"); - model->gateDelay(pvt, in_slew1, load_cap, related_out_cap, - pocv_enabled_, gate_delay1, drvr_slew1); - gate_delay = gate_delay1; - drvr_slew = drvr_slew1; - drvr_slew_ = drvr_slew1; - } - else { - gate_delay = delay_zero; - drvr_slew = delay_zero; - drvr_slew_ = 0.0; + model->gateDelay(pinPvt(drvr_pin, dcalc_ap), in_slew1, load_cap, pocv_enabled_, + gate_delay, drvr_slew); + return makeResult(drvr_library, rf, gate_delay, drvr_slew, load_pin_index_map); } + else + return makeResult(drvr_library, rf, delay_zero, delay_zero, load_pin_index_map); } -void -LumpedCapDelayCalc::loadDelay(const Pin *load_pin, - ArcDelay &wire_delay, - Slew &load_slew) +ArcDcalcResult +LumpedCapDelayCalc::makeResult(const LibertyLibrary *drvr_library, + const RiseFall *rf, + ArcDelay gate_delay, + Slew drvr_slew, + const LoadPinIndexMap &load_pin_index_map) { - Delay wire_delay1 = 0.0; - Slew load_slew1 = drvr_slew_ * multi_drvr_slew_factor_; - thresholdAdjust(load_pin, wire_delay1, load_slew1); - wire_delay = wire_delay1; - load_slew = load_slew1; + ArcDcalcResult dcalc_result(load_pin_index_map.size()); + dcalc_result.setGateDelay(gate_delay); + dcalc_result.setDrvrSlew(drvr_slew); + + for (auto load_pin_index : load_pin_index_map) { + const Pin *load_pin = load_pin_index.first; + size_t load_idx = load_pin_index.second; + ArcDelay wire_delay = 0.0; + thresholdAdjust(load_pin, drvr_library, rf, wire_delay, drvr_slew); + dcalc_result.setWireDelay(load_idx, wire_delay); + dcalc_result.setLoadSlew(load_idx, drvr_slew); + } + return dcalc_result; } string -LumpedCapDelayCalc::reportGateDelay(const TimingArc *arc, - const Slew &in_slew, - float load_cap, - const Parasitic *, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - int digits) +LumpedCapDelayCalc::reportGateDelay(const Pin *check_pin, + const TimingArc *arc, + const Slew &in_slew, + float load_cap, + const Parasitic *, + const LoadPinIndexMap &, + const DcalcAnalysisPt *dcalc_ap, + int digits) { GateTimingModel *model = gateModel(arc, dcalc_ap); if (model) { float in_slew1 = delayAsFloat(in_slew); - return model->reportGateDelay(pvt, in_slew1, load_cap, related_out_cap, + return model->reportGateDelay(pinPvt(check_pin, dcalc_ap), in_slew1, load_cap, false, digits); } return ""; } -void -LumpedCapDelayCalc::checkDelay(const TimingArc *arc, - const Slew &from_slew, - const Slew &to_slew, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - // Return values. - ArcDelay &margin) -{ - CheckTimingModel *model = checkModel(arc, dcalc_ap); - if (model) { - float from_slew1 = delayAsFloat(from_slew); - float to_slew1 = delayAsFloat(to_slew); - model->checkDelay(pvt, from_slew1, to_slew1, related_out_cap, pocv_enabled_, margin); - } - else - margin = delay_zero; -} - -string -LumpedCapDelayCalc::reportCheckDelay(const TimingArc *arc, - const Slew &from_slew, - const char *from_slew_annotation, - const Slew &to_slew, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - int digits) -{ - CheckTimingModel *model = checkModel(arc, dcalc_ap); - if (model) { - float from_slew1 = delayAsFloat(from_slew); - float to_slew1 = delayAsFloat(to_slew); - return model->reportCheckDelay(pvt, from_slew1, from_slew_annotation, - to_slew1, related_out_cap, false, digits); - } - return ""; -} - } // namespace diff --git a/dcalc/LumpedCapDelayCalc.hh b/dcalc/LumpedCapDelayCalc.hh index db7473c0..3ac111c3 100644 --- a/dcalc/LumpedCapDelayCalc.hh +++ b/dcalc/LumpedCapDelayCalc.hh @@ -30,54 +30,34 @@ public: Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) override; - ReducedParasiticType reducedParasiticType() const override; - void gateDelay(const TimingArc *arc, - const Slew &in_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - // Return values. - ArcDelay &gate_delay, - Slew &drvr_slew) override; - float ceff(const TimingArc *arc, - const Slew &in_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap) override; - void loadDelay(const Pin *load_pin, - // Return values. - ArcDelay &wire_delay, - Slew &load_slew) override; - void checkDelay(const TimingArc *arc, - const Slew &from_slew, - const Slew &to_slew, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - // Return values. - ArcDelay &margin) override; - string reportGateDelay(const TimingArc *arc, + ArcDcalcResult inputPortDelay(const Pin *port_pin, + float in_slew, + const RiseFall *rf, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) override; + ArcDcalcResult gateDelay(const Pin *drvr_pin, + const TimingArc *arc, + const Slew &in_slew, + float load_cap, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) override; + string reportGateDelay(const Pin *drvr_pin, + const TimingArc *arc, const Slew &in_slew, float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, const DcalcAnalysisPt *dcalc_ap, int digits) override; - string reportCheckDelay(const TimingArc *arc, - const Slew &from_slew, - const char *from_slew_annotation, - const Slew &to_slew, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - int digits) override; protected: + ArcDcalcResult makeResult(const LibertyLibrary *drvr_library, + const RiseFall *rf, + ArcDelay gate_delay, + Slew drvr_slew, + const LoadPinIndexMap &load_pin_index_map); }; ArcDelayCalc * diff --git a/dcalc/ParallelDelayCalc.cc b/dcalc/ParallelDelayCalc.cc index 62fd90a6..db352812 100644 --- a/dcalc/ParallelDelayCalc.cc +++ b/dcalc/ParallelDelayCalc.cc @@ -31,141 +31,65 @@ ParallelDelayCalc::ParallelDelayCalc(StaState *sta): { } -void -ParallelDelayCalc::inputPortDelay(const Pin *drvr_pin, - float in_slew, - const RiseFall *rf, - const Parasitic *parasitic, - const DcalcAnalysisPt *dcalc_ap) +ArcDcalcResultSeq +ParallelDelayCalc::gateDelays(ArcDcalcArgSeq &dcalc_args, + float load_cap, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) { - DelayCalcBase::inputPortDelay(drvr_pin, in_slew, rf, parasitic, dcalc_ap); - multi_drvr_slew_factor_ = 1.0; -} - -void -ParallelDelayCalc::gateDelayInit(const TimingArc *arc, - const Slew &in_slew, - const Parasitic *drvr_parasitic) -{ - DelayCalcBase::gateDelayInit(arc, in_slew, drvr_parasitic); - multi_drvr_slew_factor_ = 1.0F; -} - -void -ParallelDelayCalc::findParallelGateDelays(const MultiDrvrNet *multi_drvr, - GraphDelayCalc *dcalc) -{ - int count = RiseFall::index_count * corners_->dcalcAnalysisPtCount(); - parallel_delays_.resize(count); - parallel_slews_.resize(count); - for (auto dcalc_ap : corners_->dcalcAnalysisPts()) { - for (auto drvr_rf : RiseFall::range()) { - DcalcAPIndex ap_index = dcalc_ap->index(); - int drvr_rf_index = drvr_rf->index(); - int index = ap_index * RiseFall::index_count + drvr_rf_index; - findMultiDrvrGateDelay(multi_drvr, drvr_rf, dcalc_ap, dcalc, - parallel_delays_[index], - parallel_slews_[index]); - } - } -} - -void -ParallelDelayCalc::findMultiDrvrGateDelay(const MultiDrvrNet *multi_drvr, - const RiseFall *drvr_rf, - const DcalcAnalysisPt *dcalc_ap, - GraphDelayCalc *dcalc, - // Return values. - ArcDelay ¶llel_delay, - Slew ¶llel_slew) -{ - ArcDelay delay_sum = 0.0; + size_t drvr_count = dcalc_args.size(); + ArcDcalcResultSeq dcalc_results(drvr_count); Slew slew_sum = 0.0; - for (Vertex *drvr_vertex : *multi_drvr->drvrs()) { - Pin *drvr_pin = drvr_vertex->pin(); - Instance *drvr_inst = network_->instance(drvr_pin); - const Pvt *pvt = sdc_->pvt(drvr_inst, dcalc_ap->constraintMinMax()); - if (pvt == nullptr) - pvt = dcalc_ap->operatingConditions(); - VertexInEdgeIterator edge_iter(drvr_vertex, graph_); - while (edge_iter.hasNext()) { - Edge *edge = edge_iter.next(); - TimingArcSet *arc_set = edge->timingArcSet(); - const LibertyPort *related_out_port = arc_set->relatedOut(); - for (TimingArc *arc : arc_set->arcs()) { - RiseFall *arc_rf = arc->toEdge()->asRiseFall(); - if (arc_rf == drvr_rf) { - Vertex *from_vertex = edge->from(graph_); - RiseFall *from_rf = arc->fromEdge()->asRiseFall(); - Slew from_slew = dcalc->edgeFromSlew(from_vertex, from_rf, - edge, dcalc_ap); - ArcDelay intrinsic_delay; - Slew intrinsic_slew; - gateDelay(arc, from_slew, 0.0, 0, 0.0, pvt, dcalc_ap, - intrinsic_delay, intrinsic_slew); - Parasitic *parasitic = findParasitic(drvr_pin, drvr_rf, dcalc_ap); - const Pin *related_out_pin = 0; - float related_out_cap = 0.0; - if (related_out_port) { - Instance *inst = network_->instance(drvr_pin); - related_out_pin = network_->findPin(inst, related_out_port); - if (related_out_pin) { - Parasitic *related_out_parasitic = findParasitic(related_out_pin, - drvr_rf, - dcalc_ap); - related_out_cap = dcalc->loadCap(related_out_pin, - related_out_parasitic, - drvr_rf, dcalc_ap); - } - } - float load_cap = dcalc->loadCap(drvr_pin, parasitic, - drvr_rf, dcalc_ap); - ArcDelay gate_delay; - Slew gate_slew; - gateDelay(arc, from_slew, load_cap, parasitic, - related_out_cap, pvt, dcalc_ap, - gate_delay, gate_slew); - delay_sum += 1.0F / (gate_delay - intrinsic_delay); - slew_sum += 1.0F / gate_slew; - } - } + ArcDelay load_delay_sum = 0.0; + vector intrinsic_delays(dcalc_args.size()); + vector load_delays(dcalc_args.size()); + for (size_t drvr_idx = 0; drvr_idx < drvr_count; drvr_idx++) { + ArcDcalcArg &dcalc_arg = dcalc_args[drvr_idx]; + ArcDcalcResult &dcalc_result = dcalc_results[drvr_idx]; + const Pin *drvr_pin = dcalc_arg.drvrPin(); + const TimingArc *arc = dcalc_arg.arc(); + Slew in_slew = dcalc_arg.inSlew(); + + ArcDcalcResult intrinsic_result = + arc_delay_calc_->gateDelay(drvr_pin, arc, in_slew, 0.0, nullptr, + load_pin_index_map, dcalc_ap); + ArcDelay intrinsic_delay = intrinsic_result.gateDelay(); + intrinsic_delays[drvr_idx] = intrinsic_result.gateDelay(); + + ArcDcalcResult gate_result = arc_delay_calc_->gateDelay(drvr_pin, arc, + in_slew, load_cap, + dcalc_arg.parasitic(), + load_pin_index_map, + dcalc_ap); + ArcDelay gate_delay = gate_result.gateDelay(); + Slew drvr_slew = gate_result.drvrSlew(); + ArcDelay load_delay = gate_delay - intrinsic_delay; + load_delays[drvr_idx] = load_delay; + + if (!delayZero(load_delay)) + load_delay_sum += 1.0 / load_delay; + if (!delayZero(drvr_slew)) + slew_sum += 1.0 / drvr_slew; + + dcalc_result.setLoadCount(load_pin_index_map.size()); + for (auto load_pin_index : load_pin_index_map) { + size_t load_idx = load_pin_index.second; + dcalc_result.setWireDelay(load_idx, gate_result.wireDelay(load_idx)); + dcalc_result.setLoadSlew(load_idx, gate_result.loadSlew(load_idx)); } } - parallel_delay = 1.0F / delay_sum; - parallel_slew = 1.0F / slew_sum; -} -void -ParallelDelayCalc::parallelGateDelay(const Pin *, - const TimingArc *arc, - const Slew &from_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - // Return values. - ArcDelay &gate_delay, - Slew &gate_slew) -{ - ArcDelay intrinsic_delay; - Slew intrinsic_slew; - gateDelay(arc, from_slew, 0.0, 0, 0.0, pvt, dcalc_ap, - intrinsic_delay, intrinsic_slew); - const RiseFall *drvr_rf = arc->toEdge()->asRiseFall(); - int index = dcalc_ap->index() * RiseFall::index_count + drvr_rf->index(); - ArcDelay parallel_delay = parallel_delays_[index]; - Slew parallel_slew = parallel_slews_[index]; - gate_delay = parallel_delay + intrinsic_delay; - gate_slew = parallel_slew; + ArcDelay gate_load_delay = delayZero(load_delay_sum) + ? delay_zero + : 1.0 / load_delay_sum; + ArcDelay drvr_slew = delayZero(slew_sum) ? delay_zero : 1.0 / slew_sum; - Delay gate_delay1; - Slew gate_slew1; - gateDelay(arc, from_slew, load_cap, drvr_parasitic, - related_out_cap, pvt, dcalc_ap, - gate_delay1, gate_slew1); - float factor = delayRatio(gate_slew, gate_slew1); - multi_drvr_slew_factor_ = factor; + for (size_t drvr_idx = 0; drvr_idx < drvr_count; drvr_idx++) { + ArcDcalcResult &dcalc_result = dcalc_results[drvr_idx]; + dcalc_result.setGateDelay(intrinsic_delays[drvr_idx] + gate_load_delay); + dcalc_result.setDrvrSlew(drvr_slew); + } + return dcalc_results; } } // namespace diff --git a/dcalc/ParallelDelayCalc.hh b/dcalc/ParallelDelayCalc.hh index 68510e99..8079c31d 100644 --- a/dcalc/ParallelDelayCalc.hh +++ b/dcalc/ParallelDelayCalc.hh @@ -17,52 +17,21 @@ #pragma once #include +#include #include "DelayCalcBase.hh" namespace sta { -// Delay calculation for parallel gates based on using parallel drive resistance. +// Delay calculation for parallel gates using parallel drive resistance. class ParallelDelayCalc : public DelayCalcBase { public: - explicit ParallelDelayCalc(StaState *sta); - void inputPortDelay(const Pin *port_pin, - float in_slew, - const RiseFall *rf, - const Parasitic *parasitic, - const DcalcAnalysisPt *dcalc_ap) override; - void gateDelayInit(const TimingArc *arc, - const Slew &in_slew, - const Parasitic *drvr_parasitic); - void findParallelGateDelays(const MultiDrvrNet *multi_drvr, - GraphDelayCalc *dcalc) override; - void parallelGateDelay(const Pin *drvr_pin, - const TimingArc *arc, - const Slew &from_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - // Return values. - ArcDelay &gate_delay, - Slew &gate_slew) override; - -protected: - void findMultiDrvrGateDelay(const MultiDrvrNet *multi_drvr, - const RiseFall *drvr_rf, - const DcalcAnalysisPt *dcalc_ap, - GraphDelayCalc *dcalc, - // Return values. - ArcDelay ¶llel_delay, - Slew ¶llel_slew); - - // [drvr_rf->index][dcalc_ap->index] - vector parallel_delays_; - // [drvr_rf->index][dcalc_ap->index] - vector parallel_slews_; - float multi_drvr_slew_factor_; + ParallelDelayCalc(StaState *sta); + ArcDcalcResultSeq gateDelays(ArcDcalcArgSeq &dcalc_args, + float load_cap, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) override; }; } // namespace diff --git a/dcalc/SlewDegradeDelayCalc.cc b/dcalc/SlewDegradeDelayCalc.cc deleted file mode 100644 index 3e00e164..00000000 --- a/dcalc/SlewDegradeDelayCalc.cc +++ /dev/null @@ -1,141 +0,0 @@ -// OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#include "SlewDegradeDelayCalc.hh" - -#include "TimingArc.hh" -#include "Liberty.hh" -#include "Network.hh" -#include "Sdc.hh" -#include "Parasitics.hh" -#include "DcalcAnalysisPt.hh" -#include "LumpedCapDelayCalc.hh" - -namespace sta { - -// Liberty table model lumped capacitance arc delay calculator. -// Effective capacitance is the pi model total capacitance (C1+C2). -// Wire delays are elmore delays. -// Driver slews are degraded to loads by rise/fall transition_degradation -// tables. -class SlewDegradeDelayCalc : public LumpedCapDelayCalc -{ -public: - SlewDegradeDelayCalc(StaState *sta); - ArcDelayCalc *copy() override; - void inputPortDelay(const Pin *port_pin, - float in_slew, - const RiseFall *rf, - const Parasitic *parasitic, - const DcalcAnalysisPt *dcalc_ap) override; - void gateDelay(const TimingArc *arc, - const Slew &in_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - // Return values. - ArcDelay &gate_delay, - Slew &drvr_slew) override; - void loadDelay(const Pin *load_pin, - ArcDelay &wire_delay, - Slew &load_slew) override; - - using LumpedCapDelayCalc::gateDelay; - using LumpedCapDelayCalc::reportGateDelay; - -private: - const Pvt *pvt_; -}; - -ArcDelayCalc * -makeSlewDegradeDelayCalc(StaState *sta) -{ - return new SlewDegradeDelayCalc(sta); -} - -SlewDegradeDelayCalc::SlewDegradeDelayCalc(StaState *sta) : - LumpedCapDelayCalc(sta) -{ -} - -ArcDelayCalc * -SlewDegradeDelayCalc::copy() -{ - return new SlewDegradeDelayCalc(this); -} - -void -SlewDegradeDelayCalc::inputPortDelay(const Pin *port_pin, - float in_slew, - const RiseFall *rf, - const Parasitic *parasitic, - const DcalcAnalysisPt *dcalc_ap) -{ - pvt_ = dcalc_ap->operatingConditions(); - LumpedCapDelayCalc::inputPortDelay(port_pin, in_slew, rf, parasitic, dcalc_ap); -} - -void -SlewDegradeDelayCalc::gateDelay(const TimingArc *arc, - const Slew &in_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - // Return values. - ArcDelay &gate_delay, - Slew &drvr_slew) -{ - input_port_ = false; - drvr_parasitic_ = drvr_parasitic; - drvr_rf_ = arc->toEdge()->asRiseFall(); - drvr_cell_ = arc->from()->libertyCell(); - drvr_library_ = drvr_cell_->libertyLibrary(); - pvt_ = pvt; - LumpedCapDelayCalc::gateDelay(arc, in_slew, load_cap, drvr_parasitic, - related_out_cap, pvt, dcalc_ap, - gate_delay, drvr_slew); -} - -void -SlewDegradeDelayCalc::loadDelay(const Pin *load_pin, - ArcDelay &wire_delay, - Slew &load_slew) -{ - ArcDelay wire_delay1 = 0.0; - Slew load_slew1 = drvr_slew_; - bool elmore_exists = false; - float elmore = 0.0; - if (drvr_parasitic_) - parasitics_->findElmore(drvr_parasitic_, load_pin, elmore, elmore_exists); - if (elmore_exists) { - if (drvr_library_ && drvr_library_->wireSlewDegradationTable(drvr_rf_)) { - wire_delay1 = elmore; - load_slew1 = drvr_library_->degradeWireSlew(drvr_rf_, - delayAsFloat(drvr_slew_), - delayAsFloat(wire_delay1)); - } - dspfWireDelaySlew(load_pin, elmore, wire_delay1, load_slew1); - } - thresholdAdjust(load_pin, wire_delay1, load_slew1); - wire_delay = wire_delay1; - load_slew = load_slew1 * multi_drvr_slew_factor_; -} - -} // namespace diff --git a/dcalc/UnitDelayCalc.cc b/dcalc/UnitDelayCalc.cc index cc629ba5..232c8ecd 100644 --- a/dcalc/UnitDelayCalc.cc +++ b/dcalc/UnitDelayCalc.cc @@ -45,86 +45,65 @@ UnitDelayCalc::findParasitic(const Pin *, return nullptr; } -ReducedParasiticType -UnitDelayCalc::reducedParasiticType() const -{ - return ReducedParasiticType::none; -} - -void +ArcDcalcResult UnitDelayCalc::inputPortDelay(const Pin *, float, const RiseFall *, const Parasitic *, - const DcalcAnalysisPt *) + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *) { + return unitDelayResult(load_pin_index_map); } -void -UnitDelayCalc::gateDelay(const TimingArc *, +ArcDcalcResult +UnitDelayCalc::gateDelay(const Pin *, + const TimingArc *, const Slew &, float, const Parasitic *, - float, - const Pvt *, const DcalcAnalysisPt *, - // Return values. - ArcDelay &gate_delay, Slew &drvr_slew) + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *) { - gate_delay = units_->timeUnit()->scale(); - drvr_slew = 0.0; + return unitDelayResult(load_pin_index_map); } -void -UnitDelayCalc::findParallelGateDelays(const MultiDrvrNet *, - GraphDelayCalc *) +ArcDcalcResultSeq +UnitDelayCalc::gateDelays(ArcDcalcArgSeq &dcalc_args, + float, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *) { + size_t drvr_count = dcalc_args.size(); + ArcDcalcResultSeq dcalc_results(drvr_count); + for (size_t drvr_idx = 0; drvr_idx < drvr_count; drvr_idx++) { + ArcDcalcResult &dcalc_result = dcalc_results[drvr_idx]; + dcalc_result = unitDelayResult(load_pin_index_map); + } + return dcalc_results; } -void -UnitDelayCalc::parallelGateDelay(const Pin *, - const TimingArc *, - const Slew &, - float, - const Parasitic *, - float, - const Pvt *, - const DcalcAnalysisPt *, - // Return values. - ArcDelay &gate_delay, - Slew &gate_slew) +ArcDcalcResult +UnitDelayCalc::unitDelayResult(const LoadPinIndexMap &load_pin_index_map) { - gate_delay = units_->timeUnit()->scale(); - gate_slew = 0.0; -} - -void -UnitDelayCalc::loadDelay(const Pin *, - ArcDelay &wire_delay, - Slew &load_slew) -{ - wire_delay = 0.0; - load_slew = 0.0; -} - -float -UnitDelayCalc::ceff(const TimingArc *, - const Slew &, - float, - const Parasitic *, - float, - const Pvt *, - const DcalcAnalysisPt *) -{ - return 0.0; + size_t load_count = load_pin_index_map.size(); + ArcDcalcResult dcalc_result(load_count); + dcalc_result.setGateDelay(units_->timeUnit()->scale()); + dcalc_result.setDrvrSlew(0.0); + for (size_t load_idx = 0; load_idx < load_count; load_idx++) { + dcalc_result.setWireDelay(load_idx, 0.0); + dcalc_result.setLoadSlew(load_idx, 0.0); + } + return dcalc_result; } string -UnitDelayCalc::reportGateDelay(const TimingArc *, +UnitDelayCalc::reportGateDelay(const Pin *, + const TimingArc *, const Slew &, float, const Parasitic *, - float, - const Pvt *, + const LoadPinIndexMap &, const DcalcAnalysisPt *, int) { @@ -133,26 +112,24 @@ UnitDelayCalc::reportGateDelay(const TimingArc *, return result; } -void -UnitDelayCalc::checkDelay(const TimingArc *, +ArcDelay +UnitDelayCalc::checkDelay(const Pin *, + const TimingArc *, const Slew &, const Slew &, float, - const Pvt *, - const DcalcAnalysisPt *, - // Return values. - ArcDelay &margin) + const DcalcAnalysisPt *) { - margin = units_->timeUnit()->scale(); + return units_->timeUnit()->scale(); } string -UnitDelayCalc::reportCheckDelay(const TimingArc *, +UnitDelayCalc::reportCheckDelay(const Pin *, + const TimingArc *, const Slew &, const char *, const Slew &, float, - const Pvt *, const DcalcAnalysisPt *, int) { diff --git a/dcalc/UnitDelayCalc.hh b/dcalc/UnitDelayCalc.hh index 6ecae7cf..ec520a53 100644 --- a/dcalc/UnitDelayCalc.hh +++ b/dcalc/UnitDelayCalc.hh @@ -29,72 +29,50 @@ public: Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) override; - ReducedParasiticType reducedParasiticType() const override; - void inputPortDelay(const Pin *port_pin, - float in_slew, - const RiseFall *rf, - const Parasitic *parasitic, + ArcDcalcResult inputPortDelay(const Pin *port_pin, + float in_slew, + const RiseFall *rf, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) override; + ArcDcalcResult gateDelay(const Pin *drvr_pin, + const TimingArc *arc, + const Slew &in_slew, + // Pass in load_cap or parasitic. + float load_cap, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) override; + ArcDcalcResultSeq gateDelays(ArcDcalcArgSeq &args, + float load_cap, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) override; + ArcDelay checkDelay(const Pin *check_pin, + const TimingArc *arc, + const Slew &from_slew, + const Slew &to_slew, + float related_out_cap, const DcalcAnalysisPt *dcalc_ap) override; - void gateDelay(const TimingArc *arc, - const Slew &in_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - // Return values. - ArcDelay &gate_delay, - Slew &drvr_slew) override; - void findParallelGateDelays(const MultiDrvrNet *multi_drvr, - GraphDelayCalc *dcalc) override; - // Retrieve the delay and slew for one parallel gate. - void parallelGateDelay(const Pin *drvr_pin, + string reportGateDelay(const Pin *drvr_pin, const TimingArc *arc, - const Slew &from_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - // Return values. - ArcDelay &gate_delay, - Slew &gate_slew) override; - void loadDelay(const Pin *load_pin, - // Return values. - ArcDelay &wire_delay, - Slew &load_slew) override; - float ceff(const TimingArc *arc, - const Slew &in_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap) override; - void checkDelay(const TimingArc *arc, - const Slew &from_slew, - const Slew &to_slew, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - // Return values. - ArcDelay &margin) override; - string reportGateDelay(const TimingArc *arc, const Slew &in_slew, float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, const DcalcAnalysisPt *dcalc_ap, int digits) override; - string reportCheckDelay(const TimingArc *arc, + string reportCheckDelay(const Pin *check_pin, + const TimingArc *arc, const Slew &from_slew, const char *from_slew_annotation, const Slew &to_slew, float related_out_cap, - const Pvt *pvt, const DcalcAnalysisPt *dcalc_ap, int digits) override; - void finishDrvrPin() override; + void finishDrvrPin() override; + +protected: + ArcDcalcResult unitDelayResult(const LoadPinIndexMap &load_pin_index_map); }; ArcDelayCalc * diff --git a/include/sta/ArcDelayCalc.hh b/include/sta/ArcDelayCalc.hh index c1c6617b..cbdb1fd9 100644 --- a/include/sta/ArcDelayCalc.hh +++ b/include/sta/ArcDelayCalc.hh @@ -18,10 +18,14 @@ #include #include +#include #include "MinMax.hh" #include "LibertyClass.hh" +#include "TimingArc.hh" +#include "TableModel.hh" #include "NetworkClass.hh" +#include "GraphClass.hh" #include "Delay.hh" #include "ParasiticsClass.hh" #include "StaState.hh" @@ -30,18 +34,77 @@ namespace sta { using std::string; using std::vector; +using std::map; +class Corner; class Parasitic; class DcalcAnalysisPt; class MultiDrvrNet; +// Driver load pin -> index in driver loads. +typedef map LoadPinIndexMap; + +// Arguments for gate delay calculation delay/slew at one driver pin +// through one timing arc at one delay calc analysis point. +class ArcDcalcArg +{ +public: + ArcDcalcArg(); + ArcDcalcArg(const Pin *drvr_pin, + Edge *edge, + const TimingArc *arc, + const Slew in_slew, + const Parasitic *parasitic); + const Pin *drvrPin() const { return drvr_pin_; } + Edge *edge() const { return edge_; } + const TimingArc *arc() const { return arc_; } + Slew inSlew() const { return in_slew_; } + const Parasitic *parasitic() { return parasitic_; } + void setParasitic(const Parasitic *parasitic); + +protected: + const Pin *drvr_pin_; + Edge *edge_; + const TimingArc *arc_; + Slew in_slew_; + const Parasitic *parasitic_; +}; + +// Arc delay calc result. +class ArcDcalcResult +{ +public: + ArcDcalcResult(); + ArcDcalcResult(size_t load_count); + void setLoadCount(size_t load_count); + ArcDelay &gateDelay() { return gate_delay_; } + void setGateDelay(ArcDelay gate_delay); + Slew &drvrSlew() { return drvr_slew_; } + void setDrvrSlew(Slew drvr_slew); + ArcDelay wireDelay(size_t load_idx) const; + void setWireDelay(size_t load_idx, + ArcDelay wire_delay); + Slew loadSlew(size_t load_idx) const; + void setLoadSlew(size_t load_idx, + Slew load_slew); + +protected: + ArcDelay gate_delay_; + Slew drvr_slew_; + // Load wire delay and slews indexed by load pin index. + vector wire_delays_; + vector load_slews_; +}; + +typedef vector ArcDcalcArgSeq; +typedef vector ArcDcalcResultSeq; + // Delay calculator class hierarchy. // ArcDelayCalc // UnitDelayCalc // DelayCalcBase // ParallelDelayCalc // LumpedCapDelayCalc -// SlewDegradeDelayCalc // DmpCeffDelayCalc // DmpCeffElmoreDelayCalc // DmpCeffTwoPoleDelayCalc @@ -61,95 +124,68 @@ public: virtual Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) = 0; - virtual ReducedParasiticType reducedParasiticType() const = 0; // Find the wire delays and slews for an input port without a driving cell. // This call primarily initializes the load delay/slew iterator. - virtual void inputPortDelay(const Pin *port_pin, - float in_slew, - const RiseFall *rf, - const Parasitic *parasitic, - const DcalcAnalysisPt *dcalc_ap) = 0; + virtual ArcDcalcResult inputPortDelay(const Pin *port_pin, + float in_slew, + const RiseFall *rf, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) = 0; // Find the delay and slew for arc driving drvr_pin. + virtual ArcDcalcResult gateDelay(const Pin *drvr_pin, + const TimingArc *arc, + const Slew &in_slew, + // Pass in load_cap or parasitic. + float load_cap, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) = 0; virtual void gateDelay(const TimingArc *arc, const Slew &in_slew, - // Pass in load_cap or drvr_parasitic. float load_cap, - const Parasitic *drvr_parasitic, + const Parasitic *parasitic, float related_out_cap, const Pvt *pvt, const DcalcAnalysisPt *dcalc_ap, // Return values. ArcDelay &gate_delay, - Slew &drvr_slew) = 0; + Slew &drvr_slew) __attribute__ ((deprecated)); + // Find gate delays and slews for parallel gates. - virtual void findParallelGateDelays(const MultiDrvrNet *multi_drvr, - GraphDelayCalc *dcalc) = 0; - // Retrieve the delay and slew for one parallel gate. - virtual void parallelGateDelay(const Pin *drvr_pin, - const TimingArc *arc, - const Slew &from_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - // Return values. - ArcDelay &gate_delay, - Slew &gate_slew) = 0; - // Find the wire delay and load slew of a load pin. - // Called after inputPortDelay or gateDelay. - virtual void loadDelay(const Pin *load_pin, - // Return values. - ArcDelay &wire_delay, - Slew &load_slew) = 0; - // Ceff for parasitics with pi models. - virtual float ceff(const TimingArc *arc, - const Slew &in_slew, - float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap) = 0; + virtual ArcDcalcResultSeq gateDelays(ArcDcalcArgSeq &args, + float load_cap, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) = 0; // Find the delay for a timing check arc given the arc's // from/clock, to/data slews and related output pin parasitic. - virtual void checkDelay(const TimingArc *arc, - const Slew &from_slew, - const Slew &to_slew, - float related_out_cap, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - // Return values. - ArcDelay &margin) = 0; + virtual ArcDelay checkDelay(const Pin *check_pin, + const TimingArc *arc, + const Slew &from_slew, + const Slew &to_slew, + float related_out_cap, + const DcalcAnalysisPt *dcalc_ap) = 0; // Report delay and slew calculation. - virtual string reportGateDelay(const TimingArc *arc, + virtual string reportGateDelay(const Pin *drvr_pin, + const TimingArc *arc, const Slew &in_slew, - // Pass in load_cap or drvr_parasitic. float load_cap, - const Parasitic *drvr_parasitic, - float related_out_cap, - const Pvt *pvt, + const Parasitic *parasitic, + const LoadPinIndexMap &load_pin_index_map, const DcalcAnalysisPt *dcalc_ap, int digits) = 0; // Report timing check delay calculation. - virtual string reportCheckDelay(const TimingArc *arc, + virtual string reportCheckDelay(const Pin *check_pin, + const TimingArc *arc, const Slew &from_slew, const char *from_slew_annotation, const Slew &to_slew, float related_out_cap, - const Pvt *pvt, const DcalcAnalysisPt *dcalc_ap, int digits) = 0; virtual void finishDrvrPin() = 0; - -protected: - GateTimingModel *gateModel(const TimingArc *arc, - const DcalcAnalysisPt *dcalc_ap) const; - CheckTimingModel *checkModel(const TimingArc *arc, - const DcalcAnalysisPt *dcalc_ap) const; - TimingModel *model(const TimingArc *arc, - const DcalcAnalysisPt *dcalc_ap) const; }; } // namespace diff --git a/include/sta/GraphDelayCalc.hh b/include/sta/GraphDelayCalc.hh index da47b31e..aac2282c 100644 --- a/include/sta/GraphDelayCalc.hh +++ b/include/sta/GraphDelayCalc.hh @@ -25,10 +25,12 @@ #include "DcalcAnalysisPt.hh" #include "StaState.hh" #include "Delay.hh" +#include "ArcDelayCalc.hh" namespace sta { using std::vector; +using std::map; class DelayCalcObserver; class MultiDrvrNet; @@ -79,7 +81,7 @@ public: // pin_cap = net pin capacitances + port external pin capacitance, // wire_cap = annotated net capacitance + port external wire capacitance. virtual void loadCap(const Pin *drvr_pin, - const Parasitic *drvr_parasitic, + const Parasitic *parasitic, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap, // Return values. @@ -87,11 +89,11 @@ public: float &wire_cap) const; // Load pin_cap + wire_cap including parasitic. virtual float loadCap(const Pin *drvr_pin, - const Parasitic *drvr_parasitic, + const Parasitic *parasitic, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) const; float loadCap(const Pin *drvr_pin, - const Parasitic *drvr_parasitic, + const Parasitic *parasitic, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap, const MultiDrvrNet *multi_drvr) const; @@ -103,9 +105,13 @@ public: float &wire_cap, float &fanout, bool &has_set_load) const; - float ceff(Edge *edge, - TimingArc *arc, - const DcalcAnalysisPt *dcalc_ap); + PinSeq loadPins(Vertex *drvr_vertex); + LoadPinIndexMap makeLoadPinIndexMap(Vertex *drvr_vertex); + void findDriverArcDelays(Vertex *drvr_vertex, + Edge *edge, + const TimingArc *arc, + const DcalcAnalysisPt *dcalc_ap, + ArcDelayCalc *arc_delay_calc); // Precedence: // SDF annotation // Liberty library @@ -176,12 +182,29 @@ protected: MultiDrvrNet *multi_drvr, ArcDelayCalc *arc_delay_calc); void initLoadSlews(Vertex *drvr_vertex); - bool findDriverEdgeDelays(const Instance *drvr_inst, - const Pin *drvr_pin, - Vertex *drvr_vertex, + bool findDriverEdgeDelays(Vertex *drvr_vertex, const MultiDrvrNet *multi_drvr, Edge *edge, ArcDelayCalc *arc_delay_calc); + bool findDriverArcDelays(Vertex *drvr_vertex, + const MultiDrvrNet *multi_drvr, + Edge *edge, + const TimingArc *arc, + LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap, + ArcDelayCalc *arc_delay_calc); + ArcDcalcArgSeq makeArcDcalcArgs(Vertex *drvr_vertex, + const MultiDrvrNet *multi_drvr, + Edge *edge, + const TimingArc *arc, + const DcalcAnalysisPt *dcalc_ap, + ArcDelayCalc *arc_delay_calc); + void findParallelEdge(Vertex *vertex, + Edge *drvr_edge, + const TimingArc *drvr_arc, + // Return values. + Edge *&edge, + const TimingArc *&arc); void initWireDelays(Vertex *drvr_vertex); void initRootSlews(Vertex *vertex); void zeroSlewAndWireDelays(Vertex *drvr_vertex); @@ -189,23 +212,24 @@ protected: ArcDelayCalc *arc_delay_calc, bool propagate); void enqueueTimingChecksEdges(Vertex *vertex); - bool findArcDelay(const Pin *drvr_pin, - Vertex *drvr_vertex, - const TimingArc *arc, - const Parasitic *drvr_parasitic, - float related_out_cap, - Vertex *from_vertex, - Edge *edge, - const Pvt *pvt, - const DcalcAnalysisPt *dcalc_ap, - const MultiDrvrNet *multi_drvr, - ArcDelayCalc *arc_delay_calc); + bool annotateDelaysSlews(Edge *edge, + const TimingArc *arc, + ArcDcalcResult &dcalc_result, + LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap); + + bool annotateDelaySlew(Edge *edge, + const TimingArc *arc, + ArcDelay &gate_delay, + Slew &gate_slew, + const DcalcAnalysisPt *dcalc_ap); void annotateLoadDelays(Vertex *drvr_vertex, - const RiseFall *drvr_rf, - const ArcDelay &extra_delay, - bool merge, - const DcalcAnalysisPt *dcalc_ap, - ArcDelayCalc *arc_delay_calc); + const RiseFall *drvr_rf, + ArcDcalcResult &dcalc_result, + LoadPinIndexMap &load_pin_index_map, + const ArcDelay &extra_delay, + bool merge, + const DcalcAnalysisPt *dcalc_ap); void findLatchEdgeDelays(Edge *edge); void findCheckEdgeDelays(Edge *edge, ArcDelayCalc *arc_delay_calc); @@ -215,7 +239,7 @@ protected: const DcalcAnalysisPt *dcalc_ap); bool bidirectDrvrSlewFromLoad(const Vertex *vertex) const; MultiDrvrNet *multiDrvrNet(const Vertex *drvr_vertex) const; - void loadCap(const Parasitic *drvr_parasitic, + void loadCap(const Parasitic *parasitic, bool has_set_load, // Return values. float &pin_cap, diff --git a/include/sta/LinearModel.hh b/include/sta/LinearModel.hh index 25f1988c..5976995c 100644 --- a/include/sta/LinearModel.hh +++ b/include/sta/LinearModel.hh @@ -29,7 +29,6 @@ public: void gateDelay(const Pvt *pvt, float in_slew, float load_cap, - float related_out_cap, bool pocv_enabled, // Return values. ArcDelay &gate_delay, @@ -37,7 +36,6 @@ public: string reportGateDelay(const Pvt *pvt, float in_slew, float load_cap, - float related_out_cap, bool pocv_enabled, int digits) const override; float driveResistance(const Pvt *pvt) const override; @@ -54,13 +52,11 @@ class CheckLinearModel : public CheckTimingModel public: explicit CheckLinearModel(LibertyCell *cell, float intrinsic); - void checkDelay(const Pvt *pvt, - float from_slew, - float to_slew, - float related_out_cap, - bool pocv_enabled, - // Return values. - ArcDelay &margin) const override; + ArcDelay checkDelay(const Pvt *pvt, + float from_slew, + float to_slew, + float related_out_cap, + bool pocv_enabled) const override; string reportCheckDelay(const Pvt *pvt, float from_slew, const char *from_slew_annotation, diff --git a/include/sta/TableModel.hh b/include/sta/TableModel.hh index 039b21e2..8015b147 100644 --- a/include/sta/TableModel.hh +++ b/include/sta/TableModel.hh @@ -62,15 +62,21 @@ public: void gateDelay(const Pvt *pvt, float in_slew, float load_cap, - float related_out_cap, bool pocv_enabled, // Return values. ArcDelay &gate_delay, Slew &drvr_slew) const override; + // related_out_cap arg removed. + void gateDelay(const Pvt *pvt, + float in_slew, + float load_cap, + float related_out_cap, + bool pocv_enabled, + ArcDelay &gate_delay, + Slew &drvr_slew) const __attribute__ ((deprecated)); string reportGateDelay(const Pvt *pvt, float in_slew, float load_cap, - float related_out_cap, bool pocv_enabled, int digits) const override; float driveResistance(const Pvt *pvt) const override; @@ -130,13 +136,11 @@ public: TableModel *model, TableModel *sigma_models[EarlyLate::index_count]); virtual ~CheckTableModel(); - void checkDelay(const Pvt *pvt, - float from_slew, - float to_slew, - float related_out_cap, - bool pocv_enabled, - // Return values. - ArcDelay &margin) const override; + ArcDelay checkDelay(const Pvt *pvt, + float from_slew, + float to_slew, + float related_out_cap, + bool pocv_enabled) const override; string reportCheckDelay(const Pvt *pvt, float from_slew, const char *from_slew_annotation, @@ -504,9 +508,6 @@ public: float voltageCurrent(float slew, float cap, float volt); - float currentVoltage(float slew, - float cap, - float current); float referenceTime(float slew); void setVdd(float vdd); static bool checkAxes(const TableTemplate *tbl_template); @@ -536,7 +537,6 @@ private: Table1Seq current_waveforms_; Table1Seq voltage_waveforms_; Table1Seq voltage_currents_; - Table1Seq current_voltages_; FloatTable voltage_times_; Table1 *ref_times_; float vdd_; diff --git a/include/sta/TimingModel.hh b/include/sta/TimingModel.hh index e6b2fd04..6750aa21 100644 --- a/include/sta/TimingModel.hh +++ b/include/sta/TimingModel.hh @@ -46,7 +46,6 @@ public: virtual void gateDelay(const Pvt *pvt, float in_slew, float load_cap, - float related_out_cap, bool pocv_enabled, // Return values. ArcDelay &gate_delay, @@ -54,7 +53,6 @@ public: virtual string reportGateDelay(const Pvt *pvt, float in_slew, float load_cap, - float related_out_cap, bool pocv_enabled, int digits) const = 0; virtual float driveResistance(const Pvt *pvt) const = 0; @@ -66,13 +64,11 @@ class CheckTimingModel : public TimingModel public: CheckTimingModel(LibertyCell *cell); // Timing check margin delay calculation. - virtual void checkDelay(const Pvt *pvt, - float from_slew, - float to_slew, - float related_out_cap, - bool pocv_enabled, - // Return values. - ArcDelay &margin) const = 0; + virtual ArcDelay checkDelay(const Pvt *pvt, + float from_slew, + float to_slew, + float related_out_cap, + bool pocv_enabled) const = 0; virtual string reportCheckDelay(const Pvt *pvt, float from_slew, const char *from_slew_annotation, diff --git a/liberty/Liberty.cc b/liberty/Liberty.cc index b9125ab5..6b8be6c0 100644 --- a/liberty/Liberty.cc +++ b/liberty/Liberty.cc @@ -2583,7 +2583,7 @@ LibertyPort::clockTreePathDelays() GateTimingModel *gate_model = dynamic_cast(model); ArcDelay delay; Slew slew; - gate_model->gateDelay(nullptr, 0.0, 0.0, 0.0, false, delay, slew); + gate_model->gateDelay(nullptr, 0.0, 0.0, false, delay, slew); const RiseFall *rf = arc->toEdge()->asRiseFall(); const MinMax *min_max = (role == TimingRole::clockTreePathMin()) ? MinMax::min() diff --git a/liberty/LibertyBuilder.cc b/liberty/LibertyBuilder.cc index 76de519a..c59c013c 100644 --- a/liberty/LibertyBuilder.cc +++ b/liberty/LibertyBuilder.cc @@ -182,17 +182,13 @@ LibertyBuilder::makeTimingArcs(LibertyCell *cell, && seq->data()->hasPort(from_port)) // Latch D->Q timing arcs. return makeLatchDtoQArcs(cell, from_port, to_port, - seq->data()->portTimingSense(from_port), - related_out, attrs); + seq->data()->portTimingSense(from_port), attrs); else - return makeCombinationalArcs(cell, from_port, to_port, related_out, - true, true, attrs); + return makeCombinationalArcs(cell, from_port, to_port, true, true, attrs); case TimingType::combinational_fall: - return makeCombinationalArcs(cell, from_port, to_port, related_out, - false, true, attrs); + return makeCombinationalArcs(cell, from_port, to_port, false, true, attrs); case TimingType::combinational_rise: - return makeCombinationalArcs(cell, from_port, to_port, related_out, - true, false, attrs); + return makeCombinationalArcs(cell, from_port, to_port, true, false, attrs); case TimingType::setup_rising: return makeFromTransitionArcs(cell, from_port, to_port, related_out, RiseFall::rise(), TimingRole::setup(), @@ -210,17 +206,13 @@ LibertyBuilder::makeTimingArcs(LibertyCell *cell, RiseFall::fall(), TimingRole::hold(), attrs); case TimingType::rising_edge: - return makeRegLatchArcs(cell, from_port, to_port, related_out, - RiseFall::rise(), attrs); + return makeRegLatchArcs(cell, from_port, to_port, RiseFall::rise(), attrs); case TimingType::falling_edge: - return makeRegLatchArcs(cell, from_port, to_port, related_out, - RiseFall::fall(), attrs); + return makeRegLatchArcs(cell, from_port, to_port, RiseFall::fall(), attrs); case TimingType::preset: - return makePresetClrArcs(cell, from_port, to_port, related_out, - RiseFall::rise(), attrs); + return makePresetClrArcs(cell, from_port, to_port, RiseFall::rise(), attrs); case TimingType::clear: - return makePresetClrArcs(cell, from_port, to_port, related_out, - RiseFall::fall(), attrs); + return makePresetClrArcs(cell, from_port, to_port, RiseFall::fall(), attrs); case TimingType::recovery_rising: return makeFromTransitionArcs(cell, from_port, to_port, related_out, RiseFall::rise(),TimingRole::recovery(), @@ -238,23 +230,17 @@ LibertyBuilder::makeTimingArcs(LibertyCell *cell, RiseFall::fall(), TimingRole::removal(), attrs); case TimingType::three_state_disable: - return makeTristateDisableArcs(cell, from_port, to_port, related_out, - true, true, attrs); + return makeTristateDisableArcs(cell, from_port, to_port, true, true, attrs); case TimingType::three_state_disable_fall: - return makeTristateDisableArcs(cell, from_port, to_port, related_out, - false, true, attrs); + return makeTristateDisableArcs(cell, from_port, to_port, false, true, attrs); case TimingType::three_state_disable_rise: - return makeTristateDisableArcs(cell, from_port, to_port, related_out, - true, false, attrs); + return makeTristateDisableArcs(cell, from_port, to_port, true, false, attrs); case TimingType::three_state_enable: - return makeTristateEnableArcs(cell, from_port, to_port, related_out, - true, true, attrs); + return makeTristateEnableArcs(cell, from_port, to_port, true, true, attrs); case TimingType::three_state_enable_fall: - return makeTristateEnableArcs(cell, from_port, to_port, related_out, - false, true, attrs); + return makeTristateEnableArcs(cell, from_port, to_port, false, true, attrs); case TimingType::three_state_enable_rise: - return makeTristateEnableArcs(cell, from_port, to_port, related_out, - true, false, attrs); + return makeTristateEnableArcs(cell, from_port, to_port, true, false, attrs); case TimingType::skew_falling: return makeFromTransitionArcs(cell, from_port, to_port, related_out, RiseFall::fall(), TimingRole::skew(), @@ -282,12 +268,10 @@ LibertyBuilder::makeTimingArcs(LibertyCell *cell, TimingRole::nonSeqHold(), attrs); case TimingType::min_clock_tree_path: - return makeClockTreePathArcs(cell, to_port, related_out, - TimingRole::clockTreePathMin(), + return makeClockTreePathArcs(cell, to_port, TimingRole::clockTreePathMin(), attrs); case TimingType::max_clock_tree_path: - return makeClockTreePathArcs(cell, to_port, related_out, - TimingRole::clockTreePathMax(), + return makeClockTreePathArcs(cell, to_port, TimingRole::clockTreePathMax(), attrs); case TimingType::min_pulse_width: case TimingType::minimum_period: @@ -307,14 +291,13 @@ TimingArcSet * LibertyBuilder::makeCombinationalArcs(LibertyCell *cell, LibertyPort *from_port, LibertyPort *to_port, - LibertyPort *related_out, bool to_rise, bool to_fall, TimingArcAttrsPtr attrs) { FuncExpr *func = to_port->function(); FuncExpr *enable = to_port->tristateEnable(); - TimingArcSet *arc_set = makeTimingArcSet(cell, from_port, to_port, related_out, + TimingArcSet *arc_set = makeTimingArcSet(cell, from_port, to_port, TimingRole::combinational(), attrs); TimingSense sense = attrs->timingSense(); if (sense == TimingSense::unknown) { @@ -393,11 +376,9 @@ LibertyBuilder::makeLatchDtoQArcs(LibertyCell *cell, LibertyPort *from_port, LibertyPort *to_port, TimingSense sense, - LibertyPort *related_out, TimingArcAttrsPtr attrs) { TimingArcSet *arc_set = makeTimingArcSet(cell, from_port, to_port, - related_out, TimingRole::latchDtoQ(), attrs); TimingModel *model; RiseFall *to_rf = RiseFall::rise(); @@ -421,7 +402,6 @@ TimingArcSet * LibertyBuilder::makeRegLatchArcs(LibertyCell *cell, LibertyPort *from_port, LibertyPort *to_port, - LibertyPort *related_out, RiseFall *from_rf, TimingArcAttrsPtr attrs) { @@ -434,24 +414,24 @@ LibertyBuilder::makeRegLatchArcs(LibertyCell *cell, if (seq->clock() && seq->clock()->hasPort(from_port)) { TimingRole *role = seq->isRegister() ? TimingRole::regClkToQ() : TimingRole::latchEnToQ(); - return makeFromTransitionArcs(cell, from_port, to_port, related_out, - from_rf, role, attrs); + return makeFromTransitionArcs(cell, from_port, to_port, nullptr, + from_rf, role, attrs); } else if (seq->isLatch() && seq->data() && seq->data()->hasPort(from_port)) - return makeFromTransitionArcs(cell, from_port, to_port, related_out, - from_rf, TimingRole::latchDtoQ(), attrs); + return makeFromTransitionArcs(cell, from_port, to_port, nullptr, + from_rf, TimingRole::latchDtoQ(), attrs); else if ((seq->clear() && seq->clear()->hasPort(from_port)) || (seq->preset() && seq->preset()->hasPort(from_port))) - return makeFromTransitionArcs(cell, from_port, to_port, related_out, - from_rf, TimingRole::regSetClr(), attrs); + return makeFromTransitionArcs(cell, from_port, to_port, nullptr, + from_rf, TimingRole::regSetClr(), attrs); } } // No associated ff/latch - assume register clk->q. cell->setHasInferedRegTimingArcs(true); - return makeFromTransitionArcs(cell, from_port, to_port, related_out, - from_rf, TimingRole::regClkToQ(), attrs); + return makeFromTransitionArcs(cell, from_port, to_port, nullptr, + from_rf, TimingRole::regClkToQ(), attrs); } TimingArcSet * @@ -477,14 +457,13 @@ TimingArcSet * LibertyBuilder::makePresetClrArcs(LibertyCell *cell, LibertyPort *from_port, LibertyPort *to_port, - LibertyPort *related_out, RiseFall *to_rf, TimingArcAttrsPtr attrs) { TimingArcSet *arc_set = nullptr; TimingModel *model = attrs->model(to_rf); if (model) { - arc_set = makeTimingArcSet(cell, from_port, to_port, related_out, + arc_set = makeTimingArcSet(cell, from_port, to_port, TimingRole::regSetClr(), attrs); RiseFall *opp_rf = to_rf->opposite(); switch (attrs->timingSense()) { @@ -513,12 +492,11 @@ TimingArcSet * LibertyBuilder::makeTristateEnableArcs(LibertyCell *cell, LibertyPort *from_port, LibertyPort *to_port, - LibertyPort *related_out, bool to_rise, bool to_fall, TimingArcAttrsPtr attrs) { - TimingArcSet *arc_set = makeTimingArcSet(cell, from_port, to_port, related_out, + TimingArcSet *arc_set = makeTimingArcSet(cell, from_port, to_port, TimingRole::tristateEnable(), attrs); FuncExpr *tristate_enable = to_port->tristateEnable(); TimingSense sense = attrs->timingSense(); @@ -584,13 +562,11 @@ TimingArcSet * LibertyBuilder::makeTristateDisableArcs(LibertyCell *cell, LibertyPort *from_port, LibertyPort *to_port, - LibertyPort *related_out, bool to_rise, bool to_fall, TimingArcAttrsPtr attrs) { TimingArcSet *arc_set = makeTimingArcSet(cell, from_port, to_port, - related_out, TimingRole::tristateDisable(), attrs); TimingSense sense = attrs->timingSense(); @@ -656,12 +632,10 @@ LibertyBuilder::makeTristateDisableArcs(LibertyCell *cell, TimingArcSet * LibertyBuilder::makeClockTreePathArcs(LibertyCell *cell, LibertyPort *to_port, - LibertyPort *related_out, TimingRole *role, TimingArcAttrsPtr attrs) { - TimingArcSet *arc_set = makeTimingArcSet(cell, nullptr, to_port, - related_out, role, attrs); + TimingArcSet *arc_set = makeTimingArcSet(cell, nullptr, to_port, role, attrs); for (auto to_rf : RiseFall::range()) { TimingModel *model = attrs->model(to_rf); if (model) @@ -670,6 +644,16 @@ LibertyBuilder::makeClockTreePathArcs(LibertyCell *cell, return arc_set; } +TimingArcSet * +LibertyBuilder::makeTimingArcSet(LibertyCell *cell, + LibertyPort *from, + LibertyPort *to, + TimingRole *role, + TimingArcAttrsPtr attrs) +{ + return new TimingArcSet(cell, from, to, nullptr, role, attrs); +} + TimingArcSet * LibertyBuilder::makeTimingArcSet(LibertyCell *cell, LibertyPort *from, diff --git a/liberty/LibertyBuilder.hh b/liberty/LibertyBuilder.hh index f6b64b86..87e291b8 100644 --- a/liberty/LibertyBuilder.hh +++ b/liberty/LibertyBuilder.hh @@ -75,13 +75,11 @@ public: TimingArcSet *makeCombinationalArcs(LibertyCell *cell, LibertyPort *from_port, LibertyPort *to_port, - LibertyPort *related_out, bool to_rise, bool to_fall, TimingArcAttrsPtr attrs); TimingArcSet *makeClockTreePathArcs(LibertyCell *cell, LibertyPort *to_port, - LibertyPort *related_out, TimingRole *role, TimingArcAttrsPtr attrs); @@ -105,6 +103,11 @@ protected: ConcretePort *bus_port, const char *bus_name, int index); + virtual TimingArcSet *makeTimingArcSet(LibertyCell *cell, + LibertyPort *from, + LibertyPort *to, + TimingRole *role, + TimingArcAttrsPtr attrs); virtual TimingArcSet *makeTimingArcSet(LibertyCell *cell, LibertyPort *from, LibertyPort *to, @@ -123,31 +126,26 @@ protected: LibertyPort *from_port, LibertyPort *to_port, TimingSense sense, - LibertyPort *related_out, TimingArcAttrsPtr attrs); TimingArcSet *makeRegLatchArcs(LibertyCell *cell, LibertyPort *from_port, LibertyPort *to_port, - LibertyPort *related_out, RiseFall *from_rf, TimingArcAttrsPtr attrs); TimingArcSet *makePresetClrArcs(LibertyCell *cell, LibertyPort *from_port, LibertyPort *to_port, - LibertyPort *related_out, RiseFall *to_rf, TimingArcAttrsPtr attrs); TimingArcSet *makeTristateEnableArcs(LibertyCell *cell, LibertyPort *from_port, LibertyPort *to_port, - LibertyPort *related_out, bool to_rise, bool to_fall, TimingArcAttrsPtr attrs); TimingArcSet *makeTristateDisableArcs(LibertyCell *cell, LibertyPort *from_port, LibertyPort *to_port, - LibertyPort *related_out, bool to_rise, bool to_fall, TimingArcAttrsPtr attrs); diff --git a/liberty/LinearModel.cc b/liberty/LinearModel.cc index 1ba8ff8b..cba74116 100644 --- a/liberty/LinearModel.cc +++ b/liberty/LinearModel.cc @@ -34,7 +34,6 @@ void GateLinearModel::gateDelay(const Pvt *, float, float load_cap, - float, bool, // return values ArcDelay &gate_delay, @@ -48,7 +47,6 @@ string GateLinearModel::reportGateDelay(const Pvt *, float, float load_cap, - float, bool, int digits) const { @@ -87,15 +85,14 @@ CheckLinearModel::CheckLinearModel(LibertyCell *cell, { } -void +ArcDelay CheckLinearModel::checkDelay(const Pvt *, float, float, float, - bool, - ArcDelay &margin) const + bool) const { - margin = intrinsic_; + return intrinsic_; } string diff --git a/liberty/TableModel.cc b/liberty/TableModel.cc index ff9753dd..51df5ac1 100644 --- a/liberty/TableModel.cc +++ b/liberty/TableModel.cc @@ -104,67 +104,77 @@ void GateTableModel::gateDelay(const Pvt *pvt, float in_slew, float load_cap, - float related_out_cap, bool pocv_enabled, // return values ArcDelay &gate_delay, Slew &drvr_slew) const { - float delay = findValue(pvt, delay_model_, in_slew, load_cap, related_out_cap); + float delay = findValue(pvt, delay_model_, in_slew, load_cap, 0.0); float sigma_early = 0.0; float sigma_late = 0.0; if (pocv_enabled && delay_sigma_models_[EarlyLate::earlyIndex()]) sigma_early = findValue(pvt, delay_sigma_models_[EarlyLate::earlyIndex()], - in_slew, load_cap, related_out_cap); + in_slew, load_cap, 0.0); if (pocv_enabled && delay_sigma_models_[EarlyLate::lateIndex()]) sigma_late = findValue(pvt, delay_sigma_models_[EarlyLate::lateIndex()], - in_slew, load_cap, related_out_cap); + in_slew, load_cap, 0.0); gate_delay = makeDelay(delay, sigma_early, sigma_late); - float slew = findValue(pvt, slew_model_, in_slew, load_cap, related_out_cap); + float slew = findValue(pvt, slew_model_, in_slew, load_cap, 0.0); if (pocv_enabled && slew_sigma_models_[EarlyLate::earlyIndex()]) sigma_early = findValue(pvt, slew_sigma_models_[EarlyLate::earlyIndex()], - in_slew, load_cap, related_out_cap); + in_slew, load_cap, 0.0); if (pocv_enabled && slew_sigma_models_[EarlyLate::lateIndex()]) sigma_late = findValue(pvt, slew_sigma_models_[EarlyLate::lateIndex()], - in_slew, load_cap, related_out_cap); + in_slew, load_cap, 0.0); // Clip negative slews to zero. if (slew < 0.0) slew = 0.0; drvr_slew = makeDelay(slew, sigma_early, sigma_late); } +void +GateTableModel::gateDelay(const Pvt *pvt, + float in_slew, + float load_cap, + float, + bool pocv_enabled, + ArcDelay &gate_delay, + Slew &drvr_slew) const +{ + gateDelay(pvt, in_slew, load_cap, pocv_enabled, gate_delay, drvr_slew); +} + string GateTableModel::reportGateDelay(const Pvt *pvt, float in_slew, float load_cap, - float related_out_cap, bool pocv_enabled, int digits) const { string result = reportPvt(cell_, pvt, digits); result += reportTableLookup("Delay", pvt, delay_model_, in_slew, - load_cap, related_out_cap, digits); + load_cap, 0.0, digits); if (pocv_enabled && delay_sigma_models_[EarlyLate::earlyIndex()]) result += reportTableLookup("Delay sigma(early)", pvt, delay_sigma_models_[EarlyLate::earlyIndex()], - in_slew, load_cap, related_out_cap, digits); + in_slew, load_cap, 0.0, digits); if (pocv_enabled && delay_sigma_models_[EarlyLate::lateIndex()]) result += reportTableLookup("Delay sigma(late)", pvt, delay_sigma_models_[EarlyLate::lateIndex()], - in_slew, load_cap, related_out_cap, digits); + in_slew, load_cap, 0.0, digits); result += '\n'; result += reportTableLookup("Slew", pvt, slew_model_, in_slew, - load_cap, related_out_cap, digits); + load_cap, 9.0, digits); if (pocv_enabled && slew_sigma_models_[EarlyLate::earlyIndex()]) result += reportTableLookup("Slew sigma(early)", pvt, slew_sigma_models_[EarlyLate::earlyIndex()], - in_slew, load_cap, related_out_cap, digits); + in_slew, load_cap, 0.0, digits); if (pocv_enabled && slew_sigma_models_[EarlyLate::lateIndex()]) result += reportTableLookup("Slew sigma(late)", pvt, slew_sigma_models_[EarlyLate::lateIndex()], - in_slew, load_cap, related_out_cap, digits); - float drvr_slew = findValue(pvt, slew_model_, in_slew, load_cap, related_out_cap); + in_slew, load_cap, 0.0, digits); + float drvr_slew = findValue(pvt, slew_model_, in_slew, load_cap, 0.0); if (drvr_slew < 0.0) result += "Negative slew clipped to 0.0\n"; return result; @@ -407,14 +417,12 @@ CheckTableModel::setIsScaled(bool is_scaled) model_->setIsScaled(is_scaled); } -void +ArcDelay CheckTableModel::checkDelay(const Pvt *pvt, float from_slew, float to_slew, float related_out_cap, - bool pocv_enabled, - // Return values. - ArcDelay &margin) const + bool pocv_enabled) const { if (model_) { float mean = findValue(pvt, model_, from_slew, to_slew, related_out_cap); @@ -426,10 +434,10 @@ CheckTableModel::checkDelay(const Pvt *pvt, if (pocv_enabled && sigma_models_[EarlyLate::lateIndex()]) sigma_late = findValue(pvt, sigma_models_[EarlyLate::lateIndex()], from_slew, to_slew, related_out_cap); - margin = makeDelay(mean, sigma_early, sigma_late); + return makeDelay(mean, sigma_early, sigma_late); } else - margin = 0.0; + return 0.0; } float @@ -1577,7 +1585,6 @@ OutputWaveforms::~OutputWaveforms() current_waveforms_.deleteContents(); voltage_waveforms_.deleteContents(); voltage_currents_.deleteContents(); - current_voltages_.deleteContents(); voltage_times_.deleteContents(); delete ref_times_; } @@ -1635,15 +1642,6 @@ OutputWaveforms::voltageCurrent(float slew, return waveformValue(slew, cap, volt, voltage_currents_); } -float -OutputWaveforms::currentVoltage(float slew, - float cap, - float current) -{ - ensureVoltages(); - return waveformValue(slew, cap, current, current_voltages_); -} - float OutputWaveforms::waveformValue(float slew, float cap, @@ -1809,7 +1807,6 @@ OutputWaveforms::ensureVoltages() size_t size = current_waveforms_.size(); voltage_waveforms_.resize(size); voltage_currents_.resize(size); - current_voltages_.resize(size); voltage_times_.resize(size); size_t cap_count = cap_axis_->size(); for (size_t slew_index = 0; slew_index < slew_axis_->size(); slew_index++) { @@ -1858,14 +1855,6 @@ OutputWaveforms::findVoltages(size_t wave_index, Table1 *volt_currents = new Table1(currents1, volt_axis); voltage_currents_[wave_index] = volt_currents; - // Make current -> voltage table. - FloatSeq *axis_currents = new FloatSeq(*currents->values()); - TableAxisPtr current_axis = - make_shared(TableAxisVariable::input_voltage, axis_currents); - FloatSeq *volts1 = new FloatSeq(*volts); - Table1 *current_volts = new Table1(volts1, current_axis); - current_voltages_[wave_index] = current_volts; - // Sample the voltage waveform at uniform intervals to speed up // voltage time lookup. FloatSeq *voltage_times = new FloatSeq; diff --git a/liberty/TimingArc.cc b/liberty/TimingArc.cc index 0f1532e3..cf9a7b74 100644 --- a/liberty/TimingArc.cc +++ b/liberty/TimingArc.cc @@ -162,7 +162,7 @@ TimingArc::intrinsicDelay() const if (model) { ArcDelay arc_delay; Slew slew; - model->gateDelay(nullptr, 0.0, 0.0, 0.0, false, arc_delay, slew); + model->gateDelay(nullptr, 0.0, 0.0, false, arc_delay, slew); return arc_delay; } else diff --git a/search/MakeTimingModel.cc b/search/MakeTimingModel.cc index b45d116b..ddda57a2 100644 --- a/search/MakeTimingModel.cc +++ b/search/MakeTimingModel.cc @@ -446,8 +446,7 @@ MakeTimingModel::makeInputOutputTimingArcs(const Pin *input_pin, LibertyPort *output_port = modelPort(output_pin); LibertyPort *input_port = modelPort(input_pin); attrs->setTimingSense(output_delays.timingSense()); - lib_builder_->makeCombinationalArcs(cell_, input_port, - output_port, nullptr, + lib_builder_->makeCombinationalArcs(cell_, input_port, output_port, true, true, attrs); } } @@ -552,8 +551,7 @@ MakeTimingModel::findClkInsertionDelays() TimingRole *role = (min_max == MinMax::min()) ? TimingRole::clockTreePathMin() : TimingRole::clockTreePathMax(); - lib_builder_->makeClockTreePathArcs(cell_, lib_port, nullptr, - role, attrs); + lib_builder_->makeClockTreePathArcs(cell_, lib_port, role, attrs); } } } @@ -655,7 +653,7 @@ MakeTimingModel::makeGateModelTable(const Pin *output_pin, float output_load_cap = graph_delay_calc_->loadCap(output_pin, dcalc_ap); ArcDelay drvr_self_delay; Slew drvr_self_slew; - drvr_gate_model->gateDelay(pvt, in_slew1, output_load_cap, 0.0, false, + drvr_gate_model->gateDelay(pvt, in_slew1, output_load_cap, false, drvr_self_delay, drvr_self_slew); const TableModel *drvr_table = drvr_gate_model->delayModel(); @@ -670,7 +668,7 @@ MakeTimingModel::makeGateModelTable(const Pin *output_pin, // get slew from driver input pin ArcDelay gate_delay; Slew gate_slew; - drvr_gate_model->gateDelay(pvt, in_slew1, load_cap, 0.0, false, + drvr_gate_model->gateDelay(pvt, in_slew1, load_cap, false, gate_delay, gate_slew); // Remove the self delay driving the output pin net load cap. load_values->push_back(delayAsFloat(delay + gate_delay From 099920fc8ee0808e7c8ecd2cf28a975009aa09e7 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sun, 7 Jan 2024 19:20:53 -0700 Subject: [PATCH 08/43] write_timing_model min_clock_tree_path seg fault Signed-off-by: James Cherry --- liberty/TimingArc.cc | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/liberty/TimingArc.cc b/liberty/TimingArc.cc index cf9a7b74..17ad731b 100644 --- a/liberty/TimingArc.cc +++ b/liberty/TimingArc.cc @@ -240,11 +240,13 @@ TimingArcSet::addTimingArc(TimingArc *arc) criticalError(243, "timing arc max index exceeded\n"); arcs_.push_back(arc); - int from_rf_index = arc->fromEdge()->asRiseFall()->index(); - if (from_arc1_[from_rf_index] == nullptr) - from_arc1_[from_rf_index] = arc; - else if (from_arc2_[from_rf_index] == nullptr) - from_arc2_[from_rf_index] = arc; + if (arc->fromEdge()) { + int from_rf_index = arc->fromEdge()->asRiseFall()->index(); + if (from_arc1_[from_rf_index] == nullptr) + from_arc1_[from_rf_index] = arc; + else if (from_arc2_[from_rf_index] == nullptr) + from_arc2_[from_rf_index] = arc; + } int to_rf_index = arc->toEdge()->asRiseFall()->index(); to_arc_[to_rf_index] = arc; @@ -476,8 +478,8 @@ timingArcsLess(const TimingArcSet *arc_set1, arc_itr1++, arc_itr2++) { const TimingArc *arc1 = *arc_itr1; const TimingArc *arc2 = *arc_itr2; - int from_index1 = arc1->fromEdge()->index(); - int from_index2 = arc2->fromEdge()->index(); + int from_index1 = arc1->fromEdge() ? arc1->fromEdge()->index() : -1; + int from_index2 = arc2->fromEdge() ? arc2->fromEdge()->index() : -1; if (from_index1 < from_index2) return true; if (from_index1 > from_index2) From 3b721ba40aad3b97a8e57475507e8faac3bc7958 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sun, 7 Jan 2024 19:23:53 -0700 Subject: [PATCH 09/43] renumber error/warn messages Signed-off-by: James Cherry --- dcalc/DelayCalc.tcl | 28 +- dcalc/DmpCeff.cc | 4 +- dcalc/GraphDelayCalc.cc | 2 +- dcalc/LumpedCapDelayCalc.cc | 2 +- graph/DelayNormal1.cc | 2 +- graph/DelayNormal2.cc | 2 +- graph/Graph.cc | 8 +- liberty/Liberty.cc | 12 +- liberty/LibertyExpr.cc | 4 +- liberty/LibertyReader.cc | 314 ++++----- liberty/LibertyWriter.cc | 8 +- messages.txt | 1013 +++++++++++++++--------------- network/ConcreteNetwork.cc | 2 +- network/SdcNetwork.cc | 4 +- parasitics/EstimateParasitics.cc | 2 +- parasitics/Parasitics.tcl | 6 +- parasitics/SpefParse.yy | 6 +- parasitics/SpefReader.cc | 2 +- power/Power.cc | 2 +- power/Power.tcl | 2 +- power/ReadVcdActivities.cc | 6 +- power/Vcd.cc | 2 +- power/VcdReader.cc | 2 +- sdc/CycleAccting.cc | 2 +- sdc/Sdc.cc | 2 +- sdc/WriteSdc.cc | 6 +- sdf/Sdf.tcl | 8 +- search/Genclks.cc | 6 +- search/MakeTimingModel.cc | 2 +- search/PathEnum.cc | 2 +- search/PathEnumed.cc | 4 +- search/PathGroup.cc | 2 +- search/PathVertex.cc | 6 +- search/PathVertexRep.cc | 6 +- search/ReportPath.cc | 8 +- search/Search.cc | 8 +- search/Sim.cc | 4 +- search/Sta.cc | 8 +- search/TagGroup.cc | 2 +- search/WritePathSpice.cc | 14 +- tcl/CmdArgs.tcl | 92 +-- tcl/CmdUtil.tcl | 12 +- tcl/Liberty.tcl | 2 +- tcl/Link.tcl | 2 +- tcl/Network.tcl | 6 +- tcl/NetworkEdit.tcl | 8 +- tcl/Property.tcl | 12 +- tcl/Sdc.tcl | 286 ++++----- tcl/Search.tcl | 36 +- tcl/Sta.tcl | 4 +- tcl/StaTcl.i | 14 +- tcl/Util.tcl | 34 +- tcl/Variables.tcl | 6 +- tcl/WritePathSpice.tcl | 24 +- verilog/VerilogReader.cc | 10 +- 55 files changed, 1035 insertions(+), 1038 deletions(-) diff --git a/dcalc/DelayCalc.tcl b/dcalc/DelayCalc.tcl index e2cde430..c9d25c75 100644 --- a/dcalc/DelayCalc.tcl +++ b/dcalc/DelayCalc.tcl @@ -116,7 +116,7 @@ proc set_delay_calculator { alg } { if { [is_delay_calc_name $alg] } { set_delay_calculator_cmd $alg } else { - sta_error 435 "delay calculator $alg not found." + sta_error 180 "delay calculator $alg not found." } } @@ -145,38 +145,38 @@ proc set_assigned_delay_cmd { cmd cmd_args } { if [info exists keys(-from)] { set from_pins [get_port_pins_error "from_pins" $keys(-from)] } else { - sta_error 442 "$cmd missing -from argument." + sta_error 181 "$cmd missing -from argument." } if [info exists keys(-to)] { set to_pins [get_port_pins_error "to_pins" $keys(-to)] } else { - sta_error 443 "$cmd missing -to argument." + sta_error 182 "$cmd missing -to argument." } set delay [lindex $cmd_args 0] if {![string is double $delay]} { - sta_error 444 "$cmd delay is not a float." + sta_error 183 "$cmd delay is not a float." } set delay [time_ui_sta $delay] if {[info exists flags(-cell)] && [info exists flags(-net)]} { - sta_error 445 "set_annotated_delay -cell and -net options are mutually excluive." + sta_error 184 "set_annotated_delay -cell and -net options are mutually excluive." } elseif {[info exists flags(-cell)]} { if { $from_pins != {} } { set inst [[lindex $from_pins 0] instance] foreach pin $from_pins { if {[$pin instance] != $inst} { - sta_error 446 "$cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst]." + sta_error 185 "$cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst]." } } foreach pin $to_pins { if {[$pin instance] != $inst} { - sta_error 447 "$cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst]" + sta_error 186 "$cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst]" } } } } elseif {![info exists flags(-net)]} { - sta_error 448 "$cmd -cell or -net required." + sta_error 187 "$cmd -cell or -net required." } foreach from_pin $from_pins { set from_vertices [$from_pin vertices] @@ -240,7 +240,7 @@ proc set_assigned_check_cmd { cmd cmd_args } { if { [info exists keys(-from)] } { set from_pins [get_port_pins_error "from_pins" $keys(-from)] } else { - sta_error 449 "$cmd missing -from argument." + sta_error 188 "$cmd missing -from argument." } set from_rf "rise_fall" if { [info exists keys(-clock)] } { @@ -249,14 +249,14 @@ proc set_assigned_check_cmd { cmd cmd_args } { || $clk_arg eq "fall" } { set from_rf $clk_arg } else { - sta_error 450 "$cmd -clock must be rise or fall." + sta_error 189 "$cmd -clock must be rise or fall." } } if { [info exists keys(-to)] } { set to_pins [get_port_pins_error "to_pins" $keys(-to)] } else { - sta_error 451 "$cmd missing -to argument." + sta_error 190 "$cmd missing -to argument." } set to_rf [parse_rise_fall_flags flags] set corner [parse_corner keys] @@ -271,7 +271,7 @@ proc set_assigned_check_cmd { cmd cmd_args } { } elseif { [info exists flags(-removal)] } { set role "removal" } else { - sta_error 452 "$cmd missing -setup|-hold|-recovery|-removal check type.." + sta_error 191 "$cmd missing -setup|-hold|-recovery|-removal check type.." } set cond "" if { [info exists key(-cond)] } { @@ -279,7 +279,7 @@ proc set_assigned_check_cmd { cmd cmd_args } { } set check_value [lindex $cmd_args 0] if { ![string is double $check_value] } { - sta_error 453 "$cmd check_value is not a float." + sta_error 192 "$cmd check_value is not a float." } set check_value [time_ui_sta $check_value] @@ -347,7 +347,7 @@ proc set_assigned_transition { args } { set slew [lindex $args 0] if {![string is double $slew]} { - sta_error 428 "set_assigned_transition transition is not a float." + sta_error 210 "set_assigned_transition transition is not a float." } set slew [time_ui_sta $slew] set pins [get_port_pins_error "pins" [lindex $args 1]] diff --git a/dcalc/DmpCeff.cc b/dcalc/DmpCeff.cc index da9351a6..7e29ae6f 100644 --- a/dcalc/DmpCeff.cc +++ b/dcalc/DmpCeff.cc @@ -1551,7 +1551,7 @@ DmpCeffDelayCalc::gateDelay(const Pin *drvr_pin, float c2, rpi, c1; parasitics_->piModel(parasitic, c2, rpi, c1); if (isnan(c2) || isnan(c1) || isnan(rpi)) - report_->error(618, "parasitic Pi model has NaNs."); + report_->error(1040, "parasitic Pi model has NaNs."); setCeffAlgorithm(drvr_library, drvr_cell, pinPvt(drvr_pin, dcalc_ap), table_model, rf, in_slew1, c2, rpi, c1); double gate_delay, drvr_slew; @@ -1579,7 +1579,7 @@ DmpCeffDelayCalc::gateDelay(const Pin *drvr_pin, if (parasitic && !unsuppored_model_warned_) { unsuppored_model_warned_ = true; - report_->warn(1, "cell %s delay model not supported on SPF parasitics by DMP delay calculator", + report_->warn(1041, "cell %s delay model not supported on SPF parasitics by DMP delay calculator", drvr_cell->name()); } return dcalc_result; diff --git a/dcalc/GraphDelayCalc.cc b/dcalc/GraphDelayCalc.cc index f0414b98..d852bb8f 100644 --- a/dcalc/GraphDelayCalc.cc +++ b/dcalc/GraphDelayCalc.cc @@ -477,7 +477,7 @@ GraphDelayCalc::findPortIndex(const LibertyCell *cell, return index; index++; } - report_->critical(207, "port not found in cell"); + report_->critical(1100, "port not found in cell"); return 0; } diff --git a/dcalc/LumpedCapDelayCalc.cc b/dcalc/LumpedCapDelayCalc.cc index 3f91a37f..4330151b 100644 --- a/dcalc/LumpedCapDelayCalc.cc +++ b/dcalc/LumpedCapDelayCalc.cc @@ -135,7 +135,7 @@ LumpedCapDelayCalc::gateDelay(const Pin *drvr_pin, float in_slew1 = delayAsFloat(in_slew); // NaNs cause seg faults during table lookup. if (isnan(load_cap) || isnan(delayAsFloat(in_slew))) - report_->error(710, "gate delay input variable is NaN"); + report_->error(1350, "gate delay input variable is NaN"); model->gateDelay(pinPvt(drvr_pin, dcalc_ap), in_slew1, load_cap, pocv_enabled_, gate_delay, drvr_slew); return makeResult(drvr_library, rf, gate_delay, drvr_slew, load_pin_index_map); diff --git a/graph/DelayNormal1.cc b/graph/DelayNormal1.cc index b677b198..0aa0488e 100644 --- a/graph/DelayNormal1.cc +++ b/graph/DelayNormal1.cc @@ -200,7 +200,7 @@ delayAsFloat(const Delay &delay, else if (early_late == EarlyLate::late()) return delay.mean() + delay.sigma() * sta->sigmaFactor(); else - sta->report()->critical(594, "unknown early/late value."); + sta->report()->critical(1020, "unknown early/late value."); } return delay.mean(); } diff --git a/graph/DelayNormal2.cc b/graph/DelayNormal2.cc index a58787a3..f66cd35f 100644 --- a/graph/DelayNormal2.cc +++ b/graph/DelayNormal2.cc @@ -375,7 +375,7 @@ delayAsFloat(const Delay &delay, else if (early_late == EarlyLate::late()) return delay.mean() + delay.sigma(early_late) * sta->sigmaFactor(); else - sta->report()->critical(595, "unknown early/late value."); + sta->report()->critical(1030, "unknown early/late value."); } return delay.mean(); } diff --git a/graph/Graph.cc b/graph/Graph.cc index 29af550a..0b202c3f 100644 --- a/graph/Graph.cc +++ b/graph/Graph.cc @@ -790,7 +790,7 @@ Graph::arcDelayAnnotated(const Edge *edge, if (arc_delay_annotated_.size()) { size_t index = (edge->arcDelays() + arc->index()) * ap_count_ + ap_index; if (index >= arc_delay_annotated_.size()) - report_->critical(208, "arc_delay_annotated array bounds exceeded"); + report_->critical(1080, "arc_delay_annotated array bounds exceeded"); return arc_delay_annotated_[index]; } else @@ -805,7 +805,7 @@ Graph::setArcDelayAnnotated(Edge *edge, { size_t index = (edge->arcDelays() + arc->index()) * ap_count_ + ap_index; if (index >= arc_delay_annotated_.size()) - report_->critical(209, "arc_delay_annotated array bounds exceeded"); + report_->critical(1081, "arc_delay_annotated array bounds exceeded"); arc_delay_annotated_[index] = annotated; } @@ -817,7 +817,7 @@ Graph::wireDelayAnnotated(Edge *edge, size_t index = (edge->arcDelays() + TimingArcSet::wireArcIndex(rf)) * ap_count_ + ap_index; if (index >= arc_delay_annotated_.size()) - report_->critical(210, "arc_delay_annotated array bounds exceeded"); + report_->critical(1082, "arc_delay_annotated array bounds exceeded"); return arc_delay_annotated_[index]; } @@ -830,7 +830,7 @@ Graph::setWireDelayAnnotated(Edge *edge, size_t index = (edge->arcDelays() + TimingArcSet::wireArcIndex(rf)) * ap_count_ + ap_index; if (index >= arc_delay_annotated_.size()) - report_->critical(228, "arc_delay_annotated array bounds exceeded"); + report_->critical(1083, "arc_delay_annotated array bounds exceeded"); arc_delay_annotated_[index] = annotated; } diff --git a/liberty/Liberty.cc b/liberty/Liberty.cc index 6b8be6c0..0997e759 100644 --- a/liberty/Liberty.cc +++ b/liberty/Liberty.cc @@ -763,7 +763,7 @@ LibertyLibrary::makeCornerMap(LibertyCell *cell1, port1->setCornerPort(port2, ap_index); } else - report->warn(2, "cell %s/%s port %s not found in cell %s/%s.", + report->warn(1110, "cell %s/%s port %s not found in cell %s/%s.", cell1->library()->name(), cell1->name(), port_name, @@ -789,7 +789,7 @@ LibertyLibrary::makeCornerMap(LibertyCell *cell1, } } else - report->warn(3, "cell %s/%s %s -> %s timing group %s not found in cell %s/%s.", + report->warn(1111, "cell %s/%s %s -> %s timing group %s not found in cell %s/%s.", cell1->library()->name(), cell1->name(), arc_set1->from()->name(), @@ -808,7 +808,7 @@ LibertyLibrary::checkCorners(LibertyCell *cell, for (const Corner *corner : *corners) { for (auto min_max : MinMax::range()) { if (!cell->checkCornerCell(corner, min_max)) - report->error(705, "Liberty cell %s/%s for corner %s/%s not found.", + report->error(1112, "Liberty cell %s/%s for corner %s/%s not found.", cell->libertyLibrary()->name(), cell->name(), corner->name(), @@ -1745,7 +1745,7 @@ LibertyCell::makeLatchEnables(Report *report, RiseFall *en_rf = latch_enable->enableEdge(); RiseFall *check_rf = check_arc->fromEdge()->asRiseFall(); if (check_rf == en_rf) - report->warn(4, "cell %s/%s %s -> %s latch enable %s_edge is inconsistent with %s -> %s setup_%s check.", + report->warn(1113, "cell %s/%s %s -> %s latch enable %s_edge is inconsistent with %s -> %s setup_%s check.", library_->name(), name_, en->name(), @@ -1759,7 +1759,7 @@ LibertyCell::makeLatchEnables(Report *report, TimingSense en_sense = en_func->portTimingSense(en); if (en_sense == TimingSense::positive_unate && en_rf != RiseFall::rise()) - report->warn(5, "cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function positive sense.", + report->warn(1114, "cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function positive sense.", library_->name(), name_, en->name(), @@ -1767,7 +1767,7 @@ LibertyCell::makeLatchEnables(Report *report, en_rf == RiseFall::rise()?"rising":"falling"); else if (en_sense == TimingSense::negative_unate && en_rf != RiseFall::fall()) - report->warn(6, "cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function negative sense.", + report->warn(1115, "cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function negative sense.", library_->name(), name_, en->name(), diff --git a/liberty/LibertyExpr.cc b/liberty/LibertyExpr.cc index a551c907..8c7cd407 100644 --- a/liberty/LibertyExpr.cc +++ b/liberty/LibertyExpr.cc @@ -79,7 +79,7 @@ LibExprParser::makeFuncExprPort(const char *port_name) if (port) expr = FuncExpr::makePort(port); else - report_->warn(7, "%s references unknown port %s.", + report_->warn(1130, "%s references unknown port %s.", error_msg_, port_name); stringDelete(port_name); return expr; @@ -172,7 +172,7 @@ LibExprParser::tokenAppend(char ch) void LibExprParser::parseError(const char *msg) { - report_->error(206, "%s %s.", error_msg_, msg); + report_->error(1131, "%s %s.", error_msg_, msg); } } // namespace diff --git a/liberty/LibertyReader.cc b/liberty/LibertyReader.cc index a5350d7a..a636349a 100644 --- a/liberty/LibertyReader.cc +++ b/liberty/LibertyReader.cc @@ -595,7 +595,7 @@ LibertyReader::beginLibrary(LibertyGroup *group) if (name) { LibertyLibrary *library = network_->findLiberty(name); if (library) - libWarn(53, group, "library %s already exists.", name); + libWarn(1140, group, "library %s already exists.", name); // Make a new library even if a library with the same name exists. // Both libraries may be accessed by min/max analysis points. library_ = network_->makeLibertyLibrary(name, filename_); @@ -629,7 +629,7 @@ LibertyReader::beginLibrary(LibertyGroup *group) library_->setScaleFactors(scale_factors_); } else - libError(30, group, "library missing name."); + libError(1141, group, "library missing name."); } // Energy scale is derived. @@ -655,7 +655,7 @@ LibertyReader::endLibraryAttrs(LibertyGroup *group) if (wireload) library_->setDefaultWireload(wireload); else - libWarn(31, group, "default_wire_load %s not found.", default_wireload_); + libWarn(1142, group, "default_wire_load %s not found.", default_wireload_); stringDelete(default_wireload_); default_wireload_ = nullptr; } @@ -666,7 +666,7 @@ LibertyReader::endLibraryAttrs(LibertyGroup *group) if (selection) library_->setDefaultWireloadSelection(selection); else - libWarn(32, group, "default_wire_selection %s not found.", + libWarn(1143, group, "default_wire_selection %s not found.", default_wireload_selection_); stringDelete(default_wireload_selection_); default_wireload_selection_ = nullptr; @@ -678,7 +678,7 @@ LibertyReader::endLibraryAttrs(LibertyGroup *group) if (op_cond) library_->setDefaultOperatingConditions(op_cond); else - libWarn(60, group, "default_operating_condition %s not found.", + libWarn(1144, group, "default_operating_condition %s not found.", default_operating_condition_); stringDelete(default_operating_condition_); default_operating_condition_ = nullptr; @@ -688,24 +688,24 @@ LibertyReader::endLibraryAttrs(LibertyGroup *group) for (auto tr : RiseFall::range()) { int tr_index = tr->index(); if (!have_input_threshold_[tr_index]) { - libWarn(33, group, "input_threshold_pct_%s not found.", tr->name()); + libWarn(1145, group, "input_threshold_pct_%s not found.", tr->name()); missing_threshold = true; } if (!have_output_threshold_[tr_index]) { - libWarn(34, group, "output_threshold_pct_%s not found.", tr->name()); + libWarn(1146, group, "output_threshold_pct_%s not found.", tr->name()); missing_threshold = true; } if (!have_slew_lower_threshold_[tr_index]) { - libWarn(35, group, "slew_lower_threshold_pct_%s not found.", tr->name()); + libWarn(1147, group, "slew_lower_threshold_pct_%s not found.", tr->name()); missing_threshold = true; } if (!have_slew_upper_threshold_[tr_index]) { - libWarn(36, group, "slew_upper_threshold_pct_%s not found.", tr->name()); + libWarn(1148, group, "slew_upper_threshold_pct_%s not found.", tr->name()); missing_threshold = true; } } if (missing_threshold) - libError(37, group, "Library %s is missing one or more thresholds.", + libError(1149, group, "Library %s is missing one or more thresholds.", library_->name()); } @@ -784,7 +784,7 @@ LibertyReader::parseUnits(LibertyAttr *attr, else if (unit_mult == "100") mult = 100.0F; else - libWarn(38, attr, "unknown unit multiplier %s.", unit_mult.c_str()); + libWarn(1150, attr, "unknown unit multiplier %s.", unit_mult.c_str()); } else scale_suffix = units; @@ -807,13 +807,13 @@ LibertyReader::parseUnits(LibertyAttr *attr, else if (scale_char == 'f') scale_mult = 1E-15F; else - libWarn(39, attr, "unknown unit scale %c.", scale_char); + libWarn(1151, attr, "unknown unit scale %c.", scale_char); } else - libWarn(40, attr, "unknown unit suffix %s.", suffix.c_str()); + libWarn(1152, attr, "unknown unit suffix %s.", suffix.c_str()); } else if (!stringEqual(scale_suffix.c_str(), unit_suffix)) - libWarn(171, attr, "unknown unit suffix %s.", scale_suffix.c_str()); + libWarn(1153, attr, "unknown unit suffix %s.", scale_suffix.c_str()); scale_var = scale_mult * mult; unit->setScale(scale_var); } @@ -838,22 +838,22 @@ LibertyReader::visitCapacitiveLoadUnit(LibertyAttr *attr) else if (stringEqual(suffix, "pf")) cap_scale_ = scale * 1E-12F; else - libWarn(41, attr, "capacitive_load_units are not ff or pf."); + libWarn(1154, attr, "capacitive_load_units are not ff or pf."); } else - libWarn(42, attr, "capacitive_load_units are not a string."); + libWarn(1155, attr, "capacitive_load_units are not a string."); } else - libWarn(43, attr, "capacitive_load_units missing suffix."); + libWarn(1156, attr, "capacitive_load_units missing suffix."); } else - libWarn(44, attr, "capacitive_load_units scale is not a float."); + libWarn(1157, attr, "capacitive_load_units scale is not a float."); } else - libWarn(45, attr, "capacitive_load_units missing scale and suffix."); + libWarn(1158, attr, "capacitive_load_units missing scale and suffix."); } else - libWarn(46, attr, "capacitive_load_unit missing values suffix."); + libWarn(1159, attr, "capacitive_load_unit missing values suffix."); library_->units()->capacitanceUnit()->setScale(cap_scale_); setEnergyScale(); } @@ -871,23 +871,23 @@ LibertyReader::visitDelayModel(LibertyAttr *attr) library_->setDelayModelType(DelayModelType::cmos_linear); else if (stringEq(type_name, "piecewise_cmos")) { library_->setDelayModelType(DelayModelType::cmos_pwl); - libWarn(47, attr, "delay_model %s not supported.", type_name); + libWarn(1160, attr, "delay_model %s not supported.", type_name); } else if (stringEq(type_name, "cmos2")) { library_->setDelayModelType(DelayModelType::cmos2); - libWarn(48, attr, "delay_model %s not supported.", type_name); + libWarn(1161, attr, "delay_model %s not supported.", type_name); } else if (stringEq(type_name, "polynomial")) { library_->setDelayModelType(DelayModelType::polynomial); - libWarn(49, attr, "delay_model %s not supported.", type_name); + libWarn(1162, attr, "delay_model %s not supported.", type_name); } // Evil IBM garbage. else if (stringEq(type_name, "dcm")) { library_->setDelayModelType(DelayModelType::dcm); - libWarn(50, attr, "delay_model %s not supported.\n.", type_name); + libWarn(1163, attr, "delay_model %s not supported.\n.", type_name); } else - libWarn(51, attr, "unknown delay_model %s\n.", type_name); + libWarn(1164, attr, "unknown delay_model %s\n.", type_name); } } } @@ -906,7 +906,7 @@ LibertyReader::visitBusStyle(LibertyAttr *attr) && bus_style[4] == 'd') library_->setBusBrkts(bus_style[2], bus_style[5]); else - libWarn(52, attr, "unknown bus_naming_style format."); + libWarn(1165, attr, "unknown bus_naming_style format."); } } @@ -927,19 +927,19 @@ LibertyReader::visitVoltageMap(LibertyAttr *attr) library_->addSupplyVoltage(supply_name, voltage); } else - libWarn(54, attr, "voltage_map voltage is not a float."); + libWarn(1166, attr, "voltage_map voltage is not a float."); } else - libWarn(55, attr, "voltage_map missing voltage."); + libWarn(1167, attr, "voltage_map missing voltage."); } else - libWarn(56, attr, "voltage_map supply name is not a string."); + libWarn(1168, attr, "voltage_map supply name is not a string."); } else - libWarn(57, attr, "voltage_map missing supply name and voltage."); + libWarn(1169, attr, "voltage_map missing supply name and voltage."); } else - libWarn(58, attr, "voltage_map missing values suffix."); + libWarn(1170, attr, "voltage_map missing values suffix."); } } @@ -1024,7 +1024,7 @@ LibertyReader::visitDefaultMaxTransition(LibertyAttr *attr) getAttrFloat(attr, value, exists); if (exists) { if (value == 0.0) - libWarn(160, attr, "default_max_transition is 0.0."); + libWarn(1171, attr, "default_max_transition is 0.0."); library_->setDefaultMaxSlew(value * time_scale_); } } @@ -1039,7 +1039,7 @@ LibertyReader::visitDefaultMaxFanout(LibertyAttr *attr) getAttrFloat(attr, value, exists); if (exists) { if (value == 0.0) - libWarn(16, attr, "default_max_fanout is 0.0."); + libWarn(1172, attr, "default_max_fanout is 0.0."); library_->setDefaultMaxFanout(value); } } @@ -1129,7 +1129,7 @@ LibertyReader::visitDefaultFanoutLoad(LibertyAttr *attr) getAttrFloat(attr, value, exists); if (exists) { if (value == 0.0) - libWarn(163, attr, "default_fanout_load is 0.0."); + libWarn(1173, attr, "default_fanout_load is 0.0."); library_->setDefaultFanoutLoad(value); } } @@ -1157,7 +1157,7 @@ LibertyReader::visitDefaultWireLoadMode(LibertyAttr *attr) if (mode != WireloadMode::unknown) library_->setDefaultWireloadMode(mode); else - libWarn(59, attr, "default_wire_load_mode %s not found.", + libWarn(1174, attr, "default_wire_load_mode %s not found.", wire_load_mode); } } @@ -1328,7 +1328,7 @@ LibertyReader::beginTableTemplate(LibertyGroup *group, library_->addTableTemplate(tbl_template_, type); } else - libWarn(61, group, "table template missing name."); + libWarn(1175, group, "table template missing name."); axis_var_[0] = axis_var_[1] = axis_var_[2] = TableAxisVariable::unknown; clearAxisValues(); } @@ -1373,7 +1373,7 @@ LibertyReader::makeAxis(int index, return make_shared(axis_var, axis_values); } else if (axis_values) { - libWarn(62, group, "missing variable_%d attribute.", index + 1); + libWarn(1176, group, "missing variable_%d attribute.", index + 1); delete axis_values; axis_values_[index] = nullptr; } @@ -1415,7 +1415,7 @@ LibertyReader::visitVariable(int index, const char *type = getAttrString(attr); TableAxisVariable var = stringTableAxisVariable(type); if (var == TableAxisVariable::unknown) - libWarn(63, attr, "axis type %s not supported.", type); + libWarn(1297, attr, "axis type %s not supported.", type); else axis_var_[index] = var; } @@ -1449,13 +1449,13 @@ LibertyReader::visitIndex(int index, FloatSeq *axis_values = readFloatSeq(attr, 1.0F); if (axis_values) { if (axis_values->empty()) - libWarn(172, attr, "missing table index values."); + libWarn(1177, attr, "missing table index values."); else { float prev = (*axis_values)[0]; for (size_t i = 1; i < axis_values->size(); i++) { float value = (*axis_values)[i]; if (value <= prev) - libWarn(173, attr, "non-increasing table index values."); + libWarn(1178, attr, "non-increasing table index values."); prev = value; } } @@ -1487,13 +1487,13 @@ LibertyReader::endType(LibertyGroup *group) } else { if (!type_bit_from_exists_) - libWarn(64, group, "bus type %s missing bit_from.", name); + libWarn(1179, group, "bus type %s missing bit_from.", name); if (!type_bit_to_exists_) - libWarn(65, group, "bus type %s missing bit_to.", name); + libWarn(1180, group, "bus type %s missing bit_to.", name); } } else - libWarn(66, group, "type missing name."); + libWarn(1181, group, "type missing name."); } void @@ -1520,7 +1520,7 @@ LibertyReader::beginScalingFactors(LibertyGroup *group) library_->addScaleFactors(scale_factors_); } else - libWarn(67, group, "scaling_factors do not have a name."); + libWarn(1182, group, "scaling_factors do not have a name."); } void @@ -1689,7 +1689,7 @@ LibertyReader::beginOpCond(LibertyGroup *group) library_->addOperatingConditions(op_cond_); } else - libWarn(68, group, "operating_conditions missing name."); + libWarn(1183, group, "operating_conditions missing name."); } } @@ -1760,7 +1760,7 @@ LibertyReader::beginWireload(LibertyGroup *group) } } else - libWarn(69, group, "wire_load missing name."); + libWarn(1184, group, "wire_load missing name."); } void @@ -1803,7 +1803,7 @@ LibertyReader::visitFanoutLength(LibertyAttr *attr) if (exists) wireload_->addFanoutLength(fanout, length); else - libWarn(70, attr, "fanout_length is missing length and fanout."); + libWarn(1185, attr, "fanout_length is missing length and fanout."); } } @@ -1818,7 +1818,7 @@ LibertyReader::beginWireloadSelection(LibertyGroup *group) } } else - libWarn(71, group, "wire_load_selection missing name."); + libWarn(1186, group, "wire_load_selection missing name."); } void @@ -1849,23 +1849,23 @@ LibertyReader::visitWireloadFromArea(LibertyAttr *attr) wireload_selection_->addWireloadFromArea(min_area, max_area, wireload); else - libWarn(72, attr, "wireload %s not found.", wireload_name); + libWarn(1187, attr, "wireload %s not found.", wireload_name); } else - libWarn(73, attr, + libWarn(1188, attr, "wire_load_from_area wireload name not a string."); } else - libWarn(74, attr, "wire_load_from_area min not a float."); + libWarn(1189, attr, "wire_load_from_area min not a float."); } else - libWarn(75, attr, "wire_load_from_area max not a float."); + libWarn(1190, attr, "wire_load_from_area max not a float."); } else - libWarn(76, attr, "wire_load_from_area missing parameters."); + libWarn(1191, attr, "wire_load_from_area missing parameters."); } else - libWarn(77, attr, "wire_load_from_area missing parameters."); + libWarn(1192, attr, "wire_load_from_area missing parameters."); } } @@ -1884,7 +1884,7 @@ LibertyReader::beginCell(LibertyGroup *group) } } else - libWarn(78, group, "cell missing name."); + libWarn(1193, group, "cell missing name."); } void @@ -1907,7 +1907,7 @@ LibertyReader::endCell(LibertyGroup *group) if (derate) cell_->setOcvDerate(derate); else - libWarn(79, group, "cell %s ocv_derate_group %s not found.", + libWarn(1194, group, "cell %s ocv_derate_group %s not found.", cell_->name(), ocv_derate_name_); stringDelete(ocv_derate_name_); ocv_derate_name_ = nullptr; @@ -1938,7 +1938,7 @@ LibertyReader::checkPort(LibertyPort *port, FuncExpr *func_expr = port->function(); if (func_expr) { if (func_expr->checkSize(port)) { - libWarn(80, line, "port %s function size does not match port size.", + libWarn(1195, line, "port %s function size does not match port size.", port->name()); } } @@ -1994,7 +1994,7 @@ LibertyReader::makeCellSequential(SequentialGroup *seq) const char *clk_attr = is_register ? "clocked_on" : "enable"; clk_expr = parseFunc(clk, clk_attr, line); if (clk_expr && clk_expr->checkSize(size)) { - libWarn(81, line, "%s %s bus width mismatch.", type, clk_attr); + libWarn(1196, line, "%s %s bus width mismatch.", type, clk_attr); clk_expr->deleteSubexprs(); clk_expr = nullptr; } @@ -2005,7 +2005,7 @@ LibertyReader::makeCellSequential(SequentialGroup *seq) const char *data_attr = is_register ? "next_state" : "data_in"; data_expr = parseFunc(data, data_attr, line); if (data_expr && data_expr->checkSize(size)) { - libWarn(82, line, "%s %s bus width mismatch.", type, data_attr); + libWarn(1197, line, "%s %s bus width mismatch.", type, data_attr); data_expr->deleteSubexprs(); data_expr = nullptr; } @@ -2015,7 +2015,7 @@ LibertyReader::makeCellSequential(SequentialGroup *seq) if (clr) { clr_expr = parseFunc(clr, "clear", line); if (clr_expr && clr_expr->checkSize(size)) { - libWarn(83, line, "%s %s bus width mismatch.", type, "clear"); + libWarn(1198, line, "%s %s bus width mismatch.", type, "clear"); clr_expr->deleteSubexprs(); clr_expr = nullptr; } @@ -2025,7 +2025,7 @@ LibertyReader::makeCellSequential(SequentialGroup *seq) if (preset) { preset_expr = parseFunc(preset, "preset", line); if (preset_expr && preset_expr->checkSize(size)) { - libWarn(84, line, "%s %s bus width mismatch.", type, "preset"); + libWarn(1199, line, "%s %s bus width mismatch.", type, "preset"); preset_expr->deleteSubexprs(); preset_expr = nullptr; } @@ -2061,12 +2061,12 @@ LibertyReader::checkLatchEnableSense(FuncExpr *enable_func, case TimingSense::negative_unate: break; case TimingSense::non_unate: - libWarn(85, line, "latch enable function is non-unate for port %s.", + libWarn(1200, line, "latch enable function is non-unate for port %s.", enable_port->name()); break; case TimingSense::none: case TimingSense::unknown: - libWarn(86, line, "latch enable function is unknown for port %s.", + libWarn(1201, line, "latch enable function is unknown for port %s.", enable_port->name()); break; } @@ -2138,16 +2138,16 @@ LibertyReader::beginScaledCell(LibertyGroup *group) cell_ = library_->makeScaledCell(name, filename_); } else - libWarn(87, group, "operating conditions %s not found.", op_cond_name); + libWarn(1202, group, "operating conditions %s not found.", op_cond_name); } else - libWarn(88, group, "scaled_cell missing operating condition."); + libWarn(1203, group, "scaled_cell missing operating condition."); } else - libWarn(89, group, "scaled_cell cell %s has not been defined.", name); + libWarn(1204, group, "scaled_cell cell %s has not been defined.", name); } else - libWarn(90, group, "scaled_cell missing name."); + libWarn(1205, group, "scaled_cell missing name."); } void @@ -2173,14 +2173,14 @@ LibertyReader::checkScaledCell(LibertyGroup *group) { if (equivCellPorts(cell_, scaled_cell_owner_)) { if (!equivCellPortsAndFuncs(cell_, scaled_cell_owner_)) - libWarn(91, group, "scaled_cell %s, %s port functions do not match cell port functions.", + libWarn(1206, group, "scaled_cell %s, %s port functions do not match cell port functions.", cell_->name(), op_cond_->name()); } else - libWarn(92, group, "scaled_cell ports do not match cell ports."); + libWarn(1207, group, "scaled_cell ports do not match cell ports."); if (!equivCellTimingArcSets(cell_, scaled_cell_owner_)) - libWarn(93, group, "scaled_cell %s, %s timing does not match cell timing.", + libWarn(1208, group, "scaled_cell %s, %s timing does not match cell timing.", cell_->name(), op_cond_->name()); } @@ -2199,7 +2199,7 @@ LibertyReader::makeTimingArcs(LibertyPort *to_port, TimingType type = timing->attrs()->timingType(); if (type == TimingType::combinational && to_port_dir->isInput()) - libWarn(94, line, "combinational timing to an input port."); + libWarn(1209, line, "combinational timing to an input port."); if (timing->relatedPortNames()) { for (const char *from_port_name : *timing->relatedPortNames()) { PortNameBitIterator from_port_iter(cell_, from_port_name, this, line); @@ -2294,9 +2294,9 @@ TimingGroup::makeTableModels(LibertyCell *cell, || timing_type == TimingType::three_state_enable_fall || timing_type == TimingType::three_state_enable_rise) { if (transition == nullptr) - reader->libWarn(95, line_, "missing %s_transition.", rf->name()); + reader->libWarn(1210, line_, "missing %s_transition.", rf->name()); if (delay == nullptr) - reader->libWarn(96, line_, "missing cell_%s.", rf->name()); + reader->libWarn(1211, line_, "missing cell_%s.", rf->name()); } } else if (constraint) attrs_->setModel(rf, new CheckTableModel(cell, constraint, @@ -2316,7 +2316,7 @@ LibertyReader::makeTimingArcs(const char *from_port_name, if (from_port_iter.hasNext()) { LibertyPort *from_port = from_port_iter.next(); if (from_port->direction()->isOutput()) - libWarn(164, timing->line(), "timing group from output port."); + libWarn(1212, timing->line(), "timing group from output port."); builder_.makeTimingArcs(cell_, from_port, to_port, related_out_port, timing->attrs(), timing->line()); } @@ -2326,7 +2326,7 @@ LibertyReader::makeTimingArcs(const char *from_port_name, while (from_port_iter.hasNext()) { LibertyPort *from_port = from_port_iter.next(); if (from_port->direction()->isOutput()) - libWarn(165, timing->line(), "timing group from output port."); + libWarn(1213, timing->line(), "timing group from output port."); builder_.makeTimingArcs(cell_, from_port, to_port, related_out_port, timing->attrs(), timing->line()); } @@ -2336,7 +2336,7 @@ LibertyReader::makeTimingArcs(const char *from_port_name, if (from_port_iter.hasNext()) { LibertyPort *from_port = from_port_iter.next(); if (from_port->direction()->isOutput()) - libWarn(166, timing->line(), "timing group from output port."); + libWarn(1214, timing->line(), "timing group from output port."); LibertyPortMemberIterator bit_iter(to_port); while (bit_iter.hasNext()) { LibertyPort *to_port_bit = bit_iter.next(); @@ -2354,14 +2354,14 @@ LibertyReader::makeTimingArcs(const char *from_port_name, LibertyPort *from_port_bit = from_port_iter.next(); LibertyPort *to_port_bit = to_iter.next(); if (from_port_bit->direction()->isOutput()) - libWarn(167, timing->line(), "timing group from output port."); + libWarn(1215, timing->line(), "timing group from output port."); builder_.makeTimingArcs(cell_, from_port_bit, to_port_bit, related_out_port, timing->attrs(), timing->line()); } } else - libWarn(97, timing->line(), + libWarn(1216, timing->line(), "timing port %s and related port %s are different sizes.", from_port_name, to_port->name()); @@ -2370,7 +2370,7 @@ LibertyReader::makeTimingArcs(const char *from_port_name, while (from_port_iter.hasNext()) { LibertyPort *from_port_bit = from_port_iter.next(); if (from_port_bit->direction()->isOutput()) - libWarn(168, timing->line(), "timing group from output port."); + libWarn(1217, timing->line(), "timing group from output port."); LibertyPortMemberIterator to_iter(to_port); while (to_iter.hasNext()) { LibertyPort *to_port_bit = to_iter.next(); @@ -2457,7 +2457,7 @@ LibertyReader::beginReceiverCapacitance(LibertyGroup *group, index_ = index; } else - libWarn(904, group, "receiver_capacitance group not in timing or pin group."); + libWarn(1218, group, "receiver_capacitance group not in timing or pin group."); } void @@ -2474,7 +2474,7 @@ LibertyReader::endReceiverCapacitanceRiseFall(LibertyGroup *group) receiver_model_->setCapacitanceModel(table_model, index_, rf_); } else - libWarn(902, group, "unsupported model axis."); + libWarn(1219, group, "unsupported model axis."); } endTableModel(); } @@ -2502,7 +2502,7 @@ LibertyReader::beginOutputCurrent(RiseFall *rf, output_currents_.clear(); } else - libWarn(907, group, "output_current_%s group not in timing group.", + libWarn(1220, group, "output_current_%s group not in timing group.", rf->name()); } @@ -2543,7 +2543,7 @@ LibertyReader::endOutputCurrentRiseFall(LibertyGroup *group) (*ref_times)[slew_index] = waveform->referenceTime(); } else - libWarn(913, group, "output current waveform %.2e %.2e not found.", + libWarn(1221, group, "output current waveform %.2e %.2e not found.", waveform->slew(), waveform->cap()); } @@ -2563,7 +2563,7 @@ LibertyReader::beginVector(LibertyGroup *group) scale_factor_type_ = ScaleFactorType::unknown; reference_time_exists_ = false; if (tbl_template_ && !OutputWaveforms::checkAxes(tbl_template_)) - libWarn(118, group, "unsupported model axis."); + libWarn(1222, group, "unsupported model axis."); } } @@ -2605,9 +2605,9 @@ LibertyReader::endVector(LibertyGroup *group) output_currents_.push_back(waveform); } else - libWarn(912,group->line(), "vector index_1 and index_2 must have exactly one value."); + libWarn(1223,group->line(), "vector index_1 and index_2 must have exactly one value."); if (!reference_time_exists_) - libWarn(908, group->line(), "vector reference_time not found."); + libWarn(1224, group->line(), "vector reference_time not found."); reference_time_exists_ = false; } } @@ -2640,10 +2640,10 @@ LibertyReader::endNormalizedDriverWaveform(LibertyGroup *group) } else - libWarn(914, group, "normalized_driver_waveform variable_2 must be normalized_voltage"); + libWarn(1225, group, "normalized_driver_waveform variable_2 must be normalized_voltage"); } else - libWarn(915, group, "normalized_driver_waveform variable_1 must be input_net_transition"); + libWarn(1226, group, "normalized_driver_waveform variable_1 must be input_net_transition"); } endTableModel(); } @@ -2748,7 +2748,7 @@ LibertyReader::makeInternalPowers(LibertyPort *port, } } else - libWarn(98, power_group->line(), + libWarn(1227, power_group->line(), "internal_power port %s and related port %s are different sizes.", related_port_name, port->name()); @@ -2865,7 +2865,7 @@ LibertyReader::visitLevelShifterType(LibertyAttr *attr) else if (stringEq(level_shifter_type, "HL_LH")) cell_->setLevelShifterType(LevelShifterType::HL_LH); else - libWarn(900, attr, "level_shifter_type must be HL, LH, or HL_LH"); + libWarn(1228, attr, "level_shifter_type must be HL, LH, or HL_LH"); } } @@ -2901,7 +2901,7 @@ LibertyReader::visitSwitchCellType(LibertyAttr *attr) else if (stringEq(switch_cell_type, "fine_grain")) cell_->setSwitchCellType(SwitchCellType::fine_grain); else - libWarn(901, attr, "switch_cell_type must be coarse_grain or fine_grain"); + libWarn(1229, attr, "switch_cell_type must be coarse_grain or fine_grain"); } } @@ -2925,7 +2925,7 @@ LibertyReader::visitScalingFactors(LibertyAttr *attr) if (scales) cell_->setScaleFactors(scales); else - libWarn(99, attr, "scaling_factors %s not found.", scale_factors_name); + libWarn(1230, attr, "scaling_factors %s not found.", scale_factors_name); } } @@ -2966,7 +2966,7 @@ LibertyReader::beginPin(LibertyGroup *group) } } else - libWarn(100, group, "pin name is not a string."); + libWarn(1231, group, "pin name is not a string."); } } else if (in_bundle_) { @@ -2983,7 +2983,7 @@ LibertyReader::beginPin(LibertyGroup *group) ports_->push_back(port); } else - libWarn(101, group, "pin name is not a string."); + libWarn(1232, group, "pin name is not a string."); } } else { @@ -2997,7 +2997,7 @@ LibertyReader::beginPin(LibertyGroup *group) ports_->push_back(port); } else - libWarn(102, group, "pin name is not a string."); + libWarn(1233, group, "pin name is not a string."); } } port_group_ = new PortGroup(ports_, group->line()); @@ -3075,7 +3075,7 @@ LibertyReader::endBus(LibertyGroup *group) { if (cell_) { if (ports_->empty()) - libWarn(103, group, "bus %s bus_type not found.", group->firstName()); + libWarn(1234, group, "bus %s bus_type not found.", group->firstName()); endBusOrBundle(); in_bus_ = false; } @@ -3127,10 +3127,10 @@ LibertyReader::visitBusType(LibertyAttr *attr) } } else - libWarn(104, attr, "bus_type %s not found.", bus_type); + libWarn(1235, attr, "bus_type %s not found.", bus_type); } else - libWarn(105, attr, "bus_type is not a string."); + libWarn(1236, attr, "bus_type is not a string."); } } @@ -3148,7 +3148,7 @@ LibertyReader::endBundle(LibertyGroup *group) { if (cell_) { if (ports_->empty()) - libWarn(106, group, "bundle %s member not found.", group->firstName()); + libWarn(1237, group, "bundle %s member not found.", group->firstName()); endBusOrBundle(); in_bundle_ = false; } @@ -3171,14 +3171,14 @@ LibertyReader::visitMembers(LibertyAttr *attr) members->push_back(port); } else - libWarn(107, attr, "member is not a string."); + libWarn(1238, attr, "member is not a string."); } LibertyPort *port = builder_.makeBundlePort(cell_, name, members); ports_->push_back(port); } } else - libWarn(108, attr,"members attribute is missing values."); + libWarn(1239, attr,"members attribute is missing values."); } } @@ -3229,7 +3229,7 @@ LibertyReader::visitDirection(LibertyAttr *attr) else if (stringEq(dir, "internal")) port_dir = PortDirection::internal(); else - libWarn(109, attr, "unknown port direction."); + libWarn(1240, attr, "unknown port direction."); for (LibertyPort *port : *ports_) { // Tristate enable function sets direction to tristate; don't @@ -3463,7 +3463,7 @@ LibertyReader::visitMinMaxTransition(LibertyAttr *attr, MinMax *min_max) getAttrFloat(attr, value, exists); if (exists) { if (min_max == MinMax::max() && value == 0.0) - libWarn(161, attr, "max_transition is 0.0."); + libWarn(1241, attr, "max_transition is 0.0."); value *= time_scale_; visitPorts([&] (LibertyPort *port) { port->setSlewLimit(value, min_max); @@ -3569,7 +3569,7 @@ LibertyReader::visitPulseClock(LibertyAttr *attr) sense = RiseFall::fall(); } else - libWarn(110,attr, "pulse_latch unknown pulse type."); + libWarn(1242,attr, "pulse_latch unknown pulse type."); if (trigger) { for (LibertyPort *port : *ports_) port->setPulseClk(trigger, sense); @@ -3858,7 +3858,7 @@ LibertyReader::endTiming(LibertyGroup *group) if (timing_->relatedPortNames() == nullptr && !(timing_type == TimingType::min_clock_tree_path || timing_type == TimingType::max_clock_tree_path)) - libWarn(170, group, "timing group missing related_pin/related_bus_pin."); + libWarn(1243, group, "timing group missing related_pin/related_bus_pin."); } timing_ = nullptr; receiver_model_ = nullptr; @@ -3939,7 +3939,7 @@ LibertyReader::visitTimingType(LibertyAttr *attr) if (type_name) { TimingType type = findTimingType(type_name); if (type == TimingType::unknown) - libWarn(111, attr, "unknown timing_type %s.", type_name); + libWarn(1244, attr, "unknown timing_type %s.", type_name); else timing_->attrs()->setTimingType(type); } @@ -3959,7 +3959,7 @@ LibertyReader::visitTimingSense(LibertyAttr *attr) else if (stringEq(sense_name, "negative_unate")) timing_->attrs()->setTimingSense(TimingSense::negative_unate); else - libWarn(112, attr, "unknown timing_sense %s.", sense_name); + libWarn(1245, attr, "unknown timing_sense %s.", sense_name); } } } @@ -3999,19 +3999,19 @@ LibertyReader::visitMode(LibertyAttr *attr) if (value->isString()) timing_->attrs()->setModeValue(value->stringValue()); else - libWarn(113, attr, "mode value is not a string."); + libWarn(1246, attr, "mode value is not a string."); } else - libWarn(114, attr, "missing mode value."); + libWarn(1247, attr, "missing mode value."); } else - libWarn(115, attr, "mode name is not a string."); + libWarn(1248, attr, "mode name is not a string."); } else - libWarn(116, attr, "mode missing values."); + libWarn(1249, attr, "mode missing values."); } else - libWarn(117, attr, "mode missing mode name and value."); + libWarn(1250, attr, "mode missing mode name and value."); } } @@ -4087,7 +4087,7 @@ LibertyReader::endCellRiseFall(LibertyGroup *group) timing_->setCell(rf_, table_model); } else - libWarn(906, group, "unsupported model axis."); + libWarn(1251, group, "unsupported model axis."); } endTableModel(); } @@ -4114,7 +4114,7 @@ LibertyReader::endRiseFallTransition(LibertyGroup *group) timing_->setTransition(rf_, table_model); } else - libWarn(119, group, "unsupported model axis."); + libWarn(1252, group, "unsupported model axis."); } endTableModel(); } @@ -4143,7 +4143,7 @@ LibertyReader::endRiseFallConstraint(LibertyGroup *group) timing_->setConstraint(rf_, table_model); } else - libWarn(120, group, "unsupported model axis."); + libWarn(1253, group, "unsupported model axis."); } endTableModel(); } @@ -4178,7 +4178,7 @@ LibertyReader::endRiseFallTransitionDegredation(LibertyGroup *group) library_->setWireSlewDegradationTable(table_model, rf_); } else - libWarn(121, group, "unsupported model axis."); + libWarn(1254, group, "unsupported model axis."); } endTableModel(); } @@ -4194,7 +4194,7 @@ LibertyReader::beginTimingTableModel(LibertyGroup *group, beginTableModel(group, TableTemplateType::delay, rf, time_scale_, scale_factor_type); else - libWarn(903, group, "%s group not in timing group.", group->firstName()); + libWarn(1255, group, "%s group not in timing group.", group->firstName()); } void @@ -4233,7 +4233,7 @@ LibertyReader::beginTable(LibertyGroup *group, axis_[2] = tbl_template_->axis3ptr(); } else { - libWarn(122, group, "table template %s not found.", template_name); + libWarn(1256, group, "table template %s not found.", template_name); axis_[0] = nullptr; axis_[1] = nullptr; axis_[2] = nullptr; @@ -4317,7 +4317,7 @@ LibertyReader::makeTable(LibertyAttr *attr, } } else - libWarn(123, attr, "%s is missing values.", attr->name()); + libWarn(1257, attr, "%s is missing values.", attr->name()); } FloatTable * @@ -4340,9 +4340,9 @@ LibertyReader::makeFloatTable(LibertyAttr *attr, // Scalar value. row->push_back(value->floatValue() * scale); else - libWarn(124, attr, "%s is not a list of floats.", attr->name()); + libWarn(1258, attr, "%s is not a list of floats.", attr->name()); if (row->size() != cols) { - libWarn(125, attr, "table row has %u columns but axis has %d.", + libWarn(1259, attr, "table row has %u columns but axis has %d.", // size_t is long on 64 bit ports. static_cast(row->size()), static_cast(cols)); @@ -4352,7 +4352,7 @@ LibertyReader::makeFloatTable(LibertyAttr *attr, } } if (table->size() != rows) { - libWarn(126, attr, "table has %u rows but axis has %d.", + libWarn(1260, attr, "table has %u rows but axis has %d.", // size_t is long on 64 bit ports. static_cast(table->size()), static_cast(rows)); @@ -4403,7 +4403,7 @@ LibertyReader::beginLut(LibertyGroup *group) } } else - libWarn(127, group, "lut output is not a string."); + libWarn(1261, group, "lut output is not a string."); } } } @@ -4420,7 +4420,7 @@ void LibertyReader::beginTestCell(LibertyGroup *group) { if (cell_ && cell_->testCell()) - libWarn(169, group, "cell %s test_cell redefinition.", cell_->name()); + libWarn(1262, group, "cell %s test_cell redefinition.", cell_->name()); else { test_cell_ = new TestCell; cell_->setTestCell(test_cell_); @@ -4445,7 +4445,7 @@ LibertyReader::beginModeDef(LibertyGroup *group) if (name) mode_def_ = cell_->makeModeDef(name); else - libWarn(128, group, "mode definition missing name."); + libWarn(1263, group, "mode definition missing name."); } void @@ -4462,7 +4462,7 @@ LibertyReader::beginModeValue(LibertyGroup *group) if (name) mode_value_ = mode_def_->defineValue(name, nullptr, nullptr); else - libWarn(129, group, "mode value missing name."); + libWarn(1264, group, "mode value missing name."); } } @@ -4476,7 +4476,7 @@ void LibertyReader::visitWhen(LibertyAttr *attr) { if (tbl_template_) - libWarn(130, attr, "when attribute inside table model."); + libWarn(1265, attr, "when attribute inside table model."); if (mode_value_) { const char *func = getAttrString(attr); if (func) @@ -4525,10 +4525,10 @@ LibertyReader::getAttrString(LibertyAttr *attr) if (value->isString()) return value->stringValue(); else - libWarn(131, attr, "%s attribute is not a string.", attr->name()); + libWarn(1266, attr, "%s attribute is not a string.", attr->name()); } else - libWarn(132, attr, "%s is not a simple attribute.", attr->name()); + libWarn(1267, attr, "%s is not a simple attribute.", attr->name()); return nullptr; } @@ -4548,10 +4548,10 @@ LibertyReader::getAttrInt(LibertyAttr *attr, exists = true; } else - libWarn(162, attr, "%s attribute is not an integer.",attr->name()); + libWarn(1268, attr, "%s attribute is not an integer.",attr->name()); } else - libWarn(133, attr, "%s is not a simple attribute.", attr->name()); + libWarn(1269, attr, "%s is not a simple attribute.", attr->name()); } void @@ -4564,7 +4564,7 @@ LibertyReader::getAttrFloat(LibertyAttr *attr, if (attr->isSimple()) getAttrFloat(attr, attr->firstValue(), value, valid); else - libWarn(134, attr, "%s is not a simple attribute.", attr->name()); + libWarn(1270, attr, "%s is not a simple attribute.", attr->name()); } void @@ -4590,7 +4590,7 @@ LibertyReader::getAttrFloat(LibertyAttr *attr, if ((*end && !isspace(*end)) // strtof support INF as a valid float. || stringEqual(string, "inf")) - libWarn(135, attr, "%s value %s is not a float.", + libWarn(1271, attr, "%s value %s is not a float.", attr->name(), string); valid = true; @@ -4619,14 +4619,14 @@ LibertyReader::getAttrFloat2(LibertyAttr *attr, getAttrFloat(attr, value, value2, exists); } else - libWarn(136, attr, "%s missing values.", attr->name()); + libWarn(1272, attr, "%s missing values.", attr->name()); } } else - libWarn(137, attr, "%s missing values.", attr->name()); + libWarn(1273, attr, "%s missing values.", attr->name()); } else - libWarn(138, attr, "%s is not a complex attribute.", attr->name()); + libWarn(1274, attr, "%s is not a complex attribute.", attr->name()); } // Parse string of comma separated floats. @@ -4652,7 +4652,7 @@ LibertyReader::parseStringFloatList(const char *float_list, || isspace(*end) || strchr(delimiters, *end) != nullptr || *end == '}'))) - libWarn(139, attr, "%s is not a float.", token); + libWarn(1275, attr, "%s is not a float.", token); values->push_back(value); } } @@ -4675,10 +4675,10 @@ LibertyReader::readFloatSeq(LibertyAttr *attr, values->push_back(value->floatValue()); } else - libWarn(140, attr, "%s is missing values.", attr->name()); + libWarn(1276, attr, "%s is missing values.", attr->name()); } if (value_iter.hasNext()) - libWarn(141, attr, "%s has more than one string.", attr->name()); + libWarn(1277, attr, "%s has more than one string.", attr->name()); } else { LibertyAttrValue *value = attr->firstValue(); @@ -4687,7 +4687,7 @@ LibertyReader::readFloatSeq(LibertyAttr *attr, parseStringFloatList(value->stringValue(), scale, values, attr); } else - libWarn(142, attr, "%s is missing values.", attr->name()); + libWarn(1278, attr, "%s is missing values.", attr->name()); } return values; } @@ -4712,13 +4712,13 @@ LibertyReader::getAttrBool(LibertyAttr *attr, exists = true; } else - libWarn(143, attr, "%s attribute is not boolean.", attr->name()); + libWarn(1279, attr, "%s attribute is not boolean.", attr->name()); } else - libWarn(144, attr, "%s attribute is not boolean.", attr->name()); + libWarn(1280, attr, "%s attribute is not boolean.", attr->name()); } else - libWarn(145, attr, "%s is not a simple attribute.", attr->name()); + libWarn(1281, attr, "%s is not a simple attribute.", attr->name()); } // Read L/H/X string attribute values as bool. @@ -4734,7 +4734,7 @@ LibertyReader::getAttrLogicValue(LibertyAttr *attr) else if (stringEq(str, "X")) return LogicValue::unknown; else - libWarn(146, attr, "attribute %s value %s not recognized.", + libWarn(1282, attr, "attribute %s value %s not recognized.", attr->name(), str); // fall thru } @@ -4765,7 +4765,7 @@ LibertyReader::getAttrEarlyLate(LibertyAttr *attr) else if (stringEq(value, "early_and_late")) return EarlyLateAll::all(); else { - libWarn(147, attr, "unknown early/late value."); + libWarn(1283, attr, "unknown early/late value."); return EarlyLateAll::all(); } } @@ -4985,7 +4985,7 @@ LibertyReader::visitDefaultOcvDerateGroup(LibertyAttr *attr) if (derate) library_->setDefaultOcvDerate(derate); else - libWarn(148, attr, "OCV derate group named %s not found.", derate_name); + libWarn(1284, attr, "OCV derate group named %s not found.", derate_name); } void @@ -5001,7 +5001,7 @@ LibertyReader::beginOcvDerate(LibertyGroup *group) if (name) ocv_derate_ = new OcvDerate(stringCopy(name)); else - libWarn(149, group, "ocv_derate missing name."); + libWarn(1285, group, "ocv_derate missing name."); } void @@ -5054,7 +5054,7 @@ LibertyReader::visitRfType(LibertyAttr *attr) else if (stringEq(rf_name, "rise_and_fall")) rf_type_ = RiseFallBoth::riseFall(); else - libError(150, attr, "unknown rise/fall."); + libError(1286, attr, "unknown rise/fall."); } void @@ -5074,7 +5074,7 @@ LibertyReader::visitPathType(LibertyAttr *attr) else if (stringEq(path_type, "clock_and_data")) path_type_ = PathType::clk_and_data; else - libWarn(151, attr, "unknown derate type."); + libWarn(1287, attr, "unknown derate type."); } //////////////////////////////////////////////////////////////// @@ -5106,7 +5106,7 @@ LibertyReader::endOcvSigmaCell(LibertyGroup *group) timing_->setDelaySigma(rf_, sigma_type_->asMinMax(), table_model); } else - libWarn(152, group, "unsupported model axis."); + libWarn(1288, group, "unsupported model axis."); } endTableModel(); } @@ -5138,7 +5138,7 @@ LibertyReader::endOcvSigmaTransition(LibertyGroup *group) timing_->setSlewSigma(rf_, sigma_type_->asMinMax(), table_model); } else - libWarn(153, group, "unsupported model axis."); + libWarn(1289, group, "unsupported model axis."); } endTableModel(); } @@ -5170,7 +5170,7 @@ LibertyReader::endOcvSigmaConstraint(LibertyGroup *group) timing_->setConstraintSigma(rf_, sigma_type_->asMinMax(), table_model); } else - libWarn(154, group, "unsupported model axis."); + libWarn(1290, group, "unsupported model axis."); } endTableModel(); } @@ -5241,7 +5241,7 @@ LibertyReader::visitPgType(LibertyAttr *attr) type = LibertyPgPort::PgType::deeppwell; else - libError(155, attr, "unknown pg_type."); + libError(1291, attr, "unknown pg_type."); pg_port_->setPgType(type); } } @@ -5636,11 +5636,11 @@ PortNameBitIterator::init(const char *port_name) range_bit_ = from; } else - visitor_->libWarn(156, line_, "port %s subscript out of range.", + visitor_->libWarn(1292, line_, "port %s subscript out of range.", port_name); } else - visitor_->libWarn(157, line_, "port range %s of non-bus port %s.", + visitor_->libWarn(1293, line_, "port range %s of non-bus port %s.", port_name, bus_name.c_str()); } @@ -5654,7 +5654,7 @@ PortNameBitIterator::init(const char *port_name) size_ = abs(from - to) + 1; } else - visitor_->libWarn(158, line_, "port %s not found.", port_name); + visitor_->libWarn(1294, line_, "port %s not found.", port_name); } } @@ -5724,7 +5724,7 @@ PortNameBitIterator::findRangeBusNameNext() range_bit_++; } else - visitor_->libWarn(159, line_, "port %s not found.", bus_bit_name.c_str()); + visitor_->libWarn(1295, line_, "port %s not found.", bus_bit_name.c_str()); } else range_name_next_ = nullptr; diff --git a/liberty/LibertyWriter.cc b/liberty/LibertyWriter.cc index 2a05a59c..224ff379 100644 --- a/liberty/LibertyWriter.cc +++ b/liberty/LibertyWriter.cc @@ -283,7 +283,7 @@ LibertyWriter::writeCell(const LibertyCell *cell) if (port->isBus()) writeBusPort(port); else if (port->isBundle()) - report_->error(704, "%s/%s bundled ports not supported.", + report_->error(1330, "%s/%s bundled ports not supported.", library_->name(), cell->name()); else @@ -414,7 +414,7 @@ LibertyWriter::writeTimingModels(const TimingArc *arc, fprintf(stream_, " }\n"); } else - report_->error(701, "%s/%s/%s timing model not supported.", + report_->error(1331, "%s/%s/%s timing model not supported.", library_->name(), arc->from()->libertyCell()->name(), arc->from()->name()); @@ -434,7 +434,7 @@ LibertyWriter::writeTableModel(const TableModel *model) writeTableModel2(model); break; case 3: - report_->error(702, "3 axis table models not supported."); + report_->error(1332, "3 axis table models not supported."); break; } } @@ -578,7 +578,7 @@ LibertyWriter::timingTypeString(const TimingArcSet *arc_set) else if (role == TimingRole::clockTreePathMax()) return "max_clock_tree_path"; else { - report_->error(703, "%s/%s/%s timing arc type %s not supported.", + report_->error(1333, "%s/%s/%s timing arc type %s not supported.", library_->name(), arc_set->to()->libertyCell()->name(), arc_set->to()->name(), diff --git a/messages.txt b/messages.txt index 14719e8c..783ee434 100644 --- a/messages.txt +++ b/messages.txt @@ -1,516 +1,513 @@ -0001 DmpCeff.cc:1598 cell %s delay model not supported on SPF parasitics by DMP delay calculator -0002 Liberty.cc:766 cell %s/%s port %s not found in cell %s/%s. -0003 Liberty.cc:792 cell %s/%s %s -> %s timing group %s not found in cell %s/%s. -0004 Liberty.cc:1748 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with %s -> %s setup_%s check. -0005 Liberty.cc:1762 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function positive sense. -0006 Liberty.cc:1770 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function negative sense. -0007 LibertyExpr.cc:82 %s references unknown port %s. -0008 ConcreteNetwork.cc:1923 cell type %s can not be linked. -0009 CycleAccting.cc:87 No common period was found between clocks %s and %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:864 propagated logic value %c differs from constraint value of %c on pin %s. -0016 LibertyReader.cc:1042 default_max_fanout is 0.0. -0017 Sta.cc:2108 '%s' is not a valid endpoint. -0018 Sta.cc:2032 '%s' is not a valid start point. -0020 WritePathSpice.cc:287 No liberty libraries found, -0021 SpefParse.yy:805 %d is not positive. -0022 SpefParse.yy:814 %.4f is not positive. -0023 SpefParse.yy:820 %.4f is not positive. -0024 WritePathSpice.cc:510 pg_pin %s/%s voltage %s not found, -0025 WritePathSpice.cc:517 Liberty pg_port %s/%s missing voltage_name attribute, -0026 WritePathSpice.cc:1096 %s pg_port %s not found, -0027 WritePathSpice.cc:1151 no register/latch found for path from %s to %s, -0028 WritePathSpice.cc:1617 The subkct file %s is missing definitions for %s -0029 WritePathSpice.cc:1715 subckt %s port %s has no corresponding liberty port, pg_port and is not power or ground. -0030 LibertyReader.cc:632 library missing name. -0031 LibertyReader.cc:658 default_wire_load %s not found. -0032 LibertyReader.cc:669 default_wire_selection %s not found. -0033 LibertyReader.cc:691 input_threshold_pct_%s not found. -0034 LibertyReader.cc:695 output_threshold_pct_%s not found. -0035 LibertyReader.cc:699 slew_lower_threshold_pct_%s not found. -0036 LibertyReader.cc:703 slew_upper_threshold_pct_%s not found. -0037 LibertyReader.cc:708 Library %s is missing one or more thresholds. -0038 LibertyReader.cc:787 unknown unit multiplier %s. -0039 LibertyReader.cc:810 unknown unit scale %c. -0040 LibertyReader.cc:813 unknown unit suffix %s. -0041 LibertyReader.cc:841 capacitive_load_units are not ff or pf. -0042 LibertyReader.cc:844 capacitive_load_units are not a string. -0043 LibertyReader.cc:847 capacitive_load_units missing suffix. -0044 LibertyReader.cc:850 capacitive_load_units scale is not a float. -0045 LibertyReader.cc:853 capacitive_load_units missing scale and suffix. -0046 LibertyReader.cc:856 capacitive_load_unit missing values suffix. -0047 LibertyReader.cc:874 delay_model %s not supported. -0048 LibertyReader.cc:878 delay_model %s not supported. -0049 LibertyReader.cc:882 delay_model %s not supported. -0050 LibertyReader.cc:887 delay_model %s not supported. -. -0051 LibertyReader.cc:890 unknown delay_model %s -. -0052 LibertyReader.cc:909 unknown bus_naming_style format. -0053 LibertyReader.cc:598 library %s already exists. -0054 LibertyReader.cc:930 voltage_map voltage is not a float. -0055 LibertyReader.cc:933 voltage_map missing voltage. -0056 LibertyReader.cc:936 voltage_map supply name is not a string. -0057 LibertyReader.cc:939 voltage_map missing supply name and voltage. -0058 LibertyReader.cc:942 voltage_map missing values suffix. -0059 LibertyReader.cc:1160 default_wire_load_mode %s not found. -0060 LibertyReader.cc:681 default_operating_condition %s not found. -0061 LibertyReader.cc:1331 table template missing name. -0062 LibertyReader.cc:1376 missing variable_%d attribute. -0063 LibertyReader.cc:1418 axis type %s not supported. -0064 LibertyReader.cc:1490 bus type %s missing bit_from. -0065 LibertyReader.cc:1492 bus type %s missing bit_to. -0066 LibertyReader.cc:1496 type missing name. -0067 LibertyReader.cc:1523 scaling_factors do not have a name. -0068 LibertyReader.cc:1692 operating_conditions missing name. -0069 LibertyReader.cc:1763 wire_load missing name. -0070 LibertyReader.cc:1806 fanout_length is missing length and fanout. -0071 LibertyReader.cc:1821 wire_load_selection missing name. -0072 LibertyReader.cc:1852 wireload %s not found. -0074 LibertyReader.cc:1859 wire_load_from_area min not a float. -0075 LibertyReader.cc:1862 wire_load_from_area max not a float. -0076 LibertyReader.cc:1865 wire_load_from_area missing parameters. -0077 LibertyReader.cc:1868 wire_load_from_area missing parameters. -0078 LibertyReader.cc:1887 cell missing name. -0079 LibertyReader.cc:1910 cell %s ocv_derate_group %s not found. -0080 LibertyReader.cc:1941 port %s function size does not match port size. -0081 LibertyReader.cc:1997 %s %s bus width mismatch. -0082 LibertyReader.cc:2008 %s %s bus width mismatch. -0083 LibertyReader.cc:2018 clear -0084 LibertyReader.cc:2028 preset -0085 LibertyReader.cc:2064 latch enable function is non-unate for port %s. -0086 LibertyReader.cc:2069 latch enable function is unknown for port %s. -0087 LibertyReader.cc:2141 operating conditions %s not found. -0088 LibertyReader.cc:2144 scaled_cell missing operating condition. -0089 LibertyReader.cc:2147 scaled_cell cell %s has not been defined. -0090 LibertyReader.cc:2150 scaled_cell missing name. -0091 LibertyReader.cc:2176 scaled_cell %s, %s port functions do not match cell port functions. -0092 LibertyReader.cc:2181 scaled_cell ports do not match cell ports. -0093 LibertyReader.cc:2183 scaled_cell %s, %s timing does not match cell timing. -0094 LibertyReader.cc:2202 combinational timing to an input port. -0095 LibertyReader.cc:2297 missing %s_transition. -0096 LibertyReader.cc:2299 missing cell_%s. -0099 LibertyReader.cc:2928 scaling_factors %s not found. -0100 LibertyReader.cc:2969 pin name is not a string. -0101 LibertyReader.cc:2986 pin name is not a string. -0102 LibertyReader.cc:3000 pin name is not a string. -0103 LibertyReader.cc:3078 bus %s bus_type not found. -0104 LibertyReader.cc:3130 bus_type %s not found. -0105 LibertyReader.cc:3133 bus_type is not a string. -0106 LibertyReader.cc:3151 bundle %s member not found. -0107 LibertyReader.cc:3174 member is not a string. -0108 LibertyReader.cc:3181 members attribute is missing values. -0109 LibertyReader.cc:3232 unknown port direction. -0110 LibertyReader.cc:3572 pulse_latch unknown pulse type. -0111 LibertyReader.cc:3942 unknown timing_type %s. -0112 LibertyReader.cc:3962 unknown timing_sense %s. -0113 LibertyReader.cc:4002 mode value is not a string. -0114 LibertyReader.cc:4005 missing mode value. -0115 LibertyReader.cc:4008 mode name is not a string. -0116 LibertyReader.cc:4011 mode missing values. -0117 LibertyReader.cc:4014 mode missing mode name and value. -0118 LibertyReader.cc:2566 unsupported model axis. -0119 LibertyReader.cc:4117 unsupported model axis. -0120 LibertyReader.cc:4146 unsupported model axis. -0121 LibertyReader.cc:4181 unsupported model axis. -0122 LibertyReader.cc:4236 table template %s not found. -0123 LibertyReader.cc:4320 %s is missing values. -0124 LibertyReader.cc:4343 %s is not a list of floats. -0125 LibertyReader.cc:4345 table row has %u columns but axis has %d. -0126 LibertyReader.cc:4355 table has %u rows but axis has %d. -0127 LibertyReader.cc:4406 lut output is not a string. -0128 LibertyReader.cc:4448 mode definition missing name. -0129 LibertyReader.cc:4465 mode value missing name. -0130 LibertyReader.cc:4479 when attribute inside table model. -0131 LibertyReader.cc:4528 %s attribute is not a string. -0132 LibertyReader.cc:4531 %s is not a simple attribute. -0133 LibertyReader.cc:4554 %s is not a simple attribute. -0134 LibertyReader.cc:4567 %s is not a simple attribute. -0135 LibertyReader.cc:4593 %s value %s is not a float. -0136 LibertyReader.cc:4622 %s missing values. -0137 LibertyReader.cc:4626 %s missing values. -0138 LibertyReader.cc:4629 %s is not a complex attribute. -0139 LibertyReader.cc:4655 %s is not a float. -0140 LibertyReader.cc:4678 %s is missing values. -0141 LibertyReader.cc:4681 %s has more than one string. -0142 LibertyReader.cc:4690 %s is missing values. -0143 LibertyReader.cc:4715 %s attribute is not boolean. -0144 LibertyReader.cc:4718 %s attribute is not boolean. -0145 LibertyReader.cc:4721 %s is not a simple attribute. -0146 LibertyReader.cc:4737 attribute %s value %s not recognized. -0147 LibertyReader.cc:4768 unknown early/late value. -0148 LibertyReader.cc:4988 OCV derate group named %s not found. -0149 LibertyReader.cc:5004 ocv_derate missing name. -0150 LibertyReader.cc:5057 unknown rise/fall. -0151 LibertyReader.cc:5077 unknown derate type. -0152 LibertyReader.cc:5109 unsupported model axis. -0153 LibertyReader.cc:5141 unsupported model axis. -0154 LibertyReader.cc:5173 unsupported model axis. -0155 LibertyReader.cc:5244 unknown pg_type. -0156 LibertyReader.cc:5639 port %s subscript out of range. -0157 LibertyReader.cc:5643 port range %s of non-bus port %s. -0158 LibertyReader.cc:5657 port %s not found. -0159 LibertyReader.cc:5727 port %s not found. -0160 LibertyReader.cc:1027 default_max_transition is 0.0. -0161 LibertyReader.cc:3466 max_transition is 0.0. -0162 LibertyReader.cc:4551 %s attribute is not an integer. -0163 LibertyReader.cc:1132 default_fanout_load is 0.0. -0164 LibertyReader.cc:2319 timing group from output port. -0165 LibertyReader.cc:2329 timing group from output port. -0166 LibertyReader.cc:2339 timing group from output port. -0167 LibertyReader.cc:2357 timing group from output port. -0168 LibertyReader.cc:2373 timing group from output port. -0169 LibertyReader.cc:4423 cell %s test_cell redefinition. -0170 LibertyReader.cc:3861 timing group missing related_pin/related_bus_pin. -0171 LibertyReader.cc:816 unknown unit suffix %s. -0172 LibertyReader.cc:1452 missing table index values. -0173 LibertyReader.cc:1458 non-increasing table index values. -0201 StaTcl.i:118 no network has been linked. -0202 StaTcl.i:132 network does not support edits. -0204 StaTcl.i:4129 POCV support requires compilation with SSTA=1. -0206 LibertyExpr.cc:175 %s %s. -0207 GraphDelayCalc.cc:491 port not found in cell -0208 Graph.cc:793 arc_delay_annotated array bounds exceeded -0209 Graph.cc:808 arc_delay_annotated array bounds exceeded -0210 Graph.cc:820 arc_delay_annotated array bounds exceeded -0211 SdcNetwork.cc:1095 inst path string lenth estimate busted -0212 SdcNetwork.cc:1167 inst path string lenth estimate exceeded -0213 Sdc.cc:4058 group path name and is_default are mutually exclusive. -0214 WriteSdc.cc:1254 unknown exception type -0215 WriteSdc.cc:1796 illegal set_logic value -0216 WriteSdc.cc:1837 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 -0253 PathGroup.cc:399 unknown path end type -0254 PathVertexRep.cc:145 tag group missing tag -0255 ReportPath.cc:289 unsupported path type -0256 ReportPath.cc:310 unsupported path type -0257 ReportPath.cc:349 unsupported path type -0259 ReportPath.cc:2378 unsupported path type -0260 Search.cc:2654 max tag group index exceeded -0261 Search.cc:2890 max tag index exceeded -0262 Search.cc:3617 unexpected filter path -0263 Search.cc:3785 tns incr existing vertex -0264 Sta.cc:4228 corresponding timing arc set not found in equiv cells -0265 TagGroup.cc:297 tag group missing tag +0100 CmdArgs.tcl:108 unsupported object type $object_type. +0101 CmdArgs.tcl:166 object '$obj' not found. +0102 CmdArgs.tcl:405 $corner_name is not the name of process corner. +0103 CmdArgs.tcl:410 -corner keyword required with multi-corner analysis. +0104 CmdArgs.tcl:425 $corner_name is not the name of process corner. +0105 CmdArgs.tcl:430 missing -corner arg. +0106 CmdArgs.tcl:441 $corner_name is not the name of process corner. +0107 CmdArgs.tcl:458 $corner_name is not the name of process corner. +0108 CmdArgs.tcl:483 both -min and -max specified. +0109 CmdArgs.tcl:497 both -min and -max specified. +0110 CmdArgs.tcl:524 only one of -early and -late can be specified. +0111 CmdArgs.tcl:530 -early or -late must be specified. +0112 CmdArgs.tcl:537 both -early and -late specified. +0113 CmdArgs.tcl:552 $arg_name must be a single library. +0114 CmdArgs.tcl:558 $arg_name type '$object_type' is not a library. +0115 CmdArgs.tcl:563 library '$arg' not found. +0116 CmdArgs.tcl:580 $arg_name must be a single lib cell. +0123 CmdArgs.tcl:667 $arg_name must be a single instance. +0124 CmdArgs.tcl:673 $arg_name type '$object_type' is not an instance. +0125 CmdArgs.tcl:678 instance '$arg' not found. +0126 CmdArgs.tcl:697 $arg_name type '$object_type' is not an instance. +0127 CmdArgs.tcl:704 instance '$arg' not found. +0131 CmdArgs.tcl:765 $arg_name type '$object_type' is not a pin or port. +0132 CmdArgs.tcl:772 pin '$arg' not found. +0133 CmdArgs.tcl:792 $arg_name type '$object_type' is not a port. +0139 CmdArgs.tcl:873 unsupported object type $object_type. +0141 CmdArgs.tcl:894 $arg_name '$object_type' is not a net. +0142 CmdArgs.tcl:918 unsupported object type $object_type. +0143 CmdArgs.tcl:899 $arg_name '$arg' not found. +0160 CmdUtil.tcl:44 no commands match '$pattern'. +0161 CmdUtil.tcl:89 Usage: $cmd $cmd_args($cmd) +0162 CmdUtil.tcl:91 Usage: $cmd argument error +0163 CmdUtil.tcl:161 unknown $unit unit '$suffix'. +0164 CmdUtil.tcl:209 unsupported object type $list_type. +0165 CmdUtil.tcl:226 unknown namespace $namespc. +0180 DelayCalc.tcl:119 delay calculator $alg not found. +0181 DelayCalc.tcl:148 $cmd missing -from argument. +0182 DelayCalc.tcl:153 $cmd missing -to argument. +0183 DelayCalc.tcl:158 $cmd delay is not a float. +0184 DelayCalc.tcl:163 set_annotated_delay -cell and -net options are mutually excluive. +0185 DelayCalc.tcl:169 $cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst]. +0186 DelayCalc.tcl:174 $cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst] +0187 DelayCalc.tcl:179 $cmd -cell or -net required. +0188 DelayCalc.tcl:243 $cmd missing -from argument. +0189 DelayCalc.tcl:252 $cmd -clock must be rise or fall. +0190 DelayCalc.tcl:259 $cmd missing -to argument. +0191 DelayCalc.tcl:274 $cmd missing -setup|-hold|-recovery|-removal check type.. +0192 DelayCalc.tcl:282 $cmd check_value is not a float. +0210 DelayCalc.tcl:350 set_assigned_transition transition is not a float. +0220 Link.tcl:34 missing top_cell_name argument and no current_design. +0230 Network.tcl:35 instance $instance_path not found. +0231 Network.tcl:221 net $net_path not found. +0232 Network.tcl:224 net $net_path not found. +0250 NetworkEdit.tcl:107 unsupported object type $object_type. +0251 NetworkEdit.tcl:137 connect_pins is deprecated. Use connect_pin. +0252 NetworkEdit.tcl:206 unsupported object type $object_type. +0253 NetworkEdit.tcl:224 unsupported object type $object_type. 0266 Sta.cc:2105 '%s' is not a valid endpoint. 0267 Sta.cc:2029 '%s' is not a valid start point. -0272 StaTcl.i:4115 unknown common clk pessimism mode. -0273 StaTcl.i:5064 unknown clock sense -0274 VerilogReader.cc:1782 %s is not a verilog module. -0275 VerilogReader.cc:1787 %s is not a verilog module. -0299 Power.tcl:243 activity cannot be set on clock ports. -0300 CmdUtil.tcl:44 no commands match '$pattern'. +0270 Parasitics.tcl:45 path instance '$path' not found. +0271 Parasitics.tcl:62 -reduce_to must be pi_elmore or pi_pole_residue2. +0272 Parasitics.tcl:70 read_spef -increment is deprecated. 0301 Power.tcl:220 activity should be 0.0 to 1.0 or 2.0 0302 Power.tcl:228 duty should be 0.0 to 1.0 -0303 Sdc.tcl:1582 -clock ignored for clock objects. -0304 Sdc.tcl:2174 -from/-to keywords ignored for lib_pin, port and pin arguments. -0305 CmdArgs.tcl:166 object '$obj' not found. -0313 CmdArgs.tcl:873 unsupported object type $object_type. -0314 CmdArgs.tcl:888 $arg_name must be a single net. -0315 CmdArgs.tcl:894 $arg_name '$object_type' is not a net. -0316 CmdArgs.tcl:899 $arg_name '$arg' not found. -0317 CmdArgs.tcl:918 unsupported object type $object_type. -0318 Search.tcl:1060 unknown path group '$name'. -0319 Sdc.tcl:288 $unit scale [format %.0e $scale] does not match library scale [format %.0e $unit_scale]. -0320 Sdc.tcl:437 current_design for other than top cell not supported. -0321 Sdc.tcl:473 patterns argument not supported with -of_objects. -0322 Sdc.tcl:506 instance '$pattern' not found. -0323 Sdc.tcl:566 clock '$pattern' not found. -0324 Sdc.tcl:592 positional arguments not supported with -of_objects. -0325 Sdc.tcl:619 library '$lib_name' not found. -0326 Sdc.tcl:631 cell '$cell_pattern' not found. -0327 Sdc.tcl:678 library/cell/port '$pattern' not found. -0328 Sdc.tcl:698 port '$port_pattern' not found. -0329 Sdc.tcl:703 library '$lib_name' not found. -0330 Sdc.tcl:713 -nocase ignored without -regexp. -0331 Sdc.tcl:739 library '$pattern' not found. -0332 Sdc.tcl:802 patterns argument not supported with -of_objects. -0333 Sdc.tcl:826 net '$pattern' not found. -0334 Sdc.tcl:855 patterns argument not supported with -of_objects. -0335 Sdc.tcl:892 pin '$pattern' not found. -0336 Sdc.tcl:949 patterns argument not supported with -of_objects. -0337 Sdc.tcl:963 port '$pattern' not found. -0338 Sdc.tcl:1061 non-increasing clock -waveform edge times. -0339 Sdc.tcl:1064 -waveform time greater than two periods. -0341 Sdc.tcl:1439 extra positional argument $arg. -0342 Sdc.tcl:1532 -clock ignored for clock objects. -0343 Sdc.tcl:1622 set_sense -type data not supported. -0344 Sdc.tcl:1637 set_clock_sense is deprecated as of SDC 2.1. Use set_sense -type clock. -0345 Sdc.tcl:1649 -pulse argument not supported. -0346 Sdc.tcl:1658 -positive, -negative, -stop_propagation and -pulse are mutually exclusive. -0347 Sdc.tcl:1671 hierarchical pin '[get_full_name $pin]' not supported. -0348 Sdc.tcl:2037 -from/-to keywords ignored for lib_pin, port and pin arguments. -0349 Sdc.tcl:1437 unknown keyword argument $arg. -0350 Sdc.tcl:2284 -from, -through or -to required. -0351 Sdc.tcl:2363 -source_latency_included ignored with -reference_pin. -0352 Sdc.tcl:2366 -network_latency_included ignored with -reference_pin. -0353 Sdc.tcl:2385 $cmd not allowed on [pin_direction $pin] port '[get_full_name $pin]'. -0354 Sdc.tcl:2387 $cmd relative to a clock defined on the same port/pin not allowed. -0355 Sdc.tcl:2441 '$args' ignored. -0356 Sdc.tcl:2571 '$args' ignored. -0357 Sdc.tcl:2706 virtual clock [get_name $clk] can not be propagated. -0358 Sdc.tcl:2880 -multiply_by ignored. -0359 Sdc.tcl:2883 -dont_scale ignored. -0360 Sdc.tcl:2886 -no_design_rule ignored. -0361 Sdc.tcl:2933 -clock not supported. -0362 Sdc.tcl:2936 -clock_fall not supported. -0363 Sdc.tcl:2982 -pin_load not allowed for net objects. -0364 Sdc.tcl:2985 -wire_load not allowed for net objects. -0365 Sdc.tcl:2988 -rise/-fall not allowed for net objects. -0366 Sdc.tcl:3121 -data_path, -clock_path, -rise, -fall ignored for ports and designs. -0367 Sdc.tcl:3192 derating factor greater than 2.0. -0368 Sdc.tcl:3229 -cell_delay and -cell_check flags ignored for net objects. -0369 Sdc.tcl:3299 no valid objects specified for $key. -0370 Sdc.tcl:3332 no valid objects specified for $key -0371 Sdc.tcl:3493 set_wire_load_min_block_size not supported. -0372 NetworkEdit.tcl:137 connect_pins is deprecated. Use connect_pin. -0373 Sdc.tcl:3670 define_corners must be called before read_liberty. -0374 Sta.cc:2431 maximum corner count exceeded -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. -0403 Util.tcl:93 $cmd $arg is not a known keyword or flag. -0404 CmdUtil.tcl:89 Usage: $cmd $cmd_args($cmd) -0405 CmdUtil.tcl:91 Usage: $cmd argument error -0406 Util.tcl:241 $cmd positional arguments not supported. -0407 Util.tcl:247 $cmd requires one positional argument. -0408 Util.tcl:254 $cmd requires zero or one positional arguments. -0409 Util.tcl:260 $cmd requires two positional arguments. -0410 Util.tcl:267 $cmd requires one or two positional arguments. -0411 Util.tcl:273 $cmd requires three positional arguments. -0412 Util.tcl:279 $cmd requires four positional arguments. -0413 Util.tcl:287 $cmd_arg '$arg' is not a float. -0414 Util.tcl:293 $cmd_arg '$arg' is not a positive float. -0415 Util.tcl:299 $cmd_arg '$arg' is not an integer. -0416 Util.tcl:305 $cmd_arg '$arg' is not a positive integer. -0417 Util.tcl:311 $cmd_arg '$arg' is not an integer greater than or equal to one. -0418 Util.tcl:317 $cmd_arg '$arg' is not between 0 and 100. -0419 Search.tcl:326 report_clock_skew -setup and -hold are mutually exclusive options. -0420 Search.tcl:136 $cmd -path_delay must be min, min_rise, min_fall, max, max_rise, max_fall or min_max. -0421 Search.tcl:146 $cmd command failed. -0422 Search.tcl:165 -endpoint_count must be a positive integer. -0423 Search.tcl:174 -group_count must be >= 1. -0424 Search.tcl:205 '$arg' is not a known keyword or flag. -0425 Search.tcl:207 positional arguments not supported. -0426 Search.tcl:510 analysis type single is not consistent with doing both setup/max and hold/min checks. -0427 Search.tcl:515 positional arguments not supported. -0428 DelayCalc.tcl:350 set_assigned_transition transition is not a float. -0430 Sdf.tcl:46 -cond_use min_max cannot be used with analysis type single. -0432 Sdf.tcl:157 SDF -divider must be / or . -0433 Parasitics.tcl:45 path instance '$path' not found. -0434 Parasitics.tcl:62 -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. -0438 Variables.tcl:187 $var_name value must be 0 or 1. -0439 CmdUtil.tcl:209 unsupported object type $list_type. -0440 Sta.tcl:158 -from/-to arguments not supported with -of_objects. -0441 Sta.tcl:286 unsupported -filter expression. -0442 DelayCalc.tcl:148 $cmd missing -from argument. -0443 DelayCalc.tcl:153 $cmd missing -to argument. -0444 DelayCalc.tcl:158 $cmd delay is not a float. -0445 DelayCalc.tcl:163 set_annotated_delay -cell and -net options are mutually excluive. -0446 DelayCalc.tcl:169 $cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst]. -0447 DelayCalc.tcl:174 $cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst] -0448 DelayCalc.tcl:179 $cmd -cell or -net required. -0449 DelayCalc.tcl:243 $cmd missing -from argument. -0450 DelayCalc.tcl:252 $cmd -clock must be rise or fall. -0451 DelayCalc.tcl:259 $cmd missing -to argument. -0452 DelayCalc.tcl:274 $cmd missing -setup|-hold|-recovery|-removal check type.. -0453 DelayCalc.tcl:282 $cmd check_value is not a float. -0454 Sdc.tcl:1468 the -all and -name options are mutually exclusive. -0455 Sdc.tcl:1471 either -all or -name options must be specified. -0456 Sdc.tcl:1479 one of -logically_exclusive, -physically_exclusive or -asynchronous is required. -0457 Sdc.tcl:1482 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive. -0458 Sdc.tcl:1594 -source '[$pin path_name]' is not a clock pin. -0459 Sdc.tcl:1862 -from/-to must be used together. -0460 Sdc.tcl:1882 -rise, -fall options not allowed for single clock uncertainty. -0461 Sdc.tcl:1983 missing -from, -rise_from or -fall_from argument. -0462 Sdc.tcl:1995 missing -to, -rise_to or -fall_to argument. -0463 Sdc.tcl:2226 -from/-to hierarchical instance not supported. -0464 Sdc.tcl:2628 $cmd command failed. -0465 Sdc.tcl:2635 positional arguments not supported. -0466 Sdc.tcl:2639 -from, -through or -to required. -0467 CmdArgs.tcl:108 unsupported object type $object_type. -0468 CmdArgs.tcl:405 $corner_name is not the name of process corner. -0469 CmdArgs.tcl:410 -corner keyword required with multi-corner analysis. -0470 CmdArgs.tcl:425 $corner_name is not the name of process corner. -0471 CmdArgs.tcl:430 missing -corner arg. -0472 CmdArgs.tcl:441 $corner_name is not the name of process corner. -0473 CmdArgs.tcl:458 $corner_name is not the name of process corner. -0474 CmdArgs.tcl:483 both -min and -max specified. -0475 CmdArgs.tcl:497 both -min and -max specified. -0476 CmdArgs.tcl:524 only one of -early and -late can be specified. -0477 CmdArgs.tcl:530 -early or -late must be specified. -0478 CmdArgs.tcl:537 both -early and -late specified. -0479 CmdArgs.tcl:552 $arg_name must be a single library. -0480 CmdArgs.tcl:558 $arg_name type '$object_type' is not a library. -0481 CmdArgs.tcl:563 library '$arg' not found. -0482 CmdArgs.tcl:580 $arg_name must be a single lib cell. -0483 CmdArgs.tcl:667 $arg_name must be a single instance. -0484 CmdArgs.tcl:673 $arg_name type '$object_type' is not an instance. -0485 CmdArgs.tcl:678 instance '$arg' not found. -0486 CmdArgs.tcl:697 $arg_name type '$object_type' is not an instance. -0487 CmdArgs.tcl:704 instance '$arg' not found. -0488 CmdArgs.tcl:765 $arg_name type '$object_type' is not a pin or port. -0489 CmdArgs.tcl:772 pin '$arg' not found. -0490 CmdArgs.tcl:792 $arg_name type '$object_type' is not a port. -0491 Property.tcl:32 $cmd object is null. -0492 Property.tcl:37 $cmd $type_key must be specified with object name argument. -0493 Property.tcl:80 get_property $object is not an object. -0494 Property.tcl:107 $object_type not supported. -0495 Property.tcl:110 $object_type '$object_name' not found. -0496 WritePathSpice.tcl:35 Directory $spice_dir not found. -0497 WritePathSpice.tcl:38 $spice_dir is not a directory. -0498 WritePathSpice.tcl:41 Cannot write in $spice_dir. -0499 WritePathSpice.tcl:44 No -spice_directory specified. -0500 WritePathSpice.tcl:50 -lib_subckt_file $lib_subckt_file is not readable. -0501 WritePathSpice.tcl:53 No -lib_subckt_file specified. -0502 WritePathSpice.tcl:59 -model_file $model_file is not readable. -0503 WritePathSpice.tcl:62 No -model_file specified. -0504 WritePathSpice.tcl:68 No -power specified. -0505 WritePathSpice.tcl:74 No -ground specified. -0506 WritePathSpice.tcl:78 No -path_args specified. -0507 WritePathSpice.tcl:83 No paths found for -path_args $path_args. -0508 Search.tcl:778 -min and -max cannot both be specified. -0509 Search.tcl:798 pin '$pin_arg' is hierarchical. -0510 Search.tcl:864 -format $format not recognized. -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 CmdUtil.tcl:161 unknown $unit unit '$suffix'. -0516 Sdc.tcl:539 unsupported instance -filter expression. -0517 Sdc.tcl:924 unsupported pin -filter expression. -0518 Sdc.tcl:1000 unsupported port -filter expression. -0519 Sdc.tcl:1033 -add requires -name. -0520 Sdc.tcl:1038 -name or port_pin_list must be specified. -0521 Sdc.tcl:1046 missing -period argument. -0522 Sdc.tcl:1052 -waveform edge_list must have an even number of edge times. -0523 Sdc.tcl:1122 empty ports/pins/nets argument. -0524 Sdc.tcl:1130 -add requires -name. -0525 Sdc.tcl:1135 name or port_pin_list must be specified. -0526 Sdc.tcl:1142 missing -source argument. -0527 Sdc.tcl:1157 -master_clock argument empty. -0528 Sdc.tcl:1160 -add requireds -master_clock. -0529 Sdc.tcl:1164 -multiply_by and -divide_by options are exclusive. -0530 Sdc.tcl:1168 -divide_by is not an integer greater than one. -0531 Sdc.tcl:1171 -combinational implies -divide_by 1. -0532 Sdc.tcl:1176 -multiply_by is not an integer greater than one. -0533 Sdc.tcl:1182 -duty_cycle is not a float between 0 and 100. -0534 Sdc.tcl:1188 -edges only supported for three edges. -0535 Sdc.tcl:1194 edges times are not monotonically increasing. -0536 Sdc.tcl:1203 -edge_shift length does not match -edges length. -0537 Sdc.tcl:1209 missing -multiply_by, -divide_by, -combinational or -edges argument. -0538 Sdc.tcl:1217 cannot specify -invert without -multiply_by, -divide_by or -combinational. -0539 Sdc.tcl:1223 -duty_cycle requires -multiply_by value. -0545 Sdc.tcl:1283 group_path command failed. -0546 Sdc.tcl:1290 positional arguments not supported. -0547 Sdc.tcl:1294 -from, -through or -to required. -0548 Sdc.tcl:1300 -name and -default are mutually exclusive. -0549 Sdc.tcl:1302 -name or -default option is required. -0550 Sdc.tcl:1343 cannot specify both -high and -low. -0551 Sdc.tcl:1351 missing -setup or -hold argument. -0552 Sdc.tcl:1365 -high and -low only permitted for pins and instances. -0553 Sdc.tcl:1372 -high and -low only permitted for pins and instances. -0554 Sdc.tcl:1415 one of -logically_exclusive, -physically_exclusive or -asynchronous is required. -0555 Sdc.tcl:1418 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive. -0556 Sdc.tcl:1546 -source '[get_full_name $pin]' is not a clock pin. -0557 Sdc.tcl:1553 -early/-late is only allowed with -source. -0558 Sdc.tcl:1626 set_sense -type clock|data -0559 Sdc.tcl:1695 transition time can not be specified for virtual clocks. -0560 Sdc.tcl:1728 missing uncertainty value. -0561 Sdc.tcl:1776 -from/-to must be used together. -0562 Sdc.tcl:1796 -rise, -fall options not allowed for single clock uncertainty. -0563 Sdc.tcl:1923 missing -from, -rise_from or -fall_from argument. -0564 Sdc.tcl:1935 missing -to, -rise_to or -fall_to argument. -0565 Sdc.tcl:2067 -from/-to hierarchical instance not supported. -0566 Sdc.tcl:2099 pin '[get_full_name $inst]${hierarchy_separator}${port_name}' not found. -0567 Sdc.tcl:2140 pin '[get_name $cell]${hierarchy_separator}${port_name}' not found. -0568 Sdc.tcl:2435 missing delay argument. -0569 Sdc.tcl:2566 missing path multiplier argument. -0570 Sdc.tcl:2578 cannot use -start with -end. -0571 Sdc.tcl:2748 value must be 0, zero, 1, one, rise, rising, fall, or falling. -0572 Sdc.tcl:2817 cell '$lib_name:$cell_name' not found. -0573 Sdc.tcl:2823 '$cell_name' not found. -0574 Sdc.tcl:2827 missing -lib_cell argument. -0575 Sdc.tcl:2835 port '$to_port_name' not found. -0576 Sdc.tcl:2847 -pin argument required for cells with multiple outputs. -0577 Sdc.tcl:2862 port '$from_port_name' not found. -0578 Sdc.tcl:3075 port '[get_name $port]' is not an input. -0579 Sdc.tcl:3449 operating condition '$op_cond_name' not found. -0580 Sdc.tcl:3467 operating condition '$op_cond_name' not found. -0581 Sdc.tcl:3481 -analysis_type must be single, bc_wc or on_chip_variation. -0582 Sdc.tcl:3506 mode must be top, enclosed or segmented. -0583 Sdc.tcl:3521 no wire load model specified. -0584 Sdc.tcl:3582 wire load selection group '$selection_name' not found. -0585 Sdc.tcl:3740 no default operating conditions found. -0586 NetworkEdit.tcl:107 unsupported object type $object_type. -0587 NetworkEdit.tcl:206 unsupported object type $object_type. -0588 NetworkEdit.tcl:224 unsupported object type $object_type. -0589 CmdUtil.tcl:226 unknown namespace $namespc. -0590 Network.tcl:35 instance $instance_path not found. -0591 Network.tcl:221 net $net_path not found. -0592 Network.tcl:224 net $net_path not found. -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:209 unknown function operator -0597 EstimateParasitics.cc:188 load pin not leaf or top level -0598 Power.cc:610 unknown function operator -0600 Sdc.tcl:2280 '$args' ignored. -0601 Sdc.tcl:2909 set_fanout_load not supported. -0602 Sdc.tcl:3381 no valid objects specified for $key. -0604 Sdc.tcl:281 unknown $unit prefix '$prefix'. -0605 Sdc.tcl:3543 wire load model '$model_name' not found. -0606 Property.tcl:77 get_property unsupported object type $object_type. -0607 StaTcl.i:4367 unknown report path field %s -0608 StaTcl.i:4379 unknown report path field %s -0609 Search.tcl:411 -all_violators is deprecated. Use -violators -0610 Search.tcl:491 -max_transition deprecated. Use -max_slew. -0611 Search.tcl:496 -min_transition deprecated. Use -min_slew. -0612 Sdf.tcl:41 -cond_use must be min, max or min_max. -0616 Search.tcl:1011 specify one of -setup and -hold. -0617 Sdf.tcl:50 -analysis_type is deprecated. Use set_operating_conditions -analysis_type. -0618 DmpCeff.cc:1582 parasitic Pi model has NaNs. -0619 PathEnum.cc:474 path diversion missing edge. -0620 PathVertex.cc:236 missing arrivals. -0621 PathVertex.cc:250 missing arrivals. -0622 PathVertex.cc:279 missing requireds. -0623 PathVertexRep.cc:153 missing arrivals. -0624 PathVertexRep.cc:150 missing arrivals -0625 Liberty.tcl:33 -no_latch_infer is deprecated. -0701 LibertyWriter.cc:417 %s/%s/%s timing model not supported. -0702 LibertyWriter.cc:437 3 axis table models not supported. -0703 LibertyWriter.cc:581 %s/%s/%s timing arc type %s not supported. -0704 LibertyWriter.cc:286 %s/%s bundled ports not supported. -0705 Liberty.cc:811 Liberty cell %s/%s for corner %s/%s not found. -0706 Parasitics.tcl:70 read_spef -increment is deprecated. -0707 SpefReader.cc:732 %s. -0710 LumpedCapDelayCalc.cc:147 gate delay input variable is NaN +0303 Power.tcl:243 activity cannot be set on clock ports. +0320 Property.tcl:32 $cmd object is null. +0321 Property.tcl:37 $cmd $type_key must be specified with object name argument. +0322 Property.tcl:77 get_property unsupported object type $object_type. +0323 Property.tcl:80 get_property $object is not an object. +0324 Property.tcl:107 $object_type not supported. +0325 Property.tcl:110 $object_type '$object_name' not found. +0340 Sdc.tcl:73 cannot open '$filename'. +0341 Sdc.tcl:128 incomplete command at end of file. +0342 Sdc.tcl:212 hierarchy separator must be one of '$sdc_dividers'. +0343 Sdc.tcl:259 unknown unit $unit '$suffix'. +0344 Sdc.tcl:281 unknown $unit prefix '$prefix'. +0345 Sdc.tcl:288 $unit scale [format %.0e $scale] does not match library scale [format %.0e $unit_scale]. +0346 Sdc.tcl:394 only one of -cells, -data_pins, -clock_pins, -async_pins, -output_pins are suppported. +0347 Sdc.tcl:437 current_design for other than top cell not supported. +0348 Sdc.tcl:473 patterns argument not supported with -of_objects. +0349 Sdc.tcl:506 instance '$pattern' not found. +0350 Sdc.tcl:539 unsupported instance -filter expression. +0351 Sdc.tcl:566 clock '$pattern' not found. +0352 Sdc.tcl:592 positional arguments not supported with -of_objects. +0353 Sdc.tcl:619 library '$lib_name' not found. +0354 Sdc.tcl:631 cell '$cell_pattern' not found. +0355 Sdc.tcl:678 library/cell/port '$pattern' not found. +0356 Sdc.tcl:698 port '$port_pattern' not found. +0357 Sdc.tcl:703 library '$lib_name' not found. +0358 Sdc.tcl:713 -nocase ignored without -regexp. +0359 Sdc.tcl:739 library '$pattern' not found. +0360 Sdc.tcl:802 patterns argument not supported with -of_objects. +0361 Sdc.tcl:826 net '$pattern' not found. +0362 Sdc.tcl:855 patterns argument not supported with -of_objects. +0363 Sdc.tcl:892 pin '$pattern' not found. +0364 Sdc.tcl:924 unsupported pin -filter expression. +0365 Sdc.tcl:949 patterns argument not supported with -of_objects. +0366 Sdc.tcl:963 port '$pattern' not found. +0367 Sdc.tcl:1000 unsupported port -filter expression. +0368 Sdc.tcl:1033 -add requires -name. +0369 Sdc.tcl:1038 -name or port_pin_list must be specified. +0370 Sdc.tcl:1046 missing -period argument. +0371 Sdc.tcl:1052 -waveform edge_list must have an even number of edge times. +0372 Sdc.tcl:1061 non-increasing clock -waveform edge times. +0373 Sdc.tcl:1064 -waveform time greater than two periods. +0374 Sdc.tcl:1122 empty ports/pins/nets argument. +0375 Sdc.tcl:1130 -add requires -name. +0376 Sdc.tcl:1135 name or port_pin_list must be specified. +0377 Sdc.tcl:1142 missing -source argument. +0378 Sdc.tcl:1157 -master_clock argument empty. +0379 Sdc.tcl:1160 -add requireds -master_clock. +0380 Sdc.tcl:1164 -multiply_by and -divide_by options are exclusive. +0381 Sdc.tcl:1168 -divide_by is not an integer greater than one. +0382 Sdc.tcl:1171 -combinational implies -divide_by 1. +0383 Sdc.tcl:1176 -multiply_by is not an integer greater than one. +0384 Sdc.tcl:1182 -duty_cycle is not a float between 0 and 100. +0385 Sdc.tcl:1188 -edges only supported for three edges. +0386 Sdc.tcl:1194 edges times are not monotonically increasing. +0387 Sdc.tcl:1203 -edge_shift length does not match -edges length. +0388 Sdc.tcl:1209 missing -multiply_by, -divide_by, -combinational or -edges argument. +0389 Sdc.tcl:1217 cannot specify -invert without -multiply_by, -divide_by or -combinational. +0390 Sdc.tcl:1223 -duty_cycle requires -multiply_by value. +0391 Sdc.tcl:1283 group_path command failed. +0392 Sdc.tcl:1290 positional arguments not supported. +0393 Sdc.tcl:1294 -from, -through or -to required. +0394 Sdc.tcl:1300 -name and -default are mutually exclusive. +0395 Sdc.tcl:1302 -name or -default option is required. +0396 Sdc.tcl:1343 cannot specify both -high and -low. +0397 Sdc.tcl:1351 missing -setup or -hold argument. +0398 Sdc.tcl:1365 -high and -low only permitted for pins and instances. +0399 Sdc.tcl:1372 -high and -low only permitted for pins and instances. +0400 Sdc.tcl:1415 one of -logically_exclusive, -physically_exclusive or -asynchronous is required. +0401 Sdc.tcl:1418 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive. +0402 Sdc.tcl:1437 unknown keyword argument $arg. +0403 Sdc.tcl:1439 extra positional argument $arg. +0404 Sdc.tcl:1468 the -all and -name options are mutually exclusive. +0405 Sdc.tcl:1471 either -all or -name options must be specified. +0406 Sdc.tcl:1479 one of -logically_exclusive, -physically_exclusive or -asynchronous is required. +0407 Sdc.tcl:1482 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive. +0408 Sdc.tcl:1532 -clock ignored for clock objects. +0409 Sdc.tcl:1546 -source '[get_full_name $pin]' is not a clock pin. +0410 Sdc.tcl:1553 -early/-late is only allowed with -source. +0411 Sdc.tcl:1582 -clock ignored for clock objects. +0412 Sdc.tcl:1594 -source '[$pin path_name]' is not a clock pin. +0413 Sdc.tcl:1622 set_sense -type data not supported. +0414 Sdc.tcl:1626 set_sense -type clock|data +0415 Sdc.tcl:1637 set_clock_sense is deprecated as of SDC 2.1. Use set_sense -type clock. +0416 Sdc.tcl:1649 -pulse argument not supported. +0417 Sdc.tcl:1658 -positive, -negative, -stop_propagation and -pulse are mutually exclusive. +0418 Sdc.tcl:1671 hierarchical pin '[get_full_name $pin]' not supported. +0419 Sdc.tcl:1695 transition time can not be specified for virtual clocks. +0420 Sdc.tcl:1728 missing uncertainty value. +0421 Sdc.tcl:1776 -from/-to must be used together. +0422 Sdc.tcl:1796 -rise, -fall options not allowed for single clock uncertainty. +0423 Sdc.tcl:1862 -from/-to must be used together. +0424 Sdc.tcl:1882 -rise, -fall options not allowed for single clock uncertainty. +0425 Sdc.tcl:1923 missing -from, -rise_from or -fall_from argument. +0426 Sdc.tcl:1935 missing -to, -rise_to or -fall_to argument. +0427 Sdc.tcl:1983 missing -from, -rise_from or -fall_from argument. +0428 Sdc.tcl:1995 missing -to, -rise_to or -fall_to argument. +0429 Sdc.tcl:2037 -from/-to keywords ignored for lib_pin, port and pin arguments. +0430 Sdc.tcl:2067 -from/-to hierarchical instance not supported. +0431 Sdc.tcl:2099 pin '[get_full_name $inst]${hierarchy_separator}${port_name}' not found. +0432 Sdc.tcl:2140 pin '[get_name $cell]${hierarchy_separator}${port_name}' not found. +0434 Sdc.tcl:2174 -from/-to keywords ignored for lib_pin, port and pin arguments. +0435 Sdc.tcl:2226 -from/-to hierarchical instance not supported. +0436 Sdc.tcl:2280 '$args' ignored. +0437 Sdc.tcl:2284 -from, -through or -to required. +0438 Sdc.tcl:2363 -source_latency_included ignored with -reference_pin. +0439 Sdc.tcl:2366 -network_latency_included ignored with -reference_pin. +0440 Sdc.tcl:2385 $cmd not allowed on [pin_direction $pin] port '[get_full_name $pin]'. +0441 Sdc.tcl:2387 $cmd relative to a clock defined on the same port/pin not allowed. +0442 Sdc.tcl:2435 missing delay argument. +0443 Sdc.tcl:2441 '$args' ignored. +0444 Sdc.tcl:2566 missing path multiplier argument. +0445 Sdc.tcl:2571 '$args' ignored. +0446 Sdc.tcl:2578 cannot use -start with -end. +0447 Sdc.tcl:2628 $cmd command failed. +0448 Sdc.tcl:2635 positional arguments not supported. +0449 Sdc.tcl:2639 -from, -through or -to required. +0450 Sdc.tcl:2706 virtual clock [get_name $clk] can not be propagated. +0451 Sdc.tcl:2748 value must be 0, zero, 1, one, rise, rising, fall, or falling. +0452 Sdc.tcl:2817 cell '$lib_name:$cell_name' not found. +0453 Sdc.tcl:2823 '$cell_name' not found. +0454 Sdc.tcl:2827 missing -lib_cell argument. +0455 Sdc.tcl:2835 port '$to_port_name' not found. +0456 Sdc.tcl:2847 -pin argument required for cells with multiple outputs. +0457 Sdc.tcl:2862 port '$from_port_name' not found. +0458 Sdc.tcl:2880 -multiply_by ignored. +0459 Sdc.tcl:2883 -dont_scale ignored. +0460 Sdc.tcl:2886 -no_design_rule ignored. +0461 Sdc.tcl:2909 set_fanout_load not supported. +0462 Sdc.tcl:2933 -clock not supported. +0463 Sdc.tcl:2936 -clock_fall not supported. +0464 Sdc.tcl:2982 -pin_load not allowed for net objects. +0465 Sdc.tcl:2985 -wire_load not allowed for net objects. +0466 Sdc.tcl:2988 -rise/-fall not allowed for net objects. +0467 Sdc.tcl:3075 port '[get_name $port]' is not an input. +0468 Sdc.tcl:3121 -data_path, -clock_path, -rise, -fall ignored for ports and designs. +0469 Sdc.tcl:3192 derating factor greater than 2.0. +0470 Sdc.tcl:3229 -cell_delay and -cell_check flags ignored for net objects. +0471 Sdc.tcl:3299 no valid objects specified for $key. +0472 Sdc.tcl:3332 no valid objects specified for $key +0473 Sdc.tcl:3381 no valid objects specified for $key. +0474 Sdc.tcl:3449 operating condition '$op_cond_name' not found. +0475 Sdc.tcl:3467 operating condition '$op_cond_name' not found. +0476 Sdc.tcl:3481 -analysis_type must be single, bc_wc or on_chip_variation. +0477 Sdc.tcl:3493 set_wire_load_min_block_size not supported. +0478 Sdc.tcl:3506 mode must be top, enclosed or segmented. +0479 Sdc.tcl:3521 no wire load model specified. +0480 Sdc.tcl:3543 wire load model '$model_name' not found. +0481 Sdc.tcl:3582 wire load selection group '$selection_name' not found. +0482 Sdc.tcl:3670 define_corners must be called before read_liberty. +0500 Sdc.tcl:3740 no default operating conditions found. +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:326 report_clock_skew -setup and -hold are mutually exclusive options. +0517 Search.tcl:411 -all_violators is deprecated. Use -violators +0518 Search.tcl:491 -max_transition deprecated. Use -max_slew. +0519 Search.tcl:496 -min_transition deprecated. Use -min_slew. +0520 Search.tcl:510 analysis type single is not consistent with doing both setup/max and hold/min checks. +0521 Search.tcl:515 positional arguments not supported. +0522 Search.tcl:778 -min and -max cannot both be specified. +0523 Search.tcl:798 pin '$pin_arg' is hierarchical. +0524 Search.tcl:864 -format $format not recognized. +0525 Search.tcl:904 The transition_time field is deprecated. Use slew instead. +0526 Search.tcl:1011 specify one of -setup and -hold. +0527 Search.tcl:1060 unknown path group '$name'. +0540 Sta.tcl:158 -from/-to arguments not supported with -of_objects. +0541 Sta.tcl:286 unsupported -filter expression. +0560 Util.tcl:44 $cmd $key missing value. +0561 Util.tcl:61 $cmd $key missing value. +0562 Util.tcl:71 $cmd $arg is not a known keyword or flag. +0563 Util.tcl:93 $cmd $arg is not a known keyword or flag. +0564 Util.tcl:241 $cmd positional arguments not supported. +0565 Util.tcl:247 $cmd requires one positional argument. +0566 Util.tcl:254 $cmd requires zero or one positional arguments. +0567 Util.tcl:260 $cmd requires two positional arguments. +0568 Util.tcl:267 $cmd requires one or two positional arguments. +0569 Util.tcl:273 $cmd requires three positional arguments. +0570 Util.tcl:279 $cmd requires four positional arguments. +0571 Util.tcl:287 $cmd_arg '$arg' is not a float. +0572 Util.tcl:293 $cmd_arg '$arg' is not a positive float. +0573 Util.tcl:299 $cmd_arg '$arg' is not an integer. +0574 Util.tcl:305 $cmd_arg '$arg' is not a positive integer. +0575 Util.tcl:311 $cmd_arg '$arg' is not an integer greater than or equal to one. +0576 Util.tcl:317 $cmd_arg '$arg' is not between 0 and 100. +0590 Variables.tcl:45 sta_report_default_digits must be a positive integer. +0591 Variables.tcl:70 sta_crpr_mode must be pin or transition. +0592 Variables.tcl:187 $var_name value must be 0 or 1. +0600 WritePathSpice.tcl:35 Directory $spice_dir not found. +0601 WritePathSpice.tcl:38 $spice_dir is not a directory. +0602 WritePathSpice.tcl:41 Cannot write in $spice_dir. +0603 WritePathSpice.tcl:44 No -spice_directory specified. +0604 WritePathSpice.tcl:50 -lib_subckt_file $lib_subckt_file is not readable. +0605 WritePathSpice.tcl:53 No -lib_subckt_file specified. +0606 WritePathSpice.tcl:59 -model_file $model_file is not readable. +0607 WritePathSpice.tcl:62 No -model_file specified. +0608 WritePathSpice.tcl:68 No -power specified. +0609 WritePathSpice.tcl:74 No -ground specified. +0610 WritePathSpice.tcl:78 No -path_args specified. +0611 WritePathSpice.tcl:83 No paths found for -path_args $path_args. +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. +0622 Sdf.tcl:50 -analysis_type is deprecated. Use set_operating_conditions -analysis_type. +0623 Sdf.tcl:157 SDF -divider must be / or . 0800 VcdReader.cc:110 unhandled vcd command. 0801 VcdReader.cc:146 timescale syntax error. 0802 VcdReader.cc:160 Unknown timescale unit. 0804 VcdReader.cc:217 Variable syntax error. -0805 Vcd.cc:172 Unknown variable %s ID %s -0806 ReadVcdActivities.cc:251 clock %s vcd period %s differs from SDC clock period %s -0807 Sdc.tcl:394 only one of -cells, -data_pins, -clock_pins, -async_pins, -output_pins are suppported. -0808 ReadVcdActivities.cc:107 VCD max time is zero. -0809 ReadVcdActivities.cc:174 problem parsing bus %s. -0810 MakeTimingModel.cc:206 clock %s pin %s is inside model block. -0900 LibertyReader.cc:2868 level_shifter_type must be HL, LH, or HL_LH -0901 LibertyReader.cc:2904 switch_cell_type must be coarse_grain or fine_grain -0902 LibertyReader.cc:2477 unsupported model axis. -0903 LibertyReader.cc:4197 %s group not in timing group. -0904 LibertyReader.cc:2460 receiver_capacitance group not in timing or pin group. -0906 LibertyReader.cc:4090 unsupported model axis. -0907 LibertyReader.cc:2505 output_current_%s group not in timing group. -0908 LibertyReader.cc:2610 vector reference_time not found. -0912 LibertyReader.cc:2608 vector index_1 and index_2 must have exactly one value. -0913 LibertyReader.cc:2546 output current waveform %.2e %.2e not found. -0914 LibertyReader.cc:2643 normalized_driver_waveform variable_2 must be normalized_voltage -0915 LibertyReader.cc:2646 normalized_driver_waveform variable_1 must be input_net_transition -1640 Search.tcl:904 The transition_time field is deprecated. Use slew instead. +1000 ConcreteNetwork.cc:1923 cell type %s can not be linked. +1010 CycleAccting.cc:87 No common period was found between clocks %s and %s. +1020 DelayNormal1.cc:203 unknown early/late value. +1030 DelayNormal2.cc:378 unknown early/late value. +1040 DmpCeff.cc:1554 parasitic Pi model has NaNs. +1041 DmpCeff.cc:1582 cell %s delay model not supported on SPF parasitics by DMP delay calculator +1050 EstimateParasitics.cc:188 load pin not leaf or top level +1060 Genclks.cc:274 no master clock found for generated clock %s. +1062 Genclks.cc:938 generated clock %s source pin %s missing paths from master clock %s. +1080 Graph.cc:793 arc_delay_annotated array bounds exceeded +1081 Graph.cc:808 arc_delay_annotated array bounds exceeded +1082 Graph.cc:820 arc_delay_annotated array bounds exceeded +1083 Graph.cc:833 arc_delay_annotated array bounds exceeded +1100 GraphDelayCalc.cc:480 port not found in cell +1110 Liberty.cc:766 cell %s/%s port %s not found in cell %s/%s. +1111 Liberty.cc:792 cell %s/%s %s -> %s timing group %s not found in cell %s/%s. +1112 Liberty.cc:811 Liberty cell %s/%s for corner %s/%s not found. +1113 Liberty.cc:1748 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with %s -> %s setup_%s check. +1114 Liberty.cc:1762 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function positive sense. +1115 Liberty.cc:1770 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function negative sense. +1130 LibertyExpr.cc:82 %s references unknown port %s. +1131 LibertyExpr.cc:175 %s %s. +1140 LibertyReader.cc:598 library %s already exists. +1141 LibertyReader.cc:632 library missing name. +1142 LibertyReader.cc:658 default_wire_load %s not found. +1143 LibertyReader.cc:669 default_wire_selection %s not found. +1144 LibertyReader.cc:681 default_operating_condition %s not found. +1145 LibertyReader.cc:691 input_threshold_pct_%s not found. +1146 LibertyReader.cc:695 output_threshold_pct_%s not found. +1147 LibertyReader.cc:699 slew_lower_threshold_pct_%s not found. +1148 LibertyReader.cc:703 slew_upper_threshold_pct_%s not found. +1149 LibertyReader.cc:708 Library %s is missing one or more thresholds. +1150 LibertyReader.cc:787 unknown unit multiplier %s. +1151 LibertyReader.cc:810 unknown unit scale %c. +1152 LibertyReader.cc:813 unknown unit suffix %s. +1153 LibertyReader.cc:816 unknown unit suffix %s. +1154 LibertyReader.cc:841 capacitive_load_units are not ff or pf. +1155 LibertyReader.cc:844 capacitive_load_units are not a string. +1156 LibertyReader.cc:847 capacitive_load_units missing suffix. +1157 LibertyReader.cc:850 capacitive_load_units scale is not a float. +1158 LibertyReader.cc:853 capacitive_load_units missing scale and suffix. +1159 LibertyReader.cc:856 capacitive_load_unit missing values suffix. +1160 LibertyReader.cc:874 delay_model %s not supported. +1161 LibertyReader.cc:878 delay_model %s not supported. +1162 LibertyReader.cc:882 delay_model %s not supported. +1163 LibertyReader.cc:887 delay_model %s not supported. +. +1164 LibertyReader.cc:890 unknown delay_model %s +. +1165 LibertyReader.cc:909 unknown bus_naming_style format. +1166 LibertyReader.cc:930 voltage_map voltage is not a float. +1167 LibertyReader.cc:933 voltage_map missing voltage. +1168 LibertyReader.cc:936 voltage_map supply name is not a string. +1169 LibertyReader.cc:939 voltage_map missing supply name and voltage. +1170 LibertyReader.cc:942 voltage_map missing values suffix. +1171 LibertyReader.cc:1027 default_max_transition is 0.0. +1172 LibertyReader.cc:1042 default_max_fanout is 0.0. +1173 LibertyReader.cc:1132 default_fanout_load is 0.0. +1174 LibertyReader.cc:1160 default_wire_load_mode %s not found. +1175 LibertyReader.cc:1331 table template missing name. +1176 LibertyReader.cc:1376 missing variable_%d attribute. +1177 LibertyReader.cc:1452 missing table index values. +1178 LibertyReader.cc:1458 non-increasing table index values. +1179 LibertyReader.cc:1490 bus type %s missing bit_from. +1180 LibertyReader.cc:1492 bus type %s missing bit_to. +1181 LibertyReader.cc:1496 type missing name. +1182 LibertyReader.cc:1523 scaling_factors do not have a name. +1183 LibertyReader.cc:1692 operating_conditions missing name. +1184 LibertyReader.cc:1763 wire_load missing name. +1185 LibertyReader.cc:1806 fanout_length is missing length and fanout. +1186 LibertyReader.cc:1821 wire_load_selection missing name. +1187 LibertyReader.cc:1852 wireload %s not found. +1189 LibertyReader.cc:1859 wire_load_from_area min not a float. +1190 LibertyReader.cc:1862 wire_load_from_area max not a float. +1191 LibertyReader.cc:1865 wire_load_from_area missing parameters. +1192 LibertyReader.cc:1868 wire_load_from_area missing parameters. +1193 LibertyReader.cc:1887 cell missing name. +1194 LibertyReader.cc:1910 cell %s ocv_derate_group %s not found. +1195 LibertyReader.cc:1941 port %s function size does not match port size. +1196 LibertyReader.cc:1997 %s %s bus width mismatch. +1197 LibertyReader.cc:2008 %s %s bus width mismatch. +1198 LibertyReader.cc:2018 clear +1199 LibertyReader.cc:2028 preset +1200 LibertyReader.cc:2064 latch enable function is non-unate for port %s. +1201 LibertyReader.cc:2069 latch enable function is unknown for port %s. +1202 LibertyReader.cc:2141 operating conditions %s not found. +1203 LibertyReader.cc:2144 scaled_cell missing operating condition. +1204 LibertyReader.cc:2147 scaled_cell cell %s has not been defined. +1205 LibertyReader.cc:2150 scaled_cell missing name. +1206 LibertyReader.cc:2176 scaled_cell %s, %s port functions do not match cell port functions. +1207 LibertyReader.cc:2181 scaled_cell ports do not match cell ports. +1208 LibertyReader.cc:2183 scaled_cell %s, %s timing does not match cell timing. +1209 LibertyReader.cc:2202 combinational timing to an input port. +1210 LibertyReader.cc:2297 missing %s_transition. +1211 LibertyReader.cc:2299 missing cell_%s. +1212 LibertyReader.cc:2319 timing group from output port. +1213 LibertyReader.cc:2329 timing group from output port. +1214 LibertyReader.cc:2339 timing group from output port. +1215 LibertyReader.cc:2357 timing group from output port. +1217 LibertyReader.cc:2373 timing group from output port. +1218 LibertyReader.cc:2460 receiver_capacitance group not in timing or pin group. +1219 LibertyReader.cc:2477 unsupported model axis. +1220 LibertyReader.cc:2505 output_current_%s group not in timing group. +1221 LibertyReader.cc:2546 output current waveform %.2e %.2e not found. +1222 LibertyReader.cc:2566 unsupported model axis. +1223 LibertyReader.cc:2608 vector index_1 and index_2 must have exactly one value. +1224 LibertyReader.cc:2610 vector reference_time not found. +1225 LibertyReader.cc:2643 normalized_driver_waveform variable_2 must be normalized_voltage +1226 LibertyReader.cc:2646 normalized_driver_waveform variable_1 must be input_net_transition +1227 SpefReader.cc:732 %s. +1228 LibertyReader.cc:2868 level_shifter_type must be HL, LH, or HL_LH +1229 LibertyReader.cc:2904 switch_cell_type must be coarse_grain or fine_grain +1230 LibertyReader.cc:2928 scaling_factors %s not found. +1231 LibertyReader.cc:2969 pin name is not a string. +1232 LibertyReader.cc:2986 pin name is not a string. +1233 LibertyReader.cc:3000 pin name is not a string. +1234 LibertyReader.cc:3078 bus %s bus_type not found. +1235 LibertyReader.cc:3130 bus_type %s not found. +1236 LibertyReader.cc:3133 bus_type is not a string. +1237 LibertyReader.cc:3151 bundle %s member not found. +1238 LibertyReader.cc:3174 member is not a string. +1239 LibertyReader.cc:3181 members attribute is missing values. +1240 LibertyReader.cc:3232 unknown port direction. +1241 LibertyReader.cc:3466 max_transition is 0.0. +1242 LibertyReader.cc:3572 pulse_latch unknown pulse type. +1243 LibertyReader.cc:3861 timing group missing related_pin/related_bus_pin. +1244 LibertyReader.cc:3942 unknown timing_type %s. +1245 LibertyReader.cc:3962 unknown timing_sense %s. +1246 LibertyReader.cc:4002 mode value is not a string. +1247 LibertyReader.cc:4005 missing mode value. +1248 LibertyReader.cc:4008 mode name is not a string. +1249 LibertyReader.cc:4011 mode missing values. +1250 LibertyReader.cc:4014 mode missing mode name and value. +1251 LibertyReader.cc:4090 unsupported model axis. +1252 LibertyReader.cc:4117 unsupported model axis. +1253 LibertyReader.cc:4146 unsupported model axis. +1254 LibertyReader.cc:4181 unsupported model axis. +1255 LibertyReader.cc:4197 %s group not in timing group. +1256 LibertyReader.cc:4236 table template %s not found. +1257 LibertyReader.cc:4320 %s is missing values. +1258 LibertyReader.cc:4343 %s is not a list of floats. +1259 LibertyReader.cc:4345 table row has %u columns but axis has %d. +1260 LibertyReader.cc:4355 table has %u rows but axis has %d. +1261 LibertyReader.cc:4406 lut output is not a string. +1262 LibertyReader.cc:4423 cell %s test_cell redefinition. +1263 LibertyReader.cc:4448 mode definition missing name. +1264 LibertyReader.cc:4465 mode value missing name. +1265 LibertyReader.cc:4479 when attribute inside table model. +1266 LibertyReader.cc:4528 %s attribute is not a string. +1267 LibertyReader.cc:4531 %s is not a simple attribute. +1268 LibertyReader.cc:4551 %s attribute is not an integer. +1269 LibertyReader.cc:4554 %s is not a simple attribute. +1270 LibertyReader.cc:4567 %s is not a simple attribute. +1271 LibertyReader.cc:4593 %s value %s is not a float. +1272 LibertyReader.cc:4622 %s missing values. +1273 LibertyReader.cc:4626 %s missing values. +1274 LibertyReader.cc:4629 %s is not a complex attribute. +1275 LibertyReader.cc:4655 %s is not a float. +1276 LibertyReader.cc:4678 %s is missing values. +1277 LibertyReader.cc:4681 %s has more than one string. +1278 LibertyReader.cc:4690 %s is missing values. +1279 LibertyReader.cc:4715 %s attribute is not boolean. +1280 LibertyReader.cc:4718 %s attribute is not boolean. +1281 LibertyReader.cc:4721 %s is not a simple attribute. +1282 LibertyReader.cc:4737 attribute %s value %s not recognized. +1283 LibertyReader.cc:4768 unknown early/late value. +1284 LibertyReader.cc:4988 OCV derate group named %s not found. +1285 LibertyReader.cc:5004 ocv_derate missing name. +1286 LibertyReader.cc:5057 unknown rise/fall. +1287 LibertyReader.cc:5077 unknown derate type. +1288 LibertyReader.cc:5109 unsupported model axis. +1289 LibertyReader.cc:5141 unsupported model axis. +1290 LibertyReader.cc:5173 unsupported model axis. +1291 LibertyReader.cc:5244 unknown pg_type. +1292 LibertyReader.cc:5639 port %s subscript out of range. +1293 LibertyReader.cc:5643 port range %s of non-bus port %s. +1294 LibertyReader.cc:5657 port %s not found. +1295 LibertyReader.cc:5727 port %s not found. +1297 LibertyReader.cc:1418 axis type %s not supported. +1330 LibertyWriter.cc:286 %s/%s bundled ports not supported. +1331 LibertyWriter.cc:417 %s/%s/%s timing model not supported. +1332 LibertyWriter.cc:437 3 axis table models not supported. +1333 LibertyWriter.cc:581 %s/%s/%s timing arc type %s not supported. +1350 LumpedCapDelayCalc.cc:138 gate delay input variable is NaN +1351 TagGroup.cc:297 tag group missing tag +1355 MakeTimingModel.cc:206 clock %s pin %s is inside model block. +1360 Vcd.cc:172 Unknown variable %s ID %s +1370 PathEnum.cc:474 path diversion missing edge. +1380 PathEnumed.cc:126 enumerated path required time +1381 PathEnumed.cc:135 enumerated path required time +1390 PathGroup.cc:399 unknown path end type +1398 VerilogReader.cc:1782 %s is not a verilog module. +1399 VerilogReader.cc:1787 %s is not a verilog module. +1400 PathVertex.cc:236 missing arrivals. +1401 PathVertex.cc:250 missing arrivals. +1402 PathVertex.cc:279 missing requireds. +1420 PathVertexRep.cc:145 tag group missing tag +1421 PathVertexRep.cc:150 missing arrivals +1422 PathVertexRep.cc:153 missing arrivals. +1440 Power.cc:610 unknown function operator +1450 ReadVcdActivities.cc:107 VCD max time is zero. +1451 ReadVcdActivities.cc:174 problem parsing bus %s. +1452 ReadVcdActivities.cc:251 clock %s vcd period %s differs from SDC clock period %s +1470 ReportPath.cc:289 unsupported path type +1471 ReportPath.cc:310 unsupported path type +1473 ReportPath.cc:349 unsupported path type +1474 ReportPath.cc:2378 unsupported path type +1490 Sdc.cc:4058 group path name and is_default are mutually exclusive. +1500 SdcNetwork.cc:1095 inst path string lenth estimate busted +1501 SdcNetwork.cc:1167 inst path string lenth estimate exceeded +1510 Search.cc:2654 max tag group index exceeded +1511 Search.cc:2890 max tag index exceeded +1512 Search.cc:3617 unexpected filter path +1513 Search.cc:3785 tns incr existing vertex +1520 Sim.cc:209 unknown function operator +1521 Sim.cc:864 propagated logic value %c differs from constraint value of %c on pin %s. +1525 SpefParse.yy:805 %d is not positive. +1526 SpefParse.yy:814 %.4f is not positive. +1527 SpefParse.yy:820 %.4f is not positive. +1550 Sta.cc:2032 '%s' is not a valid start point. +1551 Sta.cc:2108 '%s' is not a valid endpoint. +1552 Sta.cc:2431 maximum corner count exceeded +1553 Sta.cc:4228 corresponding timing arc set not found in equiv cells +1570 StaTcl.i:118 no network has been linked. +1571 StaTcl.i:132 network does not support edits. +1573 StaTcl.i:4115 unknown common clk pessimism mode. +1574 StaTcl.i:4129 POCV support requires compilation with SSTA=1. +1575 StaTcl.i:4367 unknown report path field %s +1576 StaTcl.i:4379 unknown report path field %s +1577 StaTcl.i:5064 unknown clock sense +1600 WritePathSpice.cc:287 No liberty libraries found, +1602 WritePathSpice.cc:517 Liberty pg_port %s/%s missing voltage_name attribute, +1603 WritePathSpice.cc:1096 %s pg_port %s not found, +1604 WritePathSpice.cc:1151 no register/latch found for path from %s to %s, +1605 WritePathSpice.cc:1617 The subkct file %s is missing definitions for %s +1606 WritePathSpice.cc:1715 subckt %s port %s has no corresponding liberty port, pg_port and is not power or ground. +1620 WriteSdc.cc:1254 unknown exception type +1621 WriteSdc.cc:1796 illegal set_logic value +1622 WriteSdc.cc:1837 invalid set_case_analysis value diff --git a/network/ConcreteNetwork.cc b/network/ConcreteNetwork.cc index 8c141511..847333e8 100644 --- a/network/ConcreteNetwork.cc +++ b/network/ConcreteNetwork.cc @@ -1920,7 +1920,7 @@ ConcreteNetwork::linkNetwork(const char *top_cell_name, return top_instance_ != nullptr; } else { - report->error(8, "cell type %s can not be linked.", top_cell_name); + report->error(1000, "cell type %s can not be linked.", top_cell_name); return false; } } diff --git a/network/SdcNetwork.cc b/network/SdcNetwork.cc index 586ba3f8..f29db85a 100644 --- a/network/SdcNetwork.cc +++ b/network/SdcNetwork.cc @@ -1092,7 +1092,7 @@ SdcNetwork::parsePath(const char *path, else *p++ = ch; if (p - inst_path + 1 > inst_path_length) - report_->critical(211, "inst path string lenth estimate busted"); + report_->critical(1500, "inst path string lenth estimate busted"); } *p = '\0'; stringDelete(inst_path); @@ -1164,7 +1164,7 @@ SdcNetwork::visitMatches(const Instance *parent, *p++ = ch; } if (p - inst_path + 1 > inst_path_length) - report_->critical(212, "inst path string lenth estimate exceeded"); + report_->critical(1501, "inst path string lenth estimate exceeded"); } *p = '\0'; if (!found_match) { diff --git a/parasitics/EstimateParasitics.cc b/parasitics/EstimateParasitics.cc index e14eaa2a..9c06e46a 100644 --- a/parasitics/EstimateParasitics.cc +++ b/parasitics/EstimateParasitics.cc @@ -185,7 +185,7 @@ EstimateParasitics::estimatePiElmoreBalanced(const Pin *drvr_pin, else if (network->isTopLevelPort(load_pin)) load_cap = sdc->portExtCap(port, rf, corner, min_max); else - report->critical(597, "load pin not leaf or top level"); + report->critical(1050, "load pin not leaf or top level"); double cap = load_cap + cap_fanout; double y2_ = res_fanout * cap * cap; y1 += cap; diff --git a/parasitics/Parasitics.tcl b/parasitics/Parasitics.tcl index 8e569ad3..6d78c35e 100644 --- a/parasitics/Parasitics.tcl +++ b/parasitics/Parasitics.tcl @@ -42,7 +42,7 @@ proc_redirect read_spef { set path $keys(-path) set instance [find_instance $path] if { $instance == "NULL" } { - sta_error 433 "path instance '$path' not found." + sta_error 270 "path instance '$path' not found." } } set corner [parse_corner_or_all keys] @@ -59,7 +59,7 @@ proc_redirect read_spef { if [info exists keys(-reduce_to)] { set reduce_to $keys(-reduce_to) if { !($reduce_to == "pi_elmore" || $reduce_to == "pi_pole_residue2") } { - sta_error 434 "-reduce_to must be pi_elmore or pi_pole_residue2." + sta_error 271 "-reduce_to must be pi_elmore or pi_pole_residue2." } } set delete_after_reduce [info exists flags(-delete_after_reduce)] @@ -67,7 +67,7 @@ proc_redirect read_spef { set save [info exists flags(-save)] set filename [file nativename [lindex $args 0]] if { [info exists flags(-increment)] } { - sta_warn 706 "read_spef -increment is deprecated." + sta_warn 272 "read_spef -increment is deprecated." } return [read_spef_cmd $filename $instance $corner $min_max \ $pin_cap_included $keep_coupling_caps $coupling_reduction_factor \ diff --git a/parasitics/SpefParse.yy b/parasitics/SpefParse.yy index a92d9251..10048c2b 100755 --- a/parasitics/SpefParse.yy +++ b/parasitics/SpefParse.yy @@ -802,7 +802,7 @@ pos_integer: INTEGER { int value = $1; if (value < 0) - sta::spef_reader->warn(21, "%d is not positive.", value); + sta::spef_reader->warn(1525, "%d is not positive.", value); $$ = value; } ; @@ -811,13 +811,13 @@ pos_number: INTEGER { float value = static_cast($1); if (value < 0) - sta::spef_reader->warn(22, "%.4f is not positive.", value); + sta::spef_reader->warn(1526, "%.4f is not positive.", value); $$ = value; } | FLOAT { float value = static_cast($1); if (value < 0) - sta::spef_reader->warn(23, "%.4f is not positive.", value); + sta::spef_reader->warn(1527, "%.4f is not positive.", value); $$ = value; } ; diff --git a/parasitics/SpefReader.cc b/parasitics/SpefReader.cc index cdff33a4..11b2d464 100644 --- a/parasitics/SpefReader.cc +++ b/parasitics/SpefReader.cc @@ -729,6 +729,6 @@ int SpefParse_error(const char *msg) { spefFlushBuffer(); - sta::spef_reader->warn(707, "%s.", msg); + sta::spef_reader->warn(1227, "%s.", msg); return 0; } diff --git a/power/Power.cc b/power/Power.cc index 88ab8685..88099bc9 100644 --- a/power/Power.cc +++ b/power/Power.cc @@ -607,7 +607,7 @@ Power::funcBdd(const FuncExpr *expr) result = Cudd_ReadLogicZero(cudd_mgr_); break; default: - report_->critical(598, "unknown function operator"); + report_->critical(1440, "unknown function operator"); } if (result) Cudd_Ref(result); diff --git a/power/Power.tcl b/power/Power.tcl index 3d2fae13..b8384d42 100644 --- a/power/Power.tcl +++ b/power/Power.tcl @@ -240,7 +240,7 @@ proc set_power_activity { args } { foreach port $ports { if { [get_property $port "direction"] == "input" } { if { [sta::is_clock_src [sta::get_port_pin $port]] } { - sta_warn 299 "activity cannot be set on clock ports." + sta_warn 303 "activity cannot be set on clock ports." } else { set_power_input_port_activity $port $activity $duty } diff --git a/power/ReadVcdActivities.cc b/power/ReadVcdActivities.cc index 3abaf594..66d2a39b 100644 --- a/power/ReadVcdActivities.cc +++ b/power/ReadVcdActivities.cc @@ -104,7 +104,7 @@ ReadVcdActivities::readActivities() if (vcd_.timeMax() > 0) setActivities(); else - report_->warn(808, "VCD max time is zero."); + report_->warn(1450, "VCD max time is zero."); report_->reportLine("Annotated %lu pin activities.", annotated_pins_.size()); } @@ -171,7 +171,7 @@ ReadVcdActivities::setVarActivity(VcdVar *var, } } else - report_->warn(809, "problem parsing bus %s.", var_name.c_str()); + report_->warn(1451, "problem parsing bus %s.", var_name.c_str()); } } @@ -248,7 +248,7 @@ ReadVcdActivities::checkClkPeriod(const Pin *pin, double clk_period = clk->period(); if (abs((clk_period - sim_period) / clk_period) > .1) // Warn if sim clock period differs from SDC by 10%. - report_->warn(806, "clock %s vcd period %s differs from SDC clock period %s", + report_->warn(1452, "clock %s vcd period %s differs from SDC clock period %s", clk->name(), delayAsString(sim_period, this), delayAsString(clk_period, this)); diff --git a/power/Vcd.cc b/power/Vcd.cc index 6033dbd9..850e4f99 100644 --- a/power/Vcd.cc +++ b/power/Vcd.cc @@ -169,7 +169,7 @@ VcdValues & Vcd::values(VcdVar *var) { if (id_values_map_.find(var->id()) == id_values_map_.end()) { - report_->error(805, "Unknown variable %s ID %s", + report_->error(1360, "Unknown variable %s ID %s", var->name().c_str(), var->id().c_str()); static VcdValues empty; diff --git a/power/VcdReader.cc b/power/VcdReader.cc index e30be19d..70ce8a99 100644 --- a/power/VcdReader.cc +++ b/power/VcdReader.cc @@ -189,7 +189,7 @@ VcdReader::parseVar() string type_name = tokens[0]; VcdVarType type = vcd_var_type_map.find(type_name, VcdVarType::unknown); if (type == VcdVarType::unknown) - report_->fileWarn(803, filename_, stmt_line_, + report_->fileWarn(1370, filename_, stmt_line_, "Unknown variable type %s.", type_name.c_str()); else { diff --git a/sdc/CycleAccting.cc b/sdc/CycleAccting.cc index 1012743d..f515fb28 100644 --- a/sdc/CycleAccting.cc +++ b/sdc/CycleAccting.cc @@ -84,7 +84,7 @@ CycleAcctings::reportClkToClkMaxCycleWarnings(Report *report) ClockPair clk_pair2(tgt_clk, src_clk); if (!clk_warnings.hasKey(clk_pair1) && !clk_warnings.hasKey(clk_pair2)) { - report->warn(9, "No common period was found between clocks %s and %s.", + report->warn(1010, "No common period was found between clocks %s and %s.", src_clk->name(), tgt_clk->name()); clk_warnings.insert(clk_pair1); diff --git a/sdc/Sdc.cc b/sdc/Sdc.cc index c4c071d8..c0bd472d 100644 --- a/sdc/Sdc.cc +++ b/sdc/Sdc.cc @@ -4055,7 +4055,7 @@ Sdc::makeGroupPath(const char *name, { checkFromThrusTo(from, thrus, to); if (name && is_default) - report_->critical(213, "group path name and is_default are mutually exclusive."); + report_->critical(1490, "group path name and is_default are mutually exclusive."); else if (name) { GroupPath *group_path = new GroupPath(name, is_default, from, thrus, to, true, comment); diff --git a/sdc/WriteSdc.cc b/sdc/WriteSdc.cc index e937abac..c5e07bdd 100644 --- a/sdc/WriteSdc.cc +++ b/sdc/WriteSdc.cc @@ -1251,7 +1251,7 @@ WriteSdc::writeExceptionCmd(ExceptionPath *exception) const gzprintf(stream_, "group_path -name %s", exception->name()); } else - report_->critical(214, "unknown exception type"); + report_->critical(1620, "unknown exception type"); } void @@ -1793,7 +1793,7 @@ WriteSdc::setConstantCmd(const Pin *pin) const case LogicValue::rise: case LogicValue::fall: default: - report_->critical(215, "illegal set_logic value"); + report_->critical(1621, "illegal set_logic value"); return nullptr; } } @@ -1834,7 +1834,7 @@ WriteSdc::caseAnalysisValueStr(const Pin *pin) const return "falling"; case LogicValue::unknown: default: - report_->critical(216, "invalid set_case_analysis value"); + report_->critical(1622, "invalid set_case_analysis value"); return nullptr; } } diff --git a/sdf/Sdf.tcl b/sdf/Sdf.tcl index 324a2be9..0d439579 100644 --- a/sdf/Sdf.tcl +++ b/sdf/Sdf.tcl @@ -38,16 +38,16 @@ proc_redirect read_sdf { if [info exists keys(-cond_use)] { set cond_use $keys(-cond_use) if { $cond_use != "min" && $cond_use != "max" && $cond_use != "min_max" } { - sta_warn 612 "-cond_use must be min, max or min_max." + sta_warn 620 "-cond_use must be min, max or min_max." set cond_use "NULL" } if { $cond_use == "min_max" \ && { [operating_condition_analysis_type] == "single" }} { - sta_error 430 "-cond_use min_max cannot be used with analysis type single." + sta_error 621 "-cond_use min_max cannot be used with analysis type single." } } if [info exists keys(-analysis_type)] { - sta_warn 617 "-analysis_type is deprecated. Use set_operating_conditions -analysis_type." + sta_warn 622 "-analysis_type is deprecated. Use set_operating_conditions -analysis_type." } set unescaped_dividers [info exists flags(-unescaped_dividers)] @@ -154,7 +154,7 @@ proc_redirect write_sdf { if [info exists keys(-divider)] { set divider $keys(-divider) if { !($divider == "/" || $divider == ".") } { - sta_error 432 "SDF -divider must be / or ." + sta_error 623 "SDF -divider must be / or ." } } set digits 3 diff --git a/search/Genclks.cc b/search/Genclks.cc index e967c09e..93341238 100644 --- a/search/Genclks.cc +++ b/search/Genclks.cc @@ -271,7 +271,7 @@ Genclks::checkMaster(Clock *gclk) { ensureMaster(gclk); if (gclk->masterClk() == nullptr) - report_->warn(10, "no master clock found for generated clock %s.", + report_->warn(1060, "no master clock found for generated clock %s.", gclk->name()); } @@ -329,7 +329,7 @@ Genclks::ensureMaster(Clock *gclk) } } if (master_clk_count > 1) - report_->warn(12, + report_->warn(1061, "generated clock %s pin %s is in the fanout of multiple clocks.", gclk->name(), network_->pathName(src_pin)); @@ -935,7 +935,7 @@ Genclks::recordSrcPaths(Clock *gclk) // Don't warn if the master clock is ideal. && gclk->masterClk() && gclk->masterClk()->isPropagated()) - report_->warn(13, "generated clock %s source pin %s missing paths from master clock %s.", + report_->warn(1062, "generated clock %s source pin %s missing paths from master clock %s.", gclk->name(), network_->pathName(gclk_pin), gclk->masterClk()->name()); diff --git a/search/MakeTimingModel.cc b/search/MakeTimingModel.cc index ddda57a2..052a4571 100644 --- a/search/MakeTimingModel.cc +++ b/search/MakeTimingModel.cc @@ -203,7 +203,7 @@ MakeTimingModel::checkClock(Clock *clk) { for (const Pin *pin : clk->leafPins()) { if (!network_->isTopLevelPort(pin)) - report_->warn(810, "clock %s pin %s is inside model block.", + report_->warn(1355, "clock %s pin %s is inside model block.", clk->name(), network_->pathName(pin)); } diff --git a/search/PathEnum.cc b/search/PathEnum.cc index 6b64f053..8d21f399 100644 --- a/search/PathEnum.cc +++ b/search/PathEnum.cc @@ -471,7 +471,7 @@ PathEnum::divSlack(Path *before_div, return div_arrival - arc_arrival; } else { - report()->error(619, "path diversion missing edge."); + report()->error(1370, "path diversion missing edge."); return 0.0; } } diff --git a/search/PathEnumed.cc b/search/PathEnumed.cc index ef8a19ee..dcfd2d76 100644 --- a/search/PathEnumed.cc +++ b/search/PathEnumed.cc @@ -123,7 +123,7 @@ const Required & PathEnumed::required(const StaState *sta) const { // Required times are never needed for enumerated paths. - sta->report()->critical(251, "enumerated path required time"); + sta->report()->critical(1380, "enumerated path required time"); return delay_zero; } @@ -132,7 +132,7 @@ PathEnumed::setRequired(const Required &, const StaState *sta) { // Required times are never needed for enumerated paths. - sta->report()->critical(252, "enumerated path required time"); + sta->report()->critical(1381, "enumerated path required time"); } Path * diff --git a/search/PathGroup.cc b/search/PathGroup.cc index d7b75041..51096246 100644 --- a/search/PathGroup.cc +++ b/search/PathGroup.cc @@ -396,7 +396,7 @@ PathGroups::pathGroup(const PathEnd *path_end) const else if (path_end->isUnconstrained()) return unconstrained_[mm_index]; else { - report_->critical(253, "unknown path end type"); + report_->critical(1390, "unknown path end type"); return nullptr; } } diff --git a/search/PathVertex.cc b/search/PathVertex.cc index ef68d11d..44af7515 100644 --- a/search/PathVertex.cc +++ b/search/PathVertex.cc @@ -233,7 +233,7 @@ PathVertex::arrival(const StaState *sta) const if (arrivals) return arrivals[arrival_index_]; else { - sta->report()->error(620, "missing arrivals."); + sta->report()->error(1400, "missing arrivals."); return 0.0; } } @@ -247,7 +247,7 @@ PathVertex::setArrival(Arrival arrival, if (arrivals) arrivals[arrival_index_] = arrival; else - sta->report()->error(621, "missing arrivals."); + sta->report()->error(1401, "missing arrivals."); } } @@ -276,7 +276,7 @@ PathVertex::setRequired(const Required &required, requireds = graph->makeRequireds(vertex_, arrival_count); } else - sta->report()->error(622, "missing requireds."); + sta->report()->error(1402, "missing requireds."); } requireds[arrival_index_] = required; } diff --git a/search/PathVertexRep.cc b/search/PathVertexRep.cc index 624372d0..67aa5368 100644 --- a/search/PathVertexRep.cc +++ b/search/PathVertexRep.cc @@ -142,15 +142,15 @@ PathVertexRep::arrival(const StaState *sta) const bool arrival_exists; tag_group->arrivalIndex(tag, arrival_index, arrival_exists); if (!arrival_exists) - sta->report()->critical(254, "tag group missing tag"); + sta->report()->critical(1420, "tag group missing tag"); Arrival *arrivals = graph->arrivals(vertex); if (arrivals) return arrivals[arrival_index]; else - sta->report()->critical(624, "missing arrivals"); + sta->report()->critical(1421, "missing arrivals"); } else - sta->report()->error(623, "missing arrivals."); + sta->report()->error(1422, "missing arrivals."); return 0.0; } diff --git a/search/ReportPath.cc b/search/ReportPath.cc index 693651c8..adbb8a0b 100644 --- a/search/ReportPath.cc +++ b/search/ReportPath.cc @@ -286,7 +286,7 @@ ReportPath::reportPathEndHeader() reportSlackOnlyHeader(); break; default: - report_->critical(255, "unsupported path type"); + report_->critical(1470, "unsupported path type"); break; } } @@ -307,7 +307,7 @@ ReportPath::reportPathEndFooter() reportBlankLine(); break; default: - report_->critical(256, "unsupported path type"); + report_->critical(1471, "unsupported path type"); break; } } @@ -346,7 +346,7 @@ ReportPath::reportPathEnd(PathEnd *end, reportSlackOnly(end); break; default: - report_->critical(257, "unsupported path type"); + report_->critical(1473, "unsupported path type"); break; } } @@ -2375,7 +2375,7 @@ ReportPath::reportPath(const Path *path) case ReportPathFormat::summary: case ReportPathFormat::slack_only: default: - report_->critical(259, "unsupported path type"); + report_->critical(1474, "unsupported path type"); break; } } diff --git a/search/Search.cc b/search/Search.cc index 27135bb9..69124abf 100644 --- a/search/Search.cc +++ b/search/Search.cc @@ -2651,7 +2651,7 @@ Search::findTagGroup(TagGroupBldr *tag_bldr) tag_group_set_->reserve(new_capacity); } if (tag_group_next_ > tag_group_index_max) - report_->critical(260, "max tag group index exceeded"); + report_->critical(1510, "max tag group index exceeded"); } return tag_group; } @@ -2887,7 +2887,7 @@ Search::findTag(const RiseFall *rf, tag_set_->reserve(new_capacity); } if (tag_next_ == tag_index_max) - report_->critical(261, "max tag index exceeded"); + report_->critical(1511, "max tag index exceeded"); } if (own_states) delete states; @@ -3614,7 +3614,7 @@ Search::matchesFilter(Path *path, // -to return matchesFilterTo(path, to_clk_edge); else { - report_->critical(262, "unexpected filter path"); + report_->critical(1512, "unexpected filter path"); return false; } } @@ -3782,7 +3782,7 @@ Search::tnsIncr(Vertex *vertex, vertex->name(sdc_network_)); tns_[path_ap_index] += slack; if (tns_slacks_[path_ap_index].hasKey(vertex)) - report_->critical(263, "tns incr existing vertex"); + report_->critical(1513, "tns incr existing vertex"); tns_slacks_[path_ap_index][vertex] = slack; } } diff --git a/search/Sim.cc b/search/Sim.cc index 24c98e2b..d1b9ff48 100644 --- a/search/Sim.cc +++ b/search/Sim.cc @@ -206,7 +206,7 @@ Sim::funcBdd(const FuncExpr *expr, result = Cudd_ReadLogicZero(cudd_mgr_); break; default: - report_->critical(596, "unknown function operator"); + report_->critical(1520, "unknown function operator"); } if (result) Cudd_Ref(result); @@ -861,7 +861,7 @@ Sim::setPinValue(const Pin *pin, if (exists && value != constraint_value) { if (value != LogicValue::unknown) - report_->warn(15, "propagated logic value %c differs from constraint value of %c on pin %s.", + report_->warn(1521, "propagated logic value %c differs from constraint value of %c on pin %s.", logicValueString(value), logicValueString(constraint_value), sdc_network_->pathName(pin)); diff --git a/search/Sta.cc b/search/Sta.cc index bb437451..2efe3fbf 100644 --- a/search/Sta.cc +++ b/search/Sta.cc @@ -2029,7 +2029,7 @@ Sta::checkExceptionFromPins(ExceptionFrom *from, report_->fileWarn(267, file, line, "'%s' is not a valid start point.", cmd_network_->pathName(pin)); else - report_->warn(18, "'%s' is not a valid start point.", + report_->warn(1550, "'%s' is not a valid start point.", cmd_network_->pathName(pin)); } } @@ -2105,7 +2105,7 @@ Sta::checkExceptionToPins(ExceptionTo *to, report_->fileWarn(266, file, line, "'%s' is not a valid endpoint.", cmd_network_->pathName(pin)); else - report_->warn(17, "'%s' is not a valid endpoint.", + report_->warn(1551, "'%s' is not a valid endpoint.", cmd_network_->pathName(pin)); } } @@ -2428,7 +2428,7 @@ void Sta::makeCorners(StringSet *corner_names) { if (corner_names->size() > corner_count_max) - report_->error(374, "maximum corner count exceeded"); + report_->error(1552, "maximum corner count exceeded"); sdc_->makeCornersBefore(); parasitics_->deleteParasitics(); corners_->makeCorners(corner_names); @@ -4225,7 +4225,7 @@ Sta::replaceEquivCellBefore(const Instance *inst, if (to_set) edge->setTimingArcSet(to_set); else - report_->critical(264, "corresponding timing arc set not found in equiv cells"); + report_->critical(1553, "corresponding timing arc set not found in equiv cells"); } } } diff --git a/search/TagGroup.cc b/search/TagGroup.cc index 090515ac..cc4c16ff 100644 --- a/search/TagGroup.cc +++ b/search/TagGroup.cc @@ -294,7 +294,7 @@ TagGroupBldr::copyArrivals(TagGroup *tag_group, } } else - sta_->report()->critical(265, "tag group missing tag"); + sta_->report()->critical(1351, "tag group missing tag"); } } diff --git a/search/WritePathSpice.cc b/search/WritePathSpice.cc index 372b9752..c34a4603 100644 --- a/search/WritePathSpice.cc +++ b/search/WritePathSpice.cc @@ -284,7 +284,7 @@ writePathSpice(Path *path, StaState *sta) { if (sta->network()->defaultLibertyLibrary() == nullptr) - sta->report()->error(20, "No liberty libraries found,"); + sta->report()->error(1600, "No liberty libraries found,"); WritePathSpice writer(path, spice_filename, subckt_filename, lib_subckt_filename, model_filename, off_path_pin_names, power_name, gnd_name, sta); @@ -507,14 +507,14 @@ WritePathSpice::pgPortVoltage(LibertyPgPort *pg_port) else if (stringEqual(voltage_name, gnd_name_)) voltage = gnd_voltage_; else - report_->error(24, "pg_pin %s/%s voltage %s not found,", + report_->error(1601 , "pg_pin %s/%s voltage %s not found,", pg_port->cell()->name(), pg_port->name(), voltage_name); } } else - report_->error(25, "Liberty pg_port %s/%s missing voltage_name attribute,", + report_->error(1602, "Liberty pg_port %s/%s missing voltage_name attribute,", pg_port->cell()->name(), pg_port->name()); return voltage; @@ -1093,7 +1093,7 @@ WritePathSpice::writeVoltageSource(LibertyCell *cell, if (pg_port) voltage = pgPortVoltage(pg_port); else - report_->error(26, "%s pg_port %s not found,", + report_->error(1603, "%s pg_port %s not found,", cell->name(), pg_port_name); @@ -1148,7 +1148,7 @@ WritePathSpice::regPortValues(Stage stage, dcalc_ap_index = drvr_path->dcalcAnalysisPt(this)->index(); } else - report_->error(27, "no register/latch found for path from %s to %s,", + report_->error(1604, "no register/latch found for path from %s to %s,", stageGateInputPort(stage)->name(), stageDrvrPort(stage)->name()); } @@ -1614,7 +1614,7 @@ WritePathSpice::writeSubckts() missing_cells += "\n"; missing_cells += cell_name; } - report_->error(28, "The subkct file %s is missing definitions for %s", + report_->error(1605, "The subkct file %s is missing definitions for %s", lib_subckt_filename_, missing_cells.c_str()); } @@ -1712,7 +1712,7 @@ WritePathSpice::recordSpicePortNames(const char *cell_name, && pg_port == nullptr && !stringEqual(port_name, power_name_) && !stringEqual(port_name, gnd_name_)) - report_->error(29, "subckt %s port %s has no corresponding liberty port, pg_port and is not power or ground.", + report_->error(1606, "subckt %s port %s has no corresponding liberty port, pg_port and is not power or ground.", cell_name, port_name); spice_port_names->push_back(port_name); } diff --git a/tcl/CmdArgs.tcl b/tcl/CmdArgs.tcl index c19df5a1..be902e56 100644 --- a/tcl/CmdArgs.tcl +++ b/tcl/CmdArgs.tcl @@ -105,7 +105,7 @@ proc get_object_args { objects clks_var libcells_var libports_var \ && $object_type == "TimingArcSet" } { lappend timing_arc_sets $obj } else { - sta_error 467 "unsupported object type $object_type." + sta_error 100 "unsupported object type $object_type." } } elseif { $obj != {} } { # Check for implicit arg. @@ -163,7 +163,7 @@ proc get_object_args { objects clks_var libcells_var libports_var \ if { $matches != {} } { set nets [concat $nets $matches] } else { - sta_warn 305 "object '$obj' not found." + sta_warn 101 "object '$obj' not found." } } } @@ -402,12 +402,12 @@ proc parse_corner { keys_var } { set corner_name $keys(-corner) set corner [find_corner $corner_name] if { $corner == "NULL" } { - sta_error 468 "$corner_name is not the name of process corner." + sta_error 102 "$corner_name is not the name of process corner." } else { return $corner } } elseif { [multi_corner] } { - sta_error 469 "-corner keyword required with multi-corner analysis." + sta_error 103 "-corner keyword required with multi-corner analysis." } else { return [cmd_corner] } @@ -422,12 +422,12 @@ proc parse_corner_required { keys_var } { set corner_name $keys(-corner) set corner [find_corner $corner_name] if { $corner == "NULL" } { - sta_error 470 "$corner_name is not the name of process corner." + sta_error 104 "$corner_name is not the name of process corner." } else { return $corner } } else { - sta_error 471 "missing -corner arg." + sta_error 105 "missing -corner arg." } } @@ -438,7 +438,7 @@ proc parse_corner_or_default { keys_var } { set corner_name $keys(-corner) set corner [find_corner $corner_name] if { $corner == "NULL" } { - sta_error 472 "$corner_name is not the name of process corner." + sta_error 106 "$corner_name is not the name of process corner." } else { return $corner } @@ -455,7 +455,7 @@ proc parse_corner_or_all { keys_var } { set corner_name $keys(-corner) set corner [find_corner $corner_name] if { $corner == "NULL" } { - sta_error 473 "$corner_name is not the name of process corner." + sta_error 107 "$corner_name is not the name of process corner." } else { return $corner } @@ -480,7 +480,7 @@ proc parse_rise_fall_flags { flags_var } { proc parse_min_max_flags { flags_var } { upvar 1 $flags_var flags if { [info exists flags(-min)] && [info exists flags(-max)] } { - sta_error 474 "both -min and -max specified." + sta_error 108 "both -min and -max specified." } elseif { [info exists flags(-min)] && ![info exists flags(-max)] } { return "min" } elseif { [info exists flags(-max)] && ![info exists flags(-min)] } { @@ -494,7 +494,7 @@ proc parse_min_max_flags { flags_var } { proc parse_min_max_all_flags { flags_var } { upvar 1 $flags_var flags if { [info exists flags(-min)] && [info exists flags(-max)] } { - sta_error 475 "both -min and -max specified." + sta_error 109 "both -min and -max specified." } elseif { [info exists flags(-min)] && ![info exists flags(-max)] } { return "min" } elseif { [info exists flags(-max)] && ![info exists flags(-min)] } { @@ -521,20 +521,20 @@ proc parse_min_max_all_check_flags { flags_var } { proc parse_early_late_flags { flags_var } { upvar 1 $flags_var flags if { [info exists flags(-early)] && [info exists flags(-late)] } { - sta_error 476 "only one of -early and -late can be specified." + sta_error 110 "only one of -early and -late can be specified." } elseif { [info exists flags(-early)] } { return "min" } elseif { [info exists flags(-late)] } { return "max" } else { - sta_error 477 "-early or -late must be specified." + sta_error 111 "-early or -late must be specified." } } proc parse_early_late_all_flags { flags_var } { upvar 1 $flags_var flags if { [info exists flags(-early)] && [info exists flags(-late)] } { - sta_error 478 "both -early and -late specified." + sta_error 112 "both -early and -late specified." } elseif { [info exists flags(-early)] && ![info exists flags(-late)] } { return "min" } elseif { [info exists flags(-late)] && ![info exists flags(-early)] } { @@ -549,18 +549,18 @@ proc parse_early_late_all_flags { flags_var } { proc get_liberty_error { arg_name arg } { set lib "NULL" if {[llength $arg] > 1} { - sta_error 479 "$arg_name must be a single library." + sta_error 113 "$arg_name must be a single library." } elseif { [is_object $arg] } { set object_type [object_type $arg] if { $object_type == "LibertyLibrary" } { set lib $arg } else { - sta_error 480 "$arg_name type '$object_type' is not a library." + sta_error 114 "$arg_name type '$object_type' is not a library." } } else { set lib [find_liberty $arg] if { $lib == "NULL" } { - sta_error 481 "library '$arg' not found." + sta_error 115 "library '$arg' not found." } } return $lib @@ -577,13 +577,13 @@ proc get_lib_cell_error { arg_name arg } { proc get_lib_cell_arg { arg_name arg error_proc } { set lib_cell "NULL" if { [llength $arg] > 1 } { - sta_error 482 "$arg_name must be a single lib cell." + sta_error 116 "$arg_name must be a single lib cell." } elseif { [is_object $arg] } { set object_type [object_type $arg] if { $object_type == "LibertyCell" } { set lib_cell $arg } else { - $error_proc 700 "$arg_name type '$object_type' is not a liberty cell." + $error_proc 116 "$arg_name type '$object_type' is not a liberty cell." } # Parse library_name/cell_name. } elseif {[regexp [cell_regexp] $arg ignore lib_name cell_name]} { @@ -591,15 +591,15 @@ proc get_lib_cell_arg { arg_name arg error_proc } { if { $library != "NULL" } { set lib_cell [$library find_liberty_cell $cell_name] if { $lib_cell == "NULL" } { - $error_proc 701 "liberty cell '$arg' not found." + $error_proc 117 "liberty cell '$arg' not found." } } else { - $error_proc 702 "library '$lib_name' not found." + $error_proc 118 "library '$lib_name' not found." } } else { set lib_cell [find_liberty_cell $arg] if { $lib_cell == "NULL" } { - $error_proc 703 "liberty cell '$arg' not found." + $error_proc 119 "liberty cell '$arg' not found." } } return $lib_cell @@ -619,7 +619,7 @@ proc get_lib_cells_arg { arg_name arglist error_proc } { if { $object_type == "LibertyCell" } { lappend lib_cells $arg } else { - $error_proc 306 "unsupported object type $object_type." + $error_proc 120 "unsupported object type $object_type." } } elseif { $arg != {} } { set arg_lib_cells [get_lib_cells1 $arg $error_proc] @@ -645,7 +645,7 @@ proc get_lib_cells1 { patterns error_proc } { # Allow wildcards in the library name (incompatible). set libs [get_libs -quiet $lib_name] if { $libs == {} } { - $error_proc 375 "library '$lib_name' not found." + $error_proc 121 "library '$lib_name' not found." } else { foreach lib $libs { set matches [$lib find_liberty_cells_matching $cell_pattern 0 0] @@ -654,7 +654,7 @@ proc get_lib_cells1 { patterns error_proc } { } } if { $cells == {} } { - $error_proc 376 "cell '$cell_pattern' not found." + $error_proc 122 "cell '$cell_pattern' not found." } } } @@ -664,18 +664,18 @@ proc get_lib_cells1 { patterns error_proc } { proc get_instance_error { arg_name arg } { set inst "NULL" if {[llength $arg] > 1} { - sta_error 483 "$arg_name must be a single instance." + sta_error 123 "$arg_name must be a single instance." } elseif { [is_object $arg] } { set object_type [object_type $arg] if { $object_type == "Instance" } { set inst $arg } else { - sta_error 484 "$arg_name type '$object_type' is not an instance." + sta_error 124 "$arg_name type '$object_type' is not an instance." } } else { set inst [find_instance $arg] if { $inst == "NULL" } { - sta_error 485 "instance '$arg' not found." + sta_error 125 "instance '$arg' not found." } } return $inst @@ -694,14 +694,14 @@ proc get_instances_error { arg_name arglist } { if { $object_type == "Instance" } { lappend insts $arg } else { - sta_error 486 "$arg_name type '$object_type' is not an instance." + sta_error 126 "$arg_name type '$object_type' is not an instance." } } elseif { $arg != {} } { set arg_insts [get_cells -quiet $arg] if { $arg_insts != {} } { set insts [concat $insts $arg_insts] } else { - sta_error 487 "instance '$arg' not found." + sta_error 127 "instance '$arg' not found." } } } @@ -719,7 +719,7 @@ proc get_port_pin_error { arg_name arg } { proc get_port_pin_arg { arg_name arg warn_error } { set pin "NULL" if {[llength $arg] > 1} { - sta_warn_error 307 $warn_error "$arg_name must be a single port or pin." + sta_warn_error 128 $warn_error "$arg_name must be a single port or pin." } elseif { [is_object $arg] } { set object_type [object_type $arg] if { $object_type == "Pin" } { @@ -728,7 +728,7 @@ proc get_port_pin_arg { arg_name arg warn_error } { # Explicit port arg - convert to pin. set pin [find_pin [get_name $arg]] } else { - sta_warn_error 308 $warn_error "$arg_name type '$object_type' is not a pin or port." + sta_warn_error 129 $warn_error "$arg_name type '$object_type' is not a pin or port." } } else { set top_instance [top_instance] @@ -740,7 +740,7 @@ proc get_port_pin_arg { arg_name arg warn_error } { set pin [$top_instance find_pin [get_name $port]] } if { $pin == "NULL" } { - sta_warn_error 309 $warn_error "pin $arg not found." + sta_warn_error 130 $warn_error "pin $arg not found." } } return $pin @@ -762,14 +762,14 @@ proc get_port_pins_error { arg_name arglist } { # Convert port to pin. lappend pins [find_pin [get_name $arg]] } else { - sta_error 488 "$arg_name type '$object_type' is not a pin or port." + sta_error 131 "$arg_name type '$object_type' is not a pin or port." } } elseif { $arg != {} } { set arg_pins [get_ports_or_pins $arg] if { $arg_pins != {} } { set pins [concat $pins $arg_pins] } else { - sta_error 489 "pin '$arg' not found." + sta_error 132 "pin '$arg' not found." } } } @@ -789,7 +789,7 @@ proc get_ports_error { arg_name arglist } { if { $object_type == "Port" } { lappend ports $arg } else { - sta_error 490 "$arg_name type '$object_type' is not a port." + sta_error 133 "$arg_name type '$object_type' is not a port." } } elseif { $arg != {} } { set arg_ports [get_ports $arg] @@ -812,18 +812,18 @@ proc get_pin_warn { arg_name arg } { proc get_pin_arg { arg_name arg warn_error } { set pin "NULL" if {[llength $arg] > 1} { - sta_warn_error 310 $warn_error "$arg_name must be a single pin." + sta_warn_error 134 $warn_error "$arg_name must be a single pin." } elseif { [is_object $arg] } { set object_type [object_type $arg] if { $object_type == "Pin" } { set pin $arg } else { - sta_warn_error 311 $warn_error "$arg_name type '$object_type' is not a pin." + sta_warn_error 135 $warn_error "$arg_name type '$object_type' is not a pin." } } else { set pin [find_pin $arg] if { $pin == "NULL" } { - sta_warn_error 312 $warn_error "$arg_name pin $arg not found." + sta_warn_error 136 $warn_error "$arg_name pin $arg not found." } } return $pin @@ -840,18 +840,18 @@ proc get_clock_error { arg_name arg } { proc get_clock_arg { arg_name arg error_proc } { set clk "NULL" if {[llength $arg] > 1} { - $error_proc 597 "$arg_name arg must be a single clock, not a list." + $error_proc 137 "$arg_name arg must be a single clock, not a list." } elseif { [is_object $arg] } { set object_type [object_type $arg] if { $object_type == "Clock" } { set clk $arg } else { - $error_proc 598 "$arg_name arg value is a $object_type, not a clock." + $error_proc 138 "$arg_name arg value is a $object_type, not a clock." } } elseif { $arg != {} } { set clk [find_clock $arg] if { $clk == "NULL" } { - $error_proc 599 "$arg_name arg '$arg' clock not found." + $error_proc 138 "$arg_name arg '$arg' clock not found." } } return $clk @@ -870,7 +870,7 @@ proc get_clocks_warn { arg_name arglist } { if { $object_type == "Clock" } { lappend clks $arg } else { - sta_warn 313 "unsupported object type $object_type." + sta_warn 139 "unsupported object type $object_type." } } elseif { $arg != {} } { set arg_clocks [get_clocks $arg] @@ -885,18 +885,18 @@ proc get_clocks_warn { arg_name arglist } { proc get_net_arg { arg_name arg } { set net "NULL" if {[llength $arg] > 1} { - sta_warn 314 "$arg_name must be a single net." + sta_warn 140 "$arg_name must be a single net." } elseif { [is_object $arg] } { set object_type [object_type $arg] if { $object_type == "Net" } { set net $arg } else { - sta_warn 315 "$arg_name '$object_type' is not a net." + sta_warn 141 "$arg_name '$object_type' is not a net." } } else { set net [find_net $arg] if { $net == "NULL" } { - sta_warn 316 "$arg_name '$arg' not found." + sta_warn 143 "$arg_name '$arg' not found." } } return $net @@ -915,7 +915,7 @@ proc get_nets_arg { arg_name arglist } { if { $object_type == "Net" } { lappend nets $arg } else { - sta_warn 317 "unsupported object type $object_type." + sta_warn 142 "unsupported object type $object_type." } } elseif { $arg != {} } { set arg_nets [get_nets $arg] diff --git a/tcl/CmdUtil.tcl b/tcl/CmdUtil.tcl index 8fe51a62..2a6edbd0 100644 --- a/tcl/CmdUtil.tcl +++ b/tcl/CmdUtil.tcl @@ -41,7 +41,7 @@ proc_redirect help { show_cmd_args $cmd } } else { - sta_warn 300 "no commands match '$pattern'." + sta_warn 160 "no commands match '$pattern'." } } @@ -86,9 +86,9 @@ proc cmd_usage_error { cmd } { variable cmd_args if [info exists cmd_args($cmd)] { - sta_error 404 "Usage: $cmd $cmd_args($cmd)" + sta_error 161 "Usage: $cmd $cmd_args($cmd)" } else { - sta_error 405 "Usage: $cmd argument error" + sta_error 162 "Usage: $cmd argument error" } } @@ -158,7 +158,7 @@ proc set_unit_values { unit key unit_name key_var } { set scale [unit_prefix_scale $unit $prefix] set_cmd_unit_scale $unit $scale } else { - sta_error 515 "unknown $unit unit '$suffix'." + sta_error 163 "unknown $unit unit '$suffix'." } } if [info exists keys(-digits)] { @@ -206,7 +206,7 @@ proc delete_objects_from_list_cmd { list objects } { } elseif {$list_type == "LibertyPort"} { set obj [get_lib_pins $obj] } else { - sta_error 439 "unsupported object type $list_type." + sta_error 164 "unsupported object type $list_type." } } set index [lsearch $list $obj] @@ -223,7 +223,7 @@ proc set_cmd_namespace { namespc } { if { $namespc == "sdc" || $namespc == "sta" } { set_cmd_namespace_cmd $namespc } else { - sta_error 589 "unknown namespace $namespc." + sta_error 165 "unknown namespace $namespc." } } diff --git a/tcl/Liberty.tcl b/tcl/Liberty.tcl index 9c5ef0f7..acc21ed7 100644 --- a/tcl/Liberty.tcl +++ b/tcl/Liberty.tcl @@ -30,7 +30,7 @@ proc_redirect read_liberty { set corner [parse_corner keys] set min_max [parse_min_max_all_flags flags] if { [info exists flags(-no_latch_infer)] } { - sta_warn 625 "-no_latch_infer is deprecated." + sta_warn "-no_latch_infer is deprecated." } set infer_latches [info exists flags(-infer_latches)] read_liberty_cmd $filename $corner $min_max $infer_latches diff --git a/tcl/Link.tcl b/tcl/Link.tcl index 05c87625..2b62da02 100644 --- a/tcl/Link.tcl +++ b/tcl/Link.tcl @@ -31,7 +31,7 @@ proc_redirect link_design { } if { $top_cell_name == "" } { if { $current_design_name == "" } { - sta_error 593 "missing top_cell_name argument and no current_design." + sta_error 220 "missing top_cell_name argument and no current_design." return 0 } else { set top_cell_name $current_design_name diff --git a/tcl/Network.tcl b/tcl/Network.tcl index 83ece34e..0711749f 100644 --- a/tcl/Network.tcl +++ b/tcl/Network.tcl @@ -32,7 +32,7 @@ proc_redirect report_instance { if { $instance != "NULL" } { report_instance1 $instance $connections $verbose } else { - sta_error 590 "instance $instance_path not found." + sta_error 230 "instance $instance_path not found." } } @@ -218,10 +218,10 @@ proc_redirect report_net { if { $net != "NULL" } { report_net1 $net $connections $verbose $hier_pins $corner $digits } else { - sta_error 591 "net $net_path not found." + sta_error 231 "net $net_path not found." } } else { - sta_error 592 "net $net_path not found." + sta_error 232 "net $net_path not found." } } } diff --git a/tcl/NetworkEdit.tcl b/tcl/NetworkEdit.tcl index d3e48208..a6672edc 100644 --- a/tcl/NetworkEdit.tcl +++ b/tcl/NetworkEdit.tcl @@ -104,7 +104,7 @@ proc parse_connect_pin { arg } { set inst [$pin instance] set port [$pin port] } else { - sta_error 586 "unsupported object type $object_type." + sta_error 250 "unsupported object type $object_type." } } else { if {[regexp $path_regexp $arg ignore path_name port_name]} { @@ -134,7 +134,7 @@ proc parse_connect_pin { arg } { } proc connect_pins { net pins } { - sta_warn 372 "connect_pins is deprecated. Use connect_pin." + sta_warn 251 "connect_pins is deprecated. Use connect_pin." # Visit the pins to make sure command will succeed. set insts_ports [parse_connect_pins $pins] if { $insts_ports == 0 } { @@ -203,7 +203,7 @@ proc delete_instance { instance } { if { $object_type == "Instance" } { set inst $instance } else { - sta_error 587 "unsupported object type $object_type." + sta_error 252 "unsupported object type $object_type." } } else { set inst [find_instance $instance] @@ -221,7 +221,7 @@ proc delete_net { net } { if { [is_object $net] } { set object_type [object_type $net] if { $object_type != "Net" } { - sta_error 588 "unsupported object type $object_type." + sta_error 253 "unsupported object type $object_type." } } else { set net [find_net $net] diff --git a/tcl/Property.tcl b/tcl/Property.tcl index a9e97ea5..3eec80ae 100644 --- a/tcl/Property.tcl +++ b/tcl/Property.tcl @@ -29,12 +29,12 @@ proc get_property_cmd { cmd type_key cmd_args } { check_argc_eq2 $cmd $cmd_args set object [lindex $cmd_args 0] if { $object == "" } { - sta_error 491 "$cmd object is null." + sta_error 320 "$cmd object is null." } elseif { ![is_object $object] } { if [info exists keys($type_key)] { set object_type $keys($type_key) } else { - sta_error 492 "$cmd $type_key must be specified with object name argument." + sta_error 321 "$cmd $type_key must be specified with object name argument." } set object [get_property_object_type $object_type $object $quiet] } @@ -74,10 +74,10 @@ proc get_object_property { object prop } { } elseif { $object_type == "TimingArcSet" } { return [timing_arc_set_property $object $prop] } else { - sta_error 606 "get_property unsupported object type $object_type." + sta_error 322 "get_property unsupported object type $object_type." } } else { - sta_error 493 "get_property $object is not an object." + sta_error 323 "get_property $object is not an object." } } @@ -104,10 +104,10 @@ proc get_property_object_type { object_type object_name quiet } { || $object_type == "lib"} { set object [get_libs -quiet $object_name] } else { - sta_error 494 "$object_type not supported." + sta_error 324 "$object_type not supported." } if { $object == "NULL" && !$quiet } { - sta_error 495 "$object_type '$object_name' not found." + sta_error 325 "$object_type '$object_name' not found." } return [lindex $object 0] } diff --git a/tcl/Sdc.tcl b/tcl/Sdc.tcl index c8b67729..6d12d623 100644 --- a/tcl/Sdc.tcl +++ b/tcl/Sdc.tcl @@ -70,7 +70,7 @@ proc source_ { filename echo verbose } { variable sdc_file variable sdc_line if [catch {open $filename r} stream] { - sta_error 511 "cannot open '$filename'." + sta_error 340 "cannot open '$filename'." } else { if { [file extension $filename] == ".gz" } { zlib push gunzip $stream @@ -125,7 +125,7 @@ proc source_ { filename echo verbose } { } close $stream if { $cmd != {} } { - sta_error 512 "incomplete command at end of file." + sta_error 341 "incomplete command at end of file." } set error_sdc_file $sdc_file set error_sdc_line $sdc_line @@ -209,7 +209,7 @@ proc check_path_divider { divider } { set sdc_dividers "/@^#.|" if { !([string length $divider] == 1 && [string first $divider $sdc_dividers] != -1)} { - sta_error 513 "hierarchy separator must be one of '$sdc_dividers'." + sta_error 342 "hierarchy separator must be one of '$sdc_dividers'." } } @@ -256,7 +256,7 @@ proc check_unit { unit key unit_name key_var } { set scale [unit_prefix_scale $unit $prefix] check_unit_scale $unit $scale } else { - sta_error 514 "unknown unit $unit '$suffix'." + sta_error 343 "unknown unit $unit '$suffix'." } } } @@ -278,14 +278,14 @@ proc unit_prefix_scale { unit prefix } { } elseif { [string equal $prefix "f"] } { return 1E-15 } else { - sta_error 604 "unknown $unit prefix '$prefix'." + sta_error 344 "unknown $unit prefix '$prefix'." } } proc check_unit_scale { unit scale } { set unit_scale [unit_scale $unit] if { ![fuzzy_equal $scale $unit_scale] } { - sta_warn 319 "$unit scale [format %.0e $scale] does not match library scale [format %.0e $unit_scale]." + sta_warn 345 "$unit scale [format %.0e $scale] does not match library scale [format %.0e $unit_scale]." } } @@ -391,7 +391,7 @@ proc all_registers { args } { + [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." + sta_error 346 "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 \ @@ -434,7 +434,7 @@ proc current_design { {design ""} } { set current_design_name $design return $design } else { - sta_warn 320 "current_design for other than top cell not supported." + sta_warn 347 "current_design for other than top cell not supported." set current_design_name $design return $design } @@ -470,7 +470,7 @@ proc get_cells { args } { set insts {} if [info exists keys(-of_objects)] { if { $args != {} } { - sta_warn 321 "patterns argument not supported with -of_objects." + sta_warn 348 "patterns argument not supported with -of_objects." } parse_port_pin_net_arg $keys(-of_objects) pins nets foreach pin $pins { @@ -503,7 +503,7 @@ proc get_cells { args } { set matches [find_instances_matching $pattern $regexp $nocase] } if { $matches == {} && !$quiet} { - sta_warn 322 "instance '$pattern' not found." + sta_warn 349 "instance '$pattern' not found." } set insts [concat $insts $matches] } @@ -536,7 +536,7 @@ proc filter_insts1 { filter objects } { } elseif { [regexp $filter_regexp1 $filter ignore attr_name op arg] } { set filtered_objects [filter_insts $attr_name $op $arg $objects] } else { - sta_error 516 "unsupported instance -filter expression." + sta_error 350 "unsupported instance -filter expression." } return $filtered_objects } @@ -563,7 +563,7 @@ proc get_clocks { args } { set clocks [concat $clocks $matches] } else { if {![info exists flags(-quiet)]} { - sta_warn 323 "clock '$pattern' not found." + sta_warn 351 "clock '$pattern' not found." } } } @@ -589,7 +589,7 @@ proc get_lib_cells { args } { set cells {} if [info exists keys(-of_objects)] { if { $args != {} } { - sta_warn 324 "positional arguments not supported with -of_objects." + sta_warn 352 "positional arguments not supported with -of_objects." } set insts [get_instances_error "objects" $keys(-of_objects)] foreach inst $insts { @@ -616,7 +616,7 @@ proc get_lib_cells { args } { set libs [get_libs -quiet $lib_name] if { $libs == {} } { if {!$quiet} { - sta_warn 325 "library '$lib_name' not found." + sta_warn 353 "library '$lib_name' not found." } } else { foreach lib $libs { @@ -628,7 +628,7 @@ proc get_lib_cells { args } { } if { $cells == {} } { if {!$quiet} { - sta_warn 326 "cell '$cell_pattern' not found." + sta_warn 354 "cell '$cell_pattern' not found." } } } @@ -675,7 +675,7 @@ proc get_lib_pins { args } { set libs [get_libs *] } else { if { !$quiet } { - sta_warn 327 "library/cell/port '$pattern' not found." + sta_warn 355 "library/cell/port '$pattern' not found." } return {} } @@ -695,12 +695,12 @@ proc get_lib_pins { args } { } if { !$found_match } { if { !$quiet } { - sta_warn 328 "port '$port_pattern' not found." + sta_warn 356 "port '$port_pattern' not found." } } } else { if { !$quiet } { - sta_warn 329 "library '$lib_name' not found." + sta_warn 357 "library '$lib_name' not found." } } } @@ -710,7 +710,7 @@ proc get_lib_pins { args } { proc check_nocase_flag { flags_var } { upvar 1 $flags_var flags if { [info exists flags(-nocase)] && ![info exists flags(-regexp)] } { - sta_warn 330 "-nocase ignored without -regexp." + sta_warn 358 "-nocase ignored without -regexp." } } @@ -736,7 +736,7 @@ proc get_libs { args } { set libs [concat $libs $matches] } else { if {![info exists flags(-quiet)]} { - sta_warn 331 "library '$pattern' not found." + sta_warn 359 "library '$pattern' not found." } } } @@ -799,7 +799,7 @@ proc get_nets { args } { set nets {} if [info exists keys(-of_objects)] { if { $args != {} } { - sta_warn 332 "patterns argument not supported with -of_objects." + sta_warn 360 "patterns argument not supported with -of_objects." } parse_inst_pin_arg $keys(-of_objects) insts pins foreach inst $insts { @@ -823,7 +823,7 @@ proc get_nets { args } { } set nets [concat $nets $matches] if { $matches == {} && !$quiet } { - sta_warn 333 "net '$pattern' not found." + sta_warn 361 "net '$pattern' not found." } } } @@ -852,7 +852,7 @@ proc get_pins { args } { set pins {} if [info exists keys(-of_objects)] { if { $args != {} } { - sta_warn 334 "patterns argument not supported with -of_objects." + sta_warn 362 "patterns argument not supported with -of_objects." } parse_inst_net_arg $keys(-of_objects) insts nets foreach inst $insts { @@ -889,7 +889,7 @@ proc get_pins { args } { } set pins [concat $pins $matches] if { $matches == {} && !$quiet } { - sta_warn 335 "pin '$pattern' not found." + sta_warn 363 "pin '$pattern' not found." } } } @@ -921,7 +921,7 @@ proc filter_pins1 { filter objects } { } elseif { [regexp $filter_regexp1 $filter ignore attr_name op arg] } { set filtered_objects [filter_pins $attr_name $op $arg $objects] } else { - sta_error 517 "unsupported pin -filter expression." + sta_error 364 "unsupported pin -filter expression." } return $filtered_objects } @@ -946,7 +946,7 @@ proc get_ports { args } { set ports {} if [info exists keys(-of_objects)] { if { $args != {} } { - sta_warn 336 "patterns argument not supported with -of_objects." + sta_warn 365 "patterns argument not supported with -of_objects." } set nets [get_nets_arg "objects" $keys(-of_objects)] foreach net $nets { @@ -960,7 +960,7 @@ proc get_ports { args } { set ports [concat $ports $matches] } else { if {![info exists flags(-quiet)]} { - sta_warn 337 "port '$pattern' not found." + sta_warn 366 "port '$pattern' not found." } } } @@ -997,7 +997,7 @@ proc filter_ports1 { filter objects } { } elseif { [regexp $filter_regexp1 $filter ignore attr_name op arg] } { set filtered_objects [filter_ports $attr_name $op $arg $objects] } else { - sta_error 518 "unsupported port -filter expression." + sta_error 367 "unsupported port -filter expression." } return $filtered_objects } @@ -1030,12 +1030,12 @@ proc create_clock { args } { set name $keys(-name) } elseif { $pins != {} } { if { $add } { - sta_error 519 "-add requires -name." + sta_error 368 "-add requires -name." } # Default clock name is the first pin name. set name [get_full_name [lindex $pins 0]] } else { - sta_error 520 "-name or port_pin_list must be specified." + sta_error 369 "-name or port_pin_list must be specified." } if [info exists keys(-period)] { @@ -1043,13 +1043,13 @@ proc create_clock { args } { check_positive_float "period" $period set period [time_ui_sta $period] } else { - sta_error 521 "missing -period argument." + sta_error 370 "missing -period argument." } if [info exists keys(-waveform)] { set wave_arg $keys(-waveform) if { [expr [llength $wave_arg] % 2] != 0 } { - sta_error 522 "-waveform edge_list must have an even number of edge times." + sta_error 371 "-waveform edge_list must have an even number of edge times." } set first_edge 1 set prev_edge 0 @@ -1058,10 +1058,10 @@ proc create_clock { args } { check_float "-waveform edge" $edge set edge [time_ui_sta $edge] if { !$first_edge && $edge < $prev_edge } { - sta_error 338 "non-increasing clock -waveform edge times." + sta_error 372 "non-increasing clock -waveform edge times." } if { $edge > [expr $period * 2] } { - sta_error 339 "-waveform time greater than two periods." + sta_error 373 "-waveform time greater than two periods." } lappend waveform $edge set prev_edge $edge @@ -1119,7 +1119,7 @@ proc create_generated_clock { args } { } } if { $pins == {} } { - sta_error 523 "empty ports/pins/nets argument." + sta_error 374 "empty ports/pins/nets argument." } set add [info exists flags(-add)] @@ -1127,19 +1127,19 @@ proc create_generated_clock { args } { set name $keys(-name) } elseif { $pins != {} } { if { $add } { - sta_error 524 "-add requires -name." + sta_error 375 "-add requires -name." } # Default clock name is the first pin name. set name [get_full_name [lindex $pins 0]] } else { - sta_error 525 "name or port_pin_list must be specified." + sta_error 376 "name or port_pin_list must be specified." } if [info exists keys(-source)] { set source $keys(-source) set source_pin [get_port_pin_error "master_pin" $source] } else { - sta_error 526 "missing -source argument." + sta_error 377 "missing -source argument." } set master_clk "NULL" @@ -1154,44 +1154,44 @@ proc create_generated_clock { args } { if {[info exists keys(-master_clock)]} { set master_clk [get_clock_error "-master_clk" $keys(-master_clock)] if { $master_clk == "NULL" } { - sta_error 527 "-master_clock argument empty." + sta_error 378 "-master_clock argument empty." } } elseif { $add } { - sta_error 528 "-add requireds -master_clock." + sta_error 379 "-add requireds -master_clock." } if {[info exists keys(-divide_by)] && [info exists keys(-multiply_by)]} { - sta_error 529 "-multiply_by and -divide_by options are exclusive." + sta_error 380 "-multiply_by and -divide_by options are exclusive." } elseif {[info exists keys(-divide_by)]} { set divide_by $keys(-divide_by) if {![string is integer $divide_by] || $divide_by < 1} { - sta_error 530 "-divide_by is not an integer greater than one." + sta_error 381 "-divide_by is not an integer greater than one." } if {$combinational && $divide_by != 1} { - sta_error 531 "-combinational implies -divide_by 1." + sta_error 382 "-combinational implies -divide_by 1." } } elseif {[info exists keys(-multiply_by)]} { set multiply_by $keys(-multiply_by) if {![string is integer $multiply_by] || $multiply_by < 1} { - sta_error 532 "-multiply_by is not an integer greater than one." + sta_error 383 "-multiply_by is not an integer greater than one." } if {[info exists keys(-duty_cycle)]} { set duty_cycle $keys(-duty_cycle) if {![string is double $duty_cycle] \ || $duty_cycle < 0.0 || $duty_cycle > 100.0} { - sta_error 533 "-duty_cycle is not a float between 0 and 100." + sta_error 384 "-duty_cycle is not a float between 0 and 100." } } } elseif {[info exists keys(-edges)]} { set edges $keys(-edges) if { [llength $edges] != 3 } { - sta_error 534 "-edges only supported for three edges." + sta_error 385 "-edges only supported for three edges." } set prev_edge [expr [lindex $edges 0] - 1] foreach edge $edges { check_cardinal "-edges" $edge if { $edge <= $prev_edge } { - sta_error 535 "edges times are not monotonically increasing." + sta_error 386 "edges times are not monotonically increasing." } } if [info exists keys(-edge_shift)] { @@ -1200,13 +1200,13 @@ proc create_generated_clock { args } { lappend edge_shifts [time_ui_sta $shift] } if { [llength $edge_shifts] != [llength $edges] } { - sta_error 536 "-edge_shift length does not match -edges length." + sta_error 387 "-edge_shift length does not match -edges length." } } } elseif { $combinational } { set divide_by 1 } else { - sta_error 537 "missing -multiply_by, -divide_by, -combinational or -edges argument." + sta_error 388 "missing -multiply_by, -divide_by, -combinational or -edges argument." } set invert 0 @@ -1214,13 +1214,13 @@ proc create_generated_clock { args } { if {!([info exists keys(-divide_by)] \ || [info exists keys(-multiply_by)] \ || [info exists flags(-combinational)])} { - sta_error 538 "cannot specify -invert without -multiply_by, -divide_by or -combinational." + sta_error 389 "cannot specify -invert without -multiply_by, -divide_by or -combinational." } set invert 1 } if {[info exists keys(-duty_cycle)] && ![info exists keys(-multiply_by)]} { - sta_error 539 "-duty_cycle requires -multiply_by value." + sta_error 390 "-duty_cycle requires -multiply_by value." } set comment [parse_comment_key keys] @@ -1280,26 +1280,26 @@ proc group_path { args } { check_exception_pins $from $to if { $arg_error } { delete_from_thrus_to $from $thrus $to - sta_error 545 "group_path command failed." + sta_error 391 "group_path command failed." return 0 } check_for_key_args $cmd args if { $args != {} } { delete_from_thrus_to $from $thrus $to - sta_error 546 "positional arguments not supported." + sta_error 392 "positional arguments not supported." } if { ($from == "NULL" && $thrus == "" && $to == "NULL") } { delete_from_thrus_to $from $thrus $to - sta_error 547 "-from, -through or -to required." + sta_error 393 "-from, -through or -to required." } set default [info exists flags(-default)] set name_exists [info exists keys(-name)] if { $default && $name_exists } { - sta_error 548 "-name and -default are mutually exclusive." + sta_error 394 "-name and -default are mutually exclusive." } elseif { !$name_exists && !$default } { - sta_error 549 "-name or -default option is required." + sta_error 395 "-name or -default option is required." } elseif { $default } { set name "" } else { @@ -1340,7 +1340,7 @@ proc set_clock_gating_check { args } { set active_value "" if {[info exists flags(-high)] && [info exists flags(-low)]} { - sta_error 550 "cannot specify both -high and -low." + sta_error 396 "cannot specify both -high and -low." } elseif [info exists flags(-low)] { set active_value "0" } elseif [info exists flags(-high)] { @@ -1348,7 +1348,7 @@ proc set_clock_gating_check { args } { } if { !([info exists keys(-hold)] || [info exists keys(-setup)]) } { - sta_error 551 "missing -setup or -hold argument." + sta_error 397 "missing -setup or -hold argument." } if [info exists keys(-hold)] { set_clock_gating_check1 $args $tr "min" $keys(-hold) $active_value @@ -1362,14 +1362,14 @@ proc set_clock_gating_check1 { args tr setup_hold margin active_value } { set margin [time_ui_sta $margin] if { [llength $args] == 0 } { if { $active_value != "" } { - sta_error 552 "-high and -low only permitted for pins and instances." + sta_error 398 "-high and -low only permitted for pins and instances." } set_clock_gating_check_cmd $tr $setup_hold $margin } elseif { [llength $args] == 1 } { parse_clk_inst_port_pin_arg [lindex $args 0] clks insts pins if { $clks != {} && $active_value != "" } { - sta_error 553 "-high and -low only permitted for pins and instances." + sta_error 399 "-high and -low only permitted for pins and instances." } foreach clk $clks { set_clock_gating_check_clk_cmd $clk $tr $setup_hold $margin @@ -1412,10 +1412,10 @@ proc set_clock_groups { args } { set allow_paths [info exists flags(-allow_paths)] if { ($logically_exclusive+$physically_exclusive+$asynchronous) == 0 } { - sta_error 554 "one of -logically_exclusive, -physically_exclusive or -asynchronous is required." + sta_error 400 "one of -logically_exclusive, -physically_exclusive or -asynchronous is required." } if { ($logically_exclusive+$physically_exclusive+$asynchronous) > 1 } { - sta_error 555 "the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive." + sta_error 401 "the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive." } set comment [parse_comment_key keys] @@ -1434,9 +1434,9 @@ proc set_clock_groups { args } { set args [lrange $args 2 end] } else { if {[is_keyword_arg $arg]} { - sta_warn 349 "unknown keyword argument $arg." + sta_warn 402 "unknown keyword argument $arg." } else { - sta_warn 341 "extra positional argument $arg." + sta_warn 403 "extra positional argument $arg." } set args [lrange $args 1 end] } @@ -1465,10 +1465,10 @@ proc unset_clk_groups_cmd { cmd cmd_args } { } if { $all && $names != {} } { - sta_error 454 "the -all and -name options are mutually exclusive." + sta_error 404 "the -all and -name options are mutually exclusive." } if { !$all && $names == {} } { - sta_error 455 "either -all or -name options must be specified." + sta_error 405 "either -all or -name options must be specified." } set logically_exclusive [info exists flags(-logically_exclusive)] @@ -1476,10 +1476,10 @@ proc unset_clk_groups_cmd { cmd cmd_args } { set asynchronous [info exists flags(-asynchronous)] if { ($logically_exclusive+$physically_exclusive+$asynchronous) == 0 } { - sta_error 456 "one of -logically_exclusive, -physically_exclusive or -asynchronous is required." + sta_error 406 "one of -logically_exclusive, -physically_exclusive or -asynchronous is required." } if { ($logically_exclusive+$physically_exclusive+$asynchronous) > 1 } { - sta_error 457 "the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive." + sta_error 407 "the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive." } if { $all } { @@ -1529,7 +1529,7 @@ proc set_clock_latency { args } { if { [info exists keys(-clock)] } { set pin_clk [get_clock_warn "clock" $keys(-clock)] if { $clks != {} } { - sta_warn 342 "-clock ignored for clock objects." + sta_warn 408 "-clock ignored for clock objects." } } @@ -1543,14 +1543,14 @@ proc set_clock_latency { args } { foreach pin $pins { # Source only allowed on clocks and clock pins. if { ![is_clock_src $pin] } { - sta_error 556 "-source '[get_full_name $pin]' is not a clock pin." + sta_error 409 "-source '[get_full_name $pin]' is not a clock pin." } set_clock_insertion_cmd $pin_clk $pin $tr $min_max $early_late $delay } } else { # Latency. if {[info exists flags(-early)] || [info exists flags(-late)]} { - sta_error 557 "-early/-late is only allowed with -source." + sta_error 410 "-early/-late is only allowed with -source." } foreach clk $clks { @@ -1579,7 +1579,7 @@ proc unset_clk_latency_cmd { cmd cmd_args } { if { [info exists keys(-clock)] } { set pin_clk [get_clock_warn "clock" $keys(-clock)] if { $clks != {} } { - sta_warn 303 "-clock ignored for clock objects." + sta_warn 411 "-clock ignored for clock objects." } } @@ -1591,7 +1591,7 @@ proc unset_clk_latency_cmd { cmd cmd_args } { foreach pin $pins { # Source only allowed on clocks and clock pins. if { ![is_clock_pin $pin] } { - sta_error 458 "-source '[$pin path_name]' is not a clock pin." + sta_error 412 "-source '[$pin path_name]' is not a clock pin." } unset_clock_insertion_cmd $pin_clk $pin } @@ -1619,11 +1619,11 @@ proc set_sense { args } { if { [info exists keys(-type)] } { set type $keys(-type) if { $type == "data" } { - sta_warn 343 "set_sense -type data not supported." + sta_warn 413 "set_sense -type data not supported." } elseif { $type == "clock" } { set_clock_sense_cmd1 "set_sense" $args } else { - sta_error 558 "set_sense -type clock|data" + sta_error 414 "set_sense -type clock|data" } } } @@ -1634,7 +1634,7 @@ define_cmd_args "set_clock_sense" \ [-clock clocks] pins} proc set_clock_sense { args } { - sta_warn 344 "set_clock_sense is deprecated as of SDC 2.1. Use set_sense -type clock." + sta_warn 415 "set_clock_sense is deprecated as of SDC 2.1. Use set_sense -type clock." set_clock_sense_cmd1 "set_clock_sense" $args } @@ -1646,7 +1646,7 @@ proc set_clock_sense_cmd1 { cmd cmd_args } { set pulse [info exists keys(-pulse)] if { $pulse } { - sta_warn 345 "-pulse argument not supported." + sta_warn 416 "-pulse argument not supported." } set positive [info exists flags(-positive)] set negative [info exists flags(-negative)] @@ -1655,7 +1655,7 @@ proc set_clock_sense_cmd1 { cmd cmd_args } { || ($negative && ($positive || $stop_propagation || $pulse)) \ || ($stop_propagation && ($positive || $negative || $pulse)) || ($pulse && ($positive || $negative || $stop_propagation)) } { - sta_warn 346 "-positive, -negative, -stop_propagation and -pulse are mutually exclusive." + sta_warn 417 "-positive, -negative, -stop_propagation and -pulse are mutually exclusive." } set pins [get_port_pins_error "pins" [lindex $cmd_args 0]] @@ -1668,7 +1668,7 @@ proc set_clock_sense_cmd1 { cmd cmd_args } { } foreach pin $pins { if {[$pin is_hierarchical]} { - sta_warn 347 "hierarchical pin '[get_full_name $pin]' not supported." + sta_warn 418 "hierarchical pin '[get_full_name $pin]' not supported." } } set_clock_sense_cmd $pins $clks $positive $negative $stop_propagation @@ -1692,7 +1692,7 @@ proc set_clock_transition { args } { foreach clk $clks { if { [$clk is_virtual] } { - sta_warn 559 "transition time can not be specified for virtual clocks." + sta_warn 419 "transition time can not be specified for virtual clocks." } else { set_clock_slew_cmd $clk $tr $min_max [time_ui_sta $slew] } @@ -1725,7 +1725,7 @@ proc set_clock_uncertainty { args } { flags {-rise -fall -setup -hold} if { [llength $args] == 0 } { - sta_error 560 "missing uncertainty value." + sta_error 420 "missing uncertainty value." } set uncertainty [lindex $args 0] check_float "uncertainty" $uncertainty @@ -1773,7 +1773,7 @@ proc set_clock_uncertainty { args } { if { $from_key != "none" && $to_key == "none" \ || $from_key == "none" && $to_key != "none" } { - sta_error 561 "-from/-to must be used together." + sta_error 421 "-from/-to must be used together." } elseif { $from_key != "none" && $to_key != "none" } { # Inter-clock uncertainty. check_argc_eq1 "-from/-to" $args @@ -1793,7 +1793,7 @@ proc set_clock_uncertainty { args } { check_argc_eq2 "set_clock_uncertainty" $args if { [info exists flags(-rise)] \ || [info exists flags(-fall)] } { - sta_error 562 "-rise, -fall options not allowed for single clock uncertainty." + sta_error 422 "-rise, -fall options not allowed for single clock uncertainty." } set objects [lindex $args 1] parse_clk_port_pin_arg $objects clks pins @@ -1859,7 +1859,7 @@ proc unset_clk_uncertainty_cmd { cmd cmd_args } { if { $from_key != "none" && $to_key == "none" \ || $from_key == "none" && $to_key != "none" } { - sta_error 459 "-from/-to must be used together." + sta_error 423 "-from/-to must be used together." } elseif { $from_key != "none" && $to_key != "none" } { # Inter-clock uncertainty. check_argc_eq0 "unset_clock_uncertainty" $cmd_args @@ -1879,7 +1879,7 @@ proc unset_clk_uncertainty_cmd { cmd cmd_args } { check_argc_eq1 $cmd $cmd_args if { [info exists keys(-rise)] \ || [info exists keys(-fall)] } { - sta_error 460 "-rise, -fall options not allowed for single clock uncertainty." + sta_error 424 "-rise, -fall options not allowed for single clock uncertainty." } set objects [lindex $cmd_args 0] parse_clk_port_pin_arg $objects clks pins @@ -1920,7 +1920,7 @@ proc set_data_check { args } { set from [get_port_pin_error "from_pin" $keys(-fall_from)] set from_rf "fall" } else { - sta_error 563 "missing -from, -rise_from or -fall_from argument." + sta_error 425 "missing -from, -rise_from or -fall_from argument." } if [info exists keys(-to)] { @@ -1932,7 +1932,7 @@ proc set_data_check { args } { set to [get_port_pin_error "to_pin" $keys(-fall_to)] set to_rf "fall" } else { - sta_error 564 "missing -to, -rise_to or -fall_to argument." + sta_error 426 "missing -to, -rise_to or -fall_to argument." } if [info exists keys(-clock)] { @@ -1980,7 +1980,7 @@ proc unset_data_checks_cmd { cmd cmd_args } { set from [get_port_pin_error "from_pin" $keys(-fall_from)] set from_rf "fall" } else { - sta_error 461 "missing -from, -rise_from or -fall_from argument." + sta_error 427 "missing -from, -rise_from or -fall_from argument." } if [info exists keys(-to)] { @@ -1992,7 +1992,7 @@ proc unset_data_checks_cmd { cmd cmd_args } { set to [get_port_pin_error "to_pin" $keys(-fall_to)] set to_rf "fall" } else { - sta_error 462 "missing -to, -rise_to or -fall_to argument." + sta_error 428 "missing -to, -rise_to or -fall_to argument." } if [info exists keys(-clock)] { @@ -2034,7 +2034,7 @@ proc set_disable_timing { args } { if { ([info exists keys(-from)] || [info exists keys(-to)]) \ && ($libports != {} || $pins != {} || $ports != {}) } { - sta_warn 348 "-from/-to keywords ignored for lib_pin, port and pin arguments." + sta_warn 429 "-from/-to keywords ignored for lib_pin, port and pin arguments." } foreach libcell $libcells { @@ -2064,7 +2064,7 @@ proc set_disable_timing_instance { inst from to } { set from_ports [parse_disable_inst_ports $inst $from] set to_ports [parse_disable_inst_ports $inst $to] if { ![$inst is_leaf] } { - sta_error 565 "-from/-to hierarchical instance not supported." + sta_error 430 "-from/-to hierarchical instance not supported." } if { $from_ports == "NULL" && $to_ports == "NULL" } { disable_instance $inst "NULL" "NULL" @@ -2096,7 +2096,7 @@ proc parse_disable_inst_ports { inst port_name } { set cell [instance_property $inst cell] set port [$cell find_port $port_name] if { $port == "NULL" } { - sta_error 566 "pin '[get_full_name $inst]${hierarchy_separator}${port_name}' not found." + sta_error 431 "pin '[get_full_name $inst]${hierarchy_separator}${port_name}' not found." } else { set lib_port [get_property $port liberty_port] set ports [port_members $lib_port] @@ -2137,7 +2137,7 @@ proc parse_disable_cell_ports { cell port_name } { } else { set port [$cell find_liberty_port $port_name] if { $port == "NULL" } { - sta_error 567 "pin '[get_name $cell]${hierarchy_separator}${port_name}' not found." + sta_error 432 "pin '[get_name $cell]${hierarchy_separator}${port_name}' not found." } else { set ports [port_members $port] } @@ -2171,7 +2171,7 @@ proc unset_disable_cmd { cmd cmd_args } { if { ([info exists keys(-from)] || [info exists keys(-to)]) \ && ($libports != {} || $pins != {} || $ports != {}) } { - sta_warn 304 "-from/-to keywords ignored for lib_pin, port and pin arguments." + sta_warn 434 "-from/-to keywords ignored for lib_pin, port and pin arguments." } foreach libcell $libcells { @@ -2223,7 +2223,7 @@ proc unset_disable_timing_instance { inst from to } { set from_ports [parse_disable_inst_ports $inst $from] set to_ports [parse_disable_inst_ports $inst $to] if { ![$inst is_leaf] } { - sta_error 463 "-from/-to hierarchical instance not supported." + sta_error 435 "-from/-to hierarchical instance not supported." } if { $from_ports == "NULL" && $to_ports == "NULL" } { unset_disable_instance $inst "NULL" "NULL" @@ -2277,11 +2277,11 @@ proc set_false_path { args } { } else { check_for_key_args $cmd args if { $args != {} } { - sta_warn 600 "'$args' ignored." + sta_warn 436 "'$args' ignored." } if { ($from == "NULL" && $thrus == "" && $to == "NULL") } { delete_from_thrus_to $from $thrus $to - sta_warn 350 "-from, -through or -to required." + sta_warn 437 "-from, -through or -to required." } else { if [info exists flags(-reset_path)] { reset_path_cmd $from $thrus $to $min_max @@ -2360,10 +2360,10 @@ proc set_port_delay { cmd sta_cmd cmd_args port_dirs } { if [info exists keys(-reference_pin)] { set ref_pin [get_port_pin_error "ref_pin" $keys(-reference_pin)] if { [info exists flags(-source_latency_included)] } { - sta_warn 351 "-source_latency_included ignored with -reference_pin." + sta_warn 438 "-source_latency_included ignored with -reference_pin." } if { [info exists flags(-network_latency_included)] } { - sta_warn 352 "-network_latency_included ignored with -reference_pin." + sta_warn 439 "-network_latency_included ignored with -reference_pin." } } @@ -2382,9 +2382,9 @@ proc set_port_delay { cmd sta_cmd cmd_args port_dirs } { foreach pin $pins { if { [$pin is_top_level_port] \ && [lsearch $port_dirs [pin_direction $pin]] == -1 } { - sta_warn 353 "$cmd not allowed on [pin_direction $pin] port '[get_full_name $pin]'." + sta_warn 440 "$cmd not allowed on [pin_direction $pin] port '[get_full_name $pin]'." } elseif { $clk != "NULL" && [lsearch [$clk sources] $pin] != -1 } { - sta_warn 354 "$cmd relative to a clock defined on the same port/pin not allowed." + sta_warn 441 "$cmd relative to a clock defined on the same port/pin not allowed." } else { $sta_cmd $pin $tr $clk $clk_rf $ref_pin\ $source_latency_included $network_latency_included \ @@ -2432,13 +2432,13 @@ proc set_path_delay { cmd args min_max } { check_for_key_args $cmd args if { [llength $args] == 0 } { delete_from_thrus_to $from $thrus $to - sta_error 568 "missing delay argument." + sta_error 442 "missing delay argument." } elseif { [llength $args] == 1 } { set delay $args check_float "$cmd delay" $delay set delay [time_ui_sta $delay] } else { - sta_warn 355 "'$args' ignored." + sta_warn 443 "'$args' ignored." } set ignore_clk_latency [info exists flags(-ignore_clock_latency)] @@ -2563,19 +2563,19 @@ proc set_multicycle_path { args } { check_for_key_args $cmd args if { [llength $args] == 0 } { delete_from_thrus_to $from $thrus $to - sta_error 569 "missing path multiplier argument." + sta_error 444 "missing path multiplier argument." } elseif { [llength $args] == 1 } { set path_multiplier $args check_integer "path multiplier" $path_multiplier } else { - sta_warn 356 "'$args' ignored." + sta_warn 445 "'$args' ignored." } set start [info exists flags(-start)] set end [info exists flags(-end)] if { $start && $end } { delete_from_thrus_to $from $thrus $to - sta_error 570 "cannot use -start with -end." + sta_error 446 "cannot use -start with -end." } elseif { $start } { set use_end_clk 0 } elseif { $end } { @@ -2625,18 +2625,18 @@ proc unset_path_exceptions_cmd { cmd cmd_args } { set to [parse_to_arg keys flags arg_error] if { $arg_error } { delete_from_thrus_to $from $thrus $to - sta_error 464 "$cmd command failed." + sta_error 447 "$cmd command failed." return 0 } check_for_key_args $cmd cmd_args if { $cmd_args != {} } { delete_from_thrus_to $from $thrus $to - sta_error 465 "positional arguments not supported." + sta_error 448 "positional arguments not supported." } if { ($from == "NULL" && $thrus == "" && $to == "NULL") } { delete_from_thrus_to $from $thrus $to - sta_error 466 "-from, -through or -to required." + sta_error 449 "-from, -through or -to required." } reset_path_cmd $from $thrus $to $min_max @@ -2703,7 +2703,7 @@ proc set_propagated_clock { objects } { parse_clk_port_pin_arg $objects clks pins foreach clk $clks { if { [$clk is_virtual] } { - sta_warn 357 "virtual clock [get_name $clk] can not be propagated." + sta_warn 450 "virtual clock [get_name $clk] can not be propagated." } else { set_propagated_clock_cmd $clk } @@ -2745,7 +2745,7 @@ proc set_case_analysis { value pins } { || $value == "rising" \ || $value == "fall" \ || $value == "falling") } { - sta_error 571 "value must be 0, zero, 1, one, rise, rising, fall, or falling." + sta_error 451 "value must be 0, zero, 1, one, rise, rising, fall, or falling." } set pins1 [get_port_pins_error "pins" $pins] foreach pin $pins1 { @@ -2814,17 +2814,17 @@ proc set_driving_cell { args } { set library [get_liberty_error "library" $keys(-library)] set cell [$library find_liberty_cell $cell_name] if { $cell == "NULL" } { - sta_error 572 "cell '$lib_name:$cell_name' not found." + sta_error 452 "cell '$lib_name:$cell_name' not found." } } else { set library "NULL" set cell [find_liberty_cell $cell_name] if { $cell == "NULL" } { - sta_error 573 "'$cell_name' not found." + sta_error 453 "'$cell_name' not found." } } } else { - sta_error 574 "missing -lib_cell argument." + sta_error 454 "missing -lib_cell argument." } set to_port "NULL" @@ -2832,7 +2832,7 @@ proc set_driving_cell { args } { set to_port_name $keys(-pin) set to_port [$cell find_liberty_port $to_port_name] if { $to_port == "NULL" } { - sta_error 575 "port '$to_port_name' not found." + sta_error 455 "port '$to_port_name' not found." } } else { set port_iter [$cell liberty_port_iterator] @@ -2844,7 +2844,7 @@ proc set_driving_cell { args } { incr output_count if { $output_count > 1 } { $port_iter finish - sta_error 576 "-pin argument required for cells with multiple outputs." + sta_error 456 "-pin argument required for cells with multiple outputs." } set to_port $port # No break. Keep looking for output ports to make sure there @@ -2859,7 +2859,7 @@ proc set_driving_cell { args } { set from_port_name $keys(-from_pin) set from_port [$cell find_liberty_port $from_port_name] if { $from_port == "NULL" } { - sta_error 577 "port '$from_port_name' not found." + sta_error 457 "port '$from_port_name' not found." } } @@ -2877,13 +2877,13 @@ proc set_driving_cell { args } { } if [info exists keys(-multiply_by)] { - sta_warn 358 "-multiply_by ignored." + sta_warn 458 "-multiply_by ignored." } if [info exists flags(-dont_scale)] { - sta_warn 359 "-dont_scale ignored." + sta_warn 459 "-dont_scale ignored." } if [info exists flags(-no_design_rule)] { - sta_warn 360 "-no_design_rule ignored." + sta_warn 460 "-no_design_rule ignored." } check_argc_eq1 "set_driving_cell" $args @@ -2906,7 +2906,7 @@ proc port_direction_any_output { dir } { define_cmd_args "set_fanout_load" {fanout ports} proc set_fanout_load { fanout port_list } { - sta_warn 601 "set_fanout_load not supported." + sta_warn 461 "set_fanout_load not supported." } ################################################################ @@ -2930,10 +2930,10 @@ proc set_input_transition { args } { set ports [get_ports_error "ports" [lindex $args 1]] if [info exists keys(-clock)] { - sta_warn 361 "-clock not supported." + sta_warn 462 "-clock not supported." } if [info exists flags(-clock_fall)] { - sta_warn 362 "-clock_fall not supported." + sta_warn 463 "-clock_fall not supported." } foreach port $ports { @@ -2979,13 +2979,13 @@ proc set_load { args } { } if { $nets != {} } { if { $pin_load } { - sta_warn 363 "-pin_load not allowed for net objects." + sta_warn 464 "-pin_load not allowed for net objects." } if { $wire_load } { - sta_warn 364 "-wire_load not allowed for net objects." + sta_warn 465 "-wire_load not allowed for net objects." } if { $tr != "rise_fall" } { - sta_warn 365 "-rise/-fall not allowed for net objects." + sta_warn 466 "-rise/-fall not allowed for net objects." } foreach net $nets { set_net_wire_cap $net $subtract_pin_load $corner $min_max $cap @@ -3072,7 +3072,7 @@ proc set_fanout_limit { fanout min_max objects } { foreach port $ports { set dir [port_direction $port] if { !($dir == "input" || $dir == "bidirect") } { - sta_error 578 "port '[get_name $port]' is not an input." + sta_error 467 "port '[get_name $port]' is not an input." } set_port_fanout_limit $port $min_max $fanout } @@ -3118,7 +3118,7 @@ proc set_max_transition { args } { || [info exists flags(-data_path)] || [info exists flags(-rise)] || [info exists flags(-fall)]) } { - sta_warn 366 "-data_path, -clock_path, -rise, -fall ignored for ports and designs." + sta_warn 468 "-data_path, -clock_path, -rise, -fall ignored for ports and designs." } # -clock_path/-data_path and transition only apply to clock objects. @@ -3189,7 +3189,7 @@ proc set_timing_derate { args } { set derate [lindex $args 0] check_float "derate" $derate if { $derate > 2.0 } { - sta_warn 367 "derating factor greater than 2.0." + sta_warn 469 "derating factor greater than 2.0." } set tr [parse_rise_fall_flags flags] @@ -3226,7 +3226,7 @@ proc set_timing_derate { args } { if { $nets != {} } { if { [info exists flags(-cell_delay)] \ || [info exists flags(-cell_check)] } { - sta_warn 368 "-cell_delay and -cell_check flags ignored for net objects." + sta_warn 470 "-cell_delay and -cell_check flags ignored for net objects." } foreach net $nets { foreach path_type $path_types { @@ -3296,7 +3296,7 @@ proc parse_from_arg { keys_var arg_error_var } { if {$from_pins == {} && $from_insts == {} && $from_clks == {}} { upvar 1 $arg_error_var arg_error set arg_error 1 - sta_warn 369 "no valid objects specified for $key." + sta_warn 471 "no valid objects specified for $key." return "NULL" } return [make_exception_from $from_pins $from_clks $from_insts $tr] @@ -3329,7 +3329,7 @@ proc parse_thrus_arg { args_var arg_error_var } { if {$pins == {} && $insts == {} && $nets == {}} { upvar 1 $arg_error_var arg_error set arg_error 1 - sta_warn 370 "no valid objects specified for $key" + sta_warn 472 "no valid objects specified for $key" } else { lappend thrus [make_exception_thru $pins $nets $insts $tr] } @@ -3378,7 +3378,7 @@ proc parse_to_arg1 { keys_var end_rf arg_error_var } { if {$to_pins == {} && $to_insts == {} && $to_clks == {}} { upvar 1 $arg_error_var arg_error set arg_error 1 - sta_warn 602 "no valid objects specified for $key." + sta_warn 473 "no valid objects specified for $key." return "NULL" } return [make_exception_to $to_pins $to_clks $to_insts $to_rf $end_rf] @@ -3446,7 +3446,7 @@ proc parse_op_cond { op_cond_name lib_key min_max key_var } { set liberty [get_liberty_error $lib_key $keys($lib_key)] set op_cond [$liberty find_operating_conditions $op_cond_name] if { $op_cond == "NULL" } { - sta_error 579 "operating condition '$op_cond_name' not found." + sta_error 474 "operating condition '$op_cond_name' not found." } else { set_operating_conditions_cmd $op_cond $min_max } @@ -3464,7 +3464,7 @@ proc parse_op_cond { op_cond_name lib_key min_max key_var } { } $lib_iter finish if { !$found } { - sta_error 580 "operating condition '$op_cond_name' not found." + sta_error 475 "operating condition '$op_cond_name' not found." } } } @@ -3478,7 +3478,7 @@ proc parse_op_cond_analysis_type { key_var } { || $analysis_type == "on_chip_variation" } { set_analysis_type_cmd $analysis_type } else { - sta_error 581 "-analysis_type must be single, bc_wc or on_chip_variation." + sta_error 476 "-analysis_type must be single, bc_wc or on_chip_variation." } } elseif { [info exists keys(-min)] && [info exists keys(-max)] } { set_analysis_type_cmd "bc_wc" @@ -3490,7 +3490,7 @@ proc parse_op_cond_analysis_type { key_var } { define_cmd_args "set_wire_load_min_block_size" {block_size} proc set_wire_load_min_block_size { block_size } { - sta_warn 371 "set_wire_load_min_block_size not supported." + sta_warn 477 "set_wire_load_min_block_size not supported." } ################################################################ @@ -3503,7 +3503,7 @@ proc set_wire_load_mode { mode } { || $mode == "segmented" } { set_wire_load_mode_cmd $mode } else { - sta_error 582 "mode must be top, enclosed or segmented." + sta_error 478 "mode must be top, enclosed or segmented." } } @@ -3518,7 +3518,7 @@ proc set_wire_load_model { args } { check_argc_eq0or1 "set_wire_load_model" $args if { ![info exists keys(-name)] } { - sta_error 583 "no wire load model specified." + sta_error 479 "no wire load model specified." } set model_name $keys(-name) @@ -3540,7 +3540,7 @@ proc set_wire_load_model { args } { $lib_iter finish } if {$wireload == "NULL"} { - sta_error 605 "wire load model '$model_name' not found." + sta_error 480 "wire load model '$model_name' not found." } set objects $args set_wire_load_cmd $wireload $min_max @@ -3579,7 +3579,7 @@ proc set_wire_load_selection_group { args } { $lib_iter finish } if {$selection == "NULL"} { - sta_error 584 "wire load selection group '$selection_name' not found." + sta_error 481 "wire load selection group '$selection_name' not found." } set_wire_load_selection_group_cmd $selection $min_max } @@ -3667,7 +3667,7 @@ define_cmd_args "define_corners" { corner1 [corner2]... } proc define_corners { args } { if { [get_libs -quiet *] != {} } { - sta_error 373 "define_corners must be called before read_liberty." + sta_error 482 "define_corners must be called before read_liberty." } define_corners_cmd $args } @@ -3737,7 +3737,7 @@ proc default_operating_conditions {} { } $lib_iter finish if { !$found } { - sta_error 585 "no default operating conditions found." + sta_error 500 "no default operating conditions found." } return $op_cond } diff --git a/tcl/Search.tcl b/tcl/Search.tcl index 192ac052..150b576a 100644 --- a/tcl/Search.tcl +++ b/tcl/Search.tcl @@ -133,7 +133,7 @@ proc find_timing_paths_cmd { cmd args_var } { } elseif { $mm_key == "min" || $mm_key == "max" || $mm_key == "min_max" } { set min_max $mm_key } else { - sta_error 420 "$cmd -path_delay must be min, min_rise, min_fall, max, max_rise, max_fall or min_max." + sta_error 510 "$cmd -path_delay must be min, min_rise, min_fall, max, max_rise, max_fall or min_max." } } @@ -143,7 +143,7 @@ proc find_timing_paths_cmd { cmd args_var } { set to [parse_to_arg1 keys $end_rf arg_error] if { $arg_error } { delete_from_thrus_to $from $thrus $to - sta_error 421 "$cmd command failed." + sta_error 511 "$cmd command failed." } check_for_key_args $cmd args @@ -162,7 +162,7 @@ proc find_timing_paths_cmd { cmd args_var } { if [info exists keys(-endpoint_count)] { set endpoint_count $keys(-endpoint_count) if { $endpoint_count < 1 } { - sta_error 422 "-endpoint_count must be a positive integer." + sta_error 512 "-endpoint_count must be a positive integer." } } @@ -171,7 +171,7 @@ proc find_timing_paths_cmd { cmd args_var } { set group_count $keys(-group_count) check_positive_integer "-group_count" $group_count if { $group_count < 1 } { - sta_error 423 "-group_count must be >= 1." + sta_error 513 "-group_count must be >= 1." } } @@ -202,9 +202,9 @@ proc find_timing_paths_cmd { cmd args_var } { delete_from_thrus_to $from $thrus $to set arg [lindex $args 0] if { [is_keyword_arg $arg] } { - sta_error 424 "'$arg' is not a known keyword or flag." + sta_error 514 "'$arg' is not a known keyword or flag." } else { - sta_error 425 "positional arguments not supported." + sta_error 515 "positional arguments not supported." } } @@ -323,7 +323,7 @@ proc_redirect report_clock_skew { check_argc_eq0 "report_clock_skew" $args if { [info exists flags(-setup)] && [info exists flags(-hold)] } { - sta_error 419 "report_clock_skew -setup and -hold are mutually exclusive options." + sta_error 516 "report_clock_skew -setup and -hold are mutually exclusive options." } elseif { [info exists flags(-setup)] } { set setup_hold "setup" } elseif { [info exists flags(-hold)] } { @@ -408,7 +408,7 @@ proc_redirect report_check_types { set violators [info exists flags(-violators)] if { [info exists flags(-all_violators)] } { - sta_warn 609 "-all_violators is deprecated. Use -violators" + sta_warn 517 "-all_violators is deprecated. Use -violators" set violators 1 } @@ -488,12 +488,12 @@ proc_redirect report_check_types { set clk_gating_hold [info exists flags(-clock_gating_hold)] set max_slew [info exists flags(-max_slew)] if { [info exists flags(-max_transition)] } { - sta_warn 610 "-max_transition deprecated. Use -max_slew." + sta_warn 518 "-max_transition deprecated. Use -max_slew." set max_slew 1 } set min_slew [info exists flags(-min_slew)] if { [info exists flags(-min_transition)] } { - sta_warn 611 "-min_transition deprecated. Use -min_slew." + sta_warn 519 "-min_transition deprecated. Use -min_slew." set min_slew 1 } set max_fanout [info exists flags(-max_fanout)] @@ -507,12 +507,12 @@ proc_redirect report_check_types { && (($setup && $hold) \ || ($recovery && $removal) \ || ($clk_gating_setup && $clk_gating_hold)) } { - sta_error 426 "analysis type single is not consistent with doing both setup/max and hold/min checks." + sta_error 520 "analysis type single is not consistent with doing both setup/max and hold/min checks." } } if { $args != {} } { - sta_error 427 "positional arguments not supported." + sta_error 521 "positional arguments not supported." } set corner [parse_corner_or_all keys] @@ -775,7 +775,7 @@ proc_redirect report_path { flags {-max -min -all -tags} 0 if { [info exists flags(-min)] && [info exists flags(-max)] } { - sta_error 508 "-min and -max cannot both be specified." + sta_error 522 "-min and -max cannot both be specified." } elseif [info exists flags(-min)] { set min_max "min" } elseif [info exists flags(-max)] { @@ -795,7 +795,7 @@ proc_redirect report_path { set pin [get_port_pin_error "pin" $pin_arg] if { [$pin is_hierarchical] } { - sta_error 509 "pin '$pin_arg' is hierarchical." + sta_error 523 "pin '$pin_arg' is hierarchical." } else { foreach vertex [$pin vertices] { if { $vertex != "NULL" } { @@ -861,7 +861,7 @@ proc parse_report_path_options { cmd args_var default_format set formats {full full_clock full_clock_expanded short \ end slack_only summary json} if { [lsearch $formats $format] == -1 } { - sta_error 510 "-format $format not recognized." + sta_error 524 "-format $format not recognized." } } else { set path_options(-format) $default_format @@ -901,7 +901,7 @@ proc parse_report_path_options { cmd args_var default_format set report_slew [expr [lsearch $fields "slew*"] != -1] set report_fanout [expr [lsearch $fields "fanout*"] != -1] if { [expr [lsearch $fields "trans*"] != -1] } { - sta_warn 1640 "The transition_time field is deprecated. Use slew instead." + sta_warn 525 "The transition_time field is deprecated. Use slew instead." } } else { set report_input_pin 0 @@ -1008,7 +1008,7 @@ proc worst_clock_skew { args } { check_argc_eq0 "worst_clock_skew" $args if { ([info exists flags(-setup)] && [info exists flags(-hold)]) \ || (![info exists flags(-setup)] && ![info exists flags(-hold)]) } { - sta_error 616 "specify one of -setup and -hold." + sta_error 526 "specify one of -setup and -hold." } elseif { [info exists flags(-setup)] } { set setup_hold "setup" } elseif { [info exists flags(-hold)] } { @@ -1057,7 +1057,7 @@ proc parse_path_group_arg { group_names } { if { [is_path_group_name $name] } { lappend names $name } else { - sta_warn 318 "unknown path group '$name'." + sta_warn 527 "unknown path group '$name'." } } return $names diff --git a/tcl/Sta.tcl b/tcl/Sta.tcl index 4b8ad0db..f24a987e 100644 --- a/tcl/Sta.tcl +++ b/tcl/Sta.tcl @@ -155,7 +155,7 @@ proc get_timing_edges_cmd { cmd cmd_args } { if { [info exists keys(-of_objects)] } { if { [info exists keys(-from)] \ || [info exists keys(-from)] } { - sta_error 440 "-from/-to arguments not supported with -of_objects." + sta_error 540 "-from/-to arguments not supported with -of_objects." } set arcs [get_timing_arcs_objects $keys(-of_objects)] } elseif { [info exists keys(-from)] \ @@ -283,7 +283,7 @@ proc filter_timing_arcs1 { filter objects } { } elseif { [regexp $filter_regexp1 $filter ignore attr_name op arg] } { set filtered_objects [filter_timing_arcs $attr_name $op $arg $objects] } else { - sta_error 441 "unsupported -filter expression." + sta_error 541 "unsupported -filter expression." } return $filtered_objects } diff --git a/tcl/StaTcl.i b/tcl/StaTcl.i index c2febea1..2e468644 100644 --- a/tcl/StaTcl.i +++ b/tcl/StaTcl.i @@ -115,7 +115,7 @@ cmdLinkedNetwork() return network; else { Report *report = Sta::sta()->report(); - report->error(201, "no network has been linked."); + report->error(1570, "no network has been linked."); return nullptr; } } @@ -129,7 +129,7 @@ cmdEditNetwork() return dynamic_cast(network); else { Report *report = Sta::sta()->report(); - report->error(202, "network does not support edits."); + report->error(1571, "network does not support edits."); return nullptr; } } @@ -4112,7 +4112,7 @@ set_crpr_mode(const char *mode) else if (stringEq(mode, "same_transition")) Sta::sta()->setCrprMode(CrprMode::same_transition); else - sta->report()->critical(272, "unknown common clk pessimism mode."); + sta->report()->critical(1573, "unknown common clk pessimism mode."); } bool @@ -4126,7 +4126,7 @@ set_pocv_enabled(bool enabled) { #if !SSTA if (enabled) - Sta::sta()->report()->error(204, "POCV support requires compilation with SSTA=1."); + Sta::sta()->report()->error(1574, "POCV support requires compilation with SSTA=1."); #endif return Sta::sta()->setPocvEnabled(enabled); } @@ -4364,7 +4364,7 @@ set_report_path_field_properties(const char *field_name, if (field) field->setProperties(title, width, left_justify); else - sta->report()->error(607, "unknown report path field %s", field_name); + sta->report()->error(1575, "unknown report path field %s", field_name); } void @@ -4376,7 +4376,7 @@ set_report_path_field_width(const char *field_name, if (field) field->setWidth(width); else - sta->report()->error(608, "unknown report path field %s", field_name); + sta->report()->error(1576, "unknown report path field %s", field_name); } void @@ -5061,7 +5061,7 @@ set_clock_sense_cmd(PinSet *pins, else if (stop_propagation) sta->setClockSense(pins, clks, ClockSense::stop); else - sta->report()->critical(273, "unknown clock sense"); + sta->report()->critical(1577, "unknown clock sense"); } bool diff --git a/tcl/Util.tcl b/tcl/Util.tcl index 41c53e0f..6b0f46f1 100644 --- a/tcl/Util.tcl +++ b/tcl/Util.tcl @@ -41,7 +41,7 @@ proc parse_key_args { cmd arg_var key_var keys {flag_var ""} {flags {}} \ if { $key_index >= 0 } { set key $arg if { [llength $args] == 1 } { - sta_error 400 "$cmd $key missing value." + sta_error 560 "$cmd $key missing value." } set key_value($key) [lindex $args 1] set args [lrange $args 1 end] @@ -58,7 +58,7 @@ proc parse_key_args { cmd arg_var key_var keys {flag_var ""} {flags {}} \ if { $key_index >= 0 } { set key [lindex $keys $key_index] if { [llength $args] == 1 } { - sta_error 401 "$cmd $key missing value." + sta_error 561 "$cmd $key missing value." } set key_value($key) [lindex $args 1] set args [lrange $args 1 end] @@ -68,7 +68,7 @@ proc parse_key_args { cmd arg_var key_var keys {flag_var ""} {flags {}} \ set flag [lindex $flags $flag_index] set flag_present($flag) 1 } elseif { $unknown_key_is_error } { - sta_error 402 "$cmd $arg is not a known keyword or flag." + sta_error 562 "$cmd $arg is not a known keyword or flag." } else { lappend args_rtn $arg } @@ -90,7 +90,7 @@ proc check_for_key_args { cmd arg_var } { while { $args != "" } { set arg [lindex $args 0] if { [is_keyword_arg $arg] } { - sta_error 403 "$cmd $arg is not a known keyword or flag." + sta_error 563 "$cmd $arg is not a known keyword or flag." } else { lappend args_rtn $arg } @@ -238,45 +238,45 @@ define_cmd_args "log_end" {} proc check_argc_eq0 { cmd arglist } { if { $arglist != {} } { - sta_error 406 "$cmd positional arguments not supported." + sta_error 564 "$cmd positional arguments not supported." } } proc check_argc_eq1 { cmd arglist } { if { [llength $arglist] != 1 } { - sta_error 407 "$cmd requires one positional argument." + sta_error 565 "$cmd requires one positional argument." } } proc check_argc_eq0or1 { cmd arglist } { set argc [llength $arglist] if { $argc != 0 && $argc != 1 } { - sta_error 408 "$cmd requires zero or one positional arguments." + sta_error 566 "$cmd requires zero or one positional arguments." } } proc check_argc_eq2 { cmd arglist } { if { [llength $arglist] != 2 } { - sta_error 409 "$cmd requires two positional arguments." + sta_error 567 "$cmd requires two positional arguments." } } proc check_argc_eq1or2 { cmd arglist } { set argc [llength $arglist] if { $argc != 1 && $argc != 2 } { - sta_error 410 "$cmd requires one or two positional arguments." + sta_error 568 "$cmd requires one or two positional arguments." } } proc check_argc_eq3 { cmd arglist } { if { [llength $arglist] != 3 } { - sta_error 411 "$cmd requires three positional arguments." + sta_error 569 "$cmd requires three positional arguments." } } proc check_argc_eq4 { cmd arglist } { if { [llength $arglist] != 4 } { - sta_error 412 "$cmd requires four positional arguments." + sta_error 570 "$cmd requires four positional arguments." } } @@ -284,37 +284,37 @@ proc check_argc_eq4 { cmd arglist } { proc check_float { cmd_arg arg } { if {![string is double $arg]} { - sta_error 413 "$cmd_arg '$arg' is not a float." + sta_error 571 "$cmd_arg '$arg' is not a float." } } proc check_positive_float { cmd_arg arg } { if {!([string is double $arg] && $arg >= 0.0)} { - sta_error 414 "$cmd_arg '$arg' is not a positive float." + sta_error 572 "$cmd_arg '$arg' is not a positive float." } } proc check_integer { cmd_arg arg } { if {!([string is integer $arg])} { - sta_error 415 "$cmd_arg '$arg' is not an integer." + sta_error 573 "$cmd_arg '$arg' is not an integer." } } proc check_positive_integer { cmd_arg arg } { if {!([string is integer $arg] && $arg >= 0)} { - sta_error 416 "$cmd_arg '$arg' is not a positive integer." + sta_error 574 "$cmd_arg '$arg' is not a positive integer." } } proc check_cardinal { cmd_arg arg } { if {!([string is integer $arg] && $arg >= 1)} { - sta_error 417 "$cmd_arg '$arg' is not an integer greater than or equal to one." + sta_error 575 "$cmd_arg '$arg' is not an integer greater than or equal to one." } } proc check_percent { cmd_arg arg } { if {!([string is double $arg] && $arg >= 0.0 && $arg <= 100.0)} { - sta_error 418 "$cmd_arg '$arg' is not between 0 and 100." + sta_error 576 "$cmd_arg '$arg' is not between 0 and 100." } } diff --git a/tcl/Variables.tcl b/tcl/Variables.tcl index 5460d3dc..b464b7c2 100644 --- a/tcl/Variables.tcl +++ b/tcl/Variables.tcl @@ -42,7 +42,7 @@ proc trace_report_default_digits { name1 name2 op } { if { $op == "w" } { if { !([string is integer $sta_report_default_digits] \ && $sta_report_default_digits >= 0) } { - sta_error 436 "sta_report_default_digits must be a positive integer." + sta_error 590 "sta_report_default_digits must be a positive integer." } } } @@ -67,7 +67,7 @@ proc trace_crpr_mode { name1 name2 op } { if { $sta_crpr_mode == "same_pin" || $sta_crpr_mode == "same_transition" } { set_crpr_mode $sta_crpr_mode } else { - sta_error 437 "sta_crpr_mode must be pin or transition." + sta_error 591 "sta_crpr_mode must be pin or transition." } } } @@ -184,7 +184,7 @@ proc trace_boolean_var { op var_name get_proc set_proc } { } elseif { $var == 1 } { $set_proc 1 } else { - sta_error 438 "$var_name value must be 0 or 1." + sta_error 592 "$var_name value must be 0 or 1." } } } diff --git a/tcl/WritePathSpice.tcl b/tcl/WritePathSpice.tcl index 0ba7da65..99d14566 100644 --- a/tcl/WritePathSpice.tcl +++ b/tcl/WritePathSpice.tcl @@ -32,55 +32,55 @@ proc write_path_spice { args } { if { [info exists keys(-spice_directory)] } { set spice_dir [file nativename $keys(-spice_directory)] if { ![file exists $spice_dir] } { - sta_error 496 "Directory $spice_dir not found." + sta_error 600 "Directory $spice_dir not found." } if { ![file isdirectory $spice_dir] } { - sta_error 497 "$spice_dir is not a directory." + sta_error 601 "$spice_dir is not a directory." } if { ![file writable $spice_dir] } { - sta_error 498 "Cannot write in $spice_dir." + sta_error 602 "Cannot write in $spice_dir." } } else { - sta_error 499 "No -spice_directory specified." + sta_error 603 "No -spice_directory specified." } if { [info exists keys(-lib_subckt_file)] } { set lib_subckt_file [file nativename $keys(-lib_subckt_file)] if { ![file readable $lib_subckt_file] } { - sta_error 500 "-lib_subckt_file $lib_subckt_file is not readable." + sta_error 604 "-lib_subckt_file $lib_subckt_file is not readable." } } else { - sta_error 501 "No -lib_subckt_file specified." + sta_error 605 "No -lib_subckt_file specified." } if { [info exists keys(-model_file)] } { set model_file [file nativename $keys(-model_file)] if { ![file readable $model_file] } { - sta_error 502 "-model_file $model_file is not readable." + sta_error 606 "-model_file $model_file is not readable." } } else { - sta_error 503 "No -model_file specified." + sta_error 607 "No -model_file specified." } if { [info exists keys(-power)] } { set power $keys(-power) } else { - sta_error 504 "No -power specified." + sta_error 608 "No -power specified." } if { [info exists keys(-ground)] } { set ground $keys(-ground) } else { - sta_error 505 "No -ground specified." + sta_error 609 "No -ground specified." } if { ![info exists keys(-path_args)] } { - sta_error 506 "No -path_args specified." + sta_error 610 "No -path_args specified." } set path_args $keys(-path_args) set path_ends [eval [concat find_timing_paths $path_args]] if { $path_ends == {} } { - sta_error 507 "No paths found for -path_args $path_args." + sta_error 611 "No paths found for -path_args $path_args." } else { set path_index 1 foreach path_end $path_ends { diff --git a/verilog/VerilogReader.cc b/verilog/VerilogReader.cc index 4ede7837..a1cea261 100644 --- a/verilog/VerilogReader.cc +++ b/verilog/VerilogReader.cc @@ -883,7 +883,7 @@ VerilogModule::parseDcl(VerilogDcl *dcl, dcl_map_[net_name] = dcl; else if (!dcl->direction()->isInternal()) { string net_vname = reader->netVerilogName(net_name); - reader->warn(18, filename_, dcl->line(), + reader->warn(1395, filename_, dcl->line(), "signal %s previously declared on line %d.", net_vname.c_str(), existing_dcl->line()); @@ -912,7 +912,7 @@ VerilogModule::checkInstanceName(VerilogInst *inst, replacement_name = stringPrint("%s_%d", inst_name, i); } while (inst_names.findKey(replacement_name)); string inst_vname = reader->instanceVerilogName(inst_name); - reader->warn(19, filename_, inst->line(), + reader->warn(1396, filename_, inst->line(), "instance name %s duplicated - renamed to %s.", inst_vname.c_str(), replacement_name); @@ -1538,7 +1538,7 @@ VerilogNetConstant::parseConstant10(const char *constant_str, if (length > max_length || (length == max_length && strcmp(tmp, reader->constant10Max()) > 0)) - reader->warn(20, reader->filename(), reader->line(), + reader->warn(1397, reader->filename(), reader->line(), "base 10 constant greater than %s not supported.", reader->constant10Max()); else { @@ -1779,12 +1779,12 @@ VerilogReader::linkNetwork(const char *top_cell_name, return top_instance; } else { - report->error(274, "%s is not a verilog module.", top_cell_name); + report->error(1398, "%s is not a verilog module.", top_cell_name); return nullptr; } } else { - report->error(275, "%s is not a verilog module.", top_cell_name); + report->error(1399, "%s is not a verilog module.", top_cell_name); return nullptr; } } From e0024709f44e26647301ecde589088ed61e148d2 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Mon, 8 Jan 2024 16:18:54 -0700 Subject: [PATCH 10/43] parallel driver dcalc seg fault Signed-off-by: James Cherry --- dcalc/GraphDelayCalc.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dcalc/GraphDelayCalc.cc b/dcalc/GraphDelayCalc.cc index d852bb8f..722161d9 100644 --- a/dcalc/GraphDelayCalc.cc +++ b/dcalc/GraphDelayCalc.cc @@ -935,12 +935,12 @@ GraphDelayCalc::findParallelEdge(Vertex *vertex, Edge *&edge, const TimingArc *&arc) { - LibertyCell *drvr_cell = network_->libertyCell(network_->instance(drvr_edge->to(graph_)->pin())); + LibertyCell *drvr_cell = drvr_arc->from()->libertyCell(); LibertyCell *vertex_cell = network_->libertyCell(network_->instance(vertex->pin())); if (vertex_cell == drvr_cell) { // Homogeneous drivers. arc = drvr_arc; - LibertyPort *from_port = network_->libertyPort(edge->from(graph_)->pin()); + LibertyPort *from_port = network_->libertyPort(drvr_edge->from(graph_)->pin()); VertexInEdgeIterator edge_iter(vertex, graph_); while (edge_iter.hasNext()) { edge = edge_iter.next(); From ebb0a5d0608a7e6b42b35c2b2646ef740577618a Mon Sep 17 00:00:00 2001 From: James Cherry Date: Mon, 8 Jan 2024 18:02:01 -0700 Subject: [PATCH 11/43] sic Signed-off-by: James Cherry --- dcalc/ArnoldiDelayCalc.cc | 2 +- dcalc/DmpDelayCalc.cc | 2 +- dcalc/GraphDelayCalc.cc | 2 +- dcalc/LumpedCapDelayCalc.cc | 2 +- include/sta/Sdc.hh | 4 ++-- search/Search.cc | 2 +- search/VisitPathEnds.cc | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dcalc/ArnoldiDelayCalc.cc b/dcalc/ArnoldiDelayCalc.cc index 11f8d775..6a2b9b1a 100644 --- a/dcalc/ArnoldiDelayCalc.cc +++ b/dcalc/ArnoldiDelayCalc.cc @@ -257,7 +257,7 @@ ArnoldiDelayCalc::findParasitic(const Pin *drvr_pin, { Parasitic *parasitic = nullptr; const Corner *corner = dcalc_ap->corner(); - // set_load net has precidence over parasitics. + // set_load net has precedence over parasitics. if (!sdc_->drvrPinHasWireCap(drvr_pin, corner)) { const ParasiticAnalysisPt *parasitic_ap = dcalc_ap->parasiticAnalysisPt(); Parasitic *parasitic_network = diff --git a/dcalc/DmpDelayCalc.cc b/dcalc/DmpDelayCalc.cc index bf0c7802..ae865102 100644 --- a/dcalc/DmpDelayCalc.cc +++ b/dcalc/DmpDelayCalc.cc @@ -208,7 +208,7 @@ DmpCeffTwoPoleDelayCalc::findParasitic(const Pin *drvr_pin, { Parasitic *parasitic = nullptr; const Corner *corner = dcalc_ap->corner(); - // set_load net has precidence over parasitics. + // set_load net has precedence over parasitics. if (!sdc_->drvrPinHasWireCap(drvr_pin, corner)) { const ParasiticAnalysisPt *parasitic_ap = dcalc_ap->parasiticAnalysisPt(); if (parasitics_->haveParasitics()) { diff --git a/dcalc/GraphDelayCalc.cc b/dcalc/GraphDelayCalc.cc index 722161d9..5b5eab43 100644 --- a/dcalc/GraphDelayCalc.cc +++ b/dcalc/GraphDelayCalc.cc @@ -1205,7 +1205,7 @@ GraphDelayCalc::loadCap(const Parasitic *parasitic, float &pin_cap, float &wire_cap) const { - // set_load net has precidence over parasitics. + // set_load net has precedence over parasitics. if (!has_net_load && parasitic) { if (parasitics_->isParasiticNetwork(parasitic)) wire_cap += parasitics_->capacitance(parasitic); diff --git a/dcalc/LumpedCapDelayCalc.cc b/dcalc/LumpedCapDelayCalc.cc index 4330151b..d3697138 100644 --- a/dcalc/LumpedCapDelayCalc.cc +++ b/dcalc/LumpedCapDelayCalc.cc @@ -57,7 +57,7 @@ LumpedCapDelayCalc::findParasitic(const Pin *drvr_pin, { Parasitic *parasitic = nullptr; const Corner *corner = dcalc_ap->corner(); - // set_load net has precidence over parasitics. + // set_load net has precedence over parasitics. if (!sdc_->drvrPinHasWireCap(drvr_pin, corner)) { const ParasiticAnalysisPt *parasitic_ap = dcalc_ap->parasiticAnalysisPt(); if (parasitics_->haveParasitics()) { diff --git a/include/sta/Sdc.hh b/include/sta/Sdc.hh index eb471f20..1526780e 100644 --- a/include/sta/Sdc.hh +++ b/include/sta/Sdc.hh @@ -267,7 +267,7 @@ public: float limit); void setLatchBorrowLimit(const Clock *clk, float limit); - // Return the latch borrow limit respecting precidence if multiple + // Return the latch borrow limit respecting precedence if multiple // limits apply. void latchBorrowLimit(const Pin *data_pin, const Pin *enable_pin, @@ -286,7 +286,7 @@ public: void setMinPulseWidth(const Clock *clk, const RiseFallBoth *rf, float min_width); - // Return min pulse with respecting precidence. + // Return min pulse with respecting precedence. void minPulseWidth(const Pin *pin, const Clock *clk, const RiseFall *hi_low, diff --git a/search/Search.cc b/search/Search.cc index 69124abf..b45d9639 100644 --- a/search/Search.cc +++ b/search/Search.cc @@ -2468,7 +2468,7 @@ Search::thruClkInfo(PathVertex *from_path, sdc_->clockLatency(from_clk, to_pin, clk_rf, min_max, latency, exists); if (exists) { - // Latency on pin has precidence over fanin or hierarchical + // Latency on pin has precedence over fanin or hierarchical // pin latency. to_latency = latency; to_clk_prop = false; diff --git a/search/VisitPathEnds.cc b/search/VisitPathEnds.cc index b21aa364..dbe9a8ce 100644 --- a/search/VisitPathEnds.cc +++ b/search/VisitPathEnds.cc @@ -97,7 +97,7 @@ VisitPathEnds::visitClkedPathEnds(const Pin *pin, // Ignore segment startpoint paths. && (!is_segment_start || !tag->isSegmentStart())) { - // set_output_delay to timing check has precidence. + // set_output_delay to timing check has precedence. if (sdc_->hasOutputDelay(pin)) visitOutputDelayEnd(pin, path, end_rf, path_ap, filtered, visitor, is_constrained); From 22557a5c4eeac9a2f20e64566c26367ff2ef02f2 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Tue, 9 Jan 2024 15:22:34 -0700 Subject: [PATCH 12/43] Sta::startpoints(), endpoints() Signed-off-by: James Cherry --- include/sta/Sta.hh | 5 ++--- search/Sta.cc | 23 +++++++++++------------ tcl/StaTcl.i | 28 +++------------------------- 3 files changed, 16 insertions(+), 40 deletions(-) diff --git a/include/sta/Sta.hh b/include/sta/Sta.hh index 56344d09..b46bd7c5 100644 --- a/include/sta/Sta.hh +++ b/include/sta/Sta.hh @@ -937,9 +937,8 @@ public: void delaysInvalid(); // Invalidate all arrival and required times. void arrivalsInvalid(); - void visitStartpoints(VertexVisitor *visitor); - void visitEndpoints(VertexVisitor *visitor); - VertexSet *endpoints(); + PinSet startpoints(); + PinSet endpoints(); int endpointViolationCount(const MinMax *min_max); // Find the fanin vertices for a group path. // Vertices in the clock network are NOT included. diff --git a/search/Sta.cc b/search/Sta.cc index 2efe3fbf..af821c33 100644 --- a/search/Sta.cc +++ b/search/Sta.cc @@ -2658,25 +2658,24 @@ Sta::ensureClkArrivals() //////////////////////////////////////////////////////////////// -void -Sta::visitStartpoints(VertexVisitor *visitor) +PinSet +Sta::startpoints() { ensureGraph(); - search_->visitStartpoints(visitor); + PinSet pins(network_); + VertexPinCollector visitor(pins); + search_->visitStartpoints(&visitor); + return pins; } -void -Sta::visitEndpoints(VertexVisitor *visitor) -{ - ensureGraph(); - search_->visitEndpoints(visitor); -} - -VertexSet * +PinSet Sta::endpoints() { ensureGraph(); - return search_->endpoints(); + PinSet pins(network_); + for (Vertex *vertex : *search_->endpoints()) + pins.insert(vertex->pin()); + return pins; } int diff --git a/tcl/StaTcl.i b/tcl/StaTcl.i index 2e468644..9940d1d9 100644 --- a/tcl/StaTcl.i +++ b/tcl/StaTcl.i @@ -339,28 +339,6 @@ setPtrTclList(SET_TYPE *set, //////////////////////////////////////////////////////////////// -PinSet -findStartpoints() -{ - Network *network = cmdNetwork(); - PinSet pins(network); - VertexPinCollector visitor(pins); - Sta::sta()->visitStartpoints(&visitor); - return pins; -} - -PinSet -findEndpoints() -{ - Network *network = cmdNetwork(); - PinSet pins(network); - VertexPinCollector visitor(pins); - Sta::sta()->visitEndpoints(&visitor); - return pins; -} - -//////////////////////////////////////////////////////////////// - void tclArgError(Tcl_Interp *interp, const char *msg, @@ -4436,13 +4414,13 @@ worst_clk_skew_cmd(const SetupHold *setup_hold) PinSet startpoints() { - return findStartpoints(); + return Sta::sta()->startpoints(); } PinSet endpoints() { - return findEndpoints(); + return Sta::sta()->endpoints(); } PinSet @@ -5441,7 +5419,7 @@ port_location(const Port *port) int endpoint_count() { - return Sta::sta()->endpoints()->size(); + return Sta::sta()->endpoints().size(); } int From 9b79629a53723177f27105e45c840b3e3d661c43 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Tue, 9 Jan 2024 21:00:00 -0800 Subject: [PATCH 13/43] StaTcl.i factor tcl typedefs into StaTclTypes.i Signed-off-by: James Cherry --- CMakeLists.txt | 1 + app/StaApp.i | 1 + include/sta/StringSet.hh | 4 +- include/sta/WritePathSpice.hh | 4 +- tcl/StaTcl.i | 1344 -------------------------------- tcl/StaTclTypes.i | 1365 +++++++++++++++++++++++++++++++++ 6 files changed, 1372 insertions(+), 1347 deletions(-) create mode 100644 tcl/StaTclTypes.i diff --git a/CMakeLists.txt b/CMakeLists.txt index 83457ea8..0c56665c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -332,6 +332,7 @@ set(SWIG_FILES ${STA_HOME}/sdf/Sdf.i ${STA_HOME}/tcl/Exception.i ${STA_HOME}/tcl/StaTcl.i + ${STA_HOME}/tcl/StaTclTypes.i ${STA_HOME}/tcl/NetworkEdit.i ${STA_HOME}/verilog/Verilog.i ) diff --git a/app/StaApp.i b/app/StaApp.i index 35f95468..b9a48a19 100644 --- a/app/StaApp.i +++ b/app/StaApp.i @@ -17,6 +17,7 @@ // along with this program. If not, see . %include "Exception.i" +%include "StaTclTypes.i" %include "StaTcl.i" %include "Verilog.i" %include "NetworkEdit.i" diff --git a/include/sta/StringSet.hh b/include/sta/StringSet.hh index 810e8798..9ce73ddc 100644 --- a/include/sta/StringSet.hh +++ b/include/sta/StringSet.hh @@ -13,15 +13,17 @@ // // You should have received a copy of the GNU General Public License // along with this program. If not, see . - #pragma once +#include + #include "StringUtil.hh" #include "Set.hh" namespace sta { typedef Set StringSet; +typedef std::set StdStringSet; void deleteContents(StringSet *strings); diff --git a/include/sta/WritePathSpice.hh b/include/sta/WritePathSpice.hh index a54c9c95..44b5d3e9 100644 --- a/include/sta/WritePathSpice.hh +++ b/include/sta/WritePathSpice.hh @@ -19,13 +19,13 @@ #include #include +#include "StringSet.hh" + namespace sta { using std::string; using std::set; -typedef set StdStringSet; - class Path; class StaState; diff --git a/tcl/StaTcl.i b/tcl/StaTcl.i index 9940d1d9..1f245d0b 100644 --- a/tcl/StaTcl.i +++ b/tcl/StaTcl.i @@ -33,8 +33,6 @@ // //////////////////////////////////////////////////////////////// -#include - #include "Machine.hh" #include "StaConfig.hh" // STA_VERSION #include "Stats.hh" @@ -90,13 +88,7 @@ namespace sta { // //////////////////////////////////////////////////////////////// -typedef Vector LibrarySeq; typedef MinPulseWidthCheckSeq::Iterator MinPulseWidthCheckSeqIterator; -typedef string TmpString; -typedef Set StringSet; -typedef MinMaxAll MinMaxAllNull; - -using std::vector; // Get the network for commands. Network * @@ -143,1334 +135,12 @@ cmdGraph() return Sta::sta()->ensureGraph(); } -template -Vector * -tclListSeq(Tcl_Obj *const source, - swig_type_info *swig_type, - Tcl_Interp *interp) -{ - int argc; - Tcl_Obj **argv; - - if (Tcl_ListObjGetElements(interp, source, &argc, &argv) == TCL_OK - && argc > 0) { - Vector *seq = new Vector; - for (int i = 0; i < argc; i++) { - void *obj; - // Ignore returned TCL_ERROR because can't get swig_type_info. - SWIG_ConvertPtr(argv[i], &obj, swig_type, false); - seq->push_back(reinterpret_cast(obj)); - } - return seq; - } - else - return nullptr; -} - -template -SET_TYPE * -tclListSet(Tcl_Obj *const source, - swig_type_info *swig_type, - Tcl_Interp *interp) -{ - int argc; - Tcl_Obj **argv; - if (Tcl_ListObjGetElements(interp, source, &argc, &argv) == TCL_OK - && argc > 0) { - SET_TYPE *set = new SET_TYPE; - for (int i = 0; i < argc; i++) { - void *obj; - // Ignore returned TCL_ERROR because can't get swig_type_info. - SWIG_ConvertPtr(argv[i], &obj, swig_type, false); - set->insert(reinterpret_cast(obj)); - } - return set; - } - else - return nullptr; -} - -template -SET_TYPE * -tclListNetworkSet(Tcl_Obj *const source, - swig_type_info *swig_type, - Tcl_Interp *interp, - const Network *network) -{ - int argc; - Tcl_Obj **argv; - if (Tcl_ListObjGetElements(interp, source, &argc, &argv) == TCL_OK - && argc > 0) { - SET_TYPE *set = new SET_TYPE(network); - for (int i = 0; i < argc; i++) { - void *obj; - // Ignore returned TCL_ERROR because can't get swig_type_info. - SWIG_ConvertPtr(argv[i], &obj, swig_type, false); - set->insert(reinterpret_cast(obj)); - } - return set; - } - else - return nullptr; -} - -StringSet * -tclListSetConstChar(Tcl_Obj *const source, - Tcl_Interp *interp) -{ - int argc; - Tcl_Obj **argv; - - if (Tcl_ListObjGetElements(interp, source, &argc, &argv) == TCL_OK) { - StringSet *set = new StringSet; - for (int i = 0; i < argc; i++) { - int length; - const char *str = Tcl_GetStringFromObj(argv[i], &length); - set->insert(str); - } - return set; - } - else - return nullptr; -} - -StringSeq * -tclListSeqConstChar(Tcl_Obj *const source, - Tcl_Interp *interp) -{ - int argc; - Tcl_Obj **argv; - - if (Tcl_ListObjGetElements(interp, source, &argc, &argv) == TCL_OK) { - StringSeq *seq = new StringSeq; - for (int i = 0; i < argc; i++) { - int length; - const char *str = Tcl_GetStringFromObj(argv[i], &length); - seq->push_back(str); - } - return seq; - } - else - return nullptr; -} - -StdStringSet * -tclListSetStdString(Tcl_Obj *const source, - Tcl_Interp *interp) -{ - int argc; - Tcl_Obj **argv; - - if (Tcl_ListObjGetElements(interp, source, &argc, &argv) == TCL_OK) { - StdStringSet *set = new StdStringSet; - for (int i = 0; i < argc; i++) { - int length; - const char *str = Tcl_GetStringFromObj(argv[i], &length); - set->insert(str); - } - return set; - } - else - return nullptr; -} - -//////////////////////////////////////////////////////////////// - -// Sequence out to tcl list. -template -void -seqPtrTclList(SEQ_TYPE *seq, - swig_type_info *swig_type, - Tcl_Interp *interp) -{ - Tcl_Obj *list = Tcl_NewListObj(0, nullptr); - for (const OBJECT_TYPE *obj : *seq) { - Tcl_Obj *tcl_obj = SWIG_NewInstanceObj(const_cast(obj), - swig_type, false); - Tcl_ListObjAppendElement(interp, list, tcl_obj); - } - Tcl_SetObjResult(interp, list); -} - -template -void -seqTclList(SEQ_TYPE &seq, - swig_type_info *swig_type, - Tcl_Interp *interp) -{ - Tcl_Obj *list = Tcl_NewListObj(0, nullptr); - for (const OBJECT_TYPE *obj : seq) { - Tcl_Obj *tcl_obj = SWIG_NewInstanceObj(const_cast(obj), - swig_type, false); - Tcl_ListObjAppendElement(interp, list, tcl_obj); - } - Tcl_SetObjResult(interp, list); -} - -template -void -setTclList(SET_TYPE set, - swig_type_info *swig_type, - Tcl_Interp *interp) -{ - Tcl_Obj *list = Tcl_NewListObj(0, nullptr); - for (const OBJECT_TYPE *obj : set) { - Tcl_Obj *tcl_obj = SWIG_NewInstanceObj(const_cast(obj), - swig_type, false); - Tcl_ListObjAppendElement(interp, list, tcl_obj); - } - Tcl_SetObjResult(interp, list); -} - -template -void -setPtrTclList(SET_TYPE *set, - swig_type_info *swig_type, - Tcl_Interp *interp) -{ - Tcl_Obj *list = Tcl_NewListObj(0, nullptr); - for (const OBJECT_TYPE *obj : *set) { - Tcl_Obj *tcl_obj = SWIG_NewInstanceObj(const_cast(obj), - swig_type, false); - Tcl_ListObjAppendElement(interp, list, tcl_obj); - } - Tcl_SetObjResult(interp, list); -} - -//////////////////////////////////////////////////////////////// - -void -tclArgError(Tcl_Interp *interp, - const char *msg, - const char *arg) -{ - // Swig does not add try/catch around arg parsing so this cannot use Report::error. - string error_msg = "Error: "; - error_msg += msg; - char *error = stringPrint(error_msg.c_str(), arg); - Tcl_SetResult(interp, error, TCL_VOLATILE); - stringDelete(error); -} - -void -objectListNext(const char *list, - const char *type, - // Return values. - bool &type_match, - const char *&next) -{ - // Default return values (failure). - type_match = false; - next = nullptr; - // _hexaddress_p_type - const char *s = list; - char ch = *s++; - if (ch == '_') { - while (*s && isxdigit(*s)) - s++; - if ((s - list - 1) == sizeof(void*) * 2 - && *s && *s++ == '_' - && *s && *s++ == 'p' - && *s && *s++ == '_') { - const char *t = type; - while (*s && *s != ' ') { - if (*s != *t) - return; - s++; - t++; - } - type_match = true; - if (*s) - next = s + 1; - else - next = nullptr; - } - } -} - } // namespace using namespace sta; %} -//////////////////////////////////////////////////////////////// -// -// SWIG type definitions. -// -//////////////////////////////////////////////////////////////// - -// String that is deleted after crossing over to tcland. -%typemap(out) string { - string &str = $1; - // String is volatile because it is deleted. - Tcl_SetResult(interp, const_cast(str.c_str()), TCL_VOLATILE); -} - -// String that is deleted after crossing over to tcland. -%typemap(out) TmpString* { - string *str = $1; - if (str) { - // String is volatile because it is deleted. - Tcl_SetResult(interp, const_cast(str->c_str()), TCL_VOLATILE); - delete str; - } - else - Tcl_SetResult(interp, nullptr, TCL_STATIC); -} - -%typemap(in) StringSeq* { - $1 = tclListSeqConstChar($input, interp); -} - -%typemap(in) StdStringSet* { - $1 = tclListSetStdString($input, interp); -} - -%typemap(out) StringSeq* { - StringSeq *strs = $1; - Tcl_Obj *list = Tcl_NewListObj(0, nullptr); - for (const char *str : *strs) { - Tcl_Obj *obj = Tcl_NewStringObj(str, strlen(str)); - Tcl_ListObjAppendElement(interp, list, obj); - } - Tcl_SetObjResult(interp, list); -} - -%typemap(out) StringSeq { - StringSeq &strs = $1; - Tcl_Obj *list = Tcl_NewListObj(0, nullptr); - for (const char *str : strs) { - Tcl_Obj *obj = Tcl_NewStringObj(str, strlen(str)); - Tcl_ListObjAppendElement(interp, list, obj); - } - Tcl_SetObjResult(interp, list); -} - -%typemap(out) Library* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) LibraryIterator* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) LibertyLibraryIterator* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) Cell* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(in) CellSeq* { - $1 = tclListSeq($input, SWIGTYPE_p_Cell, interp); -} - -%typemap(out) CellSeq { - seqTclList($1, SWIGTYPE_p_Cell, interp); -} - -%typemap(out) LibertyCellSeq * { - seqPtrTclList($1, SWIGTYPE_p_LibertyCell, interp); -} - -%typemap(out) LibertyCellSeq { - seqTclList($1, SWIGTYPE_p_LibertyCell, interp); -} - -%typemap(out) LibertyPortSeq { - seqTclList($1, SWIGTYPE_p_LibertyPort, interp); -} - -%typemap(out) CellPortIterator* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) LibertyCellPortIterator* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) Port* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(in) PortSeq* { - $1 = tclListSeq($input, SWIGTYPE_p_Port, interp); -} - -%typemap(out) PortSeq { - seqTclList($1, SWIGTYPE_p_Port, interp); -} - -%typemap(out) PortMemberIterator* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) LibertyCell* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) LibertyPort* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) LibertyPortMemberIterator* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, SWIGTYPE_p_LibertyPortMemberIterator, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) TimingArc* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) TimingArcSetSeq& { - seqPtrTclList($1, SWIGTYPE_p_TimingArcSet, interp); -} - -%typemap(out) TimingArcSeq& { - seqPtrTclList($1, SWIGTYPE_p_TimingArc, interp); -} - -%typemap(out) Wireload* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) WireloadSelection* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(in) Transition* { - int length; - const char *arg = Tcl_GetStringFromObj($input, &length); - Transition *tr = Transition::find(arg); - if (tr == nullptr) { - Tcl_SetResult(interp,const_cast("Error: transition not found."), - TCL_STATIC); - return TCL_ERROR; - } - else - $1 = tr; -} - -%typemap(out) Transition* { - Transition *tr = $1; - const char *str = ""; - if (tr) - str = tr->asString(); - Tcl_SetResult(interp, const_cast(str), TCL_STATIC); -} - -%typemap(in) RiseFall* { - int length; - const char *arg = Tcl_GetStringFromObj($input, &length); - RiseFall *rf = RiseFall::find(arg); - if (rf == nullptr) { - Tcl_SetResult(interp,const_cast("Error: unknown rise/fall edge."), - TCL_STATIC); - return TCL_ERROR; - } - $1 = rf; -} - -%typemap(out) RiseFall* { - const RiseFall *tr = $1; - const char *str = ""; - if (tr) - str = tr->asString(); - Tcl_SetResult(interp, const_cast(str), TCL_STATIC); -} - -%typemap(in) RiseFallBoth* { - int length; - const char *arg = Tcl_GetStringFromObj($input, &length); - RiseFallBoth *tr = RiseFallBoth::find(arg); - if (tr == nullptr) { - Tcl_SetResult(interp,const_cast("Error: unknown transition name."), - TCL_STATIC); - return TCL_ERROR; - } - $1 = tr; -} - -%typemap(out) RiseFallBoth* { - RiseFallBoth *tr = $1; - const char *str = ""; - if (tr) - str = tr->asString(); - Tcl_SetResult(interp, const_cast(str), TCL_STATIC); -} - -%typemap(in) TimingRole* { - int length; - const char *arg = Tcl_GetStringFromObj($input, &length); - TimingRole *role = TimingRole::find(arg); - if (role) - $1 = TimingRole::find(arg); - else { - Tcl_SetResult(interp,const_cast("Error: unknown timing role."), - TCL_STATIC); - return TCL_ERROR; - } -} - -%typemap(out) TimingRole* { - Tcl_SetResult(interp, const_cast($1->asString()), TCL_STATIC); -} - -%typemap(in) LogicValue { - int length; - const char *arg = Tcl_GetStringFromObj($input, &length); - if (stringEq(arg, "0") || stringEq(arg, "zero")) - $1 = LogicValue::zero; - else if (stringEq(arg, "1") || stringEq(arg, "one")) - $1 = LogicValue::one; - else if (stringEq(arg, "X")) - $1 = LogicValue::unknown; - else if (stringEq(arg, "rise") || stringEq(arg, "rising")) - $1 = LogicValue::rise; - else if (stringEq(arg, "fall") || stringEq(arg, "falling")) - $1 = LogicValue::fall; - else { - Tcl_SetResult(interp,const_cast("Error: unknown logic value."), - TCL_STATIC); - return TCL_ERROR; - } -} - -%typemap(in) AnalysisType { - int length; - const char *arg = Tcl_GetStringFromObj($input, &length); - if (stringEqual(arg, "single")) - $1 = AnalysisType::single; - else if (stringEqual(arg, "bc_wc")) - $1 = AnalysisType::bc_wc; - else if (stringEq(arg, "on_chip_variation")) - $1 = AnalysisType::ocv; - else { - Tcl_SetResult(interp,const_cast("Error: unknown analysis type."), - TCL_STATIC); - - return TCL_ERROR; - } -} - -%typemap(out) Instance* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(in) InstanceSeq* { - $1 = tclListSeq($input, SWIGTYPE_p_Instance, interp); -} - -%typemap(out) InstanceSeq { - seqTclList($1, SWIGTYPE_p_Instance, interp); -} - -%typemap(out) InstanceChildIterator* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) LeafInstanceIterator* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) InstancePinIterator* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) InstanceNetIterator* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) Pin* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) PinSeq* { - seqPtrTclList($1, SWIGTYPE_p_Pin, interp); -} - - -%typemap(out) PinSeq { - seqTclList($1, SWIGTYPE_p_Pin, interp); -} - -%typemap(out) Net* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) NetSeq* { - seqPtrTclList($1, SWIGTYPE_p_Net, interp); -} - -%typemap(out) NetSeq { - seqTclList($1, SWIGTYPE_p_Net, interp); -} - -%typemap(out) NetPinIterator* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) NetTermIterator* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) NetConnectedPinIterator* { - Tcl_Obj *obj=SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) PinConnectedPinIterator* { - Tcl_Obj *obj=SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) Clock* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) ClockSeq* { - seqPtrTclList($1, SWIGTYPE_p_Clock, interp); -} - -%typemap(out) ClockSeq { - seqTclList($1, SWIGTYPE_p_Clock, interp); -} - -%typemap(out) ClockEdge* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1,$1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(in) PinSeq* { - $1 = tclListSeq($input, SWIGTYPE_p_Pin, interp); -} - -%typemap(in) PinSet* { - Network *network = cmdNetwork(); - $1 = tclListNetworkSet($input, SWIGTYPE_p_Pin, interp, network); -} - -%typemap(out) PinSet* { - setPtrTclList($1, SWIGTYPE_p_Pin, interp); -} - -%typemap(out) PinSet { - setTclList($1, SWIGTYPE_p_Pin, interp); -} - -%typemap(out) const PinSet& { - Tcl_Obj *list = Tcl_NewListObj(0, nullptr); - // A swig bug sets the result to PinSet* rather than const PinSet&. - PinSet *pins = $1; - for (const Pin *pin : *pins) { - Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(pin), SWIGTYPE_p_Pin, false); - Tcl_ListObjAppendElement(interp, list, obj); - } - Tcl_SetObjResult(interp, list); -} - -%typemap(in) ClockSet* { - $1 = tclListSet($input, SWIGTYPE_p_Clock, interp); -} - -%typemap(out) ClockSet* { - setPtrTclList($1, SWIGTYPE_p_Clock, interp); -} - -%typemap(in) InstanceSet* { - Network *network = cmdNetwork(); - $1 = tclListNetworkSet($input, SWIGTYPE_p_Instance, - interp, network); -} - -%typemap(out) InstanceSet { - setTclList($1, SWIGTYPE_p_Instance, interp); -} - -%typemap(in) NetSet* { - Network *network = cmdNetwork(); - $1 = tclListNetworkSet($input, SWIGTYPE_p_Net, interp, network); -} - -%typemap(in) FloatSeq* { - int argc; - Tcl_Obj **argv; - FloatSeq *floats = nullptr; - - if (Tcl_ListObjGetElements(interp, $input, &argc, &argv) == TCL_OK) { - if (argc) - floats = new FloatSeq; - for (int i = 0; i < argc; i++) { - char *arg = Tcl_GetString(argv[i]); - double value; - if (Tcl_GetDouble(interp, arg, &value) == TCL_OK) - floats->push_back(static_cast(value)); - else { - delete floats; - tclArgError(interp, "%s is not a floating point number.", arg); - return TCL_ERROR; - } - } - } - $1 = floats; -} - -%typemap(out) FloatSeq* { - FloatSeq *floats = $1; - Tcl_Obj *list = Tcl_NewListObj(0, nullptr); - if (floats) { - for (float f : *floats) { - Tcl_Obj *obj = Tcl_NewDoubleObj(f); - Tcl_ListObjAppendElement(interp, list, obj); - } - } - Tcl_SetObjResult(interp, list); -} - -%typemap(out) FloatSeq { - FloatSeq &floats = $1; - Tcl_Obj *list = Tcl_NewListObj(0, nullptr); - for (float f : floats) { - Tcl_Obj *obj = Tcl_NewDoubleObj(f); - Tcl_ListObjAppendElement(interp, list, obj); - } - Tcl_SetObjResult(interp, list); -} - -%typemap(in) IntSeq* { - int argc; - Tcl_Obj **argv; - IntSeq *ints = nullptr; - - if (Tcl_ListObjGetElements(interp, $input, &argc, &argv) == TCL_OK) { - if (argc) - ints = new IntSeq; - for (int i = 0; i < argc; i++) { - char *arg = Tcl_GetString(argv[i]); - int value; - if (Tcl_GetInt(interp, arg, &value) == TCL_OK) - ints->push_back(value); - else { - delete ints; - tclArgError(interp, "%s is not an integer.", arg); - return TCL_ERROR; - } - } - } - $1 = ints; -} - -%typemap(out) Table1 { - Table1 &table = $1; - if (table.axis1()) { - Tcl_Obj *list3 = Tcl_NewListObj(0, nullptr); - Tcl_Obj *list1 = Tcl_NewListObj(0, nullptr); - for (float f : *table.axis1()->values()) { - Tcl_Obj *obj = Tcl_NewDoubleObj(f); - Tcl_ListObjAppendElement(interp, list1, obj); - } - Tcl_Obj *list2 = Tcl_NewListObj(0, nullptr); - for (float f : *table.values()) { - Tcl_Obj *obj = Tcl_NewDoubleObj(f); - Tcl_ListObjAppendElement(interp, list2, obj); - } - Tcl_ListObjAppendElement(interp, list3, list1); - Tcl_ListObjAppendElement(interp, list3, list2); - Tcl_SetObjResult(interp, list3); - } -} - -%typemap(out) const Table1* { - const Table1 *table = $1; - Tcl_Obj *list3 = Tcl_NewListObj(0, nullptr); - if (table) { - Tcl_Obj *list1 = Tcl_NewListObj(0, nullptr); - for (float f : *table->axis1()->values()) { - Tcl_Obj *obj = Tcl_NewDoubleObj(f); - Tcl_ListObjAppendElement(interp, list1, obj); - } - Tcl_Obj *list2 = Tcl_NewListObj(0, nullptr); - for (float f : *table->values()) { - Tcl_Obj *obj = Tcl_NewDoubleObj(f); - Tcl_ListObjAppendElement(interp, list2, obj); - } - Tcl_ListObjAppendElement(interp, list3, list1); - Tcl_ListObjAppendElement(interp, list3, list2); - } - Tcl_SetObjResult(interp, list3); -} - -%typemap(in) MinMax* { - int length; - char *arg = Tcl_GetStringFromObj($input, &length); - MinMax *min_max = MinMax::find(arg); - if (min_max) - $1 = min_max; - else { - tclArgError(interp, "%s not min or max.", arg); - return TCL_ERROR; - } -} - -%typemap(out) MinMax* { - Tcl_SetResult(interp, const_cast($1->asString()), TCL_STATIC); -} - -%typemap(out) MinMax* { - Tcl_SetResult(interp, const_cast($1->asString()), TCL_STATIC); -} - -%typemap(in) MinMaxAll* { - int length; - char *arg = Tcl_GetStringFromObj($input, &length); - MinMaxAll *min_max = MinMaxAll::find(arg); - if (min_max) - $1 = min_max; - else { - tclArgError(interp, "%s not min, max or min_max.", arg); - return TCL_ERROR; - } -} - -%typemap(in) MinMaxAllNull* { - int length; - char *arg = Tcl_GetStringFromObj($input, &length); - if (stringEqual(arg, "NULL")) - $1 = nullptr; - else { - MinMaxAll *min_max = MinMaxAll::find(arg); - if (min_max) - $1 = min_max; - else { - tclArgError(interp, "%s not min, max or min_max.", arg); - return TCL_ERROR; - } - } -} - -%typemap(out) MinMaxAll* { - Tcl_SetResult(interp, const_cast($1->asString()), TCL_STATIC); -} - -// SetupHold is typedef'd to MinMax. -%typemap(in) SetupHold* { - int length; - char *arg = Tcl_GetStringFromObj($input, &length); - if (stringEqual(arg, "hold") - || stringEqual(arg, "min")) - $1 = MinMax::min(); - else if (stringEqual(arg, "setup") - || stringEqual(arg, "max")) - $1 = MinMax::max(); - else { - tclArgError(interp, "%s not setup, hold, min or max.", arg); - return TCL_ERROR; - } -} - -// SetupHoldAll is typedef'd to MinMaxAll. -%typemap(in) SetupHoldAll* { - int length; - char *arg = Tcl_GetStringFromObj($input, &length); - if (stringEqual(arg, "hold") - || stringEqual(arg, "min")) - $1 = SetupHoldAll::min(); - else if (stringEqual(arg, "setup") - || stringEqual(arg, "max")) - $1 = SetupHoldAll::max(); - else if (stringEqual(arg, "setup_hold") - || stringEqual(arg, "min_max")) - $1 = SetupHoldAll::all(); - else { - tclArgError(interp, "%s not setup, hold, setup_hold, min, max or min_max.", arg); - return TCL_ERROR; - } -} - -// EarlyLate is typedef'd to MinMax. -%typemap(in) EarlyLate* { - int length; - char *arg = Tcl_GetStringFromObj($input, &length); - EarlyLate *early_late = EarlyLate::find(arg); - if (early_late) - $1 = early_late; - else { - tclArgError(interp, "%s not early/min, late/max or early_late/min_max.", arg); - return TCL_ERROR; - } -} - -// EarlyLateAll is typedef'd to MinMaxAll. -%typemap(in) EarlyLateAll* { - int length; - char *arg = Tcl_GetStringFromObj($input, &length); - EarlyLateAll *early_late = EarlyLateAll::find(arg); - if (early_late) - $1 = early_late; - else { - tclArgError(interp, "%s not early/min, late/max or early_late/min_max.", arg); - return TCL_ERROR; - } -} - -%typemap(in) TimingDerateType { - int length; - char *arg = Tcl_GetStringFromObj($input, &length); - if (stringEq(arg, "net_delay")) - $1 = TimingDerateType::net_delay; - else if (stringEq(arg, "cell_delay")) - $1 = TimingDerateType::cell_delay; - else if (stringEq(arg, "cell_check")) - $1 = TimingDerateType::cell_check; - else { - tclArgError(interp, "%s not net_delay, cell_delay or cell_check.", arg); - return TCL_ERROR; - } -} - -%typemap(in) TimingDerateCellType { - int length; - char *arg = Tcl_GetStringFromObj($input, &length); - if (stringEq(arg, "cell_delay")) - $1 = TimingDerateCellType::cell_delay; - else if (stringEq(arg, "cell_check")) - $1 = TimingDerateCellType::cell_check; - else { - tclArgError(interp, "%s not cell_delay or cell_check.", arg); - return TCL_ERROR; - } -} - -%typemap(in) PathClkOrData { - int length; - char *arg = Tcl_GetStringFromObj($input, &length); - if (stringEq(arg, "clk")) - $1 = PathClkOrData::clk; - else if (stringEq(arg, "data")) - $1 = PathClkOrData::data; - else { - tclArgError(interp, "%s not clk or data.", arg); - return TCL_ERROR; - } -} - -%typemap(in) ReportSortBy { - int length; - char *arg = Tcl_GetStringFromObj($input, &length); - if (stringEq(arg, "group")) - $1 = sort_by_group; - else if (stringEq(arg, "slack")) - $1 = sort_by_slack; - else { - tclArgError(interp, "%s not group or slack.", arg); - return TCL_ERROR; - } -} - -%typemap(in) ReportPathFormat { - int length; - char *arg = Tcl_GetStringFromObj($input, &length); - if (stringEq(arg, "full")) - $1 = ReportPathFormat::full; - else if (stringEq(arg, "full_clock")) - $1 = ReportPathFormat::full_clock; - else if (stringEq(arg, "full_clock_expanded")) - $1 = ReportPathFormat::full_clock_expanded; - else if (stringEq(arg, "short")) - $1 = ReportPathFormat::shorter; - else if (stringEq(arg, "end")) - $1 = ReportPathFormat::endpoint; - else if (stringEq(arg, "summary")) - $1 = ReportPathFormat::summary; - else if (stringEq(arg, "slack_only")) - $1 = ReportPathFormat::slack_only; - else if (stringEq(arg, "json")) - $1 = ReportPathFormat::json; - else { - tclArgError(interp, "unknown path type %s.", arg); - return TCL_ERROR; - } -} - -%typemap(in) ExceptionThruSeq* { - $1 = tclListSeq($input, SWIGTYPE_p_ExceptionThru, interp); -} - -%typemap(out) Vertex* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) Vertex** { - int i = 0; - Tcl_ResetResult(interp); - Tcl_Obj *list = Tcl_NewListObj(0, nullptr); - while ($1[i]) { - Tcl_Obj *obj = SWIG_NewInstanceObj($1[i], SWIGTYPE_p_Vertex,false); - Tcl_ListObjAppendElement(interp, list, obj); - i++; - } - Tcl_SetObjResult(interp, list); -} - -%typemap(out) Edge* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(in) EdgeSeq* { - $1 = tclListSeq($input, SWIGTYPE_p_Edge, interp); -} - -%typemap(out) EdgeSeq { - seqTclList($1, SWIGTYPE_p_Edge, interp); -} - -%typemap(out) VertexIterator* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) VertexInEdgeIterator* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) VertexOutEdgeIterator* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) CheckErrorSeq & { - Tcl_Obj *error_list = Tcl_NewListObj(0, nullptr); - CheckErrorSeq *check_errors = $1; - CheckErrorSeq::Iterator check_iter(check_errors); - while (check_iter.hasNext()) { - CheckError *error = check_iter.next(); - Tcl_Obj *string_list = Tcl_NewListObj(0, nullptr); - CheckError::Iterator string_iter(error); - while (string_iter.hasNext()) { - const char *str = string_iter.next(); - size_t str_len = strlen(str); - Tcl_Obj *obj = Tcl_NewStringObj(const_cast(str), - static_cast(str_len)); - Tcl_ListObjAppendElement(interp, string_list, obj); - } - Tcl_ListObjAppendElement(interp, error_list, string_list); - } - Tcl_SetObjResult(interp, error_list); -} - -%typemap(out) PathEnd* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) PathEndSeq* { - Tcl_Obj *list = Tcl_NewListObj(0, nullptr); - const PathEndSeq *path_ends = $1; - PathEndSeq::ConstIterator end_iter(path_ends); - while (end_iter.hasNext()) { - PathEnd *path_end = end_iter.next(); - Tcl_Obj *obj = SWIG_NewInstanceObj(path_end, SWIGTYPE_p_PathEnd, false); - Tcl_ListObjAppendElement(interp, list, obj); - } - // Delete the PathEndSeq, not the ends. - delete path_ends; - Tcl_SetObjResult(interp, list); -} - -%typemap(out) PathEndSeq { - seqTclList($1, SWIGTYPE_p_PathEnd, interp); -} - -%typemap(out) MinPulseWidthCheckSeqIterator* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) PathRefSeq* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); - - Tcl_Obj *list = Tcl_NewListObj(0, nullptr); - PathRefSeq *paths = $1; - PathRefSeq::Iterator path_iter(paths); - while (path_iter.hasNext()) { - PathRef *path = &path_iter.next(); - PathRef *copy = new PathRef(path); - Tcl_Obj *obj = SWIG_NewInstanceObj(copy, SWIGTYPE_p_PathRef, false); - Tcl_ListObjAppendElement(interp, list, obj); - } - Tcl_SetObjResult(interp, list); -} - -%typemap(out) MinPulseWidthCheck* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) MinPulseWidthCheckSeq & { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) MinPulseWidthCheckSeqIterator & { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) VertexPathIterator* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) SlowDrvrIterator* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) ExceptionFrom* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) ExceptionTo* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) ExceptionThru* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) OperatingConditions* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(in) ReducedParasiticType { - int length; - char *arg = Tcl_GetStringFromObj($input, &length); - if (stringEq(arg, "pi_elmore")) - $1 = ReducedParasiticType::pi_elmore; - else if (stringEq(arg, "pi_pole_residue2")) - $1 = ReducedParasiticType::pi_pole_residue2; - else if (stringEq(arg, "none")) - $1 = ReducedParasiticType::none; - else { - tclArgError(interp, "%s pi_elmore, pi_pole_residue2, or none.", arg); - return TCL_ERROR; - } -} - -%typemap(out) Arrival { - Tcl_SetObjResult(interp,Tcl_NewDoubleObj(delayAsFloat($1))); -} - -%typemap(out) Required { - Tcl_SetObjResult(interp,Tcl_NewDoubleObj(delayAsFloat($1))); -} - -%typemap(out) Slack { - Tcl_SetObjResult(interp,Tcl_NewDoubleObj(delayAsFloat($1))); -} - -%typemap(out) ArcDelay { - Tcl_SetObjResult(interp,Tcl_NewDoubleObj(delayAsFloat($1))); -} - -%typemap(out) Slew { - Tcl_SetObjResult(interp,Tcl_NewDoubleObj(delayAsFloat($1))); -} - -%typemap(in) PathGroupNameSet* { - $1 = tclListSetConstChar($input, interp); -} - -%typemap(in) StringSet* { - $1 = tclListSetConstChar($input, interp); -} - -%typemap(out) Corner* { - Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); - Tcl_SetObjResult(interp, obj); -} - -%typemap(out) Corners* { - Tcl_Obj *list = Tcl_NewListObj(0, nullptr); - Corners *corners = $1; - for (Corner *corner : *corners) { - Tcl_Obj *obj = SWIG_NewInstanceObj(corner, SWIGTYPE_p_Corner, false); - Tcl_ListObjAppendElement(interp, list, obj); - } - Tcl_SetObjResult(interp, list); -} - -%typemap(out) PropertyValue { - PropertyValue value = $1; - switch (value.type()) { - case PropertyValue::Type::type_none: - Tcl_SetResult(interp, const_cast(""), TCL_STATIC); - break; - case PropertyValue::Type::type_string: - Tcl_SetResult(interp, const_cast(value.stringValue()), TCL_VOLATILE); - break; - case PropertyValue::Type::type_float: { - const Unit *unit = value.unit(); - const char *float_string = unit->asString(value.floatValue(), 6); - Tcl_SetResult(interp, const_cast(float_string), TCL_VOLATILE); - } - break; - case PropertyValue::Type::type_bool: { - const char *bool_string = value.boolValue() ? "1" : "0"; - Tcl_SetResult(interp, const_cast(bool_string), TCL_STATIC); - } - break; - case PropertyValue::Type::type_library: { - Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.library()), - SWIGTYPE_p_Library, false); - Tcl_SetObjResult(interp, obj); - } - break; - case PropertyValue::Type::type_cell: { - Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.cell()), - SWIGTYPE_p_Cell, false); - Tcl_SetObjResult(interp, obj); - } - break; - case PropertyValue::Type::type_port: { - Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.port()), - SWIGTYPE_p_Port, false); - Tcl_SetObjResult(interp, obj); - } - break; - case PropertyValue::Type::type_liberty_library: { - Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.libertyLibrary()), - SWIGTYPE_p_LibertyLibrary, false); - Tcl_SetObjResult(interp, obj); - } - break; - case PropertyValue::Type::type_liberty_cell: { - Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.libertyCell()), - SWIGTYPE_p_LibertyCell, false); - Tcl_SetObjResult(interp, obj); - } - break; - case PropertyValue::Type::type_liberty_port: { - Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.libertyPort()), - SWIGTYPE_p_LibertyPort, false); - Tcl_SetObjResult(interp, obj); - } - break; - case PropertyValue::Type::type_instance: { - Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.instance()), - SWIGTYPE_p_Instance, false); - Tcl_SetObjResult(interp, obj); - } - break; - case PropertyValue::Type::type_pin: { - Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.pin()), - SWIGTYPE_p_Pin, false); - Tcl_SetObjResult(interp, obj); - } - break; - case PropertyValue::Type::type_pins: { - Tcl_Obj *list = Tcl_NewListObj(0, nullptr); - PinSeq *pins = value.pins(); - PinSeq::Iterator pin_iter(pins); - while (pin_iter.hasNext()) { - const Pin *pin = pin_iter.next(); - Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(pin), SWIGTYPE_p_Pin, false); - Tcl_ListObjAppendElement(interp, list, obj); - } - Tcl_SetObjResult(interp, list); - } - break; - case PropertyValue::Type::type_net: { - Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.net()), - SWIGTYPE_p_Net, false); - Tcl_SetObjResult(interp, obj); - } - break; - case PropertyValue::Type::type_clk: { - Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.clock()), - SWIGTYPE_p_Clock, false); - Tcl_SetObjResult(interp, obj); - } - break; - case PropertyValue::Type::type_clks: { - Tcl_Obj *list = Tcl_NewListObj(0, nullptr); - ClockSeq *clks = value.clocks(); - ClockSeq::Iterator clk_iter(clks); - while (clk_iter.hasNext()) { - Clock *clk = clk_iter.next(); - Tcl_Obj *obj = SWIG_NewInstanceObj(clk, SWIGTYPE_p_Clock, false); - Tcl_ListObjAppendElement(interp, list, obj); - } - Tcl_SetObjResult(interp, list); - } - break; - case PropertyValue::Type::type_path_refs: { - Tcl_Obj *list = Tcl_NewListObj(0, nullptr); - for (PathRef &path : *value.pathRefs()) { - PathRef *copy = new PathRef(path); - Tcl_Obj *obj = SWIG_NewInstanceObj(copy, SWIGTYPE_p_PathRef, false); - Tcl_ListObjAppendElement(interp, list, obj); - } - Tcl_SetObjResult(interp, list); - } - break; - case PropertyValue::Type::type_pwr_activity: { - PwrActivity activity = value.pwrActivity(); - Tcl_Obj *list = Tcl_NewListObj(0, nullptr); - Tcl_Obj *obj; - const char *str; - - str = stringPrintTmp("%.5e", activity.activity()); - obj = Tcl_NewStringObj(str, strlen(str)); - Tcl_ListObjAppendElement(interp, list, obj); - - str = stringPrintTmp("%.3f", activity.duty()); - obj = Tcl_NewStringObj(str, strlen(str)); - Tcl_ListObjAppendElement(interp, list, obj); - - str = activity.originName(); - obj = Tcl_NewStringObj(str, strlen(str)); - Tcl_ListObjAppendElement(interp, list, obj); - - Tcl_SetObjResult(interp, list); - } - break; - } -} - //////////////////////////////////////////////////////////////// // // Empty class definitions to make swig happy. @@ -1986,20 +656,6 @@ is_object_list(const char *list, return true; } -void -set_rise_fall_short_names(const char *rise_short_name, - const char *fall_short_name) -{ - RiseFall::rise()->setShortName(rise_short_name); - RiseFall::fall()->setShortName(fall_short_name); - - RiseFallBoth::rise()->setShortName(rise_short_name); - RiseFallBoth::fall()->setShortName(fall_short_name); - - Transition::rise()->setName(rise_short_name); - Transition::fall()->setName(fall_short_name); -} - const char * rise_short_name() { diff --git a/tcl/StaTclTypes.i b/tcl/StaTclTypes.i new file mode 100644 index 00000000..d2f77d5e --- /dev/null +++ b/tcl/StaTclTypes.i @@ -0,0 +1,1365 @@ + +%{ + +#include "Machine.hh" +#include "StringUtil.hh" +#include "StringSet.hh" +#include "StringSeq.hh" +#include "PatternMatch.hh" +#include "Vector.hh" +#include "Network.hh" +#include "Liberty.hh" +#include "FuncExpr.hh" +#include "TimingArc.hh" +#include "TableModel.hh" +#include "TimingRole.hh" +#include "Graph.hh" +#include "NetworkClass.hh" +#include "Clock.hh" +#include "Corner.hh" +#include "Search.hh" +#include "PathRef.hh" +#include "search/Tag.hh" +#include "PathEnd.hh" +#include "SearchClass.hh" +#include "Sta.hh" + +namespace sta { + +typedef MinPulseWidthCheckSeq::Iterator MinPulseWidthCheckSeqIterator; +typedef MinMaxAll MinMaxAllNull; + +Network * +cmdNetwork(); +Network * +cmdLinkedNetwork(); +Graph * +cmdGraph(); + +template +Vector * +tclListSeq(Tcl_Obj *const source, + swig_type_info *swig_type, + Tcl_Interp *interp) +{ + int argc; + Tcl_Obj **argv; + + if (Tcl_ListObjGetElements(interp, source, &argc, &argv) == TCL_OK + && argc > 0) { + Vector *seq = new Vector; + for (int i = 0; i < argc; i++) { + void *obj; + // Ignore returned TCL_ERROR because can't get swig_type_info. + SWIG_ConvertPtr(argv[i], &obj, swig_type, false); + seq->push_back(reinterpret_cast(obj)); + } + return seq; + } + else + return nullptr; +} + +template +SET_TYPE * +tclListSet(Tcl_Obj *const source, + swig_type_info *swig_type, + Tcl_Interp *interp) +{ + int argc; + Tcl_Obj **argv; + if (Tcl_ListObjGetElements(interp, source, &argc, &argv) == TCL_OK + && argc > 0) { + SET_TYPE *set = new SET_TYPE; + for (int i = 0; i < argc; i++) { + void *obj; + // Ignore returned TCL_ERROR because can't get swig_type_info. + SWIG_ConvertPtr(argv[i], &obj, swig_type, false); + set->insert(reinterpret_cast(obj)); + } + return set; + } + else + return nullptr; +} + +template +SET_TYPE * +tclListNetworkSet(Tcl_Obj *const source, + swig_type_info *swig_type, + Tcl_Interp *interp, + const Network *network) +{ + int argc; + Tcl_Obj **argv; + if (Tcl_ListObjGetElements(interp, source, &argc, &argv) == TCL_OK + && argc > 0) { + SET_TYPE *set = new SET_TYPE(network); + for (int i = 0; i < argc; i++) { + void *obj; + // Ignore returned TCL_ERROR because can't get swig_type_info. + SWIG_ConvertPtr(argv[i], &obj, swig_type, false); + set->insert(reinterpret_cast(obj)); + } + return set; + } + else + return nullptr; +} + +StringSet * +tclListSetConstChar(Tcl_Obj *const source, + Tcl_Interp *interp) +{ + int argc; + Tcl_Obj **argv; + + if (Tcl_ListObjGetElements(interp, source, &argc, &argv) == TCL_OK) { + StringSet *set = new StringSet; + for (int i = 0; i < argc; i++) { + int length; + const char *str = Tcl_GetStringFromObj(argv[i], &length); + set->insert(str); + } + return set; + } + else + return nullptr; +} + +StringSeq * +tclListSeqConstChar(Tcl_Obj *const source, + Tcl_Interp *interp) +{ + int argc; + Tcl_Obj **argv; + + if (Tcl_ListObjGetElements(interp, source, &argc, &argv) == TCL_OK) { + StringSeq *seq = new StringSeq; + for (int i = 0; i < argc; i++) { + int length; + const char *str = Tcl_GetStringFromObj(argv[i], &length); + seq->push_back(str); + } + return seq; + } + else + return nullptr; +} + +StdStringSet * +tclListSetStdString(Tcl_Obj *const source, + Tcl_Interp *interp) +{ + int argc; + Tcl_Obj **argv; + + if (Tcl_ListObjGetElements(interp, source, &argc, &argv) == TCL_OK) { + StdStringSet *set = new StdStringSet; + for (int i = 0; i < argc; i++) { + int length; + const char *str = Tcl_GetStringFromObj(argv[i], &length); + set->insert(str); + } + return set; + } + else + return nullptr; +} + +//////////////////////////////////////////////////////////////// + +// Sequence out to tcl list. +template +void +seqPtrTclList(SEQ_TYPE *seq, + swig_type_info *swig_type, + Tcl_Interp *interp) +{ + Tcl_Obj *list = Tcl_NewListObj(0, nullptr); + for (const OBJECT_TYPE *obj : *seq) { + Tcl_Obj *tcl_obj = SWIG_NewInstanceObj(const_cast(obj), + swig_type, false); + Tcl_ListObjAppendElement(interp, list, tcl_obj); + } + Tcl_SetObjResult(interp, list); +} + +template +void +seqTclList(SEQ_TYPE &seq, + swig_type_info *swig_type, + Tcl_Interp *interp) +{ + Tcl_Obj *list = Tcl_NewListObj(0, nullptr); + for (const OBJECT_TYPE *obj : seq) { + Tcl_Obj *tcl_obj = SWIG_NewInstanceObj(const_cast(obj), + swig_type, false); + Tcl_ListObjAppendElement(interp, list, tcl_obj); + } + Tcl_SetObjResult(interp, list); +} + +template +void +setTclList(SET_TYPE set, + swig_type_info *swig_type, + Tcl_Interp *interp) +{ + Tcl_Obj *list = Tcl_NewListObj(0, nullptr); + for (const OBJECT_TYPE *obj : set) { + Tcl_Obj *tcl_obj = SWIG_NewInstanceObj(const_cast(obj), + swig_type, false); + Tcl_ListObjAppendElement(interp, list, tcl_obj); + } + Tcl_SetObjResult(interp, list); +} + +template +void +setPtrTclList(SET_TYPE *set, + swig_type_info *swig_type, + Tcl_Interp *interp) +{ + Tcl_Obj *list = Tcl_NewListObj(0, nullptr); + for (const OBJECT_TYPE *obj : *set) { + Tcl_Obj *tcl_obj = SWIG_NewInstanceObj(const_cast(obj), + swig_type, false); + Tcl_ListObjAppendElement(interp, list, tcl_obj); + } + Tcl_SetObjResult(interp, list); +} + +//////////////////////////////////////////////////////////////// + +void +tclArgError(Tcl_Interp *interp, + const char *msg, + const char *arg) +{ + // Swig does not add try/catch around arg parsing so this cannot use Report::error. + string error_msg = "Error: "; + error_msg += msg; + char *error = stringPrint(error_msg.c_str(), arg); + Tcl_SetResult(interp, error, TCL_VOLATILE); + stringDelete(error); +} + +void +objectListNext(const char *list, + const char *type, + // Return values. + bool &type_match, + const char *&next) +{ + // Default return values (failure). + type_match = false; + next = nullptr; + // _hexaddress_p_type + const char *s = list; + char ch = *s++; + if (ch == '_') { + while (*s && isxdigit(*s)) + s++; + if ((s - list - 1) == sizeof(void*) * 2 + && *s && *s++ == '_' + && *s && *s++ == 'p' + && *s && *s++ == '_') { + const char *t = type; + while (*s && *s != ' ') { + if (*s != *t) + return; + s++; + t++; + } + type_match = true; + if (*s) + next = s + 1; + else + next = nullptr; + } + } +} + +} // namespace + +using namespace sta; + +%} + +//////////////////////////////////////////////////////////////// +// +// SWIG type definitions. +// +//////////////////////////////////////////////////////////////// + +// String that is deleted after crossing over to tcland. +%typemap(out) string { + string &str = $1; + // String is volatile because it is deleted. + Tcl_SetResult(interp, const_cast(str.c_str()), TCL_VOLATILE); +} + +// String that is deleted after crossing over to tcland. +%typemap(out) TmpString* { + string *str = $1; + if (str) { + // String is volatile because it is deleted. + Tcl_SetResult(interp, const_cast(str->c_str()), TCL_VOLATILE); + delete str; + } + else + Tcl_SetResult(interp, nullptr, TCL_STATIC); +} + +%typemap(in) StringSeq* { + $1 = tclListSeqConstChar($input, interp); +} + +%typemap(in) StdStringSet* { + $1 = tclListSetStdString($input, interp); +} + +%typemap(out) StringSeq* { + StringSeq *strs = $1; + Tcl_Obj *list = Tcl_NewListObj(0, nullptr); + for (const char *str : *strs) { + Tcl_Obj *obj = Tcl_NewStringObj(str, strlen(str)); + Tcl_ListObjAppendElement(interp, list, obj); + } + Tcl_SetObjResult(interp, list); +} + +%typemap(out) StringSeq { + StringSeq &strs = $1; + Tcl_Obj *list = Tcl_NewListObj(0, nullptr); + for (const char *str : strs) { + Tcl_Obj *obj = Tcl_NewStringObj(str, strlen(str)); + Tcl_ListObjAppendElement(interp, list, obj); + } + Tcl_SetObjResult(interp, list); +} + +%typemap(out) Library* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) LibraryIterator* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) LibertyLibraryIterator* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) Cell* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(in) CellSeq* { + $1 = tclListSeq($input, SWIGTYPE_p_Cell, interp); +} + +%typemap(out) CellSeq { + seqTclList($1, SWIGTYPE_p_Cell, interp); +} + +%typemap(out) LibertyCellSeq * { + seqPtrTclList($1, SWIGTYPE_p_LibertyCell, interp); +} + +%typemap(out) LibertyCellSeq { + seqTclList($1, SWIGTYPE_p_LibertyCell, interp); +} + +%typemap(out) LibertyPortSeq { + seqTclList($1, SWIGTYPE_p_LibertyPort, interp); +} + +%typemap(out) CellPortIterator* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) LibertyCellPortIterator* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) Port* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(in) PortSeq* { + $1 = tclListSeq($input, SWIGTYPE_p_Port, interp); +} + +%typemap(out) PortSeq { + seqTclList($1, SWIGTYPE_p_Port, interp); +} + +%typemap(out) PortMemberIterator* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) LibertyCell* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) LibertyPort* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) LibertyPortMemberIterator* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, SWIGTYPE_p_LibertyPortMemberIterator, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) TimingArc* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) TimingArcSetSeq& { + seqPtrTclList($1, SWIGTYPE_p_TimingArcSet, interp); +} + +%typemap(out) TimingArcSeq& { + seqPtrTclList($1, SWIGTYPE_p_TimingArc, interp); +} + +%typemap(out) Wireload* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) WireloadSelection* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(in) Transition* { + int length; + const char *arg = Tcl_GetStringFromObj($input, &length); + Transition *tr = Transition::find(arg); + if (tr == nullptr) { + Tcl_SetResult(interp,const_cast("Error: transition not found."), + TCL_STATIC); + return TCL_ERROR; + } + else + $1 = tr; +} + +%typemap(out) Transition* { + Transition *tr = $1; + const char *str = ""; + if (tr) + str = tr->asString(); + Tcl_SetResult(interp, const_cast(str), TCL_STATIC); +} + +%typemap(in) RiseFall* { + int length; + const char *arg = Tcl_GetStringFromObj($input, &length); + RiseFall *rf = RiseFall::find(arg); + if (rf == nullptr) { + Tcl_SetResult(interp,const_cast("Error: unknown rise/fall edge."), + TCL_STATIC); + return TCL_ERROR; + } + $1 = rf; +} + +%typemap(out) RiseFall* { + const RiseFall *tr = $1; + const char *str = ""; + if (tr) + str = tr->asString(); + Tcl_SetResult(interp, const_cast(str), TCL_STATIC); +} + +%typemap(in) RiseFallBoth* { + int length; + const char *arg = Tcl_GetStringFromObj($input, &length); + RiseFallBoth *tr = RiseFallBoth::find(arg); + if (tr == nullptr) { + Tcl_SetResult(interp,const_cast("Error: unknown transition name."), + TCL_STATIC); + return TCL_ERROR; + } + $1 = tr; +} + +%typemap(out) RiseFallBoth* { + RiseFallBoth *tr = $1; + const char *str = ""; + if (tr) + str = tr->asString(); + Tcl_SetResult(interp, const_cast(str), TCL_STATIC); +} + +%typemap(in) TimingRole* { + int length; + const char *arg = Tcl_GetStringFromObj($input, &length); + TimingRole *role = TimingRole::find(arg); + if (role) + $1 = TimingRole::find(arg); + else { + Tcl_SetResult(interp,const_cast("Error: unknown timing role."), + TCL_STATIC); + return TCL_ERROR; + } +} + +%typemap(out) TimingRole* { + Tcl_SetResult(interp, const_cast($1->asString()), TCL_STATIC); +} + +%typemap(in) LogicValue { + int length; + const char *arg = Tcl_GetStringFromObj($input, &length); + if (stringEq(arg, "0") || stringEq(arg, "zero")) + $1 = LogicValue::zero; + else if (stringEq(arg, "1") || stringEq(arg, "one")) + $1 = LogicValue::one; + else if (stringEq(arg, "X")) + $1 = LogicValue::unknown; + else if (stringEq(arg, "rise") || stringEq(arg, "rising")) + $1 = LogicValue::rise; + else if (stringEq(arg, "fall") || stringEq(arg, "falling")) + $1 = LogicValue::fall; + else { + Tcl_SetResult(interp,const_cast("Error: unknown logic value."), + TCL_STATIC); + return TCL_ERROR; + } +} + +%typemap(in) AnalysisType { + int length; + const char *arg = Tcl_GetStringFromObj($input, &length); + if (stringEqual(arg, "single")) + $1 = AnalysisType::single; + else if (stringEqual(arg, "bc_wc")) + $1 = AnalysisType::bc_wc; + else if (stringEq(arg, "on_chip_variation")) + $1 = AnalysisType::ocv; + else { + Tcl_SetResult(interp,const_cast("Error: unknown analysis type."), + TCL_STATIC); + + return TCL_ERROR; + } +} + +%typemap(out) Instance* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(in) InstanceSeq* { + $1 = tclListSeq($input, SWIGTYPE_p_Instance, interp); +} + +%typemap(out) InstanceSeq { + seqTclList($1, SWIGTYPE_p_Instance, interp); +} + +%typemap(out) InstanceChildIterator* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) LeafInstanceIterator* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) InstancePinIterator* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) InstanceNetIterator* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) Pin* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) PinSeq* { + seqPtrTclList($1, SWIGTYPE_p_Pin, interp); +} + + +%typemap(out) PinSeq { + seqTclList($1, SWIGTYPE_p_Pin, interp); +} + +%typemap(out) Net* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) NetSeq* { + seqPtrTclList($1, SWIGTYPE_p_Net, interp); +} + +%typemap(out) NetSeq { + seqTclList($1, SWIGTYPE_p_Net, interp); +} + +%typemap(out) NetPinIterator* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) NetTermIterator* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) NetConnectedPinIterator* { + Tcl_Obj *obj=SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) PinConnectedPinIterator* { + Tcl_Obj *obj=SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) Clock* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) ClockSeq* { + seqPtrTclList($1, SWIGTYPE_p_Clock, interp); +} + +%typemap(out) ClockSeq { + seqTclList($1, SWIGTYPE_p_Clock, interp); +} + +%typemap(out) ClockEdge* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1,$1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(in) PinSeq* { + $1 = tclListSeq($input, SWIGTYPE_p_Pin, interp); +} + +%typemap(in) PinSet* { + Network *network = cmdNetwork(); + $1 = tclListNetworkSet($input, SWIGTYPE_p_Pin, interp, network); +} + +%typemap(out) PinSet* { + setPtrTclList($1, SWIGTYPE_p_Pin, interp); +} + +%typemap(out) PinSet { + setTclList($1, SWIGTYPE_p_Pin, interp); +} + +%typemap(out) const PinSet& { + Tcl_Obj *list = Tcl_NewListObj(0, nullptr); + // A swig bug sets the result to PinSet* rather than const PinSet&. + PinSet *pins = $1; + for (const Pin *pin : *pins) { + Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(pin), SWIGTYPE_p_Pin, false); + Tcl_ListObjAppendElement(interp, list, obj); + } + Tcl_SetObjResult(interp, list); +} + +%typemap(in) ClockSet* { + $1 = tclListSet($input, SWIGTYPE_p_Clock, interp); +} + +%typemap(out) ClockSet* { + setPtrTclList($1, SWIGTYPE_p_Clock, interp); +} + +%typemap(in) InstanceSet* { + Network *network = cmdNetwork(); + $1 = tclListNetworkSet($input, SWIGTYPE_p_Instance, + interp, network); +} + +%typemap(out) InstanceSet { + setTclList($1, SWIGTYPE_p_Instance, interp); +} + +%typemap(in) NetSet* { + Network *network = cmdNetwork(); + $1 = tclListNetworkSet($input, SWIGTYPE_p_Net, interp, network); +} + +%typemap(in) FloatSeq* { + int argc; + Tcl_Obj **argv; + FloatSeq *floats = nullptr; + + if (Tcl_ListObjGetElements(interp, $input, &argc, &argv) == TCL_OK) { + if (argc) + floats = new FloatSeq; + for (int i = 0; i < argc; i++) { + char *arg = Tcl_GetString(argv[i]); + double value; + if (Tcl_GetDouble(interp, arg, &value) == TCL_OK) + floats->push_back(static_cast(value)); + else { + delete floats; + tclArgError(interp, "%s is not a floating point number.", arg); + return TCL_ERROR; + } + } + } + $1 = floats; +} + +%typemap(out) FloatSeq* { + FloatSeq *floats = $1; + Tcl_Obj *list = Tcl_NewListObj(0, nullptr); + if (floats) { + for (float f : *floats) { + Tcl_Obj *obj = Tcl_NewDoubleObj(f); + Tcl_ListObjAppendElement(interp, list, obj); + } + } + Tcl_SetObjResult(interp, list); +} + +%typemap(out) FloatSeq { + FloatSeq &floats = $1; + Tcl_Obj *list = Tcl_NewListObj(0, nullptr); + for (float f : floats) { + Tcl_Obj *obj = Tcl_NewDoubleObj(f); + Tcl_ListObjAppendElement(interp, list, obj); + } + Tcl_SetObjResult(interp, list); +} + +%typemap(in) IntSeq* { + int argc; + Tcl_Obj **argv; + IntSeq *ints = nullptr; + + if (Tcl_ListObjGetElements(interp, $input, &argc, &argv) == TCL_OK) { + if (argc) + ints = new IntSeq; + for (int i = 0; i < argc; i++) { + char *arg = Tcl_GetString(argv[i]); + int value; + if (Tcl_GetInt(interp, arg, &value) == TCL_OK) + ints->push_back(value); + else { + delete ints; + tclArgError(interp, "%s is not an integer.", arg); + return TCL_ERROR; + } + } + } + $1 = ints; +} + +%typemap(out) Table1 { + Table1 &table = $1; + if (table.axis1()) { + Tcl_Obj *list3 = Tcl_NewListObj(0, nullptr); + Tcl_Obj *list1 = Tcl_NewListObj(0, nullptr); + for (float f : *table.axis1()->values()) { + Tcl_Obj *obj = Tcl_NewDoubleObj(f); + Tcl_ListObjAppendElement(interp, list1, obj); + } + Tcl_Obj *list2 = Tcl_NewListObj(0, nullptr); + for (float f : *table.values()) { + Tcl_Obj *obj = Tcl_NewDoubleObj(f); + Tcl_ListObjAppendElement(interp, list2, obj); + } + Tcl_ListObjAppendElement(interp, list3, list1); + Tcl_ListObjAppendElement(interp, list3, list2); + Tcl_SetObjResult(interp, list3); + } +} + +%typemap(out) const Table1* { + const Table1 *table = $1; + Tcl_Obj *list3 = Tcl_NewListObj(0, nullptr); + if (table) { + Tcl_Obj *list1 = Tcl_NewListObj(0, nullptr); + for (float f : *table->axis1()->values()) { + Tcl_Obj *obj = Tcl_NewDoubleObj(f); + Tcl_ListObjAppendElement(interp, list1, obj); + } + Tcl_Obj *list2 = Tcl_NewListObj(0, nullptr); + for (float f : *table->values()) { + Tcl_Obj *obj = Tcl_NewDoubleObj(f); + Tcl_ListObjAppendElement(interp, list2, obj); + } + Tcl_ListObjAppendElement(interp, list3, list1); + Tcl_ListObjAppendElement(interp, list3, list2); + } + Tcl_SetObjResult(interp, list3); +} + +%typemap(in) MinMax* { + int length; + char *arg = Tcl_GetStringFromObj($input, &length); + MinMax *min_max = MinMax::find(arg); + if (min_max) + $1 = min_max; + else { + tclArgError(interp, "%s not min or max.", arg); + return TCL_ERROR; + } +} + +%typemap(out) MinMax* { + Tcl_SetResult(interp, const_cast($1->asString()), TCL_STATIC); +} + +%typemap(out) MinMax* { + Tcl_SetResult(interp, const_cast($1->asString()), TCL_STATIC); +} + +%typemap(in) MinMaxAll* { + int length; + char *arg = Tcl_GetStringFromObj($input, &length); + MinMaxAll *min_max = MinMaxAll::find(arg); + if (min_max) + $1 = min_max; + else { + tclArgError(interp, "%s not min, max or min_max.", arg); + return TCL_ERROR; + } +} + +%typemap(in) MinMaxAllNull* { + int length; + char *arg = Tcl_GetStringFromObj($input, &length); + if (stringEqual(arg, "NULL")) + $1 = nullptr; + else { + MinMaxAll *min_max = MinMaxAll::find(arg); + if (min_max) + $1 = min_max; + else { + tclArgError(interp, "%s not min, max or min_max.", arg); + return TCL_ERROR; + } + } +} + +%typemap(out) MinMaxAll* { + Tcl_SetResult(interp, const_cast($1->asString()), TCL_STATIC); +} + +// SetupHold is typedef'd to MinMax. +%typemap(in) SetupHold* { + int length; + char *arg = Tcl_GetStringFromObj($input, &length); + if (stringEqual(arg, "hold") + || stringEqual(arg, "min")) + $1 = MinMax::min(); + else if (stringEqual(arg, "setup") + || stringEqual(arg, "max")) + $1 = MinMax::max(); + else { + tclArgError(interp, "%s not setup, hold, min or max.", arg); + return TCL_ERROR; + } +} + +// SetupHoldAll is typedef'd to MinMaxAll. +%typemap(in) SetupHoldAll* { + int length; + char *arg = Tcl_GetStringFromObj($input, &length); + if (stringEqual(arg, "hold") + || stringEqual(arg, "min")) + $1 = SetupHoldAll::min(); + else if (stringEqual(arg, "setup") + || stringEqual(arg, "max")) + $1 = SetupHoldAll::max(); + else if (stringEqual(arg, "setup_hold") + || stringEqual(arg, "min_max")) + $1 = SetupHoldAll::all(); + else { + tclArgError(interp, "%s not setup, hold, setup_hold, min, max or min_max.", arg); + return TCL_ERROR; + } +} + +// EarlyLate is typedef'd to MinMax. +%typemap(in) EarlyLate* { + int length; + char *arg = Tcl_GetStringFromObj($input, &length); + EarlyLate *early_late = EarlyLate::find(arg); + if (early_late) + $1 = early_late; + else { + tclArgError(interp, "%s not early/min, late/max or early_late/min_max.", arg); + return TCL_ERROR; + } +} + +// EarlyLateAll is typedef'd to MinMaxAll. +%typemap(in) EarlyLateAll* { + int length; + char *arg = Tcl_GetStringFromObj($input, &length); + EarlyLateAll *early_late = EarlyLateAll::find(arg); + if (early_late) + $1 = early_late; + else { + tclArgError(interp, "%s not early/min, late/max or early_late/min_max.", arg); + return TCL_ERROR; + } +} + +%typemap(in) TimingDerateType { + int length; + char *arg = Tcl_GetStringFromObj($input, &length); + if (stringEq(arg, "net_delay")) + $1 = TimingDerateType::net_delay; + else if (stringEq(arg, "cell_delay")) + $1 = TimingDerateType::cell_delay; + else if (stringEq(arg, "cell_check")) + $1 = TimingDerateType::cell_check; + else { + tclArgError(interp, "%s not net_delay, cell_delay or cell_check.", arg); + return TCL_ERROR; + } +} + +%typemap(in) TimingDerateCellType { + int length; + char *arg = Tcl_GetStringFromObj($input, &length); + if (stringEq(arg, "cell_delay")) + $1 = TimingDerateCellType::cell_delay; + else if (stringEq(arg, "cell_check")) + $1 = TimingDerateCellType::cell_check; + else { + tclArgError(interp, "%s not cell_delay or cell_check.", arg); + return TCL_ERROR; + } +} + +%typemap(in) PathClkOrData { + int length; + char *arg = Tcl_GetStringFromObj($input, &length); + if (stringEq(arg, "clk")) + $1 = PathClkOrData::clk; + else if (stringEq(arg, "data")) + $1 = PathClkOrData::data; + else { + tclArgError(interp, "%s not clk or data.", arg); + return TCL_ERROR; + } +} + +%typemap(in) ReportSortBy { + int length; + char *arg = Tcl_GetStringFromObj($input, &length); + if (stringEq(arg, "group")) + $1 = sort_by_group; + else if (stringEq(arg, "slack")) + $1 = sort_by_slack; + else { + tclArgError(interp, "%s not group or slack.", arg); + return TCL_ERROR; + } +} + +%typemap(in) ReportPathFormat { + int length; + char *arg = Tcl_GetStringFromObj($input, &length); + if (stringEq(arg, "full")) + $1 = ReportPathFormat::full; + else if (stringEq(arg, "full_clock")) + $1 = ReportPathFormat::full_clock; + else if (stringEq(arg, "full_clock_expanded")) + $1 = ReportPathFormat::full_clock_expanded; + else if (stringEq(arg, "short")) + $1 = ReportPathFormat::shorter; + else if (stringEq(arg, "end")) + $1 = ReportPathFormat::endpoint; + else if (stringEq(arg, "summary")) + $1 = ReportPathFormat::summary; + else if (stringEq(arg, "slack_only")) + $1 = ReportPathFormat::slack_only; + else if (stringEq(arg, "json")) + $1 = ReportPathFormat::json; + else { + tclArgError(interp, "unknown path type %s.", arg); + return TCL_ERROR; + } +} + +%typemap(in) ExceptionThruSeq* { + $1 = tclListSeq($input, SWIGTYPE_p_ExceptionThru, interp); +} + +%typemap(out) Vertex* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) Vertex** { + int i = 0; + Tcl_ResetResult(interp); + Tcl_Obj *list = Tcl_NewListObj(0, nullptr); + while ($1[i]) { + Tcl_Obj *obj = SWIG_NewInstanceObj($1[i], SWIGTYPE_p_Vertex,false); + Tcl_ListObjAppendElement(interp, list, obj); + i++; + } + Tcl_SetObjResult(interp, list); +} + +%typemap(out) Edge* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(in) EdgeSeq* { + $1 = tclListSeq($input, SWIGTYPE_p_Edge, interp); +} + +%typemap(out) EdgeSeq { + seqTclList($1, SWIGTYPE_p_Edge, interp); +} + +%typemap(out) VertexIterator* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) VertexInEdgeIterator* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) VertexOutEdgeIterator* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) CheckErrorSeq & { + Tcl_Obj *error_list = Tcl_NewListObj(0, nullptr); + CheckErrorSeq *check_errors = $1; + CheckErrorSeq::Iterator check_iter(check_errors); + while (check_iter.hasNext()) { + CheckError *error = check_iter.next(); + Tcl_Obj *string_list = Tcl_NewListObj(0, nullptr); + CheckError::Iterator string_iter(error); + while (string_iter.hasNext()) { + const char *str = string_iter.next(); + size_t str_len = strlen(str); + Tcl_Obj *obj = Tcl_NewStringObj(const_cast(str), + static_cast(str_len)); + Tcl_ListObjAppendElement(interp, string_list, obj); + } + Tcl_ListObjAppendElement(interp, error_list, string_list); + } + Tcl_SetObjResult(interp, error_list); +} + +%typemap(out) PathEnd* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) PathEndSeq* { + Tcl_Obj *list = Tcl_NewListObj(0, nullptr); + const PathEndSeq *path_ends = $1; + PathEndSeq::ConstIterator end_iter(path_ends); + while (end_iter.hasNext()) { + PathEnd *path_end = end_iter.next(); + Tcl_Obj *obj = SWIG_NewInstanceObj(path_end, SWIGTYPE_p_PathEnd, false); + Tcl_ListObjAppendElement(interp, list, obj); + } + // Delete the PathEndSeq, not the ends. + delete path_ends; + Tcl_SetObjResult(interp, list); +} + +%typemap(out) PathEndSeq { + seqTclList($1, SWIGTYPE_p_PathEnd, interp); +} + +%typemap(out) MinPulseWidthCheckSeqIterator* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) PathRefSeq* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); + + Tcl_Obj *list = Tcl_NewListObj(0, nullptr); + PathRefSeq *paths = $1; + PathRefSeq::Iterator path_iter(paths); + while (path_iter.hasNext()) { + PathRef *path = &path_iter.next(); + PathRef *copy = new PathRef(path); + Tcl_Obj *obj = SWIG_NewInstanceObj(copy, SWIGTYPE_p_PathRef, false); + Tcl_ListObjAppendElement(interp, list, obj); + } + Tcl_SetObjResult(interp, list); +} + +%typemap(out) MinPulseWidthCheck* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) MinPulseWidthCheckSeq & { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) MinPulseWidthCheckSeqIterator & { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) VertexPathIterator* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) SlowDrvrIterator* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) ExceptionFrom* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) ExceptionTo* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) ExceptionThru* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) OperatingConditions* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(in) ReducedParasiticType { + int length; + char *arg = Tcl_GetStringFromObj($input, &length); + if (stringEq(arg, "pi_elmore")) + $1 = ReducedParasiticType::pi_elmore; + else if (stringEq(arg, "pi_pole_residue2")) + $1 = ReducedParasiticType::pi_pole_residue2; + else if (stringEq(arg, "none")) + $1 = ReducedParasiticType::none; + else { + tclArgError(interp, "%s pi_elmore, pi_pole_residue2, or none.", arg); + return TCL_ERROR; + } +} + +%typemap(out) Arrival { + Tcl_SetObjResult(interp,Tcl_NewDoubleObj(delayAsFloat($1))); +} + +%typemap(out) Required { + Tcl_SetObjResult(interp,Tcl_NewDoubleObj(delayAsFloat($1))); +} + +%typemap(out) Slack { + Tcl_SetObjResult(interp,Tcl_NewDoubleObj(delayAsFloat($1))); +} + +%typemap(out) ArcDelay { + Tcl_SetObjResult(interp,Tcl_NewDoubleObj(delayAsFloat($1))); +} + +%typemap(out) Slew { + Tcl_SetObjResult(interp,Tcl_NewDoubleObj(delayAsFloat($1))); +} + +%typemap(in) PathGroupNameSet* { + $1 = tclListSetConstChar($input, interp); +} + +%typemap(in) StringSet* { + $1 = tclListSetConstChar($input, interp); +} + +%typemap(out) Corner* { + Tcl_Obj *obj = SWIG_NewInstanceObj($1, $1_descriptor, false); + Tcl_SetObjResult(interp, obj); +} + +%typemap(out) Corners* { + Tcl_Obj *list = Tcl_NewListObj(0, nullptr); + Corners *corners = $1; + for (Corner *corner : *corners) { + Tcl_Obj *obj = SWIG_NewInstanceObj(corner, SWIGTYPE_p_Corner, false); + Tcl_ListObjAppendElement(interp, list, obj); + } + Tcl_SetObjResult(interp, list); +} + +%typemap(out) PropertyValue { + PropertyValue value = $1; + switch (value.type()) { + case PropertyValue::Type::type_none: + Tcl_SetResult(interp, const_cast(""), TCL_STATIC); + break; + case PropertyValue::Type::type_string: + Tcl_SetResult(interp, const_cast(value.stringValue()), TCL_VOLATILE); + break; + case PropertyValue::Type::type_float: { + const Unit *unit = value.unit(); + const char *float_string = unit->asString(value.floatValue(), 6); + Tcl_SetResult(interp, const_cast(float_string), TCL_VOLATILE); + } + break; + case PropertyValue::Type::type_bool: { + const char *bool_string = value.boolValue() ? "1" : "0"; + Tcl_SetResult(interp, const_cast(bool_string), TCL_STATIC); + } + break; + case PropertyValue::Type::type_library: { + Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.library()), + SWIGTYPE_p_Library, false); + Tcl_SetObjResult(interp, obj); + } + break; + case PropertyValue::Type::type_cell: { + Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.cell()), + SWIGTYPE_p_Cell, false); + Tcl_SetObjResult(interp, obj); + } + break; + case PropertyValue::Type::type_port: { + Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.port()), + SWIGTYPE_p_Port, false); + Tcl_SetObjResult(interp, obj); + } + break; + case PropertyValue::Type::type_liberty_library: { + Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.libertyLibrary()), + SWIGTYPE_p_LibertyLibrary, false); + Tcl_SetObjResult(interp, obj); + } + break; + case PropertyValue::Type::type_liberty_cell: { + Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.libertyCell()), + SWIGTYPE_p_LibertyCell, false); + Tcl_SetObjResult(interp, obj); + } + break; + case PropertyValue::Type::type_liberty_port: { + Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.libertyPort()), + SWIGTYPE_p_LibertyPort, false); + Tcl_SetObjResult(interp, obj); + } + break; + case PropertyValue::Type::type_instance: { + Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.instance()), + SWIGTYPE_p_Instance, false); + Tcl_SetObjResult(interp, obj); + } + break; + case PropertyValue::Type::type_pin: { + Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.pin()), + SWIGTYPE_p_Pin, false); + Tcl_SetObjResult(interp, obj); + } + break; + case PropertyValue::Type::type_pins: { + Tcl_Obj *list = Tcl_NewListObj(0, nullptr); + PinSeq *pins = value.pins(); + PinSeq::Iterator pin_iter(pins); + while (pin_iter.hasNext()) { + const Pin *pin = pin_iter.next(); + Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(pin), SWIGTYPE_p_Pin, false); + Tcl_ListObjAppendElement(interp, list, obj); + } + Tcl_SetObjResult(interp, list); + } + break; + case PropertyValue::Type::type_net: { + Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.net()), + SWIGTYPE_p_Net, false); + Tcl_SetObjResult(interp, obj); + } + break; + case PropertyValue::Type::type_clk: { + Tcl_Obj *obj = SWIG_NewInstanceObj(const_cast(value.clock()), + SWIGTYPE_p_Clock, false); + Tcl_SetObjResult(interp, obj); + } + break; + case PropertyValue::Type::type_clks: { + Tcl_Obj *list = Tcl_NewListObj(0, nullptr); + ClockSeq *clks = value.clocks(); + ClockSeq::Iterator clk_iter(clks); + while (clk_iter.hasNext()) { + Clock *clk = clk_iter.next(); + Tcl_Obj *obj = SWIG_NewInstanceObj(clk, SWIGTYPE_p_Clock, false); + Tcl_ListObjAppendElement(interp, list, obj); + } + Tcl_SetObjResult(interp, list); + } + break; + case PropertyValue::Type::type_path_refs: { + Tcl_Obj *list = Tcl_NewListObj(0, nullptr); + for (PathRef &path : *value.pathRefs()) { + PathRef *copy = new PathRef(path); + Tcl_Obj *obj = SWIG_NewInstanceObj(copy, SWIGTYPE_p_PathRef, false); + Tcl_ListObjAppendElement(interp, list, obj); + } + Tcl_SetObjResult(interp, list); + } + break; + case PropertyValue::Type::type_pwr_activity: { + PwrActivity activity = value.pwrActivity(); + Tcl_Obj *list = Tcl_NewListObj(0, nullptr); + Tcl_Obj *obj; + const char *str; + + str = stringPrintTmp("%.5e", activity.activity()); + obj = Tcl_NewStringObj(str, strlen(str)); + Tcl_ListObjAppendElement(interp, list, obj); + + str = stringPrintTmp("%.3f", activity.duty()); + obj = Tcl_NewStringObj(str, strlen(str)); + Tcl_ListObjAppendElement(interp, list, obj); + + str = activity.originName(); + obj = Tcl_NewStringObj(str, strlen(str)); + Tcl_ListObjAppendElement(interp, list, obj); + + Tcl_SetObjResult(interp, list); + } + break; + } +} From f2a700fc3b37fdf01754b8fd966869eb18698472 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Wed, 10 Jan 2024 09:24:05 -0800 Subject: [PATCH 14/43] dcalc parallel driver with no arcs seg fault Signed-off-by: James Cherry --- dcalc/GraphDelayCalc.cc | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/dcalc/GraphDelayCalc.cc b/dcalc/GraphDelayCalc.cc index 5b5eab43..2986fc81 100644 --- a/dcalc/GraphDelayCalc.cc +++ b/dcalc/GraphDelayCalc.cc @@ -871,8 +871,7 @@ GraphDelayCalc::findDriverArcDelays(Vertex *drvr_vertex, ArcDcalcResultSeq dcalc_results = arc_delay_calc->gateDelays(dcalc_args, load_cap, load_pin_index_map, dcalc_ap); - size_t drvr_count = multi_drvr->drvrs()->size(); - for (size_t drvr_idx = 0; drvr_idx < drvr_count; drvr_idx++) { + for (size_t drvr_idx = 0; drvr_idx < dcalc_args.size(); drvr_idx++) { ArcDcalcArg &dcalc_arg = dcalc_args[drvr_idx]; ArcDcalcResult &dcalc_result = dcalc_results[drvr_idx]; delay_changed |= annotateDelaysSlews(dcalc_arg.edge(), dcalc_arg.arc(), @@ -904,23 +903,26 @@ GraphDelayCalc::makeArcDcalcArgs(Vertex *drvr_vertex, { ArcDcalcArgSeq dcalc_args; for (auto drvr_vertex1 : *multi_drvr->drvrs()) { - Edge *edge1; - const TimingArc *arc1; + Edge *edge1 = nullptr; + const TimingArc *arc1 = nullptr; if (drvr_vertex1 == drvr_vertex) { edge1 = edge; arc1 = arc; } else findParallelEdge(drvr_vertex1, edge, arc, edge1, arc1); - Vertex *from_vertex = edge1->from(graph_); - const RiseFall *from_rf = arc1->fromEdge()->asRiseFall(); - const RiseFall *drvr_rf = arc1->toEdge()->asRiseFall(); - const Slew in_slew = edgeFromSlew(from_vertex, from_rf, edge1, dcalc_ap); - const Pin *drvr_pin1 = drvr_vertex1->pin(); - Parasitic *parasitic = arc_delay_calc->findParasitic(drvr_pin1, drvr_rf, - dcalc_ap); - dcalc_args.push_back(ArcDcalcArg(drvr_pin1, edge1, arc1, in_slew, - parasitic)); + // Shockingly one fpga vendor connects outputs with no timing arcs together. + if (edge1) { + Vertex *from_vertex = edge1->from(graph_); + const RiseFall *from_rf = arc1->fromEdge()->asRiseFall(); + const RiseFall *drvr_rf = arc1->toEdge()->asRiseFall(); + const Slew in_slew = edgeFromSlew(from_vertex, from_rf, edge1, dcalc_ap); + const Pin *drvr_pin1 = drvr_vertex1->pin(); + Parasitic *parasitic = arc_delay_calc->findParasitic(drvr_pin1, drvr_rf, + dcalc_ap); + dcalc_args.push_back(ArcDcalcArg(drvr_pin1, edge1, arc1, in_slew, + parasitic)); + } } return dcalc_args; } From 5541898464ba3a0059287a9a9a8bc19fc923c315 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Thu, 11 Jan 2024 16:27:34 -0800 Subject: [PATCH 15/43] okfiles Signed-off-by: James Cherry --- test/power.ok | 10 +++++----- test/power_vcd.ok | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/test/power.ok b/test/power.ok index 20b60589..6d3c0eea 100644 --- a/test/power.ok +++ b/test/power.ok @@ -2,11 +2,11 @@ Warning: gcd_sky130hd.v line 527, module sky130_fd_sc_hd__tapvpwrvgnd_1 not foun Group Internal Switching Leakage Total Power Power Power Power (Watts) ---------------------------------------------------------------- -Sequential 3.27e-04 7.87e-05 2.96e-10 4.06e-04 36.4% -Combinational 2.34e-04 3.10e-04 6.95e-10 5.43e-04 48.7% -Clock 4.68e-05 1.20e-04 2.30e-11 1.67e-04 15.0% +Sequential 3.32e-04 8.62e-05 2.96e-10 4.19e-04 35.1% +Combinational 2.61e-04 3.46e-04 6.95e-10 6.07e-04 50.9% +Clock 4.68e-05 1.20e-04 2.30e-11 1.67e-04 14.0% Macro 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0% Pad 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0% ---------------------------------------------------------------- -Total 6.07e-04 5.09e-04 1.01e-09 1.12e-03 100.0% - 54.4% 45.6% 0.0% +Total 6.41e-04 5.53e-04 1.01e-09 1.19e-03 100.0% + 53.7% 46.3% 0.0% diff --git a/test/power_vcd.ok b/test/power_vcd.ok index 5744deeb..549c868f 100644 --- a/test/power_vcd.ok +++ b/test/power_vcd.ok @@ -1,5 +1,5 @@ Warning: gcd_sky130hd.v line 527, module sky130_fd_sc_hd__tapvpwrvgnd_1 not found. Creating black box for TAP_11. -Annotated 936 pin activities. +Annotated 937 pin activities. Group Internal Switching Leakage Total Power Power Power Power (Watts) ---------------------------------------------------------------- From 422a5819bd949071a29eef7187f66fb2fba6edf5 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Thu, 11 Jan 2024 16:34:49 -0800 Subject: [PATCH 16/43] update copyright Signed-off-by: James Cherry --- CMakeLists.txt | 2 +- app/Main.cc | 2 +- app/StaApp.i | 2 +- app/StaMain.cc | 2 +- dcalc/ArcDcalcWaveforms.cc | 2 +- dcalc/ArcDcalcWaveforms.hh | 2 +- dcalc/ArcDelayCalc.cc | 2 +- dcalc/Arnoldi.hh | 2 +- dcalc/ArnoldiDelayCalc.cc | 2 +- dcalc/ArnoldiDelayCalc.hh | 2 +- dcalc/ArnoldiReduce.cc | 2 +- dcalc/ArnoldiReduce.hh | 2 +- dcalc/DcalcAnalysisPt.cc | 2 +- dcalc/DelayCalc.cc | 2 +- dcalc/DelayCalc.i | 2 +- dcalc/DelayCalc.tcl | 2 +- dcalc/DelayCalcBase.cc | 2 +- dcalc/DelayCalcBase.hh | 2 +- dcalc/DmpCeff.cc | 2 +- dcalc/DmpCeff.hh | 2 +- dcalc/DmpDelayCalc.cc | 2 +- dcalc/DmpDelayCalc.hh | 2 +- dcalc/GraphDelayCalc.cc | 2 +- dcalc/LumpedCapDelayCalc.cc | 2 +- dcalc/LumpedCapDelayCalc.hh | 2 +- dcalc/NetCaps.cc | 2 +- dcalc/NetCaps.hh | 2 +- dcalc/ParallelDelayCalc.cc | 2 +- dcalc/ParallelDelayCalc.hh | 2 +- dcalc/UnitDelayCalc.cc | 2 +- dcalc/UnitDelayCalc.hh | 2 +- doc/ApiChanges.txt | 2 +- doc/StaApi.txt | 2 +- etc/TclEncode.tcl | 2 +- graph/Delay.cc | 2 +- graph/DelayFloat.cc | 2 +- graph/DelayNormal1.cc | 2 +- graph/DelayNormal2.cc | 2 +- graph/Graph.cc | 2 +- graph/GraphCmp.cc | 2 +- include/sta/ArcDelayCalc.hh | 2 +- include/sta/ArrayTable.hh | 2 +- include/sta/Bfs.hh | 2 +- include/sta/ClkNetwork.hh | 2 +- include/sta/Clock.hh | 2 +- include/sta/ClockGatingCheck.hh | 2 +- include/sta/ClockGroups.hh | 2 +- include/sta/ClockInsertion.hh | 2 +- include/sta/ClockLatency.hh | 2 +- include/sta/ConcreteLibrary.hh | 2 +- include/sta/ConcreteNetwork.hh | 2 +- include/sta/Corner.hh | 2 +- include/sta/CycleAccting.hh | 2 +- include/sta/DataCheck.hh | 2 +- include/sta/DcalcAnalysisPt.hh | 2 +- include/sta/Debug.hh | 2 +- include/sta/Delay.hh | 2 +- include/sta/DelayCalc.hh | 2 +- include/sta/DelayFloat.hh | 2 +- include/sta/DelayNormal1.hh | 2 +- include/sta/DelayNormal2.hh | 2 +- include/sta/DeratingFactors.hh | 2 +- include/sta/DisabledPorts.hh | 2 +- include/sta/EnumNameMap.hh | 2 +- include/sta/EquivCells.hh | 2 +- include/sta/Error.hh | 2 +- include/sta/ExceptionPath.hh | 2 +- include/sta/FuncExpr.hh | 2 +- include/sta/Fuzzy.hh | 2 +- include/sta/Graph.hh | 2 +- include/sta/GraphClass.hh | 2 +- include/sta/GraphCmp.hh | 2 +- include/sta/GraphDelayCalc.hh | 2 +- include/sta/Hash.hh | 2 +- include/sta/HpinDrvrLoad.hh | 2 +- include/sta/InputDrive.hh | 2 +- include/sta/InternalPower.hh | 2 +- include/sta/Iterator.hh | 2 +- include/sta/LeakagePower.hh | 2 +- include/sta/Liberty.hh | 2 +- include/sta/LibertyClass.hh | 2 +- include/sta/LibertyWriter.hh | 2 +- include/sta/LinearModel.hh | 2 +- include/sta/Machine.hh | 2 +- include/sta/MakeConcreteNetwork.hh | 2 +- include/sta/MakeConcreteParasitics.hh | 2 +- include/sta/Map.hh | 2 +- include/sta/MinMax.hh | 2 +- include/sta/MinMaxValues.hh | 2 +- include/sta/Mutex.hh | 2 +- include/sta/Network.hh | 2 +- include/sta/NetworkClass.hh | 2 +- include/sta/NetworkCmp.hh | 2 +- include/sta/NullParasitics.hh | 2 +- include/sta/ObjectId.hh | 2 +- include/sta/ObjectTable.hh | 2 +- include/sta/Parasitics.hh | 2 +- include/sta/ParasiticsClass.hh | 2 +- include/sta/ParseBus.hh | 2 +- include/sta/Path.hh | 2 +- include/sta/PathAnalysisPt.hh | 2 +- include/sta/PathEnd.hh | 2 +- include/sta/PathExpanded.hh | 2 +- include/sta/PathGroup.hh | 2 +- include/sta/PathRef.hh | 2 +- include/sta/PathVertex.hh | 2 +- include/sta/PathVertexRep.hh | 2 +- include/sta/PatternMatch.hh | 2 +- include/sta/PinPair.hh | 2 +- include/sta/PortDelay.hh | 2 +- include/sta/PortDirection.hh | 2 +- include/sta/PortExtCap.hh | 2 +- include/sta/PowerClass.hh | 2 +- include/sta/Property.hh | 2 +- include/sta/Report.hh | 2 +- include/sta/ReportStd.hh | 2 +- include/sta/ReportTcl.hh | 2 +- include/sta/RiseFallMinMax.hh | 2 +- include/sta/RiseFallValues.hh | 2 +- include/sta/Sdc.hh | 2 +- include/sta/SdcClass.hh | 2 +- include/sta/SdcCmdComment.hh | 2 +- include/sta/SdcNetwork.hh | 2 +- include/sta/Search.hh | 2 +- include/sta/SearchClass.hh | 2 +- include/sta/SearchPred.hh | 2 +- include/sta/Sequential.hh | 2 +- include/sta/Set.hh | 2 +- include/sta/Sta.hh | 2 +- include/sta/StaMain.hh | 2 +- include/sta/StaState.hh | 2 +- include/sta/Stats.hh | 2 +- include/sta/StringSeq.hh | 2 +- include/sta/StringSet.hh | 2 +- include/sta/StringUtil.hh | 2 +- include/sta/TableModel.hh | 2 +- include/sta/TimingArc.hh | 2 +- include/sta/TimingModel.hh | 2 +- include/sta/TimingRole.hh | 2 +- include/sta/TokenParser.hh | 2 +- include/sta/Transition.hh | 2 +- include/sta/Units.hh | 2 +- include/sta/UnorderedMap.hh | 2 +- include/sta/UnorderedSet.hh | 2 +- include/sta/Vector.hh | 2 +- include/sta/VerilogNamespace.hh | 2 +- include/sta/VerilogReader.hh | 2 +- include/sta/VerilogWriter.hh | 2 +- include/sta/VertexId.hh | 2 +- include/sta/VertexVisitor.hh | 2 +- include/sta/VisitPathEnds.hh | 2 +- include/sta/Wireload.hh | 2 +- include/sta/WritePathSpice.hh | 2 +- include/sta/WriteSdc.hh | 2 +- include/sta/Zlib.hh | 2 +- liberty/EquivCells.cc | 2 +- liberty/FuncExpr.cc | 2 +- liberty/InternalPower.cc | 2 +- liberty/LeakagePower.cc | 2 +- liberty/Liberty.cc | 2 +- liberty/LibertyBuilder.cc | 2 +- liberty/LibertyBuilder.hh | 2 +- liberty/LibertyExpr.cc | 2 +- liberty/LibertyExpr.hh | 2 +- liberty/LibertyExprLex.ll | 2 +- liberty/LibertyExprParse.yy | 2 +- liberty/LibertyExprPvt.hh | 2 +- liberty/LibertyExt.cc | 2 +- liberty/LibertyLex.ll | 2 +- liberty/LibertyParse.yy | 2 +- liberty/LibertyParser.cc | 2 +- liberty/LibertyParser.hh | 2 +- liberty/LibertyReader.cc | 2 +- liberty/LibertyReader.hh | 2 +- liberty/LibertyReaderPvt.hh | 2 +- liberty/LibertyWriter.cc | 2 +- liberty/LinearModel.cc | 2 +- liberty/Sequential.cc | 2 +- liberty/TableModel.cc | 2 +- liberty/TimingArc.cc | 2 +- liberty/TimingModel.cc | 2 +- liberty/TimingRole.cc | 2 +- liberty/Units.cc | 2 +- liberty/Wireload.cc | 2 +- network/ConcreteLibrary.cc | 2 +- network/ConcreteNetwork.cc | 2 +- network/HpinDrvrLoad.cc | 2 +- network/Network.cc | 2 +- network/NetworkCmp.cc | 2 +- network/ParseBus.cc | 2 +- network/PortDirection.cc | 2 +- network/SdcNetwork.cc | 2 +- network/VerilogNamespace.cc | 2 +- parasitics/ConcreteParasitics.cc | 2 +- parasitics/ConcreteParasitics.hh | 2 +- parasitics/ConcreteParasiticsPvt.hh | 2 +- parasitics/EstimateParasitics.cc | 2 +- parasitics/EstimateParasitics.hh | 2 +- parasitics/NullParasitics.cc | 2 +- parasitics/Parasitics.cc | 2 +- parasitics/Parasitics.i | 2 +- parasitics/Parasitics.tcl | 2 +- parasitics/ReduceParasitics.cc | 2 +- parasitics/ReduceParasitics.hh | 2 +- parasitics/ReportParasiticAnnotation.cc | 2 +- parasitics/ReportParasiticAnnotation.hh | 2 +- parasitics/SpefLex.ll | 2 +- parasitics/SpefNamespace.cc | 2 +- parasitics/SpefNamespace.hh | 2 +- parasitics/SpefParse.yy | 2 +- parasitics/SpefReader.cc | 2 +- parasitics/SpefReader.hh | 2 +- parasitics/SpefReaderPvt.hh | 2 +- power/Power.cc | 2 +- power/Power.hh | 2 +- power/Power.i | 2 +- power/Power.tcl | 2 +- power/ReadVcdActivities.cc | 2 +- power/ReadVcdActivities.hh | 2 +- power/Vcd.cc | 2 +- power/Vcd.hh | 2 +- power/VcdReader.cc | 2 +- power/VcdReader.hh | 2 +- sdc/Clock.cc | 2 +- sdc/ClockGatingCheck.cc | 2 +- sdc/ClockGroups.cc | 2 +- sdc/ClockInsertion.cc | 2 +- sdc/ClockLatency.cc | 2 +- sdc/CycleAccting.cc | 2 +- sdc/DataCheck.cc | 2 +- sdc/DeratingFactors.cc | 2 +- sdc/DisabledPorts.cc | 2 +- sdc/ExceptionPath.cc | 2 +- sdc/InputDrive.cc | 2 +- sdc/PinPair.cc | 2 +- sdc/PortDelay.cc | 2 +- sdc/PortExtCap.cc | 2 +- sdc/Sdc.cc | 2 +- sdc/SdcCmdComment.cc | 2 +- sdc/SdcGraph.cc | 2 +- sdc/WriteSdc.cc | 2 +- sdc/WriteSdcPvt.hh | 2 +- sdf/ReportAnnotation.cc | 2 +- sdf/ReportAnnotation.hh | 2 +- sdf/Sdf.i | 2 +- sdf/Sdf.tcl | 2 +- sdf/SdfLex.ll | 2 +- sdf/SdfParse.yy | 2 +- sdf/SdfReader.cc | 2 +- sdf/SdfReader.hh | 2 +- sdf/SdfReaderPvt.hh | 2 +- sdf/SdfWriter.cc | 2 +- sdf/SdfWriter.hh | 2 +- search/Bfs.cc | 2 +- search/CheckCapacitanceLimits.cc | 2 +- search/CheckCapacitanceLimits.hh | 2 +- search/CheckFanoutLimits.cc | 2 +- search/CheckFanoutLimits.hh | 2 +- search/CheckMaxSkews.cc | 2 +- search/CheckMaxSkews.hh | 2 +- search/CheckMinPeriods.cc | 2 +- search/CheckMinPeriods.hh | 2 +- search/CheckMinPulseWidths.cc | 2 +- search/CheckMinPulseWidths.hh | 2 +- search/CheckSlewLimits.cc | 2 +- search/CheckSlewLimits.hh | 2 +- search/CheckTiming.cc | 2 +- search/CheckTiming.hh | 2 +- search/ClkInfo.cc | 2 +- search/ClkInfo.hh | 2 +- search/ClkNetwork.cc | 2 +- search/ClkSkew.cc | 2 +- search/ClkSkew.hh | 2 +- search/Corner.cc | 2 +- search/Crpr.cc | 2 +- search/Crpr.hh | 2 +- search/FindRegister.cc | 2 +- search/FindRegister.hh | 2 +- search/GatedClk.cc | 2 +- search/GatedClk.hh | 2 +- search/Genclks.cc | 2 +- search/Genclks.hh | 2 +- search/Latches.cc | 2 +- search/Latches.hh | 2 +- search/Levelize.cc | 2 +- search/Levelize.hh | 2 +- search/MakeTimingModel.cc | 2 +- search/MakeTimingModel.hh | 2 +- search/MakeTimingModelPvt.hh | 2 +- search/Path.cc | 2 +- search/PathAnalysisPt.cc | 2 +- search/PathEnd.cc | 2 +- search/PathEnum.cc | 2 +- search/PathEnum.hh | 2 +- search/PathEnumed.cc | 2 +- search/PathEnumed.hh | 2 +- search/PathExpanded.cc | 2 +- search/PathGroup.cc | 2 +- search/PathRef.cc | 2 +- search/PathVertex.cc | 2 +- search/PathVertexRep.cc | 2 +- search/Property.cc | 2 +- search/ReportPath.cc | 2 +- search/ReportPath.hh | 2 +- search/Search.cc | 2 +- search/SearchPred.cc | 2 +- search/Sim.cc | 2 +- search/Sim.hh | 2 +- search/Sta.cc | 2 +- search/StaState.cc | 2 +- search/Tag.cc | 2 +- search/Tag.hh | 2 +- search/TagGroup.cc | 2 +- search/TagGroup.hh | 2 +- search/VertexVisitor.cc | 2 +- search/VisitPathEnds.cc | 2 +- search/VisitPathGroupVertices.cc | 2 +- search/VisitPathGroupVertices.hh | 2 +- search/WorstSlack.cc | 2 +- search/WorstSlack.hh | 2 +- search/WritePathSpice.cc | 2 +- tcl/CmdArgs.tcl | 2 +- tcl/CmdUtil.tcl | 2 +- tcl/Exception.i | 2 +- tcl/Graph.tcl | 2 +- tcl/Init.tcl | 2 +- tcl/Liberty.tcl | 2 +- tcl/Link.tcl | 2 +- tcl/Network.tcl | 2 +- tcl/NetworkEdit.i | 2 +- tcl/NetworkEdit.tcl | 2 +- tcl/Property.tcl | 2 +- tcl/Sdc.tcl | 2 +- tcl/Search.tcl | 2 +- tcl/Splash.tcl | 4 ++-- tcl/Sta.tcl | 2 +- tcl/StaTcl.i | 2 +- tcl/Util.tcl | 2 +- tcl/Variables.tcl | 2 +- tcl/WritePathSpice.tcl | 2 +- test/regression | 2 +- test/regression.tcl | 2 +- test/regression_vars.tcl | 2 +- test/save_ok | 2 +- util/Debug.cc | 2 +- util/Error.cc | 2 +- util/Fuzzy.cc | 2 +- util/Hash.cc | 2 +- util/Machine.cc | 2 +- util/MachineApple.cc | 2 +- util/MachineLinux.cc | 2 +- util/MachineUnknown.cc | 2 +- util/MachineWin32.cc | 2 +- util/MinMax.cc | 2 +- util/PatternMatch.cc | 2 +- util/Report.cc | 2 +- util/ReportStd.cc | 2 +- util/ReportTcl.cc | 2 +- util/RiseFallMinMax.cc | 2 +- util/RiseFallValues.cc | 2 +- util/Stats.cc | 2 +- util/StringSeq.cc | 2 +- util/StringSet.cc | 2 +- util/StringUtil.cc | 2 +- util/TokenParser.cc | 2 +- util/Transition.cc | 2 +- verilog/Verilog.i | 2 +- verilog/Verilog.tcl | 2 +- verilog/VerilogLex.ll | 2 +- verilog/VerilogParse.yy | 2 +- verilog/VerilogReader.cc | 2 +- verilog/VerilogReaderPvt.hh | 2 +- verilog/VerilogWriter.cc | 2 +- 373 files changed, 374 insertions(+), 374 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0c56665c..1fa620e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/app/Main.cc b/app/Main.cc index c9a01274..9b45ae21 100644 --- a/app/Main.cc +++ b/app/Main.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/app/StaApp.i b/app/StaApp.i index b9a48a19..fde2e64d 100644 --- a/app/StaApp.i +++ b/app/StaApp.i @@ -1,7 +1,7 @@ %module sta // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/app/StaMain.cc b/app/StaMain.cc index fb350b64..f78dfa3e 100644 --- a/app/StaMain.cc +++ b/app/StaMain.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/ArcDcalcWaveforms.cc b/dcalc/ArcDcalcWaveforms.cc index 6b282596..90f83b9c 100644 --- a/dcalc/ArcDcalcWaveforms.cc +++ b/dcalc/ArcDcalcWaveforms.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/ArcDcalcWaveforms.hh b/dcalc/ArcDcalcWaveforms.hh index a47eff0b..7015a27a 100644 --- a/dcalc/ArcDcalcWaveforms.hh +++ b/dcalc/ArcDcalcWaveforms.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/ArcDelayCalc.cc b/dcalc/ArcDelayCalc.cc index 8999a3af..1b7ef4da 100644 --- a/dcalc/ArcDelayCalc.cc +++ b/dcalc/ArcDelayCalc.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/Arnoldi.hh b/dcalc/Arnoldi.hh index 79f3a77a..545bec72 100644 --- a/dcalc/Arnoldi.hh +++ b/dcalc/Arnoldi.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/ArnoldiDelayCalc.cc b/dcalc/ArnoldiDelayCalc.cc index 6a2b9b1a..bc453595 100644 --- a/dcalc/ArnoldiDelayCalc.cc +++ b/dcalc/ArnoldiDelayCalc.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/ArnoldiDelayCalc.hh b/dcalc/ArnoldiDelayCalc.hh index 2616ab0d..20b0e626 100644 --- a/dcalc/ArnoldiDelayCalc.hh +++ b/dcalc/ArnoldiDelayCalc.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/ArnoldiReduce.cc b/dcalc/ArnoldiReduce.cc index 8e019426..1a0779d7 100644 --- a/dcalc/ArnoldiReduce.cc +++ b/dcalc/ArnoldiReduce.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/ArnoldiReduce.hh b/dcalc/ArnoldiReduce.hh index e299f929..c5e1a004 100644 --- a/dcalc/ArnoldiReduce.hh +++ b/dcalc/ArnoldiReduce.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/DcalcAnalysisPt.cc b/dcalc/DcalcAnalysisPt.cc index 1995f245..3b2b71bd 100644 --- a/dcalc/DcalcAnalysisPt.cc +++ b/dcalc/DcalcAnalysisPt.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/DelayCalc.cc b/dcalc/DelayCalc.cc index cfb940de..ab032824 100644 --- a/dcalc/DelayCalc.cc +++ b/dcalc/DelayCalc.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/DelayCalc.i b/dcalc/DelayCalc.i index b96b0470..d94565d4 100644 --- a/dcalc/DelayCalc.i +++ b/dcalc/DelayCalc.i @@ -3,7 +3,7 @@ %{ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/DelayCalc.tcl b/dcalc/DelayCalc.tcl index c9d25c75..7af909e5 100644 --- a/dcalc/DelayCalc.tcl +++ b/dcalc/DelayCalc.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/dcalc/DelayCalcBase.cc b/dcalc/DelayCalcBase.cc index d4adc760..ea748e8d 100644 --- a/dcalc/DelayCalcBase.cc +++ b/dcalc/DelayCalcBase.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/DelayCalcBase.hh b/dcalc/DelayCalcBase.hh index 973f758c..1c7e8173 100644 --- a/dcalc/DelayCalcBase.hh +++ b/dcalc/DelayCalcBase.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/DmpCeff.cc b/dcalc/DmpCeff.cc index 7e29ae6f..a7c37b4d 100644 --- a/dcalc/DmpCeff.cc +++ b/dcalc/DmpCeff.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/DmpCeff.hh b/dcalc/DmpCeff.hh index 960b8336..fadc0140 100644 --- a/dcalc/DmpCeff.hh +++ b/dcalc/DmpCeff.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/DmpDelayCalc.cc b/dcalc/DmpDelayCalc.cc index ae865102..55ff6b3b 100644 --- a/dcalc/DmpDelayCalc.cc +++ b/dcalc/DmpDelayCalc.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/DmpDelayCalc.hh b/dcalc/DmpDelayCalc.hh index f604e6dc..c5c8cbd3 100644 --- a/dcalc/DmpDelayCalc.hh +++ b/dcalc/DmpDelayCalc.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/GraphDelayCalc.cc b/dcalc/GraphDelayCalc.cc index 2986fc81..3d6180ec 100644 --- a/dcalc/GraphDelayCalc.cc +++ b/dcalc/GraphDelayCalc.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/LumpedCapDelayCalc.cc b/dcalc/LumpedCapDelayCalc.cc index d3697138..c68ae660 100644 --- a/dcalc/LumpedCapDelayCalc.cc +++ b/dcalc/LumpedCapDelayCalc.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/LumpedCapDelayCalc.hh b/dcalc/LumpedCapDelayCalc.hh index 3ac111c3..48b35285 100644 --- a/dcalc/LumpedCapDelayCalc.hh +++ b/dcalc/LumpedCapDelayCalc.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/NetCaps.cc b/dcalc/NetCaps.cc index 4521eb99..44fc5924 100644 --- a/dcalc/NetCaps.cc +++ b/dcalc/NetCaps.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/NetCaps.hh b/dcalc/NetCaps.hh index ca1ad970..311a5104 100644 --- a/dcalc/NetCaps.hh +++ b/dcalc/NetCaps.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/ParallelDelayCalc.cc b/dcalc/ParallelDelayCalc.cc index db352812..24f043b2 100644 --- a/dcalc/ParallelDelayCalc.cc +++ b/dcalc/ParallelDelayCalc.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/ParallelDelayCalc.hh b/dcalc/ParallelDelayCalc.hh index 8079c31d..b5ca9640 100644 --- a/dcalc/ParallelDelayCalc.hh +++ b/dcalc/ParallelDelayCalc.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/UnitDelayCalc.cc b/dcalc/UnitDelayCalc.cc index 232c8ecd..5722b24b 100644 --- a/dcalc/UnitDelayCalc.cc +++ b/dcalc/UnitDelayCalc.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/dcalc/UnitDelayCalc.hh b/dcalc/UnitDelayCalc.hh index ec520a53..0194caef 100644 --- a/dcalc/UnitDelayCalc.hh +++ b/dcalc/UnitDelayCalc.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/doc/ApiChanges.txt b/doc/ApiChanges.txt index 0b395352..7f3195ba 100644 --- a/doc/ApiChanges.txt +++ b/doc/ApiChanges.txt @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/doc/StaApi.txt b/doc/StaApi.txt index 5ba99a50..812db703 100644 --- a/doc/StaApi.txt +++ b/doc/StaApi.txt @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/etc/TclEncode.tcl b/etc/TclEncode.tcl index 7af0affd..98127018 100755 --- a/etc/TclEncode.tcl +++ b/etc/TclEncode.tcl @@ -3,7 +3,7 @@ exec tclsh $0 ${1+"$@"} # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/graph/Delay.cc b/graph/Delay.cc index f4bd3d2e..6f2c6103 100644 --- a/graph/Delay.cc +++ b/graph/Delay.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/graph/DelayFloat.cc b/graph/DelayFloat.cc index a4b0cc20..7ec03e9f 100644 --- a/graph/DelayFloat.cc +++ b/graph/DelayFloat.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/graph/DelayNormal1.cc b/graph/DelayNormal1.cc index 0aa0488e..294766c1 100644 --- a/graph/DelayNormal1.cc +++ b/graph/DelayNormal1.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/graph/DelayNormal2.cc b/graph/DelayNormal2.cc index f66cd35f..4bdd482b 100644 --- a/graph/DelayNormal2.cc +++ b/graph/DelayNormal2.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/graph/Graph.cc b/graph/Graph.cc index 0b202c3f..552f7471 100644 --- a/graph/Graph.cc +++ b/graph/Graph.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/graph/GraphCmp.cc b/graph/GraphCmp.cc index feefe4fc..6241c16d 100644 --- a/graph/GraphCmp.cc +++ b/graph/GraphCmp.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/ArcDelayCalc.hh b/include/sta/ArcDelayCalc.hh index cbdb1fd9..c7b98be8 100644 --- a/include/sta/ArcDelayCalc.hh +++ b/include/sta/ArcDelayCalc.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/ArrayTable.hh b/include/sta/ArrayTable.hh index 9f606474..16fdafce 100644 --- a/include/sta/ArrayTable.hh +++ b/include/sta/ArrayTable.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Bfs.hh b/include/sta/Bfs.hh index e83a1e82..e3a27aba 100644 --- a/include/sta/Bfs.hh +++ b/include/sta/Bfs.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/ClkNetwork.hh b/include/sta/ClkNetwork.hh index 2ff7074b..0125a2e7 100644 --- a/include/sta/ClkNetwork.hh +++ b/include/sta/ClkNetwork.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Clock.hh b/include/sta/Clock.hh index eaa0c229..b5568e3d 100644 --- a/include/sta/Clock.hh +++ b/include/sta/Clock.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/ClockGatingCheck.hh b/include/sta/ClockGatingCheck.hh index 53719d5a..00facd84 100644 --- a/include/sta/ClockGatingCheck.hh +++ b/include/sta/ClockGatingCheck.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/ClockGroups.hh b/include/sta/ClockGroups.hh index 0dbbaf85..88ce33fd 100644 --- a/include/sta/ClockGroups.hh +++ b/include/sta/ClockGroups.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/ClockInsertion.hh b/include/sta/ClockInsertion.hh index d9ecf505..c0eb9dbf 100644 --- a/include/sta/ClockInsertion.hh +++ b/include/sta/ClockInsertion.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/ClockLatency.hh b/include/sta/ClockLatency.hh index aac905ac..fa4f07d7 100644 --- a/include/sta/ClockLatency.hh +++ b/include/sta/ClockLatency.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/ConcreteLibrary.hh b/include/sta/ConcreteLibrary.hh index c09abac4..5909b81e 100644 --- a/include/sta/ConcreteLibrary.hh +++ b/include/sta/ConcreteLibrary.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/ConcreteNetwork.hh b/include/sta/ConcreteNetwork.hh index 1375c58f..99728c9c 100644 --- a/include/sta/ConcreteNetwork.hh +++ b/include/sta/ConcreteNetwork.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Corner.hh b/include/sta/Corner.hh index cdb472b8..8af89e49 100644 --- a/include/sta/Corner.hh +++ b/include/sta/Corner.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/CycleAccting.hh b/include/sta/CycleAccting.hh index 8f53f5f5..c2893f14 100644 --- a/include/sta/CycleAccting.hh +++ b/include/sta/CycleAccting.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/DataCheck.hh b/include/sta/DataCheck.hh index c6f74ea7..62924e80 100644 --- a/include/sta/DataCheck.hh +++ b/include/sta/DataCheck.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/DcalcAnalysisPt.hh b/include/sta/DcalcAnalysisPt.hh index 79a24ba5..41b25878 100644 --- a/include/sta/DcalcAnalysisPt.hh +++ b/include/sta/DcalcAnalysisPt.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Debug.hh b/include/sta/Debug.hh index ed593b86..66bab1f9 100644 --- a/include/sta/Debug.hh +++ b/include/sta/Debug.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Delay.hh b/include/sta/Delay.hh index 0d96912e..130f7d2b 100644 --- a/include/sta/Delay.hh +++ b/include/sta/Delay.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/DelayCalc.hh b/include/sta/DelayCalc.hh index 9fb66084..07d77d4d 100644 --- a/include/sta/DelayCalc.hh +++ b/include/sta/DelayCalc.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/DelayFloat.hh b/include/sta/DelayFloat.hh index a53cd643..68143025 100644 --- a/include/sta/DelayFloat.hh +++ b/include/sta/DelayFloat.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/DelayNormal1.hh b/include/sta/DelayNormal1.hh index c4f33bce..a8bbacc8 100644 --- a/include/sta/DelayNormal1.hh +++ b/include/sta/DelayNormal1.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/DelayNormal2.hh b/include/sta/DelayNormal2.hh index c116134b..f7aac325 100644 --- a/include/sta/DelayNormal2.hh +++ b/include/sta/DelayNormal2.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/DeratingFactors.hh b/include/sta/DeratingFactors.hh index b9535137..c5a9fca4 100644 --- a/include/sta/DeratingFactors.hh +++ b/include/sta/DeratingFactors.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/DisabledPorts.hh b/include/sta/DisabledPorts.hh index 803850cf..23a50198 100644 --- a/include/sta/DisabledPorts.hh +++ b/include/sta/DisabledPorts.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/EnumNameMap.hh b/include/sta/EnumNameMap.hh index 47b7d2ad..e3f3172e 100644 --- a/include/sta/EnumNameMap.hh +++ b/include/sta/EnumNameMap.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/EquivCells.hh b/include/sta/EquivCells.hh index f6cbdecd..d695b79b 100644 --- a/include/sta/EquivCells.hh +++ b/include/sta/EquivCells.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Error.hh b/include/sta/Error.hh index 41e6b229..8111c58a 100644 --- a/include/sta/Error.hh +++ b/include/sta/Error.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/ExceptionPath.hh b/include/sta/ExceptionPath.hh index 4ea98699..92e8c47a 100644 --- a/include/sta/ExceptionPath.hh +++ b/include/sta/ExceptionPath.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/FuncExpr.hh b/include/sta/FuncExpr.hh index ff5d24c4..586c241a 100644 --- a/include/sta/FuncExpr.hh +++ b/include/sta/FuncExpr.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Fuzzy.hh b/include/sta/Fuzzy.hh index d1e36c18..b3742ad5 100644 --- a/include/sta/Fuzzy.hh +++ b/include/sta/Fuzzy.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Graph.hh b/include/sta/Graph.hh index d2dea625..00fec1f2 100644 --- a/include/sta/Graph.hh +++ b/include/sta/Graph.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/GraphClass.hh b/include/sta/GraphClass.hh index 388d6a45..834ee2aa 100644 --- a/include/sta/GraphClass.hh +++ b/include/sta/GraphClass.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/GraphCmp.hh b/include/sta/GraphCmp.hh index 0b588bf5..8753d69e 100644 --- a/include/sta/GraphCmp.hh +++ b/include/sta/GraphCmp.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/GraphDelayCalc.hh b/include/sta/GraphDelayCalc.hh index aac2282c..b6ae00dc 100644 --- a/include/sta/GraphDelayCalc.hh +++ b/include/sta/GraphDelayCalc.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Hash.hh b/include/sta/Hash.hh index aa6b571c..67036fc0 100644 --- a/include/sta/Hash.hh +++ b/include/sta/Hash.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/HpinDrvrLoad.hh b/include/sta/HpinDrvrLoad.hh index e496798f..74d897d0 100644 --- a/include/sta/HpinDrvrLoad.hh +++ b/include/sta/HpinDrvrLoad.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/InputDrive.hh b/include/sta/InputDrive.hh index fec1a4d0..3d6ae532 100644 --- a/include/sta/InputDrive.hh +++ b/include/sta/InputDrive.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/InternalPower.hh b/include/sta/InternalPower.hh index 58168a9a..79b4115d 100644 --- a/include/sta/InternalPower.hh +++ b/include/sta/InternalPower.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Iterator.hh b/include/sta/Iterator.hh index 6ad9985e..9ddeac6a 100644 --- a/include/sta/Iterator.hh +++ b/include/sta/Iterator.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/LeakagePower.hh b/include/sta/LeakagePower.hh index 8a34747b..b255839b 100644 --- a/include/sta/LeakagePower.hh +++ b/include/sta/LeakagePower.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Liberty.hh b/include/sta/Liberty.hh index 38bcfa39..26c9e893 100644 --- a/include/sta/Liberty.hh +++ b/include/sta/Liberty.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/LibertyClass.hh b/include/sta/LibertyClass.hh index 3b0f4d5b..850e12e0 100644 --- a/include/sta/LibertyClass.hh +++ b/include/sta/LibertyClass.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/LibertyWriter.hh b/include/sta/LibertyWriter.hh index 0508a282..c9fa3bfc 100644 --- a/include/sta/LibertyWriter.hh +++ b/include/sta/LibertyWriter.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/LinearModel.hh b/include/sta/LinearModel.hh index 5976995c..de085b2c 100644 --- a/include/sta/LinearModel.hh +++ b/include/sta/LinearModel.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Machine.hh b/include/sta/Machine.hh index acb91ce3..183fe33f 100644 --- a/include/sta/Machine.hh +++ b/include/sta/Machine.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/MakeConcreteNetwork.hh b/include/sta/MakeConcreteNetwork.hh index 7f5ceea3..f8ef2414 100644 --- a/include/sta/MakeConcreteNetwork.hh +++ b/include/sta/MakeConcreteNetwork.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/MakeConcreteParasitics.hh b/include/sta/MakeConcreteParasitics.hh index 3ec769a1..343bc147 100644 --- a/include/sta/MakeConcreteParasitics.hh +++ b/include/sta/MakeConcreteParasitics.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Map.hh b/include/sta/Map.hh index 82a1c54b..450a812e 100644 --- a/include/sta/Map.hh +++ b/include/sta/Map.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/MinMax.hh b/include/sta/MinMax.hh index c24520ef..b8623654 100644 --- a/include/sta/MinMax.hh +++ b/include/sta/MinMax.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/MinMaxValues.hh b/include/sta/MinMaxValues.hh index 50d0b9eb..13fec165 100644 --- a/include/sta/MinMaxValues.hh +++ b/include/sta/MinMaxValues.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Mutex.hh b/include/sta/Mutex.hh index 06b788e9..fa98d5a0 100644 --- a/include/sta/Mutex.hh +++ b/include/sta/Mutex.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Network.hh b/include/sta/Network.hh index 7a87d3e7..750b9821 100644 --- a/include/sta/Network.hh +++ b/include/sta/Network.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/NetworkClass.hh b/include/sta/NetworkClass.hh index 1fd75778..97fc0a39 100644 --- a/include/sta/NetworkClass.hh +++ b/include/sta/NetworkClass.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/NetworkCmp.hh b/include/sta/NetworkCmp.hh index 1433aff3..ef234de1 100644 --- a/include/sta/NetworkCmp.hh +++ b/include/sta/NetworkCmp.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/NullParasitics.hh b/include/sta/NullParasitics.hh index 21331cb1..cbf4529e 100644 --- a/include/sta/NullParasitics.hh +++ b/include/sta/NullParasitics.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/ObjectId.hh b/include/sta/ObjectId.hh index 50ae502f..3694c598 100644 --- a/include/sta/ObjectId.hh +++ b/include/sta/ObjectId.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/ObjectTable.hh b/include/sta/ObjectTable.hh index 75841df2..eae030f9 100644 --- a/include/sta/ObjectTable.hh +++ b/include/sta/ObjectTable.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Parasitics.hh b/include/sta/Parasitics.hh index f7dca806..5ac6b93f 100644 --- a/include/sta/Parasitics.hh +++ b/include/sta/Parasitics.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/ParasiticsClass.hh b/include/sta/ParasiticsClass.hh index f9b20155..43abc027 100644 --- a/include/sta/ParasiticsClass.hh +++ b/include/sta/ParasiticsClass.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/ParseBus.hh b/include/sta/ParseBus.hh index 395cd1f0..ebefd23a 100644 --- a/include/sta/ParseBus.hh +++ b/include/sta/ParseBus.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Path.hh b/include/sta/Path.hh index dd5f2a6c..78bdfb1e 100644 --- a/include/sta/Path.hh +++ b/include/sta/Path.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/PathAnalysisPt.hh b/include/sta/PathAnalysisPt.hh index 34d5fc07..6ed6c1b4 100644 --- a/include/sta/PathAnalysisPt.hh +++ b/include/sta/PathAnalysisPt.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/PathEnd.hh b/include/sta/PathEnd.hh index 76063d9a..932d8eab 100644 --- a/include/sta/PathEnd.hh +++ b/include/sta/PathEnd.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/PathExpanded.hh b/include/sta/PathExpanded.hh index 93b59d9b..f62b302a 100644 --- a/include/sta/PathExpanded.hh +++ b/include/sta/PathExpanded.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/PathGroup.hh b/include/sta/PathGroup.hh index 44822c14..167c45b5 100644 --- a/include/sta/PathGroup.hh +++ b/include/sta/PathGroup.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/PathRef.hh b/include/sta/PathRef.hh index 299cd4d4..2d4a55a9 100644 --- a/include/sta/PathRef.hh +++ b/include/sta/PathRef.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/PathVertex.hh b/include/sta/PathVertex.hh index ab264d97..dd0f6f0c 100644 --- a/include/sta/PathVertex.hh +++ b/include/sta/PathVertex.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/PathVertexRep.hh b/include/sta/PathVertexRep.hh index 97dac3f2..a7dca24e 100644 --- a/include/sta/PathVertexRep.hh +++ b/include/sta/PathVertexRep.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/PatternMatch.hh b/include/sta/PatternMatch.hh index 74171caa..e266be85 100644 --- a/include/sta/PatternMatch.hh +++ b/include/sta/PatternMatch.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/PinPair.hh b/include/sta/PinPair.hh index e74a25b9..0a8c38d0 100644 --- a/include/sta/PinPair.hh +++ b/include/sta/PinPair.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/PortDelay.hh b/include/sta/PortDelay.hh index 84606e5f..7bb486e6 100644 --- a/include/sta/PortDelay.hh +++ b/include/sta/PortDelay.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/PortDirection.hh b/include/sta/PortDirection.hh index ad2e081f..dd2a81cb 100644 --- a/include/sta/PortDirection.hh +++ b/include/sta/PortDirection.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/PortExtCap.hh b/include/sta/PortExtCap.hh index d8965223..ce221edb 100644 --- a/include/sta/PortExtCap.hh +++ b/include/sta/PortExtCap.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/PowerClass.hh b/include/sta/PowerClass.hh index 57c9ad0a..63665609 100644 --- a/include/sta/PowerClass.hh +++ b/include/sta/PowerClass.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Property.hh b/include/sta/Property.hh index 68a2f273..698d1948 100644 --- a/include/sta/Property.hh +++ b/include/sta/Property.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Report.hh b/include/sta/Report.hh index 552d9fb3..8e74494d 100644 --- a/include/sta/Report.hh +++ b/include/sta/Report.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/ReportStd.hh b/include/sta/ReportStd.hh index a2352f4c..eb0ef89f 100644 --- a/include/sta/ReportStd.hh +++ b/include/sta/ReportStd.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/ReportTcl.hh b/include/sta/ReportTcl.hh index 7fd16198..b878549e 100644 --- a/include/sta/ReportTcl.hh +++ b/include/sta/ReportTcl.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/RiseFallMinMax.hh b/include/sta/RiseFallMinMax.hh index 9b7581db..11ba437e 100644 --- a/include/sta/RiseFallMinMax.hh +++ b/include/sta/RiseFallMinMax.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/RiseFallValues.hh b/include/sta/RiseFallValues.hh index d11d51c0..827bad22 100644 --- a/include/sta/RiseFallValues.hh +++ b/include/sta/RiseFallValues.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Sdc.hh b/include/sta/Sdc.hh index 1526780e..c92a1c75 100644 --- a/include/sta/Sdc.hh +++ b/include/sta/Sdc.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/SdcClass.hh b/include/sta/SdcClass.hh index 2cbfd448..c8a9460a 100644 --- a/include/sta/SdcClass.hh +++ b/include/sta/SdcClass.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/SdcCmdComment.hh b/include/sta/SdcCmdComment.hh index ac275e54..e344c840 100644 --- a/include/sta/SdcCmdComment.hh +++ b/include/sta/SdcCmdComment.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/SdcNetwork.hh b/include/sta/SdcNetwork.hh index 91f7abea..f2859f46 100644 --- a/include/sta/SdcNetwork.hh +++ b/include/sta/SdcNetwork.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Search.hh b/include/sta/Search.hh index 85a59916..dc73d6ed 100644 --- a/include/sta/Search.hh +++ b/include/sta/Search.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/SearchClass.hh b/include/sta/SearchClass.hh index 17d67618..66e82e7d 100644 --- a/include/sta/SearchClass.hh +++ b/include/sta/SearchClass.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/SearchPred.hh b/include/sta/SearchPred.hh index 3de7309a..18bac219 100644 --- a/include/sta/SearchPred.hh +++ b/include/sta/SearchPred.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Sequential.hh b/include/sta/Sequential.hh index 2e4cee4c..6f10b2cd 100644 --- a/include/sta/Sequential.hh +++ b/include/sta/Sequential.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Set.hh b/include/sta/Set.hh index a18c42ae..f3c632cd 100644 --- a/include/sta/Set.hh +++ b/include/sta/Set.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Sta.hh b/include/sta/Sta.hh index b46bd7c5..c40692cd 100644 --- a/include/sta/Sta.hh +++ b/include/sta/Sta.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/StaMain.hh b/include/sta/StaMain.hh index 4f4106cd..f576aa0a 100644 --- a/include/sta/StaMain.hh +++ b/include/sta/StaMain.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/StaState.hh b/include/sta/StaState.hh index 49d54081..9fc24a5d 100644 --- a/include/sta/StaState.hh +++ b/include/sta/StaState.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Stats.hh b/include/sta/Stats.hh index 2eb24c6e..36cf29b8 100644 --- a/include/sta/Stats.hh +++ b/include/sta/Stats.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/StringSeq.hh b/include/sta/StringSeq.hh index 24ca33ad..6188a576 100644 --- a/include/sta/StringSeq.hh +++ b/include/sta/StringSeq.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/StringSet.hh b/include/sta/StringSet.hh index 9ce73ddc..6670b3b1 100644 --- a/include/sta/StringSet.hh +++ b/include/sta/StringSet.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/StringUtil.hh b/include/sta/StringUtil.hh index 0b1e547d..9f87180f 100644 --- a/include/sta/StringUtil.hh +++ b/include/sta/StringUtil.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/TableModel.hh b/include/sta/TableModel.hh index 8015b147..cb45eb1f 100644 --- a/include/sta/TableModel.hh +++ b/include/sta/TableModel.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/TimingArc.hh b/include/sta/TimingArc.hh index 1c30b77c..acd8365f 100644 --- a/include/sta/TimingArc.hh +++ b/include/sta/TimingArc.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/TimingModel.hh b/include/sta/TimingModel.hh index 6750aa21..9819b7b2 100644 --- a/include/sta/TimingModel.hh +++ b/include/sta/TimingModel.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/TimingRole.hh b/include/sta/TimingRole.hh index be20a04a..51cbf6b7 100644 --- a/include/sta/TimingRole.hh +++ b/include/sta/TimingRole.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/TokenParser.hh b/include/sta/TokenParser.hh index 0320f386..23888477 100644 --- a/include/sta/TokenParser.hh +++ b/include/sta/TokenParser.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Transition.hh b/include/sta/Transition.hh index f4035d20..e4f3d44a 100644 --- a/include/sta/Transition.hh +++ b/include/sta/Transition.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Units.hh b/include/sta/Units.hh index d8b1b509..c9e5baa6 100644 --- a/include/sta/Units.hh +++ b/include/sta/Units.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/UnorderedMap.hh b/include/sta/UnorderedMap.hh index 5c6c9bf5..3e06c879 100644 --- a/include/sta/UnorderedMap.hh +++ b/include/sta/UnorderedMap.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/UnorderedSet.hh b/include/sta/UnorderedSet.hh index ef589088..ecb1525e 100644 --- a/include/sta/UnorderedSet.hh +++ b/include/sta/UnorderedSet.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Vector.hh b/include/sta/Vector.hh index ca0f1e0d..3d69e147 100644 --- a/include/sta/Vector.hh +++ b/include/sta/Vector.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/VerilogNamespace.hh b/include/sta/VerilogNamespace.hh index 830e11ee..13a8e3a8 100644 --- a/include/sta/VerilogNamespace.hh +++ b/include/sta/VerilogNamespace.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/VerilogReader.hh b/include/sta/VerilogReader.hh index 8429426c..7f31b353 100644 --- a/include/sta/VerilogReader.hh +++ b/include/sta/VerilogReader.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/VerilogWriter.hh b/include/sta/VerilogWriter.hh index 56a6f6b4..375f76b3 100644 --- a/include/sta/VerilogWriter.hh +++ b/include/sta/VerilogWriter.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/VertexId.hh b/include/sta/VertexId.hh index 1fa39f5b..3dffcfde 100644 --- a/include/sta/VertexId.hh +++ b/include/sta/VertexId.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/VertexVisitor.hh b/include/sta/VertexVisitor.hh index 2138543c..dfa6ef06 100644 --- a/include/sta/VertexVisitor.hh +++ b/include/sta/VertexVisitor.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/VisitPathEnds.hh b/include/sta/VisitPathEnds.hh index 92359244..b9eee013 100644 --- a/include/sta/VisitPathEnds.hh +++ b/include/sta/VisitPathEnds.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Wireload.hh b/include/sta/Wireload.hh index 629097c1..eb7d8c79 100644 --- a/include/sta/Wireload.hh +++ b/include/sta/Wireload.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/WritePathSpice.hh b/include/sta/WritePathSpice.hh index 44b5d3e9..068b96b2 100644 --- a/include/sta/WritePathSpice.hh +++ b/include/sta/WritePathSpice.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/WriteSdc.hh b/include/sta/WriteSdc.hh index c725b65d..198c15c2 100644 --- a/include/sta/WriteSdc.hh +++ b/include/sta/WriteSdc.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/include/sta/Zlib.hh b/include/sta/Zlib.hh index 9234b929..0dd14157 100644 --- a/include/sta/Zlib.hh +++ b/include/sta/Zlib.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/EquivCells.cc b/liberty/EquivCells.cc index a50493d4..84543d97 100644 --- a/liberty/EquivCells.cc +++ b/liberty/EquivCells.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/FuncExpr.cc b/liberty/FuncExpr.cc index 8e9cc9e9..894ad09f 100644 --- a/liberty/FuncExpr.cc +++ b/liberty/FuncExpr.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/InternalPower.cc b/liberty/InternalPower.cc index 1fef8e5e..96988be3 100644 --- a/liberty/InternalPower.cc +++ b/liberty/InternalPower.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/LeakagePower.cc b/liberty/LeakagePower.cc index 40014d6b..30d95166 100644 --- a/liberty/LeakagePower.cc +++ b/liberty/LeakagePower.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/Liberty.cc b/liberty/Liberty.cc index 0997e759..2ccc9826 100644 --- a/liberty/Liberty.cc +++ b/liberty/Liberty.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/LibertyBuilder.cc b/liberty/LibertyBuilder.cc index c59c013c..89a82662 100644 --- a/liberty/LibertyBuilder.cc +++ b/liberty/LibertyBuilder.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/LibertyBuilder.hh b/liberty/LibertyBuilder.hh index 87e291b8..3b4896e4 100644 --- a/liberty/LibertyBuilder.hh +++ b/liberty/LibertyBuilder.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/LibertyExpr.cc b/liberty/LibertyExpr.cc index 8c7cd407..3252212f 100644 --- a/liberty/LibertyExpr.cc +++ b/liberty/LibertyExpr.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/LibertyExpr.hh b/liberty/LibertyExpr.hh index 2b2cacb8..0bd84c7c 100644 --- a/liberty/LibertyExpr.hh +++ b/liberty/LibertyExpr.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/LibertyExprLex.ll b/liberty/LibertyExprLex.ll index 836a731a..3784e134 100644 --- a/liberty/LibertyExprLex.ll +++ b/liberty/LibertyExprLex.ll @@ -1,7 +1,7 @@ %{ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/LibertyExprParse.yy b/liberty/LibertyExprParse.yy index f9847b6d..c2b58222 100644 --- a/liberty/LibertyExprParse.yy +++ b/liberty/LibertyExprParse.yy @@ -1,7 +1,7 @@ %{ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/LibertyExprPvt.hh b/liberty/LibertyExprPvt.hh index 14420e4f..e9a05bd3 100644 --- a/liberty/LibertyExprPvt.hh +++ b/liberty/LibertyExprPvt.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/LibertyExt.cc b/liberty/LibertyExt.cc index 86a13418..dc928bff 100644 --- a/liberty/LibertyExt.cc +++ b/liberty/LibertyExt.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/LibertyLex.ll b/liberty/LibertyLex.ll index 773688a3..a69d736a 100644 --- a/liberty/LibertyLex.ll +++ b/liberty/LibertyLex.ll @@ -1,6 +1,6 @@ %{ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/LibertyParse.yy b/liberty/LibertyParse.yy index c683340d..1424fa29 100644 --- a/liberty/LibertyParse.yy +++ b/liberty/LibertyParse.yy @@ -1,6 +1,6 @@ %{ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/LibertyParser.cc b/liberty/LibertyParser.cc index 3a49c186..3c60cfcc 100644 --- a/liberty/LibertyParser.cc +++ b/liberty/LibertyParser.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/LibertyParser.hh b/liberty/LibertyParser.hh index fcfd62bd..bd3a8804 100644 --- a/liberty/LibertyParser.hh +++ b/liberty/LibertyParser.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/LibertyReader.cc b/liberty/LibertyReader.cc index a636349a..f26d7076 100644 --- a/liberty/LibertyReader.cc +++ b/liberty/LibertyReader.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/LibertyReader.hh b/liberty/LibertyReader.hh index b839b49e..f83340bc 100644 --- a/liberty/LibertyReader.hh +++ b/liberty/LibertyReader.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/LibertyReaderPvt.hh b/liberty/LibertyReaderPvt.hh index 6c7ea2d1..6a088619 100644 --- a/liberty/LibertyReaderPvt.hh +++ b/liberty/LibertyReaderPvt.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/LibertyWriter.cc b/liberty/LibertyWriter.cc index 224ff379..5a94f482 100644 --- a/liberty/LibertyWriter.cc +++ b/liberty/LibertyWriter.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/LinearModel.cc b/liberty/LinearModel.cc index cba74116..6abebfcf 100644 --- a/liberty/LinearModel.cc +++ b/liberty/LinearModel.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/Sequential.cc b/liberty/Sequential.cc index 5f95bbd9..3348789f 100644 --- a/liberty/Sequential.cc +++ b/liberty/Sequential.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/TableModel.cc b/liberty/TableModel.cc index 51df5ac1..1f4bbded 100644 --- a/liberty/TableModel.cc +++ b/liberty/TableModel.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/TimingArc.cc b/liberty/TimingArc.cc index 17ad731b..29be2abf 100644 --- a/liberty/TimingArc.cc +++ b/liberty/TimingArc.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/TimingModel.cc b/liberty/TimingModel.cc index efb73cf6..9436b47b 100644 --- a/liberty/TimingModel.cc +++ b/liberty/TimingModel.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/TimingRole.cc b/liberty/TimingRole.cc index ae37ce8c..221f7305 100644 --- a/liberty/TimingRole.cc +++ b/liberty/TimingRole.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/Units.cc b/liberty/Units.cc index c21f24f1..9b24173c 100644 --- a/liberty/Units.cc +++ b/liberty/Units.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/liberty/Wireload.cc b/liberty/Wireload.cc index e9abfe9c..a501af03 100644 --- a/liberty/Wireload.cc +++ b/liberty/Wireload.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/network/ConcreteLibrary.cc b/network/ConcreteLibrary.cc index 154efaa5..86627833 100644 --- a/network/ConcreteLibrary.cc +++ b/network/ConcreteLibrary.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/network/ConcreteNetwork.cc b/network/ConcreteNetwork.cc index 847333e8..24084ef5 100644 --- a/network/ConcreteNetwork.cc +++ b/network/ConcreteNetwork.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/network/HpinDrvrLoad.cc b/network/HpinDrvrLoad.cc index e68ed7d9..5a9126d9 100644 --- a/network/HpinDrvrLoad.cc +++ b/network/HpinDrvrLoad.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/network/Network.cc b/network/Network.cc index 4180072d..09125bc0 100644 --- a/network/Network.cc +++ b/network/Network.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/network/NetworkCmp.cc b/network/NetworkCmp.cc index 650963e8..16378cbf 100644 --- a/network/NetworkCmp.cc +++ b/network/NetworkCmp.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/network/ParseBus.cc b/network/ParseBus.cc index f7da16e5..0df07559 100644 --- a/network/ParseBus.cc +++ b/network/ParseBus.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/network/PortDirection.cc b/network/PortDirection.cc index cc504cd2..7d82e793 100644 --- a/network/PortDirection.cc +++ b/network/PortDirection.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/network/SdcNetwork.cc b/network/SdcNetwork.cc index f29db85a..e5eb36bb 100644 --- a/network/SdcNetwork.cc +++ b/network/SdcNetwork.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/network/VerilogNamespace.cc b/network/VerilogNamespace.cc index 8486e40a..48d182a7 100644 --- a/network/VerilogNamespace.cc +++ b/network/VerilogNamespace.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/parasitics/ConcreteParasitics.cc b/parasitics/ConcreteParasitics.cc index 4de6827f..eb2afef0 100644 --- a/parasitics/ConcreteParasitics.cc +++ b/parasitics/ConcreteParasitics.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/parasitics/ConcreteParasitics.hh b/parasitics/ConcreteParasitics.hh index c4323c34..a09dc3ff 100644 --- a/parasitics/ConcreteParasitics.hh +++ b/parasitics/ConcreteParasitics.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/parasitics/ConcreteParasiticsPvt.hh b/parasitics/ConcreteParasiticsPvt.hh index 0444b0f6..8df141d4 100644 --- a/parasitics/ConcreteParasiticsPvt.hh +++ b/parasitics/ConcreteParasiticsPvt.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/parasitics/EstimateParasitics.cc b/parasitics/EstimateParasitics.cc index 9c06e46a..f4a1f670 100644 --- a/parasitics/EstimateParasitics.cc +++ b/parasitics/EstimateParasitics.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/parasitics/EstimateParasitics.hh b/parasitics/EstimateParasitics.hh index aab65039..e767c499 100644 --- a/parasitics/EstimateParasitics.hh +++ b/parasitics/EstimateParasitics.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/parasitics/NullParasitics.cc b/parasitics/NullParasitics.cc index 351bea3b..19fc9e90 100644 --- a/parasitics/NullParasitics.cc +++ b/parasitics/NullParasitics.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/parasitics/Parasitics.cc b/parasitics/Parasitics.cc index 8f40b07b..0ab4a40e 100644 --- a/parasitics/Parasitics.cc +++ b/parasitics/Parasitics.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/parasitics/Parasitics.i b/parasitics/Parasitics.i index b183dbd1..25455c15 100644 --- a/parasitics/Parasitics.i +++ b/parasitics/Parasitics.i @@ -3,7 +3,7 @@ %{ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/parasitics/Parasitics.tcl b/parasitics/Parasitics.tcl index 6d78c35e..efe40863 100644 --- a/parasitics/Parasitics.tcl +++ b/parasitics/Parasitics.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/parasitics/ReduceParasitics.cc b/parasitics/ReduceParasitics.cc index be1b3093..a0389fe3 100644 --- a/parasitics/ReduceParasitics.cc +++ b/parasitics/ReduceParasitics.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/parasitics/ReduceParasitics.hh b/parasitics/ReduceParasitics.hh index 105e34b7..8b84947e 100644 --- a/parasitics/ReduceParasitics.hh +++ b/parasitics/ReduceParasitics.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/parasitics/ReportParasiticAnnotation.cc b/parasitics/ReportParasiticAnnotation.cc index 6d307b56..f1ad6f8e 100644 --- a/parasitics/ReportParasiticAnnotation.cc +++ b/parasitics/ReportParasiticAnnotation.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/parasitics/ReportParasiticAnnotation.hh b/parasitics/ReportParasiticAnnotation.hh index a31034b6..1607a9bb 100644 --- a/parasitics/ReportParasiticAnnotation.hh +++ b/parasitics/ReportParasiticAnnotation.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/parasitics/SpefLex.ll b/parasitics/SpefLex.ll index cdcb764a..2fd939c1 100644 --- a/parasitics/SpefLex.ll +++ b/parasitics/SpefLex.ll @@ -1,7 +1,7 @@ %{ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/parasitics/SpefNamespace.cc b/parasitics/SpefNamespace.cc index 5164be65..b58eb7e8 100644 --- a/parasitics/SpefNamespace.cc +++ b/parasitics/SpefNamespace.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/parasitics/SpefNamespace.hh b/parasitics/SpefNamespace.hh index d21085f0..77bff0c9 100644 --- a/parasitics/SpefNamespace.hh +++ b/parasitics/SpefNamespace.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/parasitics/SpefParse.yy b/parasitics/SpefParse.yy index 10048c2b..c61a8a7e 100755 --- a/parasitics/SpefParse.yy +++ b/parasitics/SpefParse.yy @@ -1,7 +1,7 @@ %{ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/parasitics/SpefReader.cc b/parasitics/SpefReader.cc index 11b2d464..f79b3707 100644 --- a/parasitics/SpefReader.cc +++ b/parasitics/SpefReader.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/parasitics/SpefReader.hh b/parasitics/SpefReader.hh index 39a50536..e29c5d63 100644 --- a/parasitics/SpefReader.hh +++ b/parasitics/SpefReader.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/parasitics/SpefReaderPvt.hh b/parasitics/SpefReaderPvt.hh index 7a23ff2e..f7f1d7c5 100644 --- a/parasitics/SpefReaderPvt.hh +++ b/parasitics/SpefReaderPvt.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/power/Power.cc b/power/Power.cc index 88099bc9..f46b3f2a 100644 --- a/power/Power.cc +++ b/power/Power.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/power/Power.hh b/power/Power.hh index f3075fb8..81c13de1 100644 --- a/power/Power.hh +++ b/power/Power.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/power/Power.i b/power/Power.i index 962d7313..aaf3ff23 100644 --- a/power/Power.i +++ b/power/Power.i @@ -3,7 +3,7 @@ %{ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/power/Power.tcl b/power/Power.tcl index b8384d42..c5122bc6 100644 --- a/power/Power.tcl +++ b/power/Power.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/power/ReadVcdActivities.cc b/power/ReadVcdActivities.cc index 66d2a39b..59a4c91a 100644 --- a/power/ReadVcdActivities.cc +++ b/power/ReadVcdActivities.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/power/ReadVcdActivities.hh b/power/ReadVcdActivities.hh index 5c7c26ac..c7a2a662 100644 --- a/power/ReadVcdActivities.hh +++ b/power/ReadVcdActivities.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/power/Vcd.cc b/power/Vcd.cc index 850e4f99..b04ebc8d 100644 --- a/power/Vcd.cc +++ b/power/Vcd.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/power/Vcd.hh b/power/Vcd.hh index b61d3935..6c62eca6 100644 --- a/power/Vcd.hh +++ b/power/Vcd.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/power/VcdReader.cc b/power/VcdReader.cc index 70ce8a99..b917f3e1 100644 --- a/power/VcdReader.cc +++ b/power/VcdReader.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/power/VcdReader.hh b/power/VcdReader.hh index 13db5386..63299ac3 100644 --- a/power/VcdReader.hh +++ b/power/VcdReader.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdc/Clock.cc b/sdc/Clock.cc index 5e87df91..f6c322a3 100644 --- a/sdc/Clock.cc +++ b/sdc/Clock.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdc/ClockGatingCheck.cc b/sdc/ClockGatingCheck.cc index adc0c180..9f003bc2 100644 --- a/sdc/ClockGatingCheck.cc +++ b/sdc/ClockGatingCheck.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdc/ClockGroups.cc b/sdc/ClockGroups.cc index c2656f6e..97c6a9ff 100644 --- a/sdc/ClockGroups.cc +++ b/sdc/ClockGroups.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdc/ClockInsertion.cc b/sdc/ClockInsertion.cc index 4b38107c..78e57224 100644 --- a/sdc/ClockInsertion.cc +++ b/sdc/ClockInsertion.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdc/ClockLatency.cc b/sdc/ClockLatency.cc index a8f4ffcd..a2e8bbe8 100644 --- a/sdc/ClockLatency.cc +++ b/sdc/ClockLatency.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdc/CycleAccting.cc b/sdc/CycleAccting.cc index f515fb28..9de3e939 100644 --- a/sdc/CycleAccting.cc +++ b/sdc/CycleAccting.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdc/DataCheck.cc b/sdc/DataCheck.cc index 83afc8b5..6e1ca132 100644 --- a/sdc/DataCheck.cc +++ b/sdc/DataCheck.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdc/DeratingFactors.cc b/sdc/DeratingFactors.cc index 29b54223..843f5655 100644 --- a/sdc/DeratingFactors.cc +++ b/sdc/DeratingFactors.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdc/DisabledPorts.cc b/sdc/DisabledPorts.cc index 7b81a8e7..c2e50d0b 100644 --- a/sdc/DisabledPorts.cc +++ b/sdc/DisabledPorts.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdc/ExceptionPath.cc b/sdc/ExceptionPath.cc index 9cf06ec9..204a75a3 100644 --- a/sdc/ExceptionPath.cc +++ b/sdc/ExceptionPath.cc @@ -1,6 +1,6 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdc/InputDrive.cc b/sdc/InputDrive.cc index 6584e653..f17f8c00 100644 --- a/sdc/InputDrive.cc +++ b/sdc/InputDrive.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdc/PinPair.cc b/sdc/PinPair.cc index 772f463e..586bb3aa 100644 --- a/sdc/PinPair.cc +++ b/sdc/PinPair.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdc/PortDelay.cc b/sdc/PortDelay.cc index 7fdd6ca6..cabd7d0a 100644 --- a/sdc/PortDelay.cc +++ b/sdc/PortDelay.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdc/PortExtCap.cc b/sdc/PortExtCap.cc index 7456dcf9..ca1663e8 100644 --- a/sdc/PortExtCap.cc +++ b/sdc/PortExtCap.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdc/Sdc.cc b/sdc/Sdc.cc index c0bd472d..055a2050 100644 --- a/sdc/Sdc.cc +++ b/sdc/Sdc.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdc/SdcCmdComment.cc b/sdc/SdcCmdComment.cc index f6ab6178..41aa411a 100644 --- a/sdc/SdcCmdComment.cc +++ b/sdc/SdcCmdComment.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdc/SdcGraph.cc b/sdc/SdcGraph.cc index 1f49312e..1e5a2bbb 100644 --- a/sdc/SdcGraph.cc +++ b/sdc/SdcGraph.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdc/WriteSdc.cc b/sdc/WriteSdc.cc index c5e07bdd..5fd36b28 100644 --- a/sdc/WriteSdc.cc +++ b/sdc/WriteSdc.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdc/WriteSdcPvt.hh b/sdc/WriteSdcPvt.hh index 5e07de2b..cb4768fd 100644 --- a/sdc/WriteSdcPvt.hh +++ b/sdc/WriteSdcPvt.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdf/ReportAnnotation.cc b/sdf/ReportAnnotation.cc index b99ad936..f51858ba 100644 --- a/sdf/ReportAnnotation.cc +++ b/sdf/ReportAnnotation.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdf/ReportAnnotation.hh b/sdf/ReportAnnotation.hh index 3ba54db2..815b0d3e 100644 --- a/sdf/ReportAnnotation.hh +++ b/sdf/ReportAnnotation.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdf/Sdf.i b/sdf/Sdf.i index aa44631c..d2fa8905 100644 --- a/sdf/Sdf.i +++ b/sdf/Sdf.i @@ -3,7 +3,7 @@ %{ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdf/Sdf.tcl b/sdf/Sdf.tcl index 0d439579..c9bc2057 100644 --- a/sdf/Sdf.tcl +++ b/sdf/Sdf.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/sdf/SdfLex.ll b/sdf/SdfLex.ll index 26c965bd..a414000b 100644 --- a/sdf/SdfLex.ll +++ b/sdf/SdfLex.ll @@ -1,7 +1,7 @@ %{ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdf/SdfParse.yy b/sdf/SdfParse.yy index 13d52a4b..9f9ae445 100644 --- a/sdf/SdfParse.yy +++ b/sdf/SdfParse.yy @@ -1,7 +1,7 @@ %{ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdf/SdfReader.cc b/sdf/SdfReader.cc index b5e24016..7dff5edd 100644 --- a/sdf/SdfReader.cc +++ b/sdf/SdfReader.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdf/SdfReader.hh b/sdf/SdfReader.hh index 3ab46b62..c270ca9e 100644 --- a/sdf/SdfReader.hh +++ b/sdf/SdfReader.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdf/SdfReaderPvt.hh b/sdf/SdfReaderPvt.hh index 00c2f560..c9aa5210 100644 --- a/sdf/SdfReaderPvt.hh +++ b/sdf/SdfReaderPvt.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdf/SdfWriter.cc b/sdf/SdfWriter.cc index 506a3a86..1fa32bab 100644 --- a/sdf/SdfWriter.cc +++ b/sdf/SdfWriter.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/sdf/SdfWriter.hh b/sdf/SdfWriter.hh index 0451c894..f3d23c08 100644 --- a/sdf/SdfWriter.hh +++ b/sdf/SdfWriter.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/Bfs.cc b/search/Bfs.cc index d634cf2f..7971b975 100644 --- a/search/Bfs.cc +++ b/search/Bfs.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/CheckCapacitanceLimits.cc b/search/CheckCapacitanceLimits.cc index 0acc5cec..c980e025 100644 --- a/search/CheckCapacitanceLimits.cc +++ b/search/CheckCapacitanceLimits.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/CheckCapacitanceLimits.hh b/search/CheckCapacitanceLimits.hh index 8f0f5c7d..98f2382e 100644 --- a/search/CheckCapacitanceLimits.hh +++ b/search/CheckCapacitanceLimits.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/CheckFanoutLimits.cc b/search/CheckFanoutLimits.cc index fe6ad0ae..e11843cd 100644 --- a/search/CheckFanoutLimits.cc +++ b/search/CheckFanoutLimits.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/CheckFanoutLimits.hh b/search/CheckFanoutLimits.hh index 2d7a9715..8c3e6652 100644 --- a/search/CheckFanoutLimits.hh +++ b/search/CheckFanoutLimits.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/CheckMaxSkews.cc b/search/CheckMaxSkews.cc index ced6bcd8..258738a4 100644 --- a/search/CheckMaxSkews.cc +++ b/search/CheckMaxSkews.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/CheckMaxSkews.hh b/search/CheckMaxSkews.hh index 7a8902b0..c5f548d5 100644 --- a/search/CheckMaxSkews.hh +++ b/search/CheckMaxSkews.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/CheckMinPeriods.cc b/search/CheckMinPeriods.cc index 93edbb5d..b7e8bcd4 100644 --- a/search/CheckMinPeriods.cc +++ b/search/CheckMinPeriods.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/CheckMinPeriods.hh b/search/CheckMinPeriods.hh index 505c27c7..8da1c5c6 100644 --- a/search/CheckMinPeriods.hh +++ b/search/CheckMinPeriods.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/CheckMinPulseWidths.cc b/search/CheckMinPulseWidths.cc index 830612ca..ece0222f 100644 --- a/search/CheckMinPulseWidths.cc +++ b/search/CheckMinPulseWidths.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/CheckMinPulseWidths.hh b/search/CheckMinPulseWidths.hh index da5adaac..c2433b5b 100644 --- a/search/CheckMinPulseWidths.hh +++ b/search/CheckMinPulseWidths.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/CheckSlewLimits.cc b/search/CheckSlewLimits.cc index f3e5e0cf..656b9a72 100644 --- a/search/CheckSlewLimits.cc +++ b/search/CheckSlewLimits.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/CheckSlewLimits.hh b/search/CheckSlewLimits.hh index bb431e3e..9e70d69b 100644 --- a/search/CheckSlewLimits.hh +++ b/search/CheckSlewLimits.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/CheckTiming.cc b/search/CheckTiming.cc index d18b60a7..c658f54a 100644 --- a/search/CheckTiming.cc +++ b/search/CheckTiming.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/CheckTiming.hh b/search/CheckTiming.hh index 6c7aa99a..6603e87d 100644 --- a/search/CheckTiming.hh +++ b/search/CheckTiming.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/ClkInfo.cc b/search/ClkInfo.cc index 6ab578ad..0bc2d728 100644 --- a/search/ClkInfo.cc +++ b/search/ClkInfo.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/ClkInfo.hh b/search/ClkInfo.hh index 3e3830e2..2e4c198e 100644 --- a/search/ClkInfo.hh +++ b/search/ClkInfo.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/ClkNetwork.cc b/search/ClkNetwork.cc index 080230c9..fee8131e 100644 --- a/search/ClkNetwork.cc +++ b/search/ClkNetwork.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/ClkSkew.cc b/search/ClkSkew.cc index 217b536c..971e1ea1 100644 --- a/search/ClkSkew.cc +++ b/search/ClkSkew.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/ClkSkew.hh b/search/ClkSkew.hh index b7c7a290..97497436 100644 --- a/search/ClkSkew.hh +++ b/search/ClkSkew.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/Corner.cc b/search/Corner.cc index 072ec314..f6dc49ad 100644 --- a/search/Corner.cc +++ b/search/Corner.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/Crpr.cc b/search/Crpr.cc index effa5b1d..af1b14e8 100644 --- a/search/Crpr.cc +++ b/search/Crpr.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/Crpr.hh b/search/Crpr.hh index d1afe46a..62999a33 100644 --- a/search/Crpr.hh +++ b/search/Crpr.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/FindRegister.cc b/search/FindRegister.cc index d5fd65d6..547474a4 100644 --- a/search/FindRegister.cc +++ b/search/FindRegister.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/FindRegister.hh b/search/FindRegister.hh index 90bd2673..48dc5474 100644 --- a/search/FindRegister.hh +++ b/search/FindRegister.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/GatedClk.cc b/search/GatedClk.cc index 27172167..6fbaac7a 100644 --- a/search/GatedClk.cc +++ b/search/GatedClk.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/GatedClk.hh b/search/GatedClk.hh index 487e725a..55767cac 100644 --- a/search/GatedClk.hh +++ b/search/GatedClk.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/Genclks.cc b/search/Genclks.cc index 93341238..c2a8a9a1 100644 --- a/search/Genclks.cc +++ b/search/Genclks.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/Genclks.hh b/search/Genclks.hh index cd23cde9..2f9d6df0 100644 --- a/search/Genclks.hh +++ b/search/Genclks.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/Latches.cc b/search/Latches.cc index 2f2fafb1..bf1a8260 100644 --- a/search/Latches.cc +++ b/search/Latches.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/Latches.hh b/search/Latches.hh index a125cfe1..69dacaa9 100644 --- a/search/Latches.hh +++ b/search/Latches.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/Levelize.cc b/search/Levelize.cc index 07988367..96536f67 100644 --- a/search/Levelize.cc +++ b/search/Levelize.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/Levelize.hh b/search/Levelize.hh index b04702fa..03ae3b4c 100644 --- a/search/Levelize.hh +++ b/search/Levelize.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/MakeTimingModel.cc b/search/MakeTimingModel.cc index 052a4571..2f6eee93 100644 --- a/search/MakeTimingModel.cc +++ b/search/MakeTimingModel.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/MakeTimingModel.hh b/search/MakeTimingModel.hh index 1b6e6361..60b6662e 100644 --- a/search/MakeTimingModel.hh +++ b/search/MakeTimingModel.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/MakeTimingModelPvt.hh b/search/MakeTimingModelPvt.hh index bd0c4064..55689296 100644 --- a/search/MakeTimingModelPvt.hh +++ b/search/MakeTimingModelPvt.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/Path.cc b/search/Path.cc index fa3756e6..c7a91fc9 100644 --- a/search/Path.cc +++ b/search/Path.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/PathAnalysisPt.cc b/search/PathAnalysisPt.cc index 3b25f68a..fdafdf84 100644 --- a/search/PathAnalysisPt.cc +++ b/search/PathAnalysisPt.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/PathEnd.cc b/search/PathEnd.cc index 29436928..2f7f9292 100644 --- a/search/PathEnd.cc +++ b/search/PathEnd.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/PathEnum.cc b/search/PathEnum.cc index 8d21f399..21d8dcf6 100644 --- a/search/PathEnum.cc +++ b/search/PathEnum.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/PathEnum.hh b/search/PathEnum.hh index cd8d4c3d..0c777260 100644 --- a/search/PathEnum.hh +++ b/search/PathEnum.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/PathEnumed.cc b/search/PathEnumed.cc index dcfd2d76..1283b15a 100644 --- a/search/PathEnumed.cc +++ b/search/PathEnumed.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/PathEnumed.hh b/search/PathEnumed.hh index 7461ab99..1203bc28 100644 --- a/search/PathEnumed.hh +++ b/search/PathEnumed.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/PathExpanded.cc b/search/PathExpanded.cc index 790ea1db..972e3bfa 100644 --- a/search/PathExpanded.cc +++ b/search/PathExpanded.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/PathGroup.cc b/search/PathGroup.cc index 51096246..8e08d9e4 100644 --- a/search/PathGroup.cc +++ b/search/PathGroup.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/PathRef.cc b/search/PathRef.cc index bef16c09..386df1ed 100644 --- a/search/PathRef.cc +++ b/search/PathRef.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/PathVertex.cc b/search/PathVertex.cc index 44af7515..85b0f186 100644 --- a/search/PathVertex.cc +++ b/search/PathVertex.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/PathVertexRep.cc b/search/PathVertexRep.cc index 67aa5368..18e4098d 100644 --- a/search/PathVertexRep.cc +++ b/search/PathVertexRep.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/Property.cc b/search/Property.cc index f67764a8..42b5ed87 100644 --- a/search/Property.cc +++ b/search/Property.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/ReportPath.cc b/search/ReportPath.cc index adbb8a0b..aef52398 100644 --- a/search/ReportPath.cc +++ b/search/ReportPath.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/ReportPath.hh b/search/ReportPath.hh index 389513ce..57fb3041 100644 --- a/search/ReportPath.hh +++ b/search/ReportPath.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/Search.cc b/search/Search.cc index b45d9639..6dafbb39 100644 --- a/search/Search.cc +++ b/search/Search.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/SearchPred.cc b/search/SearchPred.cc index dcfe00ce..8fcb8fac 100644 --- a/search/SearchPred.cc +++ b/search/SearchPred.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/Sim.cc b/search/Sim.cc index d1b9ff48..30db0f0c 100644 --- a/search/Sim.cc +++ b/search/Sim.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/Sim.hh b/search/Sim.hh index 4f0a6690..25a808f1 100644 --- a/search/Sim.hh +++ b/search/Sim.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/Sta.cc b/search/Sta.cc index af821c33..bb8c2100 100644 --- a/search/Sta.cc +++ b/search/Sta.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/StaState.cc b/search/StaState.cc index dba67922..249d2bd9 100644 --- a/search/StaState.cc +++ b/search/StaState.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/Tag.cc b/search/Tag.cc index a8ad24ab..b50837f4 100644 --- a/search/Tag.cc +++ b/search/Tag.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/Tag.hh b/search/Tag.hh index 28225c1c..55a27103 100644 --- a/search/Tag.hh +++ b/search/Tag.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/TagGroup.cc b/search/TagGroup.cc index cc4c16ff..e922d05c 100644 --- a/search/TagGroup.cc +++ b/search/TagGroup.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/TagGroup.hh b/search/TagGroup.hh index 790e7129..ca923bfa 100644 --- a/search/TagGroup.hh +++ b/search/TagGroup.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/VertexVisitor.cc b/search/VertexVisitor.cc index ca68e977..fc201706 100644 --- a/search/VertexVisitor.cc +++ b/search/VertexVisitor.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/VisitPathEnds.cc b/search/VisitPathEnds.cc index dbe9a8ce..d72d3972 100644 --- a/search/VisitPathEnds.cc +++ b/search/VisitPathEnds.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/VisitPathGroupVertices.cc b/search/VisitPathGroupVertices.cc index f003690f..2b2ebdaa 100644 --- a/search/VisitPathGroupVertices.cc +++ b/search/VisitPathGroupVertices.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/VisitPathGroupVertices.hh b/search/VisitPathGroupVertices.hh index 0dc8c914..bf93cea4 100644 --- a/search/VisitPathGroupVertices.hh +++ b/search/VisitPathGroupVertices.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/WorstSlack.cc b/search/WorstSlack.cc index 2ab655a5..611096ac 100644 --- a/search/WorstSlack.cc +++ b/search/WorstSlack.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/WorstSlack.hh b/search/WorstSlack.hh index 1c257ed7..ebe5729c 100644 --- a/search/WorstSlack.hh +++ b/search/WorstSlack.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/search/WritePathSpice.cc b/search/WritePathSpice.cc index c34a4603..d0d7b1fb 100644 --- a/search/WritePathSpice.cc +++ b/search/WritePathSpice.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/tcl/CmdArgs.tcl b/tcl/CmdArgs.tcl index be902e56..74027c9f 100644 --- a/tcl/CmdArgs.tcl +++ b/tcl/CmdArgs.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/tcl/CmdUtil.tcl b/tcl/CmdUtil.tcl index 2a6edbd0..324b2ead 100644 --- a/tcl/CmdUtil.tcl +++ b/tcl/CmdUtil.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/tcl/Exception.i b/tcl/Exception.i index de5d9d68..1f4cfdc3 100644 --- a/tcl/Exception.i +++ b/tcl/Exception.i @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/tcl/Graph.tcl b/tcl/Graph.tcl index 6b9e7dda..72c649c0 100644 --- a/tcl/Graph.tcl +++ b/tcl/Graph.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/tcl/Init.tcl b/tcl/Init.tcl index 9f9927ec..4c2df17c 100644 --- a/tcl/Init.tcl +++ b/tcl/Init.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/tcl/Liberty.tcl b/tcl/Liberty.tcl index acc21ed7..7a0426fa 100644 --- a/tcl/Liberty.tcl +++ b/tcl/Liberty.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/tcl/Link.tcl b/tcl/Link.tcl index 2b62da02..39912ddf 100644 --- a/tcl/Link.tcl +++ b/tcl/Link.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/tcl/Network.tcl b/tcl/Network.tcl index 0711749f..887c653d 100644 --- a/tcl/Network.tcl +++ b/tcl/Network.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/tcl/NetworkEdit.i b/tcl/NetworkEdit.i index 0892ba71..1b3e6673 100644 --- a/tcl/NetworkEdit.i +++ b/tcl/NetworkEdit.i @@ -3,7 +3,7 @@ %{ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/tcl/NetworkEdit.tcl b/tcl/NetworkEdit.tcl index a6672edc..4256aaf9 100644 --- a/tcl/NetworkEdit.tcl +++ b/tcl/NetworkEdit.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/tcl/Property.tcl b/tcl/Property.tcl index 3eec80ae..68660784 100644 --- a/tcl/Property.tcl +++ b/tcl/Property.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/tcl/Sdc.tcl b/tcl/Sdc.tcl index 6d12d623..25b4d142 100644 --- a/tcl/Sdc.tcl +++ b/tcl/Sdc.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/tcl/Search.tcl b/tcl/Search.tcl index 150b576a..4ad74c2f 100644 --- a/tcl/Search.tcl +++ b/tcl/Search.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/tcl/Splash.tcl b/tcl/Splash.tcl index 398e25de..5f3f1b3f 100644 --- a/tcl/Splash.tcl +++ b/tcl/Splash.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -25,7 +25,7 @@ namespace eval sta { define_cmd_args show_splash {} proc show_splash {} { - report_line "OpenSTA [sta::version] [string range [sta::git_sha1] 0 9] Copyright (c) 2023, Parallax Software, Inc. + report_line "OpenSTA [sta::version] [string range [sta::git_sha1] 0 9] Copyright (c) 2024, Parallax Software, Inc. License GPLv3: GNU GPL version 3 This is free software, and you are free to change and redistribute it diff --git a/tcl/Sta.tcl b/tcl/Sta.tcl index f24a987e..e377c259 100644 --- a/tcl/Sta.tcl +++ b/tcl/Sta.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/tcl/StaTcl.i b/tcl/StaTcl.i index 1f245d0b..d2b6c45d 100644 --- a/tcl/StaTcl.i +++ b/tcl/StaTcl.i @@ -3,7 +3,7 @@ %{ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/tcl/Util.tcl b/tcl/Util.tcl index 6b0f46f1..23b3ba00 100644 --- a/tcl/Util.tcl +++ b/tcl/Util.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/tcl/Variables.tcl b/tcl/Variables.tcl index b464b7c2..0d054dbf 100644 --- a/tcl/Variables.tcl +++ b/tcl/Variables.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/tcl/WritePathSpice.tcl b/tcl/WritePathSpice.tcl index 99d14566..8739035c 100644 --- a/tcl/WritePathSpice.tcl +++ b/tcl/WritePathSpice.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/test/regression b/test/regression index 0f5aa924..f7731a61 100755 --- a/test/regression +++ b/test/regression @@ -3,7 +3,7 @@ exec tclsh $0 ${1+"$@"} # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/test/regression.tcl b/test/regression.tcl index 72ad544a..3814801f 100755 --- a/test/regression.tcl +++ b/test/regression.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/test/regression_vars.tcl b/test/regression_vars.tcl index 23a9b812..99d6f545 100644 --- a/test/regression_vars.tcl +++ b/test/regression_vars.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/test/save_ok b/test/save_ok index 7f2946c0..19af6802 100755 --- a/test/save_ok +++ b/test/save_ok @@ -3,7 +3,7 @@ exec tclsh $0 ${1+"$@"} # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/util/Debug.cc b/util/Debug.cc index 35c01d02..656d6972 100644 --- a/util/Debug.cc +++ b/util/Debug.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/Error.cc b/util/Error.cc index 2e8b37f1..f1738904 100644 --- a/util/Error.cc +++ b/util/Error.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/Fuzzy.cc b/util/Fuzzy.cc index a28409b3..1a5f3a13 100644 --- a/util/Fuzzy.cc +++ b/util/Fuzzy.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/Hash.cc b/util/Hash.cc index 820316c9..45bb58d8 100644 --- a/util/Hash.cc +++ b/util/Hash.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/Machine.cc b/util/Machine.cc index 1e3a5074..785d6900 100644 --- a/util/Machine.cc +++ b/util/Machine.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/MachineApple.cc b/util/MachineApple.cc index fb629310..d06145ff 100644 --- a/util/MachineApple.cc +++ b/util/MachineApple.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/MachineLinux.cc b/util/MachineLinux.cc index 87944102..26fc6d12 100644 --- a/util/MachineLinux.cc +++ b/util/MachineLinux.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/MachineUnknown.cc b/util/MachineUnknown.cc index 7f8bcded..4b8f1415 100644 --- a/util/MachineUnknown.cc +++ b/util/MachineUnknown.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/MachineWin32.cc b/util/MachineWin32.cc index a2ff5fc4..ee90f3ae 100644 --- a/util/MachineWin32.cc +++ b/util/MachineWin32.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/MinMax.cc b/util/MinMax.cc index ade8aa94..7631cf9c 100644 --- a/util/MinMax.cc +++ b/util/MinMax.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/PatternMatch.cc b/util/PatternMatch.cc index 1d077cfd..b8faf6c4 100644 --- a/util/PatternMatch.cc +++ b/util/PatternMatch.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/Report.cc b/util/Report.cc index 3e040c91..3b203ad6 100644 --- a/util/Report.cc +++ b/util/Report.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/ReportStd.cc b/util/ReportStd.cc index e5d5fa51..f929249a 100644 --- a/util/ReportStd.cc +++ b/util/ReportStd.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/ReportTcl.cc b/util/ReportTcl.cc index ba1cec19..83173070 100644 --- a/util/ReportTcl.cc +++ b/util/ReportTcl.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/RiseFallMinMax.cc b/util/RiseFallMinMax.cc index 3f26be80..6c534b30 100644 --- a/util/RiseFallMinMax.cc +++ b/util/RiseFallMinMax.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/RiseFallValues.cc b/util/RiseFallValues.cc index 00de08fd..8f15462c 100644 --- a/util/RiseFallValues.cc +++ b/util/RiseFallValues.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/Stats.cc b/util/Stats.cc index 87d96afe..94e2dd54 100644 --- a/util/Stats.cc +++ b/util/Stats.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/StringSeq.cc b/util/StringSeq.cc index 6b006941..f9f167c0 100644 --- a/util/StringSeq.cc +++ b/util/StringSeq.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/StringSet.cc b/util/StringSet.cc index 134ef9b3..57d09bfe 100644 --- a/util/StringSet.cc +++ b/util/StringSet.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/StringUtil.cc b/util/StringUtil.cc index 6f70b2f8..bafd9420 100644 --- a/util/StringUtil.cc +++ b/util/StringUtil.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/TokenParser.cc b/util/TokenParser.cc index cb089431..bb659553 100644 --- a/util/TokenParser.cc +++ b/util/TokenParser.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/util/Transition.cc b/util/Transition.cc index b77b46ae..289aac02 100644 --- a/util/Transition.cc +++ b/util/Transition.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/verilog/Verilog.i b/verilog/Verilog.i index 4992444f..ac077dba 100644 --- a/verilog/Verilog.i +++ b/verilog/Verilog.i @@ -3,7 +3,7 @@ %{ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/verilog/Verilog.tcl b/verilog/Verilog.tcl index 775c5192..6a9031e4 100644 --- a/verilog/Verilog.tcl +++ b/verilog/Verilog.tcl @@ -1,5 +1,5 @@ # OpenSTA, Static Timing Analyzer -# Copyright (c) 2023, Parallax Software, Inc. +# Copyright (c) 2024, Parallax Software, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/verilog/VerilogLex.ll b/verilog/VerilogLex.ll index 8548bdf6..42880540 100644 --- a/verilog/VerilogLex.ll +++ b/verilog/VerilogLex.ll @@ -1,7 +1,7 @@ %{ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/verilog/VerilogParse.yy b/verilog/VerilogParse.yy index f135f826..b12f3cef 100644 --- a/verilog/VerilogParse.yy +++ b/verilog/VerilogParse.yy @@ -1,7 +1,7 @@ %{ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/verilog/VerilogReader.cc b/verilog/VerilogReader.cc index a1cea261..fdfa1288 100644 --- a/verilog/VerilogReader.cc +++ b/verilog/VerilogReader.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/verilog/VerilogReaderPvt.hh b/verilog/VerilogReaderPvt.hh index d5fc4423..eb6afa09 100644 --- a/verilog/VerilogReaderPvt.hh +++ b/verilog/VerilogReaderPvt.hh @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/verilog/VerilogWriter.cc b/verilog/VerilogWriter.cc index 1e969d51..e3362da3 100644 --- a/verilog/VerilogWriter.cc +++ b/verilog/VerilogWriter.cc @@ -1,5 +1,5 @@ // OpenSTA, Static Timing Analyzer -// Copyright (c) 2023, Parallax Software, Inc. +// Copyright (c) 2024, Parallax Software, Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by From f24208b03bbf8bc68eb7ccb122da49ea760d9e0b Mon Sep 17 00:00:00 2001 From: James Cherry Date: Fri, 12 Jan 2024 18:50:19 -0800 Subject: [PATCH 17/43] write_path_spice -measure_stmts Signed-off-by: James Cherry --- doc/OpenSTA.odt | Bin 103320 -> 103408 bytes doc/OpenSTA.pdf | Bin 245516 -> 245486 bytes doc/messages.txt | 1024 +++++++++++++++++---------------- include/sta/WritePathSpice.hh | 1 + messages.txt | 513 ----------------- search/WritePathSpice.cc | 14 +- tcl/StaTcl.i | 5 +- tcl/WritePathSpice.tcl | 9 +- 8 files changed, 533 insertions(+), 1033 deletions(-) delete mode 100644 messages.txt diff --git a/doc/OpenSTA.odt b/doc/OpenSTA.odt index 95e9a1847169270bae1531b3907d1baae720cc3e..287535a19b67c29f4864edc97d2951d55affb0aa 100644 GIT binary patch delta 74328 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%0AhymxO+tsrre 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 delta 74166 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�ka-X#e)W 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

jX5~qU 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 G0RIQd?w0ca diff --git a/doc/OpenSTA.pdf b/doc/OpenSTA.pdf index 547636d4d42e8ebc9954a75879ab5ce4330b38dd..fe20035b47257cd50e94ccc48e8ece2d6219d151 100644 GIT binary patch delta 39641 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�J}`Bz!C_*=Z}^~V-HwS4iGWpkO%(%+@8n|f5~ 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 delta 39695 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/messages.txt -egrep "(sta_error|sta_warn) \([0-9]" */*.tcl >>doc/messages.txt -last used 593 - -dcalc/ArnoldiDelayCalc.cc: criticalError(204, "arnoldi delay calc failed."); -dcalc/DmpCeff.cc: report_->warn(1, "cell %s delay model not supported on SPF parasitics by DMP delay calculator", -liberty/InternalPower.cc: criticalError(229, "unsupported table order"); -liberty/InternalPower.cc: criticalError(230, "unsupported table axes"); -liberty/Liberty.cc: criticalError(231, "unsupported slew degradation table axes"); -liberty/Liberty.cc: criticalError(232, "unsupported slew degradation table axes"); -liberty/Liberty.cc: criticalError(233, "unsupported slew degradation table order"); -liberty/Liberty.cc: criticalError(234, "unsupported slew degradation table axes"); -liberty/Liberty.cc: report->warn(2, "cell %s/%s port %s not found in cell %s/%s.", -liberty/Liberty.cc: report->warn(3, "cell %s/%s %s -> %s timing group %s not found in cell %s/%s.", -liberty/Liberty.cc: criticalError(235, "timing arc set max index exceeded"); -liberty/Liberty.cc: criticalError(205, "timing arc count mismatch"); -liberty/Liberty.cc: report->warn(4, "cell %s/%s %s -> %s latch enable %s_edge timing arc is inconsistent with %s -> %s setup_%s check.", -liberty/Liberty.cc: report->warn(5, "cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function positive sense.", -liberty/Liberty.cc: report->warn(6, "cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function negative sense.", -liberty/LibertyExpr.cc: report_->error(7, "%s references unknown port %s.", -liberty/LibertyExpr.cc: report_->error(206, "%s %s.", error_msg_, msg); -liberty/LibertyParser.cc: criticalError(236, "valueIterator called for LibertySimpleAttribute"); -liberty/LibertyParser.cc: criticalError(237, "LibertyStringAttrValue called for float value"); -liberty/LibertyParser.cc: criticalError(238, "LibertyStringAttrValue called for float value"); -liberty/LibertyParser.cc: liberty_report->fileWarn(24, liberty_filename, line, -liberty/LibertyParser.cc: sta::liberty_report->vfileError(25, sta::liberty_filename, sta::liberty_line, -liberty/LibertyParser.cc: sta::liberty_report->fileError(26, sta::liberty_filename, sta::liberty_line, -liberty/LibertyReader.cc: libWarn(53, group, "library %s already exists.", name); -liberty/LibertyReader.cc: libError(30, group, "library does not have a name."); -liberty/LibertyReader.cc: libWarn(31, group, "default_wire_load %s not found.", default_wireload_); -liberty/LibertyReader.cc: libWarn(32, group, "default_wire_selection %s not found.", -liberty/LibertyReader.cc: libWarn(33, group, "input_threshold_pct_%s not found.", tr->name()); -liberty/LibertyReader.cc: libWarn(34, group, "output_threshold_pct_%s not found.", tr->name()); -liberty/LibertyReader.cc: libWarn(35, group, "slew_lower_threshold_pct_%s not found.", tr->name()); -liberty/LibertyReader.cc: libWarn(36, group, "slew_upper_threshold_pct_%s not found.", tr->name()); -liberty/LibertyReader.cc: libError(37, group, "Library %s is missing one or more thresholds.", -liberty/LibertyReader.cc: libWarn(38, attr, "unknown unit multiplier %s.", mult_str); -liberty/LibertyReader.cc: libWarn(39, attr, "unknown unit scale %c.", scale_char); -liberty/LibertyReader.cc: libWarn(40, attr, "unknown unit suffix %s.", s + 1); -liberty/LibertyReader.cc: libWarn(41, attr, "capacitive_load_units are not ff or pf."); -liberty/LibertyReader.cc: libWarn(42, attr, "capacitive_load_units are not a string."); -liberty/LibertyReader.cc: libWarn(43, attr, "capacitive_load_units missing suffix."); -liberty/LibertyReader.cc: libWarn(44, attr, "capacitive_load_units scale is not a float."); -liberty/LibertyReader.cc: libWarn(45, attr, "capacitive_load_units missing scale and suffix."); -liberty/LibertyReader.cc: libWarn(46, attr, "capacitive_load_unit missing values suffix."); -liberty/LibertyReader.cc: libWarn(47, attr, "delay_model %s not supported.", type_name); -liberty/LibertyReader.cc: libWarn(48, attr, "delay_model %s not supported.", type_name); -liberty/LibertyReader.cc: libWarn(49, attr, "delay_model %s not supported.", type_name); -liberty/LibertyReader.cc: libWarn(50, attr, "delay_model %s not supported.\n.", type_name); -liberty/LibertyReader.cc: libWarn(51, attr, "unknown delay_model %s\n.", type_name); -liberty/LibertyReader.cc: libWarn(52, attr, "unknown bus_naming_style format."); -liberty/LibertyReader.cc: libWarn(54, attr, "voltage_map voltage is not a float."); -liberty/LibertyReader.cc: libWarn(55, attr, "voltage_map missing voltage."); -liberty/LibertyReader.cc: libWarn(56, attr, "voltage_map supply name is not a string."); -liberty/LibertyReader.cc: libWarn(57, attr, "voltage_map missing supply name and voltage."); -liberty/LibertyReader.cc: libWarn(58, attr, "voltage_map missing values suffix."); -liberty/LibertyReader.cc: libWarn(59, attr, "default_wire_load_mode %s not found.", -liberty/LibertyReader.cc: libWarn(60, attr, "default_operating_condition %s not found.", -liberty/LibertyReader.cc: libWarn(61, group, "table template does not have a name."); -liberty/LibertyReader.cc: libWarn(62, group, "missing variable_%d attribute.", index + 1); -liberty/LibertyReader.cc: libWarn(63, attr, "axis type %s not supported.", type); -liberty/LibertyReader.cc: libWarn(64, group, "bus type %s missing bit_from.", name); -liberty/LibertyReader.cc: libWarn(65, group, "bus type %s missing bit_to.", name); -liberty/LibertyReader.cc: libWarn(66, group, "type does not have a name."); -liberty/LibertyReader.cc: libWarn(67, group, "scaling_factors do not have a name."); -liberty/LibertyReader.cc: libWarn(68, group, "operating_conditions does not have a name."); -liberty/LibertyReader.cc: libWarn(69, group, "wire_load does not have a name."); -liberty/LibertyReader.cc: libWarn(70, attr, "fanout_length is missing length and fanout."); -liberty/LibertyReader.cc: libWarn(71, group, "wire_load_selection does not have a name."); -liberty/LibertyReader.cc: libWarn(72, attr, "wireload %s not found.", wireload_name); -liberty/LibertyReader.cc: libWarn(73, attr, -liberty/LibertyReader.cc: libWarn(74, attr, "wire_load_from_area min not a float."); -liberty/LibertyReader.cc: libWarn(75, attr, "wire_load_from_area max not a float."); -liberty/LibertyReader.cc: libWarn(76, attr, "wire_load_from_area missing parameters."); -liberty/LibertyReader.cc: libWarn(77, attr, "wire_load_from_area missing parameters."); -liberty/LibertyReader.cc: libWarn(78, group, "cell does not have a name."); -liberty/LibertyReader.cc: libWarn(79, group, "cell %s ocv_derate_group %s not found.", -liberty/LibertyReader.cc: libWarn(80, line, "port %s function size does not match port size.", -liberty/LibertyReader.cc: libWarn(81, line, "%s %s bus width mismatch.", type, clk_attr); -liberty/LibertyReader.cc: libWarn(82, line, "%s %s bus width mismatch.", type, data_attr); -liberty/LibertyReader.cc: libWarn(83, line, "%s %s bus width mismatch.", type, "clear"); -liberty/LibertyReader.cc: libWarn(84, line, "%s %s bus width mismatch.", type, "preset"); -liberty/LibertyReader.cc: libWarn(85, line, "latch enable function is non-unate for port %s.", -liberty/LibertyReader.cc: libWarn(86, line, "latch enable function is unknown for port %s.", -liberty/LibertyReader.cc: libWarn(87, group, "operating conditions %s not found.", op_cond_name); -liberty/LibertyReader.cc: libWarn(88, group, "scaled_cell does not have an operating condition."); -liberty/LibertyReader.cc: libWarn(89, group, "scaled_cell cell %s has not been defined.", name); -liberty/LibertyReader.cc: libWarn(90, group, "scaled_cell does not have a name."); -liberty/LibertyReader.cc: libWarn(91, group, "scaled_cell %s, %s port functions do not match cell port functions.", -liberty/LibertyReader.cc: libWarn(92, group, "scaled_cell ports do not match cell ports."); -liberty/LibertyReader.cc: libWarn(93, group, "scaled_cell %s, %s timing does not match cell timing.", -liberty/LibertyReader.cc: libWarn(94, line, "combinational timing to an input port."); -liberty/LibertyReader.cc: visitor->libWarn(95, line_, "missing %s_transition.", tr->name()); -liberty/LibertyReader.cc: visitor->libWarn(96, line_, "missing cell_%s.", tr->name()); -liberty/LibertyReader.cc: libWarn(97, timing->line(), -liberty/LibertyReader.cc: libWarn(98, power_group->line(), -liberty/LibertyReader.cc: libWarn(99, attr, "scaling_factors %s not found.", scale_factors_name); -liberty/LibertyReader.cc: libWarn(100, group, "pin name is not a string."); -liberty/LibertyReader.cc: libWarn(101, group, "pin name is not a string."); -liberty/LibertyReader.cc: libWarn(102, group, "pin name is not a string."); -liberty/LibertyReader.cc: libWarn(103, group, "bus %s bus_type not found.", group->firstName()); -liberty/LibertyReader.cc: libWarn(104, attr, "bus_type %s not found.", bus_type); -liberty/LibertyReader.cc: libWarn(105, attr, "bus_type is not a string."); -liberty/LibertyReader.cc: libWarn(106, group, "bundle %s member not found.", group->firstName()); -liberty/LibertyReader.cc: libWarn(107, attr, "member is not a string."); -liberty/LibertyReader.cc: libWarn(108, attr,"members attribute is missing values."); -liberty/LibertyReader.cc: libWarn(109, attr, "unknown port direction."); -liberty/LibertyReader.cc: libWarn(110,attr, "pulse_latch unknown pulse type."); -liberty/LibertyReader.cc: libWarn(111, attr, "unknown timing_type %s.", type_name); -liberty/LibertyReader.cc: libWarn(112, attr, "unknown timing_sense %s.", sense_name); -liberty/LibertyReader.cc: libWarn(113, attr, "mode value is not a string."); -liberty/LibertyReader.cc: libWarn(114, attr, "missing mode value."); -liberty/LibertyReader.cc: libWarn(115, attr, "mode name is not a string."); -liberty/LibertyReader.cc: libWarn(116, attr, "mode missing values."); -liberty/LibertyReader.cc: libWarn(117, attr, "mode missing mode name and value."); -liberty/LibertyReader.cc: libWarn(118, group, "unsupported model axis."); -liberty/LibertyReader.cc: libWarn(119, group, "unsupported model axis."); -liberty/LibertyReader.cc: libWarn(120, group, "unsupported model axis."); -liberty/LibertyReader.cc: libWarn(121, group, "unsupported model axis."); -liberty/LibertyReader.cc: libWarn(122, group, "table template %s not found.", template_name); -liberty/LibertyReader.cc: libWarn(123, attr, "%s is missing values.", attr->name()); -liberty/LibertyReader.cc: libWarn(124, attr, "%s is not a list of floats.", attr->name()); -liberty/LibertyReader.cc: libWarn(125, attr, "table row has %u columns but axis has %d.", -liberty/LibertyReader.cc: libWarn(126, attr, "table has %u rows but axis has %d.", -liberty/LibertyReader.cc: libWarn(127, group, "lut output is not a string."); -liberty/LibertyReader.cc: libWarn(128, group, "mode definition does not have a name."); -liberty/LibertyReader.cc: libWarn(129, group, "mode value does not have a name."); -liberty/LibertyReader.cc: libWarn(130, attr, "when attribute inside table model."); -liberty/LibertyReader.cc: libWarn(131, attr, "%s attribute is not a string.", attr->name()); -liberty/LibertyReader.cc: libWarn(132, attr, "%s is not a simple attribute.", attr->name()); -liberty/LibertyReader.cc: libWarn(132, attr, "%s attribute is not an integer.",attr->name()); -liberty/LibertyReader.cc: libWarn(133, attr, "%s is not a simple attribute.", attr->name()); -liberty/LibertyReader.cc: libWarn(134, attr, "%s is not a simple attribute.", attr->name()); -liberty/LibertyReader.cc: libWarn(135, attr, "%s value %s is not a float.", -liberty/LibertyReader.cc: libWarn(136, attr, "%s missing values.", attr->name()); -liberty/LibertyReader.cc: libWarn(137, attr, "%s missing values.", attr->name()); -liberty/LibertyReader.cc: libWarn(138, attr, "%s is not a complex attribute.", attr->name()); -liberty/LibertyReader.cc: libWarn(139, attr, "%s is not a float.", token); -liberty/LibertyReader.cc: libWarn(140, attr, "%s is missing values.", attr->name()); -liberty/LibertyReader.cc: libWarn(141, attr, "%s has more than one string.", attr->name()); -liberty/LibertyReader.cc: libWarn(142, attr, "%s is missing values.", attr->name()); -liberty/LibertyReader.cc: libWarn(143, attr, "%s attribute is not boolean.", attr->name()); -liberty/LibertyReader.cc: libWarn(144, attr, "%s attribute is not boolean.", attr->name()); -liberty/LibertyReader.cc: libWarn(145, attr, "%s is not a simple attribute.", attr->name()); -liberty/LibertyReader.cc: libWarn(146, attr, "attribute %s value %s not recognized.", -liberty/LibertyReader.cc: libWarn(147, attr, "unknown early/late value."); -liberty/LibertyReader.cc: libWarn(148, attr, "OCV derate group named %s not found.", derate_name); -liberty/LibertyReader.cc: libWarn(149, group, "ocv_derate does not have a name."); -liberty/LibertyReader.cc: libError(150, attr, "unknown rf_type."); -liberty/LibertyReader.cc: libWarn(151, attr, "unknown derate type."); -liberty/LibertyReader.cc: libWarn(152, group, "unsupported model axis."); -liberty/LibertyReader.cc: libWarn(153, group, "unsupported model axis."); -liberty/LibertyReader.cc: libWarn(154, group, "unsupported model axis."); -liberty/LibertyReader.cc: libError(155, attr, "unknown pg_type."); -liberty/LibertyReader.cc: visitor_->libWarn(156, line_, "port %s subscript out of range.", -liberty/LibertyReader.cc: visitor_->libWarn(157, line_, "port range %s of non-bus port %s.", -liberty/LibertyReader.cc: visitor_->libWarn(158, line_, "port %s not found.", port_name); -liberty/LibertyReader.cc: visitor_->libWarn(159, line_, "port %s not found.", bus_bit_name); -liberty/TableModel.cc: criticalError(239, "unsupported table order"); -liberty/TableModel.cc: criticalError(240, "unsupported table axes"); -liberty/TableModel.cc: criticalError(241, "unsupported table order"); -liberty/TableModel.cc: criticalError(242, "unsupported table axes"); -liberty/TimingArc.cc: criticalError(243, "timing arc max index exceeded\n"); -network/ConcreteNetwork.cc: report->error(8, "cell type %s can not be linked.", top_cell_name); -parasitics/SpefReader.cc: warn(167, "illegal bus delimiters."); -parasitics/SpefReader.cc: warn(168, "unknown units %s.", units); -parasitics/SpefReader.cc: warn(168, "unknown units %s.", units); -parasitics/SpefReader.cc: warn(170, "unknown units %s.", units); -parasitics/SpefReader.cc: warn(168, "unknown units %s.", units); -parasitics/SpefReader.cc: warn(169, "no name map entry for %d.", index); -parasitics/SpefReader.cc: warn(170, "unknown port direction %s.", spef_dir); -parasitics/SpefReader.cc: warn(171, "pin %s not found.", name); -parasitics/SpefReader.cc: warn(172, "instance %s not found.", name); -parasitics/SpefReader.cc: warn(173, "pin %s not found.", name); -parasitics/SpefReader.cc: warn(174, "net %s not found.", name); -parasitics/SpefReader.cc: warn(175, "%s not connected to net %s.", name, network_->pathName(net_)); -parasitics/SpefReader.cc: warn(176, "pin %s not found.", name); -parasitics/SpefReader.cc: warn(177, "node %s not a pin or net:number", name); -parasitics/SpefReader.cc: warn(178, "pin %s not found.", name); -parasitics/SpefReader.cc: sta::spef_reader->warn(179, "%s.", msg); -sdc/Clock.cc: criticalError(244, "generated clock edges size is not three."); -sdc/Sdc.cc: report_->warn(9, "No common period was found between clocks %s and %s.", -sdf/SdfReader.cc: sdfError(180, "TIMESCALE units not us, ns, or ps."); -sdf/SdfReader.cc: sdfError(181, "TIMESCALE multiplier not 1, 10, or 100."); -sdf/SdfReader.cc: sdfError(182, "pin %s is a hierarchical pin.", from_pin_name); -sdf/SdfReader.cc: sdfError(183, "pin %s is a hierarchical pin.", to_pin_name); -sdf/SdfReader.cc: sdfError(184, "INTERCONNECT from %s to %s not found.", -sdf/SdfReader.cc: sdfError(185, "pin %s not found.", from_pin_name); -sdf/SdfReader.cc: sdfError(186, "pin %s not found.", to_pin_name); -sdf/SdfReader.cc: sdfError(187, "pin %s not found.", to_pin_name); -sdf/SdfReader.cc: sdfError(188, "%s with no triples.", sdf_cmd); -sdf/SdfReader.cc: sdfError(189, "%s with more than 2 triples.", sdf_cmd); -sdf/SdfReader.cc: sdfError(190, "instance %s cell %s does not match enclosing cell %s.", -sdf/SdfReader.cc: sdfError(191, "cell %s IOPATH %s -> %s not found.", -sdf/SdfReader.cc: sdfError(192, "cell %s %s -> %s %s check not found.", -sdf/SdfReader.cc: sdfError(193, "%s not supported.", feature); -sdf/SdfReader.cc: sdfError(194, "instance %s port %s not found.", -sdf/SdfReader.cc: sdfError(195, "instance %s not found.", inst_name.c_str()); -sdf/SdfReader.cc: sta::sdf_reader->sdfError(196, "%s.\n", msg); -search/CheckTiming.cc: criticalError(245, "unknown print flag"); -search/Corner.cc: criticalError(246, "unknown parasitic analysis point count"); -search/Corner.cc: criticalError(247, "unknown analysis point count"); -search/Crpr.cc: criticalError(248, "missing prev paths"); -search/GatedClk.cc: criticalError(249, "illegal gated clock active value"); -search/Genclks.cc: report_->warn(10, "no master clock found for generated clock %s.", -search/Genclks.cc: report_->error(11, "generated clock %s is in the fanout of multiple clocks.", -search/Genclks.cc: report_->error(12, -search/Genclks.cc: report_->warn(13, "generated clock %s source pin %s missing paths from master clock %s.", -search/PathEnum.cc: criticalError(250, "diversion path not found"); -search/Sim.cc: report_->warn(15, "propagated logic value %c differs from constraint value of %c on pin %s.", -search/Sta.cc: report_->fileWarn(160, file, line, "'%s' is not a valid startpoint.", -search/Sta.cc: report_->warn(16, "'%s' is not a valid startoint.", -search/Sta.cc: report_->fileWarn(161, file, line, "'%s' is not a valid endpoint.", -search/Sta.cc: report_->warn(17, "'%s' is not a valid endpoint.", -search/VertexVisitor.cc: criticalError(266, "VertexPinCollector::copy not supported."); -search/WritePathSpice.cc: report_->error(24, "pg_pin %s/%s voltage %s not found,", -search/WritePathSpice.cc: report_->error(25, "Liberty pg_port %s/%s missing voltage_name attribute,", -search/WritePathSpice.cc: report_->error(26, "%s pg_port %s not found,", -search/WritePathSpice.cc: report_->error(27, "no register/latch found for path from %s to %s,", -search/WritePathSpice.cc: report_->error(28, "The following subkcts are missing from %s", -search/WritePathSpice.cc: report_->error(29, "subckt %s port %s has no corresponding liberty port, pg_port and is not power or ground.", -search/WritePathSpice.cc: criticalError(267, "out of memory"); -verilog/VerilogReader.cc: warn(165, module->filename(), module->line(), -verilog/VerilogReader.cc: warn(166, module->filename(), module->line(), -verilog/VerilogReader.cc: linkWarn(197, module->filename(), module->line(), -verilog/VerilogReader.cc: reader->warn(18, filename_, dcl->line(), -verilog/VerilogReader.cc: reader->warn(19, filename_, inst->line(), -verilog/VerilogReader.cc: reader->warn(20, reader->filename(), reader->line(), -verilog/VerilogReader.cc: report->error(162, "%s is not a verilog module.", top_cell_name); -verilog/VerilogReader.cc: report->error(163, "%s is not a verilog module.", top_cell_name); -verilog/VerilogReader.cc: linkWarn(198, filename_, mod_inst->line(), -verilog/VerilogReader.cc: linkError(199, filename_, mod_inst->line(), -verilog/VerilogReader.cc: linkWarn(200, parent_module->filename(), mod_inst->line(), -verilog/VerilogReader.cc: linkWarn(201, parent_module->filename(), mod_inst->line(), -verilog/VerilogReader.cc: linkWarn(202, parent_module->filename(), mod_inst->line(), -verilog/VerilogReader.cc: linkWarn(203, module->filename(), assign->line(), -verilog/VerilogReader.cc: sta::verilog_reader->report()->fileError(164, -verilog/VerilogWriter.cc: criticalError(268, "unknown port direction"); -parasitics/SpefParse.yy: sta::spef_reader->warn(21, "%d is not positive.", value); -parasitics/SpefParse.yy: sta::spef_reader->warn(22, "%.4f is not positive.", value); -parasitics/SpefParse.yy: sta::spef_reader->warn(23, "%.4f is not positive.", value); -include/sta/ArrayTable.hh: criticalError(223, "max array table block count exceeded."); -include/sta/ArrayTable.hh: criticalError(222, "null ObjectId reference is undefined."); -include/sta/MinMaxValues.hh: criticalError(226, "uninitialized value reference"); -include/sta/ObjectTable.hh: criticalError(224, "max object table block count exceeded."); -include/sta/ObjectTable.hh: criticalError(225, "null ObjectId reference is undefined."); -dcalc/DelayCalc.tcl: sta_error 435 "delay calculator $alg not found." -parasitics/Parasitics.tcl: sta_error 433 "path instance '$path' not found." -parasitics/Parasitics.tcl: sta_error 434 "-reduce_to must be pi_elmore or pi_pole_residue2." -sdf/Sdf.tcl: sta_error 429 "-analysis_type must be single, bc_wc or on_chip_variation" -sdf/Sdf.tcl: sta_error 430 "-cond_use min_max cannot be used with analysis type single." -sdf/Sdf.tcl: sta_error 431 "$key must be sdf_min, sdf_typ, or sdf_max." -sdf/Sdf.tcl: sta_error 432 "SDF -divider must be / or ." -tcl/Cmds.tcl: sta_error 439 "unsupported object type $list_type." -tcl/Cmds.tcl: sta_error 440 "-from/-to arguments not supported with -of_objects." -tcl/Cmds.tcl: sta_error 441 "unsupported -filter expression." -tcl/Cmds.tcl: sta_error 442 "$cmd missing -from argument." -tcl/Cmds.tcl: sta_error 443 "$cmd missing -to argument." -tcl/Cmds.tcl: sta_error 444 "$cmd delay is not a float." -tcl/Cmds.tcl: sta_error 445 "set_annotated_delay -cell and -net options are mutually excluive." -tcl/Cmds.tcl: sta_error 446 "$cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst]." -tcl/Cmds.tcl: sta_error 447 "$cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst]" -tcl/Cmds.tcl: sta_error 448 "$cmd -cell or -net required." -tcl/Cmds.tcl: sta_error 449 "$cmd missing -from argument." -tcl/Cmds.tcl: sta_error 450 "$cmd -clock must be rise or fall." -tcl/Cmds.tcl: sta_error 451 "$cmd missing -to argument." -tcl/Cmds.tcl: sta_error 452 "$cmd missing -setup|-hold|-recovery|-removal check type.." -tcl/Cmds.tcl: sta_error 453 "$cmd check_value is not a float." -tcl/Cmds.tcl: sta_error 454 "the -all and -name options are mutually exclusive." -tcl/Cmds.tcl: sta_error 455 "either -all or -name options must be specified." -tcl/Cmds.tcl: sta_error 456 "one of -logically_exclusive, -physically_exclusive or -asynchronous is required." -tcl/Cmds.tcl: sta_error 457 "the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive." -tcl/Cmds.tcl: sta_warn 303 "-clock ignored for clock objects." -tcl/Cmds.tcl: sta_error 458 "-source '[$pin path_name]' is not a clock pin." -tcl/Cmds.tcl: sta_error 459 "-from/-to must be used together." -tcl/Cmds.tcl: sta_error 460 "-rise, -fall options not allowed for single clock uncertainty." -tcl/Cmds.tcl: sta_error 461 "missing -from, -rise_from or -fall_from argument." -tcl/Cmds.tcl: sta_error 462 "missing -to, -rise_to or -fall_to argument." -tcl/Cmds.tcl: sta_warn 304 "-from/-to keywords ignored for lib_pin, port and pin arguments." -tcl/Cmds.tcl: sta_error 463 "-from/-to hierarchical instance not supported." -tcl/Cmds.tcl: sta_error 464 "$cmd command failed." -tcl/Cmds.tcl: sta_error 465 "positional arguments not supported." -tcl/Cmds.tcl: sta_error 466 "-from, -through or -to required." -tcl/Cmds.tcl: sta_error 467 "unsupported object type $object_type." -tcl/Cmds.tcl: sta_warn 305 "object '$obj' not found." -tcl/Cmds.tcl: sta_error 468 "$corner_name is not the name of process corner." -tcl/Cmds.tcl: sta_error 469 "-corner keyword required with multi-corner analysis." -tcl/Cmds.tcl: sta_error 470 "$corner_name is not the name of process corner." -tcl/Cmds.tcl: sta_error 471 "missing -corner arg." -tcl/Cmds.tcl: sta_error 472 "$corner_name is not the name of process corner." -tcl/Cmds.tcl: sta_error 473 "$corner_name is not the name of process corner." -tcl/Cmds.tcl: sta_error 474 "both -min and -max specified." -tcl/Cmds.tcl: sta_error 475 "both -min and -max specified." -tcl/Cmds.tcl: sta_error 476 "only one of -early and -late can be specified." -tcl/Cmds.tcl: sta_error 477 "-early or -late must be specified." -tcl/Cmds.tcl: sta_error 478 "both -early and -late specified." -tcl/Cmds.tcl: sta_error 479 "$arg_name must be a single library." -tcl/Cmds.tcl: sta_error 480 "$arg_name type '$object_type' is not a library." -tcl/Cmds.tcl: sta_error 481 "library '$arg' not found." -tcl/Cmds.tcl: sta_error 482 "$arg_name must be a single lib cell." -tcl/Cmds.tcl: sta_error 483 "$arg_name must be a single instance." -tcl/Cmds.tcl: sta_error 484 "$arg_name type '$object_type' is not an instance." -tcl/Cmds.tcl: sta_error 485 "instance '$arg' not found." -tcl/Cmds.tcl: sta_error 486 "$arg_name type '$object_type' is not an instance." -tcl/Cmds.tcl: sta_error 487 "instance '$arg' not found." -tcl/Cmds.tcl: sta_error 488 "$arg_name type '$object_type' is not a pin or port." -tcl/Cmds.tcl: sta_error 489 "pin '$arg' not found." -tcl/Cmds.tcl: sta_error 490 "$arg_name type '$object_type' is not a port." -tcl/Cmds.tcl: sta_warn 313 "unsupported object type $object_type." -tcl/Cmds.tcl: sta_warn 314"$arg_name must be a single net." -tcl/Cmds.tcl: sta_warn 315 "$arg_name '$object_type' is not a net." -tcl/Cmds.tcl: sta_warn 316 "$arg_name '$arg' not found." -tcl/Cmds.tcl: sta_error 491 "$cmd object is null." -tcl/Cmds.tcl: sta_error 492 "$cmd $type_key must be specified with object name argument." -tcl/Cmds.tcl: sta_error 492 "get_property unsupported object type $object_type." -tcl/Cmds.tcl: sta_error 493 "get_property $object is not an object." -tcl/Cmds.tcl: sta_error 494 "$object_type not supported." -tcl/Cmds.tcl: sta_error 495 "$object_type '$object_name' not found." -tcl/Cmds.tcl: sta_error 496 "Directory $spice_dir not found.\n" -tcl/Cmds.tcl: sta_error 497 "$spice_dir is not a directory.\n" -tcl/Cmds.tcl: sta_error 498 "Cannot write in $spice_dir.\n" -tcl/Cmds.tcl: sta_error 499 "No -spice_directory specified.\n" -tcl/Cmds.tcl: sta_error 500 "-lib_subckt_file $lib_subckt_file is not readable.\n" -tcl/Cmds.tcl: sta_error 501 "No -lib_subckt_file specified.\n" -tcl/Cmds.tcl: sta_error 502 "-model_file $model_file is not readable.\n" -tcl/Cmds.tcl: sta_error 503 "No -model_file specified.\n" -tcl/Cmds.tcl: sta_error 504 "No -power specified.\n" -tcl/Cmds.tcl: sta_error 505 "No -ground specified.\n" -tcl/Cmds.tcl: sta_error 506 "No -path_args specified.\n" -tcl/Cmds.tcl: sta_error 507 "No paths found for -path_args $path_args.\n" -tcl/Link.tcl: sta_error 593 "missing top_cell_name argument and no current_design." -tcl/Network.tcl: sta_error 589 "unknown namespace $namespc." -tcl/Network.tcl: sta_error 590 "instance $instance_path not found." -tcl/Network.tcl: sta_error 591 "net $net_path not found." -tcl/Network.tcl: sta_error 592 "net $net_path not found." -tcl/NetworkEdit.tcl: sta_error 586 "unsupported object type $object_type." -tcl/NetworkEdit.tcl: sta_warn 372 "connect_pins is deprecated. Use connect_pin." -tcl/NetworkEdit.tcl: sta_error 587 "unsupported object type $object_type." -tcl/NetworkEdit.tcl: sta_error 588 "unsupported object type $object_type." -tcl/NetworkEdit.tcl: sta_warn 372 "disconnect_pins is deprecated. Use disconnect_pin." -tcl/Power.tcl: sta_warn 301 "activity should be 0.0 to 1.0 or 2.0" -tcl/Power.tcl: sta_warn 302 "duty should be 0.0 to 1.0" -tcl/Sdc.tcl: sta_error 511 "cannot open '$filename'." -tcl/Sdc.tcl: sta_error 512 "incomplete command at end of file." -tcl/Sdc.tcl: sta_error 513 "hierarchy separator must be one of '$sdc_dividers'." -tcl/Sdc.tcl: sta_error 514 "unknown unit $unit '$suffix'." -tcl/Sdc.tcl: sta_error 514 "unknown $unit prefix '$prefix'." -tcl/Sdc.tcl: sta_warn 319 "$unit scale [format %.0e $scale] does not match library scale [format %.0e $unit_scale]." -tcl/Sdc.tcl: sta_error 515 "unknown $unit unit '$suffix'." -tcl/Sdc.tcl: sta_warn 320 "current_design for other than top cell not supported." -tcl/Sdc.tcl: sta_warn 321 "patterns argument not supported with -of_objects." -tcl/Sdc.tcl: sta_warn 322 "instance '$pattern' not found." -tcl/Sdc.tcl: sta_error 516 "unsupported -filter expression." -tcl/Sdc.tcl: sta_warn 323 "clock '$pattern' not found." -tcl/Sdc.tcl: sta_warn 324 "positional arguments not supported with -of_objects." -tcl/Sdc.tcl: sta_warn 325 "library '$lib_name' not found." -tcl/Sdc.tcl: sta_warn 326 "cell '$cell_pattern' not found." -tcl/Sdc.tcl: sta_warn 327 "library/cell/port '$pattern' not found." -tcl/Sdc.tcl: sta_warn 328 "port '$port_pattern' not found." -tcl/Sdc.tcl: sta_warn 329 "library '$lib_name' not found." -tcl/Sdc.tcl: sta_warn 330 "-nocase ignored without -regexp." -tcl/Sdc.tcl: sta_warn 331 "library '$pattern' not found." -tcl/Sdc.tcl: sta_warn 332 "patterns argument not supported with -of_objects." -tcl/Sdc.tcl: sta_warn 333 "net '$pattern' not found." -tcl/Sdc.tcl: sta_warn 334 "patterns argument not supported with -of_objects." -tcl/Sdc.tcl: sta_warn 335 "pin '$pattern' not found." -tcl/Sdc.tcl: sta_error 517 "unsupported -filter expression." -tcl/Sdc.tcl: sta_warn 336 "patterns argument not supported with -of_objects." -tcl/Sdc.tcl: sta_warn 337 "port '$pattern' not found." -tcl/Sdc.tcl: sta_error 518 "unsupported -filter expression." -tcl/Sdc.tcl: sta_error 519 "-add requires -name." -tcl/Sdc.tcl: sta_error 520 "-name or port_pin_list must be specified." -tcl/Sdc.tcl: sta_error 521 "missing -period argument." -tcl/Sdc.tcl: sta_error 522 "-waveform edge_list must have an even number of edge times." -tcl/Sdc.tcl: sta_warn 338 "adjusting non-increasing clock -waveform edge times." -tcl/Sdc.tcl: sta_warn 339 "-waveform time greater than two periods." -tcl/Sdc.tcl: sta_error 523 "empty ports/pins/nets argument." -tcl/Sdc.tcl: sta_error 524 "-add requires -name." -tcl/Sdc.tcl: sta_error 525 "name or port_pin_list must be specified." -tcl/Sdc.tcl: sta_error 526 "missing -source argument." -tcl/Sdc.tcl: sta_error 527 "-master_clock argument empty." -tcl/Sdc.tcl: sta_error 528 "-add requireds -master_clock." -tcl/Sdc.tcl: sta_error 529 "-multiply_by and -divide_by options are exclusive." -tcl/Sdc.tcl: sta_error 530 "-divide_by is not an integer greater than one." -tcl/Sdc.tcl: sta_error 531 "-combinational implies -divide_by 1." -tcl/Sdc.tcl: sta_error 532 "-multiply_by is not an integer greater than one." -tcl/Sdc.tcl: sta_error 533 "-duty_cycle is not a float between 0 and 100." -tcl/Sdc.tcl: sta_error 534 "-edges only supported for three edges." -tcl/Sdc.tcl: sta_error 535 "edges times are not monotonically increasing." -tcl/Sdc.tcl: sta_error 536 "-edge_shift length does not match -edges length." -tcl/Sdc.tcl: sta_error 537 "missing -multiply_by, -divide_by, -combinational or -edges argument." -tcl/Sdc.tcl: sta_error 538 "cannot specify -invert without -multiply_by, -divide_by or -combinational." -tcl/Sdc.tcl: sta_error 539 "-duty_cycle requires -multiply_by value." -tcl/Sdc.tcl: sta_error 540 "missing -pll_output argument." -tcl/Sdc.tcl: sta_error 541 "missing -pll_feedback argument." -tcl/Sdc.tcl: sta_error 542 "PLL output and feedback pins must be on the same instance." -tcl/Sdc.tcl: sta_error 543 "source pin must be on the same instance as the PLL output pin." -tcl/Sdc.tcl: sta_error 544 "PLL output must be one of the clock pins." -tcl/Sdc.tcl: sta_error 545 "group_path command failed." -tcl/Sdc.tcl: sta_error 546 "positional arguments not supported." -tcl/Sdc.tcl: sta_error 547 "-from, -through or -to required." -tcl/Sdc.tcl: sta_error 548 "-name and -default are mutually exclusive." -tcl/Sdc.tcl: sta_error 549 "-name or -default option is required." -tcl/Sdc.tcl: sta_error 550 "cannot specify both -high and -low." -tcl/Sdc.tcl: sta_error 551 "missing -setup or -hold argument." -tcl/Sdc.tcl: sta_error 552 "-high and -low only permitted for pins and instances." -tcl/Sdc.tcl: sta_error 553 "-high and -low only permitted for pins and instances." -tcl/Sdc.tcl: sta_error 554 "one of -logically_exclusive, -physically_exclusive or -asynchronous is required." -tcl/Sdc.tcl: sta_error 555 "the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive." -tcl/Sdc.tcl: sta_warn 349 "unknown keyword argument $arg." -tcl/Sdc.tcl: sta_warn 341 "extra positional argument $arg." -tcl/Sdc.tcl: sta_warn 342 "-clock ignored for clock objects." -tcl/Sdc.tcl: sta_error 556 "-source '[get_full_name $pin]' is not a clock pin." -tcl/Sdc.tcl: sta_error 557 "-early/-late is only allowed with -source." -tcl/Sdc.tcl: sta_warn 343 "set_sense -type data not supported." -tcl/Sdc.tcl: sta_error 558 "set_sense -type clock|data" -tcl/Sdc.tcl: sta_warn 344 "set_clock_sense is deprecated as of SDC 2.1. Use set_sense -type clock." -tcl/Sdc.tcl: sta_warn 345 "-pulse argument not supported." -tcl/Sdc.tcl: sta_warn 346 "-positive, -negative, -stop_propagation and -pulse are mutually exclusive." -tcl/Sdc.tcl: sta_warn 347 "hierarchical pin '[get_full_name $pin]' not supported." -tcl/Sdc.tcl: sta_error 559 "transition time can not be specified for virtual clocks." -tcl/Sdc.tcl: sta_error 560 "missing uncertainty value." -tcl/Sdc.tcl: sta_error 561 "-from/-to must be used together." -tcl/Sdc.tcl: sta_error 562 "-rise, -fall options not allowed for single clock uncertainty." -tcl/Sdc.tcl: sta_error 563 "missing -from, -rise_from or -fall_from argument." -tcl/Sdc.tcl: sta_error 564 "missing -to, -rise_to or -fall_to argument." -tcl/Sdc.tcl: sta_warn 348 "-from/-to keywords ignored for lib_pin, port and pin arguments." -tcl/Sdc.tcl: sta_error 565 "-from/-to hierarchical instance not supported." -tcl/Sdc.tcl: sta_error 566 "pin '[get_full_name $inst]${hierarchy_separator}${port_name}' not found." -tcl/Sdc.tcl: sta_error 567 "pin '[get_name $cell]${hierarchy_separator}${port_name}' not found." -tcl/Sdc.tcl: sta_warn 349 "'$args' ignored." -tcl/Sdc.tcl: sta_warn 350 "-from, -through or -to required." -tcl/Sdc.tcl: sta_warn 351 "-source_latency_included ignored with -reference_pin." -tcl/Sdc.tcl: sta_warn 352 "-network_latency_included ignored with -reference_pin." -tcl/Sdc.tcl: sta_warn 353 "$cmd not allowed on [pin_direction $pin] port '[get_full_name $pin]'." -tcl/Sdc.tcl: sta_warn 354 "$cmd relative to a clock defined on the same port/pin not allowed." -tcl/Sdc.tcl: sta_error 568 "missing delay argument." -tcl/Sdc.tcl: sta_warn 355 "'$args' ignored." -tcl/Sdc.tcl: sta_error 569 "missing path multiplier argument." -tcl/Sdc.tcl: sta_warn 356 "'$args' ignored." -tcl/Sdc.tcl: sta_error 570 "cannot use -start with -end." -tcl/Sdc.tcl: sta_warn 357 "virtual clock [get_name $clk] can not be propagated." -tcl/Sdc.tcl: sta_error 571 "value must be 0, zero, 1, one, rise, rising, fall, or falling." -tcl/Sdc.tcl: sta_error 572 "cell '$lib_name:$cell_name' not found." -tcl/Sdc.tcl: sta_error 573 "'$cell_name' not found." -tcl/Sdc.tcl: sta_error 574 "missing -lib_cell argument." -tcl/Sdc.tcl: sta_error 575 "port '$to_port_name' not found." -tcl/Sdc.tcl: sta_error 576 "-pin argument required for cells with multiple outputs." -tcl/Sdc.tcl: sta_error 577 "port '$from_port_name' not found." -tcl/Sdc.tcl: sta_warn 358 "-multiply_by ignored." -tcl/Sdc.tcl: sta_warn 359 "-dont_scale ignored." -tcl/Sdc.tcl: sta_warn 360 "-no_design_rule ignored." -tcl/Sdc.tcl: sta_warn 361 "set_fanout_load not supported." -tcl/Sdc.tcl: sta_warn 361 "-clock not supported." -tcl/Sdc.tcl: sta_warn 362 "-clock_fall not supported." -tcl/Sdc.tcl: sta_warn 363 "-pin_load not allowed for net objects." -tcl/Sdc.tcl: sta_warn 364 "-wire_load not allowed for net objects." -tcl/Sdc.tcl: sta_warn 365 "-rise/-fall not allowed for net objects." -tcl/Sdc.tcl: sta_error 578 "port '[get_name $port]' is not an input." -tcl/Sdc.tcl: sta_warn 366 "-data_path, -clock_path, -rise, -fall ignored for ports and designs." -tcl/Sdc.tcl: sta_warn 367 "derating factor greater than 2.0." -tcl/Sdc.tcl: sta_warn 368 "-cell_delay and -cell_check flags ignored for net objects." -tcl/Sdc.tcl: sta_warn 369 "no valid objects specified for $key." -tcl/Sdc.tcl: sta_warn 370 "no valid objects specified for $key" -tcl/Sdc.tcl: sta_warn 370 "no valid objects specified for $key." -tcl/Sdc.tcl: sta_error 579 "operating condition '$op_cond_name' not found." -tcl/Sdc.tcl: sta_error 580 "operating condition '$op_cond_name' not found." -tcl/Sdc.tcl: sta_error 581 "-analysis_type must be single, bc_wc or on_chip_variation." -tcl/Sdc.tcl: sta_warn 371 "set_wire_load_min_block_size not supported." -tcl/Sdc.tcl: sta_error 582 "mode must be top, enclosed or segmented." -tcl/Sdc.tcl: sta_error 583 "no wire load model specified." -tcl/Sdc.tcl: sta_error 583 "wire load model '$model_name' not found." -tcl/Sdc.tcl: sta_error 584 "wire load selection group '$selection_name' not found." -tcl/Sdc.tcl: sta_error 585 "no default operating conditions found." -tcl/Search.tcl: sta_error 508 "-min and -max cannot both be specified." -tcl/Search.tcl: sta_error 509 "pin '$pin_arg' is hierarchical." -tcl/Search.tcl: sta_error 510 "-format $format not recognized." -tcl/Search.tcl: sta_warn 318 "unknown path group '$name'." -tcl/Sta.tcl: sta_error 419 "report_clock_skew -setup and -hold are mutually exclusive options." -tcl/Sta.tcl: sta_error 420 "$cmd -path_delay must be min, min_rise, min_fall, max, max_rise, max_fall or min_max." -tcl/Sta.tcl: sta_error 421 "$cmd command failed." -tcl/Sta.tcl: sta_error 422 "-endpoint_count must be a positive integer." -tcl/Sta.tcl: sta_error 423 "-group_count must be a positive integer." -tcl/Sta.tcl: sta_error 424 "'$arg' is not a known keyword or flag." -tcl/Sta.tcl: sta_error 425 "positional arguments not supported." -tcl/Sta.tcl: sta_error 426 "analysis type single is not consistent with doing both setup/max and hold/min checks." -tcl/Sta.tcl: sta_error 427 "positional arguments not supported." -tcl/Sta.tcl: sta_error 428 "set_assigned_transition transition is not a float." -tcl/Util.tcl: sta_error 400 "$cmd $key missing value." -tcl/Util.tcl: sta_error 401 "$cmd $key missing value." -tcl/Util.tcl: sta_error 402 "$cmd $arg is not a known keyword or flag." -tcl/Util.tcl: sta_error 403 "$cmd $arg is not a known keyword or flag." -tcl/Util.tcl: sta_error 404 "Usage: $cmd $cmd_args($cmd)" -tcl/Util.tcl: sta_error 405 "Usage: $cmd argument error" -tcl/Util.tcl: sta_warn 300 "no commands match '$pattern'." -tcl/Util.tcl: sta_error 406 "$cmd positional arguments not supported." -tcl/Util.tcl: sta_error 407 "$cmd requires one positional argument." -tcl/Util.tcl: sta_error 408 "$cmd requires zero or one positional arguments." -tcl/Util.tcl: sta_error 409 "$cmd requires two positional arguments." -tcl/Util.tcl: sta_error 410 "$cmd requires one or two positional arguments." -tcl/Util.tcl: sta_error 411 "$cmd requires three positional arguments." -tcl/Util.tcl: sta_error 412 "$cmd requires four positional arguments." -tcl/Util.tcl: sta_error 413 "$cmd_arg '$arg' is not a float." -tcl/Util.tcl: sta_error 414 "$cmd_arg '$arg' is not a positive float." -tcl/Util.tcl: sta_error 415 "$cmd_arg '$arg' is not an integer." -tcl/Util.tcl: sta_error 416 "$cmd_arg '$arg' is not a positive integer." -tcl/Util.tcl: sta_error 417 "$cmd_arg '$arg' is not an integer greater than or equal to one." -tcl/Util.tcl: sta_error 418 "$cmd_arg '$arg' is not between 0 and 100." -tcl/Variables.tcl: sta_error 436 "sta_report_default_digits must be a positive integer." -tcl/Variables.tcl: sta_error 437 "sta_crpr_mode must be pin or transition." -tcl/Variables.tcl: sta_error 438 "$var_name value must be 0 or 1." +0100 CmdArgs.tcl:108 unsupported object type $object_type. +0101 CmdArgs.tcl:166 object '$obj' not found. +0102 CmdArgs.tcl:405 $corner_name is not the name of process corner. +0103 CmdArgs.tcl:410 -corner keyword required with multi-corner analysis. +0104 CmdArgs.tcl:425 $corner_name is not the name of process corner. +0105 CmdArgs.tcl:430 missing -corner arg. +0106 CmdArgs.tcl:441 $corner_name is not the name of process corner. +0107 CmdArgs.tcl:458 $corner_name is not the name of process corner. +0108 CmdArgs.tcl:483 both -min and -max specified. +0109 CmdArgs.tcl:497 both -min and -max specified. +0110 CmdArgs.tcl:524 only one of -early and -late can be specified. +0111 CmdArgs.tcl:530 -early or -late must be specified. +0112 CmdArgs.tcl:537 both -early and -late specified. +0113 CmdArgs.tcl:552 $arg_name must be a single library. +0114 CmdArgs.tcl:558 $arg_name type '$object_type' is not a library. +0115 CmdArgs.tcl:563 library '$arg' not found. +0116 CmdArgs.tcl:580 $arg_name must be a single lib cell. +0123 CmdArgs.tcl:667 $arg_name must be a single instance. +0124 CmdArgs.tcl:673 $arg_name type '$object_type' is not an instance. +0125 CmdArgs.tcl:678 instance '$arg' not found. +0126 CmdArgs.tcl:697 $arg_name type '$object_type' is not an instance. +0127 CmdArgs.tcl:704 instance '$arg' not found. +0131 CmdArgs.tcl:765 $arg_name type '$object_type' is not a pin or port. +0132 CmdArgs.tcl:772 pin '$arg' not found. +0133 CmdArgs.tcl:792 $arg_name type '$object_type' is not a port. +0139 CmdArgs.tcl:873 unsupported object type $object_type. +0141 CmdArgs.tcl:894 $arg_name '$object_type' is not a net. +0142 CmdArgs.tcl:918 unsupported object type $object_type. +0143 CmdArgs.tcl:899 $arg_name '$arg' not found. +0160 CmdUtil.tcl:44 no commands match '$pattern'. +0161 CmdUtil.tcl:89 Usage: $cmd $cmd_args($cmd) +0162 CmdUtil.tcl:91 Usage: $cmd argument error +0163 CmdUtil.tcl:161 unknown $unit unit '$suffix'. +0164 CmdUtil.tcl:209 unsupported object type $list_type. +0165 CmdUtil.tcl:226 unknown namespace $namespc. +0180 DelayCalc.tcl:119 delay calculator $alg not found. +0181 DelayCalc.tcl:148 $cmd missing -from argument. +0182 DelayCalc.tcl:153 $cmd missing -to argument. +0183 DelayCalc.tcl:158 $cmd delay is not a float. +0184 DelayCalc.tcl:163 set_annotated_delay -cell and -net options are mutually excluive. +0185 DelayCalc.tcl:169 $cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst]. +0186 DelayCalc.tcl:174 $cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst] +0187 DelayCalc.tcl:179 $cmd -cell or -net required. +0188 DelayCalc.tcl:243 $cmd missing -from argument. +0189 DelayCalc.tcl:252 $cmd -clock must be rise or fall. +0190 DelayCalc.tcl:259 $cmd missing -to argument. +0191 DelayCalc.tcl:274 $cmd missing -setup|-hold|-recovery|-removal check type.. +0192 DelayCalc.tcl:282 $cmd check_value is not a float. +0210 DelayCalc.tcl:350 set_assigned_transition transition is not a float. +0220 Link.tcl:34 missing top_cell_name argument and no current_design. +0230 Network.tcl:35 instance $instance_path not found. +0231 Network.tcl:221 net $net_path not found. +0232 Network.tcl:224 net $net_path not found. +0250 NetworkEdit.tcl:107 unsupported object type $object_type. +0251 NetworkEdit.tcl:137 connect_pins is deprecated. Use connect_pin. +0252 NetworkEdit.tcl:206 unsupported object type $object_type. +0253 NetworkEdit.tcl:224 unsupported object type $object_type. +0266 Sta.cc:2105 '%s' is not a valid endpoint. +0267 Sta.cc:2029 '%s' is not a valid start point. +0270 Parasitics.tcl:45 path instance '$path' not found. +0271 Parasitics.tcl:62 -reduce_to must be pi_elmore or pi_pole_residue2. +0272 Parasitics.tcl:70 read_spef -increment is deprecated. +0301 Power.tcl:220 activity should be 0.0 to 1.0 or 2.0 +0302 Power.tcl:228 duty should be 0.0 to 1.0 +0303 Power.tcl:243 activity cannot be set on clock ports. +0320 Property.tcl:32 $cmd object is null. +0321 Property.tcl:37 $cmd $type_key must be specified with object name argument. +0322 Property.tcl:77 get_property unsupported object type $object_type. +0323 Property.tcl:80 get_property $object is not an object. +0324 Property.tcl:107 $object_type not supported. +0325 Property.tcl:110 $object_type '$object_name' not found. +0340 Sdc.tcl:73 cannot open '$filename'. +0341 Sdc.tcl:128 incomplete command at end of file. +0342 Sdc.tcl:212 hierarchy separator must be one of '$sdc_dividers'. +0343 Sdc.tcl:259 unknown unit $unit '$suffix'. +0344 Sdc.tcl:281 unknown $unit prefix '$prefix'. +0345 Sdc.tcl:288 $unit scale [format %.0e $scale] does not match library scale [format %.0e $unit_scale]. +0346 Sdc.tcl:394 only one of -cells, -data_pins, -clock_pins, -async_pins, -output_pins are suppported. +0347 Sdc.tcl:437 current_design for other than top cell not supported. +0348 Sdc.tcl:473 patterns argument not supported with -of_objects. +0349 Sdc.tcl:506 instance '$pattern' not found. +0350 Sdc.tcl:539 unsupported instance -filter expression. +0351 Sdc.tcl:566 clock '$pattern' not found. +0352 Sdc.tcl:592 positional arguments not supported with -of_objects. +0353 Sdc.tcl:619 library '$lib_name' not found. +0354 Sdc.tcl:631 cell '$cell_pattern' not found. +0355 Sdc.tcl:678 library/cell/port '$pattern' not found. +0356 Sdc.tcl:698 port '$port_pattern' not found. +0357 Sdc.tcl:703 library '$lib_name' not found. +0358 Sdc.tcl:713 -nocase ignored without -regexp. +0359 Sdc.tcl:739 library '$pattern' not found. +0360 Sdc.tcl:802 patterns argument not supported with -of_objects. +0361 Sdc.tcl:826 net '$pattern' not found. +0362 Sdc.tcl:855 patterns argument not supported with -of_objects. +0363 Sdc.tcl:892 pin '$pattern' not found. +0364 Sdc.tcl:924 unsupported pin -filter expression. +0365 Sdc.tcl:949 patterns argument not supported with -of_objects. +0366 Sdc.tcl:963 port '$pattern' not found. +0367 Sdc.tcl:1000 unsupported port -filter expression. +0368 Sdc.tcl:1033 -add requires -name. +0369 Sdc.tcl:1038 -name or port_pin_list must be specified. +0370 Sdc.tcl:1046 missing -period argument. +0371 Sdc.tcl:1052 -waveform edge_list must have an even number of edge times. +0372 Sdc.tcl:1061 non-increasing clock -waveform edge times. +0373 Sdc.tcl:1064 -waveform time greater than two periods. +0374 Sdc.tcl:1122 empty ports/pins/nets argument. +0375 Sdc.tcl:1130 -add requires -name. +0376 Sdc.tcl:1135 name or port_pin_list must be specified. +0377 Sdc.tcl:1142 missing -source argument. +0378 Sdc.tcl:1157 -master_clock argument empty. +0379 Sdc.tcl:1160 -add requireds -master_clock. +0380 Sdc.tcl:1164 -multiply_by and -divide_by options are exclusive. +0381 Sdc.tcl:1168 -divide_by is not an integer greater than one. +0382 Sdc.tcl:1171 -combinational implies -divide_by 1. +0383 Sdc.tcl:1176 -multiply_by is not an integer greater than one. +0384 Sdc.tcl:1182 -duty_cycle is not a float between 0 and 100. +0385 Sdc.tcl:1188 -edges only supported for three edges. +0386 Sdc.tcl:1194 edges times are not monotonically increasing. +0387 Sdc.tcl:1203 -edge_shift length does not match -edges length. +0388 Sdc.tcl:1209 missing -multiply_by, -divide_by, -combinational or -edges argument. +0389 Sdc.tcl:1217 cannot specify -invert without -multiply_by, -divide_by or -combinational. +0390 Sdc.tcl:1223 -duty_cycle requires -multiply_by value. +0391 Sdc.tcl:1283 group_path command failed. +0392 Sdc.tcl:1290 positional arguments not supported. +0393 Sdc.tcl:1294 -from, -through or -to required. +0394 Sdc.tcl:1300 -name and -default are mutually exclusive. +0395 Sdc.tcl:1302 -name or -default option is required. +0396 Sdc.tcl:1343 cannot specify both -high and -low. +0397 Sdc.tcl:1351 missing -setup or -hold argument. +0398 Sdc.tcl:1365 -high and -low only permitted for pins and instances. +0399 Sdc.tcl:1372 -high and -low only permitted for pins and instances. +0400 Sdc.tcl:1415 one of -logically_exclusive, -physically_exclusive or -asynchronous is required. +0401 Sdc.tcl:1418 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive. +0402 Sdc.tcl:1437 unknown keyword argument $arg. +0403 Sdc.tcl:1439 extra positional argument $arg. +0404 Sdc.tcl:1468 the -all and -name options are mutually exclusive. +0405 Sdc.tcl:1471 either -all or -name options must be specified. +0406 Sdc.tcl:1479 one of -logically_exclusive, -physically_exclusive or -asynchronous is required. +0407 Sdc.tcl:1482 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive. +0408 Sdc.tcl:1532 -clock ignored for clock objects. +0409 Sdc.tcl:1546 -source '[get_full_name $pin]' is not a clock pin. +0410 Sdc.tcl:1553 -early/-late is only allowed with -source. +0411 Sdc.tcl:1582 -clock ignored for clock objects. +0412 Sdc.tcl:1594 -source '[$pin path_name]' is not a clock pin. +0413 Sdc.tcl:1622 set_sense -type data not supported. +0414 Sdc.tcl:1626 set_sense -type clock|data +0415 Sdc.tcl:1637 set_clock_sense is deprecated as of SDC 2.1. Use set_sense -type clock. +0416 Sdc.tcl:1649 -pulse argument not supported. +0417 Sdc.tcl:1658 -positive, -negative, -stop_propagation and -pulse are mutually exclusive. +0418 Sdc.tcl:1671 hierarchical pin '[get_full_name $pin]' not supported. +0419 Sdc.tcl:1695 transition time can not be specified for virtual clocks. +0420 Sdc.tcl:1728 missing uncertainty value. +0421 Sdc.tcl:1776 -from/-to must be used together. +0422 Sdc.tcl:1796 -rise, -fall options not allowed for single clock uncertainty. +0423 Sdc.tcl:1862 -from/-to must be used together. +0424 Sdc.tcl:1882 -rise, -fall options not allowed for single clock uncertainty. +0425 Sdc.tcl:1923 missing -from, -rise_from or -fall_from argument. +0426 Sdc.tcl:1935 missing -to, -rise_to or -fall_to argument. +0427 Sdc.tcl:1983 missing -from, -rise_from or -fall_from argument. +0428 Sdc.tcl:1995 missing -to, -rise_to or -fall_to argument. +0429 Sdc.tcl:2037 -from/-to keywords ignored for lib_pin, port and pin arguments. +0430 Sdc.tcl:2067 -from/-to hierarchical instance not supported. +0431 Sdc.tcl:2099 pin '[get_full_name $inst]${hierarchy_separator}${port_name}' not found. +0432 Sdc.tcl:2140 pin '[get_name $cell]${hierarchy_separator}${port_name}' not found. +0434 Sdc.tcl:2174 -from/-to keywords ignored for lib_pin, port and pin arguments. +0435 Sdc.tcl:2226 -from/-to hierarchical instance not supported. +0436 Sdc.tcl:2280 '$args' ignored. +0437 Sdc.tcl:2284 -from, -through or -to required. +0438 Sdc.tcl:2363 -source_latency_included ignored with -reference_pin. +0439 Sdc.tcl:2366 -network_latency_included ignored with -reference_pin. +0440 Sdc.tcl:2385 $cmd not allowed on [pin_direction $pin] port '[get_full_name $pin]'. +0441 Sdc.tcl:2387 $cmd relative to a clock defined on the same port/pin not allowed. +0442 Sdc.tcl:2435 missing delay argument. +0443 Sdc.tcl:2441 '$args' ignored. +0444 Sdc.tcl:2566 missing path multiplier argument. +0445 Sdc.tcl:2571 '$args' ignored. +0446 Sdc.tcl:2578 cannot use -start with -end. +0447 Sdc.tcl:2628 $cmd command failed. +0448 Sdc.tcl:2635 positional arguments not supported. +0449 Sdc.tcl:2639 -from, -through or -to required. +0450 Sdc.tcl:2706 virtual clock [get_name $clk] can not be propagated. +0451 Sdc.tcl:2748 value must be 0, zero, 1, one, rise, rising, fall, or falling. +0452 Sdc.tcl:2817 cell '$lib_name:$cell_name' not found. +0453 Sdc.tcl:2823 '$cell_name' not found. +0454 Sdc.tcl:2827 missing -lib_cell argument. +0455 Sdc.tcl:2835 port '$to_port_name' not found. +0456 Sdc.tcl:2847 -pin argument required for cells with multiple outputs. +0457 Sdc.tcl:2862 port '$from_port_name' not found. +0458 Sdc.tcl:2880 -multiply_by ignored. +0459 Sdc.tcl:2883 -dont_scale ignored. +0460 Sdc.tcl:2886 -no_design_rule ignored. +0461 Sdc.tcl:2909 set_fanout_load not supported. +0462 Sdc.tcl:2933 -clock not supported. +0463 Sdc.tcl:2936 -clock_fall not supported. +0464 Sdc.tcl:2982 -pin_load not allowed for net objects. +0465 Sdc.tcl:2985 -wire_load not allowed for net objects. +0466 Sdc.tcl:2988 -rise/-fall not allowed for net objects. +0467 Sdc.tcl:3075 port '[get_name $port]' is not an input. +0468 Sdc.tcl:3121 -data_path, -clock_path, -rise, -fall ignored for ports and designs. +0469 Sdc.tcl:3192 derating factor greater than 2.0. +0470 Sdc.tcl:3229 -cell_delay and -cell_check flags ignored for net objects. +0471 Sdc.tcl:3299 no valid objects specified for $key. +0472 Sdc.tcl:3332 no valid objects specified for $key +0473 Sdc.tcl:3381 no valid objects specified for $key. +0474 Sdc.tcl:3449 operating condition '$op_cond_name' not found. +0475 Sdc.tcl:3467 operating condition '$op_cond_name' not found. +0476 Sdc.tcl:3481 -analysis_type must be single, bc_wc or on_chip_variation. +0477 Sdc.tcl:3493 set_wire_load_min_block_size not supported. +0478 Sdc.tcl:3506 mode must be top, enclosed or segmented. +0479 Sdc.tcl:3521 no wire load model specified. +0480 Sdc.tcl:3543 wire load model '$model_name' not found. +0481 Sdc.tcl:3582 wire load selection group '$selection_name' not found. +0482 Sdc.tcl:3670 define_corners must be called before read_liberty. +0500 Sdc.tcl:3740 no default operating conditions found. +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:326 report_clock_skew -setup and -hold are mutually exclusive options. +0517 Search.tcl:411 -all_violators is deprecated. Use -violators +0518 Search.tcl:491 -max_transition deprecated. Use -max_slew. +0519 Search.tcl:496 -min_transition deprecated. Use -min_slew. +0520 Search.tcl:510 analysis type single is not consistent with doing both setup/max and hold/min checks. +0521 Search.tcl:515 positional arguments not supported. +0522 Search.tcl:778 -min and -max cannot both be specified. +0523 Search.tcl:798 pin '$pin_arg' is hierarchical. +0524 Search.tcl:864 -format $format not recognized. +0525 Search.tcl:904 The transition_time field is deprecated. Use slew instead. +0526 Search.tcl:1011 specify one of -setup and -hold. +0527 Search.tcl:1060 unknown path group '$name'. +0540 Sta.tcl:158 -from/-to arguments not supported with -of_objects. +0541 Sta.tcl:286 unsupported -filter expression. +0560 Util.tcl:44 $cmd $key missing value. +0561 Util.tcl:61 $cmd $key missing value. +0562 Util.tcl:71 $cmd $arg is not a known keyword or flag. +0563 Util.tcl:93 $cmd $arg is not a known keyword or flag. +0564 Util.tcl:241 $cmd positional arguments not supported. +0565 Util.tcl:247 $cmd requires one positional argument. +0566 Util.tcl:254 $cmd requires zero or one positional arguments. +0567 Util.tcl:260 $cmd requires two positional arguments. +0568 Util.tcl:267 $cmd requires one or two positional arguments. +0569 Util.tcl:273 $cmd requires three positional arguments. +0570 Util.tcl:279 $cmd requires four positional arguments. +0571 Util.tcl:287 $cmd_arg '$arg' is not a float. +0572 Util.tcl:293 $cmd_arg '$arg' is not a positive float. +0573 Util.tcl:299 $cmd_arg '$arg' is not an integer. +0574 Util.tcl:305 $cmd_arg '$arg' is not a positive integer. +0575 Util.tcl:311 $cmd_arg '$arg' is not an integer greater than or equal to one. +0576 Util.tcl:317 $cmd_arg '$arg' is not between 0 and 100. +0590 Variables.tcl:45 sta_report_default_digits must be a positive integer. +0591 Variables.tcl:70 sta_crpr_mode must be pin or transition. +0592 Variables.tcl:187 $var_name value must be 0 or 1. +0600 WritePathSpice.tcl:36 Directory $spice_dir not found. +0601 WritePathSpice.tcl:39 $spice_dir is not a directory. +0602 WritePathSpice.tcl:42 Cannot write in $spice_dir. +0603 WritePathSpice.tcl:45 No -spice_directory specified. +0604 WritePathSpice.tcl:51 -lib_subckt_file $lib_subckt_file is not readable. +0605 WritePathSpice.tcl:54 No -lib_subckt_file specified. +0606 WritePathSpice.tcl:60 -model_file $model_file is not readable. +0607 WritePathSpice.tcl:63 No -model_file specified. +0608 WritePathSpice.tcl:69 No -power specified. +0609 WritePathSpice.tcl:75 No -ground specified. +0610 WritePathSpice.tcl:81 No -path_args specified. +0611 WritePathSpice.tcl:86 No paths found for -path_args $path_args. +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. +0622 Sdf.tcl:50 -analysis_type is deprecated. Use set_operating_conditions -analysis_type. +0623 Sdf.tcl:157 SDF -divider must be / or . +0800 VcdReader.cc:110 unhandled vcd command. +0801 VcdReader.cc:146 timescale syntax error. +0802 VcdReader.cc:160 Unknown timescale unit. +0804 VcdReader.cc:217 Variable syntax error. +1000 ConcreteNetwork.cc:1923 cell type %s can not be linked. +1010 CycleAccting.cc:87 No common period was found between clocks %s and %s. +1020 DelayNormal1.cc:203 unknown early/late value. +1030 DelayNormal2.cc:378 unknown early/late value. +1040 DmpCeff.cc:1554 parasitic Pi model has NaNs. +1041 DmpCeff.cc:1582 cell %s delay model not supported on SPF parasitics by DMP delay calculator +1050 EstimateParasitics.cc:188 load pin not leaf or top level +1060 Genclks.cc:274 no master clock found for generated clock %s. +1062 Genclks.cc:938 generated clock %s source pin %s missing paths from master clock %s. +1080 Graph.cc:793 arc_delay_annotated array bounds exceeded +1081 Graph.cc:808 arc_delay_annotated array bounds exceeded +1082 Graph.cc:820 arc_delay_annotated array bounds exceeded +1083 Graph.cc:833 arc_delay_annotated array bounds exceeded +1100 GraphDelayCalc.cc:480 port not found in cell +1110 Liberty.cc:766 cell %s/%s port %s not found in cell %s/%s. +1111 Liberty.cc:792 cell %s/%s %s -> %s timing group %s not found in cell %s/%s. +1112 Liberty.cc:811 Liberty cell %s/%s for corner %s/%s not found. +1113 Liberty.cc:1748 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with %s -> %s setup_%s check. +1114 Liberty.cc:1762 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function positive sense. +1115 Liberty.cc:1770 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function negative sense. +1130 LibertyExpr.cc:82 %s references unknown port %s. +1131 LibertyExpr.cc:175 %s %s. +1140 LibertyReader.cc:598 library %s already exists. +1141 LibertyReader.cc:632 library missing name. +1142 LibertyReader.cc:658 default_wire_load %s not found. +1143 LibertyReader.cc:669 default_wire_selection %s not found. +1144 LibertyReader.cc:681 default_operating_condition %s not found. +1145 LibertyReader.cc:691 input_threshold_pct_%s not found. +1146 LibertyReader.cc:695 output_threshold_pct_%s not found. +1147 LibertyReader.cc:699 slew_lower_threshold_pct_%s not found. +1148 LibertyReader.cc:703 slew_upper_threshold_pct_%s not found. +1149 LibertyReader.cc:708 Library %s is missing one or more thresholds. +1150 LibertyReader.cc:787 unknown unit multiplier %s. +1151 LibertyReader.cc:810 unknown unit scale %c. +1152 LibertyReader.cc:813 unknown unit suffix %s. +1153 LibertyReader.cc:816 unknown unit suffix %s. +1154 LibertyReader.cc:841 capacitive_load_units are not ff or pf. +1155 LibertyReader.cc:844 capacitive_load_units are not a string. +1156 LibertyReader.cc:847 capacitive_load_units missing suffix. +1157 LibertyReader.cc:850 capacitive_load_units scale is not a float. +1158 LibertyReader.cc:853 capacitive_load_units missing scale and suffix. +1159 LibertyReader.cc:856 capacitive_load_unit missing values suffix. +1160 LibertyReader.cc:874 delay_model %s not supported. +1161 LibertyReader.cc:878 delay_model %s not supported. +1162 LibertyReader.cc:882 delay_model %s not supported. +1163 LibertyReader.cc:887 delay_model %s not supported. +. +1164 LibertyReader.cc:890 unknown delay_model %s +. +1165 LibertyReader.cc:909 unknown bus_naming_style format. +1166 LibertyReader.cc:930 voltage_map voltage is not a float. +1167 LibertyReader.cc:933 voltage_map missing voltage. +1168 LibertyReader.cc:936 voltage_map supply name is not a string. +1169 LibertyReader.cc:939 voltage_map missing supply name and voltage. +1170 LibertyReader.cc:942 voltage_map missing values suffix. +1171 LibertyReader.cc:1027 default_max_transition is 0.0. +1172 LibertyReader.cc:1042 default_max_fanout is 0.0. +1173 LibertyReader.cc:1132 default_fanout_load is 0.0. +1174 LibertyReader.cc:1160 default_wire_load_mode %s not found. +1175 LibertyReader.cc:1331 table template missing name. +1176 LibertyReader.cc:1376 missing variable_%d attribute. +1177 LibertyReader.cc:1452 missing table index values. +1178 LibertyReader.cc:1458 non-increasing table index values. +1179 LibertyReader.cc:1490 bus type %s missing bit_from. +1180 LibertyReader.cc:1492 bus type %s missing bit_to. +1181 LibertyReader.cc:1496 type missing name. +1182 LibertyReader.cc:1523 scaling_factors do not have a name. +1183 LibertyReader.cc:1692 operating_conditions missing name. +1184 LibertyReader.cc:1763 wire_load missing name. +1185 LibertyReader.cc:1806 fanout_length is missing length and fanout. +1186 LibertyReader.cc:1821 wire_load_selection missing name. +1187 LibertyReader.cc:1852 wireload %s not found. +1189 LibertyReader.cc:1859 wire_load_from_area min not a float. +1190 LibertyReader.cc:1862 wire_load_from_area max not a float. +1191 LibertyReader.cc:1865 wire_load_from_area missing parameters. +1192 LibertyReader.cc:1868 wire_load_from_area missing parameters. +1193 LibertyReader.cc:1887 cell missing name. +1194 LibertyReader.cc:1910 cell %s ocv_derate_group %s not found. +1195 LibertyReader.cc:1941 port %s function size does not match port size. +1196 LibertyReader.cc:1997 %s %s bus width mismatch. +1197 LibertyReader.cc:2008 %s %s bus width mismatch. +1198 LibertyReader.cc:2018 clear +1199 LibertyReader.cc:2028 preset +1200 LibertyReader.cc:2064 latch enable function is non-unate for port %s. +1201 LibertyReader.cc:2069 latch enable function is unknown for port %s. +1202 LibertyReader.cc:2141 operating conditions %s not found. +1203 LibertyReader.cc:2144 scaled_cell missing operating condition. +1204 LibertyReader.cc:2147 scaled_cell cell %s has not been defined. +1205 LibertyReader.cc:2150 scaled_cell missing name. +1206 LibertyReader.cc:2176 scaled_cell %s, %s port functions do not match cell port functions. +1207 LibertyReader.cc:2181 scaled_cell ports do not match cell ports. +1208 LibertyReader.cc:2183 scaled_cell %s, %s timing does not match cell timing. +1209 LibertyReader.cc:2202 combinational timing to an input port. +1210 LibertyReader.cc:2297 missing %s_transition. +1211 LibertyReader.cc:2299 missing cell_%s. +1212 LibertyReader.cc:2319 timing group from output port. +1213 LibertyReader.cc:2329 timing group from output port. +1214 LibertyReader.cc:2339 timing group from output port. +1215 LibertyReader.cc:2357 timing group from output port. +1217 LibertyReader.cc:2373 timing group from output port. +1218 LibertyReader.cc:2460 receiver_capacitance group not in timing or pin group. +1219 LibertyReader.cc:2477 unsupported model axis. +1220 LibertyReader.cc:2505 output_current_%s group not in timing group. +1221 LibertyReader.cc:2546 output current waveform %.2e %.2e not found. +1222 LibertyReader.cc:2566 unsupported model axis. +1223 LibertyReader.cc:2608 vector index_1 and index_2 must have exactly one value. +1224 LibertyReader.cc:2610 vector reference_time not found. +1225 LibertyReader.cc:2643 normalized_driver_waveform variable_2 must be normalized_voltage +1226 LibertyReader.cc:2646 normalized_driver_waveform variable_1 must be input_net_transition +1227 SpefReader.cc:732 %s. +1228 LibertyReader.cc:2868 level_shifter_type must be HL, LH, or HL_LH +1229 LibertyReader.cc:2904 switch_cell_type must be coarse_grain or fine_grain +1230 LibertyReader.cc:2928 scaling_factors %s not found. +1231 LibertyReader.cc:2969 pin name is not a string. +1232 LibertyReader.cc:2986 pin name is not a string. +1233 LibertyReader.cc:3000 pin name is not a string. +1234 LibertyReader.cc:3078 bus %s bus_type not found. +1235 LibertyReader.cc:3130 bus_type %s not found. +1236 LibertyReader.cc:3133 bus_type is not a string. +1237 LibertyReader.cc:3151 bundle %s member not found. +1238 LibertyReader.cc:3174 member is not a string. +1239 LibertyReader.cc:3181 members attribute is missing values. +1240 LibertyReader.cc:3232 unknown port direction. +1241 LibertyReader.cc:3466 max_transition is 0.0. +1242 LibertyReader.cc:3572 pulse_latch unknown pulse type. +1243 LibertyReader.cc:3861 timing group missing related_pin/related_bus_pin. +1244 LibertyReader.cc:3942 unknown timing_type %s. +1245 LibertyReader.cc:3962 unknown timing_sense %s. +1246 LibertyReader.cc:4002 mode value is not a string. +1247 LibertyReader.cc:4005 missing mode value. +1248 LibertyReader.cc:4008 mode name is not a string. +1249 LibertyReader.cc:4011 mode missing values. +1250 LibertyReader.cc:4014 mode missing mode name and value. +1251 LibertyReader.cc:4090 unsupported model axis. +1252 LibertyReader.cc:4117 unsupported model axis. +1253 LibertyReader.cc:4146 unsupported model axis. +1254 LibertyReader.cc:4181 unsupported model axis. +1255 LibertyReader.cc:4197 %s group not in timing group. +1256 LibertyReader.cc:4236 table template %s not found. +1257 LibertyReader.cc:4320 %s is missing values. +1258 LibertyReader.cc:4343 %s is not a list of floats. +1259 LibertyReader.cc:4345 table row has %u columns but axis has %d. +1260 LibertyReader.cc:4355 table has %u rows but axis has %d. +1261 LibertyReader.cc:4406 lut output is not a string. +1262 LibertyReader.cc:4423 cell %s test_cell redefinition. +1263 LibertyReader.cc:4448 mode definition missing name. +1264 LibertyReader.cc:4465 mode value missing name. +1265 LibertyReader.cc:4479 when attribute inside table model. +1266 LibertyReader.cc:4528 %s attribute is not a string. +1267 LibertyReader.cc:4531 %s is not a simple attribute. +1268 LibertyReader.cc:4551 %s attribute is not an integer. +1269 LibertyReader.cc:4554 %s is not a simple attribute. +1270 LibertyReader.cc:4567 %s is not a simple attribute. +1271 LibertyReader.cc:4593 %s value %s is not a float. +1272 LibertyReader.cc:4622 %s missing values. +1273 LibertyReader.cc:4626 %s missing values. +1274 LibertyReader.cc:4629 %s is not a complex attribute. +1275 LibertyReader.cc:4655 %s is not a float. +1276 LibertyReader.cc:4678 %s is missing values. +1277 LibertyReader.cc:4681 %s has more than one string. +1278 LibertyReader.cc:4690 %s is missing values. +1279 LibertyReader.cc:4715 %s attribute is not boolean. +1280 LibertyReader.cc:4718 %s attribute is not boolean. +1281 LibertyReader.cc:4721 %s is not a simple attribute. +1282 LibertyReader.cc:4737 attribute %s value %s not recognized. +1283 LibertyReader.cc:4768 unknown early/late value. +1284 LibertyReader.cc:4988 OCV derate group named %s not found. +1285 LibertyReader.cc:5004 ocv_derate missing name. +1286 LibertyReader.cc:5057 unknown rise/fall. +1287 LibertyReader.cc:5077 unknown derate type. +1288 LibertyReader.cc:5109 unsupported model axis. +1289 LibertyReader.cc:5141 unsupported model axis. +1290 LibertyReader.cc:5173 unsupported model axis. +1291 LibertyReader.cc:5244 unknown pg_type. +1292 LibertyReader.cc:5639 port %s subscript out of range. +1293 LibertyReader.cc:5643 port range %s of non-bus port %s. +1294 LibertyReader.cc:5657 port %s not found. +1295 LibertyReader.cc:5727 port %s not found. +1297 LibertyReader.cc:1418 axis type %s not supported. +1330 LibertyWriter.cc:286 %s/%s bundled ports not supported. +1331 LibertyWriter.cc:417 %s/%s/%s timing model not supported. +1332 LibertyWriter.cc:437 3 axis table models not supported. +1333 LibertyWriter.cc:581 %s/%s/%s timing arc type %s not supported. +1350 LumpedCapDelayCalc.cc:138 gate delay input variable is NaN +1351 TagGroup.cc:297 tag group missing tag +1355 MakeTimingModel.cc:206 clock %s pin %s is inside model block. +1360 Vcd.cc:172 Unknown variable %s ID %s +1370 PathEnum.cc:474 path diversion missing edge. +1380 PathEnumed.cc:126 enumerated path required time +1381 PathEnumed.cc:135 enumerated path required time +1390 PathGroup.cc:399 unknown path end type +1398 VerilogReader.cc:1782 %s is not a verilog module. +1399 VerilogReader.cc:1787 %s is not a verilog module. +1400 PathVertex.cc:236 missing arrivals. +1401 PathVertex.cc:250 missing arrivals. +1402 PathVertex.cc:279 missing requireds. +1420 PathVertexRep.cc:145 tag group missing tag +1421 PathVertexRep.cc:150 missing arrivals +1422 PathVertexRep.cc:153 missing arrivals. +1440 Power.cc:610 unknown function operator +1450 ReadVcdActivities.cc:107 VCD max time is zero. +1451 ReadVcdActivities.cc:174 problem parsing bus %s. +1452 ReadVcdActivities.cc:251 clock %s vcd period %s differs from SDC clock period %s +1470 ReportPath.cc:289 unsupported path type +1471 ReportPath.cc:310 unsupported path type +1473 ReportPath.cc:349 unsupported path type +1474 ReportPath.cc:2378 unsupported path type +1490 Sdc.cc:4058 group path name and is_default are mutually exclusive. +1500 SdcNetwork.cc:1095 inst path string lenth estimate busted +1501 SdcNetwork.cc:1167 inst path string lenth estimate exceeded +1510 Search.cc:2654 max tag group index exceeded +1511 Search.cc:2890 max tag index exceeded +1512 Search.cc:3617 unexpected filter path +1513 Search.cc:3785 tns incr existing vertex +1520 Sim.cc:209 unknown function operator +1521 Sim.cc:864 propagated logic value %c differs from constraint value of %c on pin %s. +1525 SpefParse.yy:805 %d is not positive. +1526 SpefParse.yy:814 %.4f is not positive. +1527 SpefParse.yy:820 %.4f is not positive. +1550 Sta.cc:2032 '%s' is not a valid start point. +1551 Sta.cc:2108 '%s' is not a valid endpoint. +1552 Sta.cc:2431 maximum corner count exceeded +1553 Sta.cc:4227 corresponding timing arc set not found in equiv cells +1570 StaTcl.i:110 no network has been linked. +1571 StaTcl.i:124 network does not support edits. +1573 StaTcl.i:2749 unknown common clk pessimism mode. +1574 StaTcl.i:2763 POCV support requires compilation with SSTA=1. +1575 StaTcl.i:3001 unknown report path field %s +1576 StaTcl.i:3013 unknown report path field %s +1577 StaTcl.i:3699 unknown clock sense +1600 WritePathSpice.cc:290 No liberty libraries found, +1602 WritePathSpice.cc:523 Liberty pg_port %s/%s missing voltage_name attribute, +1603 WritePathSpice.cc:1102 %s pg_port %s not found, +1604 WritePathSpice.cc:1157 no register/latch found for path from %s to %s, +1605 WritePathSpice.cc:1623 The subkct file %s is missing definitions for %s +1606 WritePathSpice.cc:1721 subckt %s port %s has no corresponding liberty port, pg_port and is not power or ground. +1620 WriteSdc.cc:1254 unknown exception type +1621 WriteSdc.cc:1796 illegal set_logic value +1622 WriteSdc.cc:1837 invalid set_case_analysis value diff --git a/include/sta/WritePathSpice.hh b/include/sta/WritePathSpice.hh index 068b96b2..ce43c42e 100644 --- a/include/sta/WritePathSpice.hh +++ b/include/sta/WritePathSpice.hh @@ -45,6 +45,7 @@ writePathSpice(Path *path, StdStringSet *off_path_pin_names, const char *power_name, const char *gnd_name, + bool measure_stmts, StaState *sta); } // namespace diff --git a/messages.txt b/messages.txt deleted file mode 100644 index 783ee434..00000000 --- a/messages.txt +++ /dev/null @@ -1,513 +0,0 @@ -0100 CmdArgs.tcl:108 unsupported object type $object_type. -0101 CmdArgs.tcl:166 object '$obj' not found. -0102 CmdArgs.tcl:405 $corner_name is not the name of process corner. -0103 CmdArgs.tcl:410 -corner keyword required with multi-corner analysis. -0104 CmdArgs.tcl:425 $corner_name is not the name of process corner. -0105 CmdArgs.tcl:430 missing -corner arg. -0106 CmdArgs.tcl:441 $corner_name is not the name of process corner. -0107 CmdArgs.tcl:458 $corner_name is not the name of process corner. -0108 CmdArgs.tcl:483 both -min and -max specified. -0109 CmdArgs.tcl:497 both -min and -max specified. -0110 CmdArgs.tcl:524 only one of -early and -late can be specified. -0111 CmdArgs.tcl:530 -early or -late must be specified. -0112 CmdArgs.tcl:537 both -early and -late specified. -0113 CmdArgs.tcl:552 $arg_name must be a single library. -0114 CmdArgs.tcl:558 $arg_name type '$object_type' is not a library. -0115 CmdArgs.tcl:563 library '$arg' not found. -0116 CmdArgs.tcl:580 $arg_name must be a single lib cell. -0123 CmdArgs.tcl:667 $arg_name must be a single instance. -0124 CmdArgs.tcl:673 $arg_name type '$object_type' is not an instance. -0125 CmdArgs.tcl:678 instance '$arg' not found. -0126 CmdArgs.tcl:697 $arg_name type '$object_type' is not an instance. -0127 CmdArgs.tcl:704 instance '$arg' not found. -0131 CmdArgs.tcl:765 $arg_name type '$object_type' is not a pin or port. -0132 CmdArgs.tcl:772 pin '$arg' not found. -0133 CmdArgs.tcl:792 $arg_name type '$object_type' is not a port. -0139 CmdArgs.tcl:873 unsupported object type $object_type. -0141 CmdArgs.tcl:894 $arg_name '$object_type' is not a net. -0142 CmdArgs.tcl:918 unsupported object type $object_type. -0143 CmdArgs.tcl:899 $arg_name '$arg' not found. -0160 CmdUtil.tcl:44 no commands match '$pattern'. -0161 CmdUtil.tcl:89 Usage: $cmd $cmd_args($cmd) -0162 CmdUtil.tcl:91 Usage: $cmd argument error -0163 CmdUtil.tcl:161 unknown $unit unit '$suffix'. -0164 CmdUtil.tcl:209 unsupported object type $list_type. -0165 CmdUtil.tcl:226 unknown namespace $namespc. -0180 DelayCalc.tcl:119 delay calculator $alg not found. -0181 DelayCalc.tcl:148 $cmd missing -from argument. -0182 DelayCalc.tcl:153 $cmd missing -to argument. -0183 DelayCalc.tcl:158 $cmd delay is not a float. -0184 DelayCalc.tcl:163 set_annotated_delay -cell and -net options are mutually excluive. -0185 DelayCalc.tcl:169 $cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst]. -0186 DelayCalc.tcl:174 $cmd pin [get_full_name $pin] is not attached to instance [get_full_name $inst] -0187 DelayCalc.tcl:179 $cmd -cell or -net required. -0188 DelayCalc.tcl:243 $cmd missing -from argument. -0189 DelayCalc.tcl:252 $cmd -clock must be rise or fall. -0190 DelayCalc.tcl:259 $cmd missing -to argument. -0191 DelayCalc.tcl:274 $cmd missing -setup|-hold|-recovery|-removal check type.. -0192 DelayCalc.tcl:282 $cmd check_value is not a float. -0210 DelayCalc.tcl:350 set_assigned_transition transition is not a float. -0220 Link.tcl:34 missing top_cell_name argument and no current_design. -0230 Network.tcl:35 instance $instance_path not found. -0231 Network.tcl:221 net $net_path not found. -0232 Network.tcl:224 net $net_path not found. -0250 NetworkEdit.tcl:107 unsupported object type $object_type. -0251 NetworkEdit.tcl:137 connect_pins is deprecated. Use connect_pin. -0252 NetworkEdit.tcl:206 unsupported object type $object_type. -0253 NetworkEdit.tcl:224 unsupported object type $object_type. -0266 Sta.cc:2105 '%s' is not a valid endpoint. -0267 Sta.cc:2029 '%s' is not a valid start point. -0270 Parasitics.tcl:45 path instance '$path' not found. -0271 Parasitics.tcl:62 -reduce_to must be pi_elmore or pi_pole_residue2. -0272 Parasitics.tcl:70 read_spef -increment is deprecated. -0301 Power.tcl:220 activity should be 0.0 to 1.0 or 2.0 -0302 Power.tcl:228 duty should be 0.0 to 1.0 -0303 Power.tcl:243 activity cannot be set on clock ports. -0320 Property.tcl:32 $cmd object is null. -0321 Property.tcl:37 $cmd $type_key must be specified with object name argument. -0322 Property.tcl:77 get_property unsupported object type $object_type. -0323 Property.tcl:80 get_property $object is not an object. -0324 Property.tcl:107 $object_type not supported. -0325 Property.tcl:110 $object_type '$object_name' not found. -0340 Sdc.tcl:73 cannot open '$filename'. -0341 Sdc.tcl:128 incomplete command at end of file. -0342 Sdc.tcl:212 hierarchy separator must be one of '$sdc_dividers'. -0343 Sdc.tcl:259 unknown unit $unit '$suffix'. -0344 Sdc.tcl:281 unknown $unit prefix '$prefix'. -0345 Sdc.tcl:288 $unit scale [format %.0e $scale] does not match library scale [format %.0e $unit_scale]. -0346 Sdc.tcl:394 only one of -cells, -data_pins, -clock_pins, -async_pins, -output_pins are suppported. -0347 Sdc.tcl:437 current_design for other than top cell not supported. -0348 Sdc.tcl:473 patterns argument not supported with -of_objects. -0349 Sdc.tcl:506 instance '$pattern' not found. -0350 Sdc.tcl:539 unsupported instance -filter expression. -0351 Sdc.tcl:566 clock '$pattern' not found. -0352 Sdc.tcl:592 positional arguments not supported with -of_objects. -0353 Sdc.tcl:619 library '$lib_name' not found. -0354 Sdc.tcl:631 cell '$cell_pattern' not found. -0355 Sdc.tcl:678 library/cell/port '$pattern' not found. -0356 Sdc.tcl:698 port '$port_pattern' not found. -0357 Sdc.tcl:703 library '$lib_name' not found. -0358 Sdc.tcl:713 -nocase ignored without -regexp. -0359 Sdc.tcl:739 library '$pattern' not found. -0360 Sdc.tcl:802 patterns argument not supported with -of_objects. -0361 Sdc.tcl:826 net '$pattern' not found. -0362 Sdc.tcl:855 patterns argument not supported with -of_objects. -0363 Sdc.tcl:892 pin '$pattern' not found. -0364 Sdc.tcl:924 unsupported pin -filter expression. -0365 Sdc.tcl:949 patterns argument not supported with -of_objects. -0366 Sdc.tcl:963 port '$pattern' not found. -0367 Sdc.tcl:1000 unsupported port -filter expression. -0368 Sdc.tcl:1033 -add requires -name. -0369 Sdc.tcl:1038 -name or port_pin_list must be specified. -0370 Sdc.tcl:1046 missing -period argument. -0371 Sdc.tcl:1052 -waveform edge_list must have an even number of edge times. -0372 Sdc.tcl:1061 non-increasing clock -waveform edge times. -0373 Sdc.tcl:1064 -waveform time greater than two periods. -0374 Sdc.tcl:1122 empty ports/pins/nets argument. -0375 Sdc.tcl:1130 -add requires -name. -0376 Sdc.tcl:1135 name or port_pin_list must be specified. -0377 Sdc.tcl:1142 missing -source argument. -0378 Sdc.tcl:1157 -master_clock argument empty. -0379 Sdc.tcl:1160 -add requireds -master_clock. -0380 Sdc.tcl:1164 -multiply_by and -divide_by options are exclusive. -0381 Sdc.tcl:1168 -divide_by is not an integer greater than one. -0382 Sdc.tcl:1171 -combinational implies -divide_by 1. -0383 Sdc.tcl:1176 -multiply_by is not an integer greater than one. -0384 Sdc.tcl:1182 -duty_cycle is not a float between 0 and 100. -0385 Sdc.tcl:1188 -edges only supported for three edges. -0386 Sdc.tcl:1194 edges times are not monotonically increasing. -0387 Sdc.tcl:1203 -edge_shift length does not match -edges length. -0388 Sdc.tcl:1209 missing -multiply_by, -divide_by, -combinational or -edges argument. -0389 Sdc.tcl:1217 cannot specify -invert without -multiply_by, -divide_by or -combinational. -0390 Sdc.tcl:1223 -duty_cycle requires -multiply_by value. -0391 Sdc.tcl:1283 group_path command failed. -0392 Sdc.tcl:1290 positional arguments not supported. -0393 Sdc.tcl:1294 -from, -through or -to required. -0394 Sdc.tcl:1300 -name and -default are mutually exclusive. -0395 Sdc.tcl:1302 -name or -default option is required. -0396 Sdc.tcl:1343 cannot specify both -high and -low. -0397 Sdc.tcl:1351 missing -setup or -hold argument. -0398 Sdc.tcl:1365 -high and -low only permitted for pins and instances. -0399 Sdc.tcl:1372 -high and -low only permitted for pins and instances. -0400 Sdc.tcl:1415 one of -logically_exclusive, -physically_exclusive or -asynchronous is required. -0401 Sdc.tcl:1418 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive. -0402 Sdc.tcl:1437 unknown keyword argument $arg. -0403 Sdc.tcl:1439 extra positional argument $arg. -0404 Sdc.tcl:1468 the -all and -name options are mutually exclusive. -0405 Sdc.tcl:1471 either -all or -name options must be specified. -0406 Sdc.tcl:1479 one of -logically_exclusive, -physically_exclusive or -asynchronous is required. -0407 Sdc.tcl:1482 the keywords -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive. -0408 Sdc.tcl:1532 -clock ignored for clock objects. -0409 Sdc.tcl:1546 -source '[get_full_name $pin]' is not a clock pin. -0410 Sdc.tcl:1553 -early/-late is only allowed with -source. -0411 Sdc.tcl:1582 -clock ignored for clock objects. -0412 Sdc.tcl:1594 -source '[$pin path_name]' is not a clock pin. -0413 Sdc.tcl:1622 set_sense -type data not supported. -0414 Sdc.tcl:1626 set_sense -type clock|data -0415 Sdc.tcl:1637 set_clock_sense is deprecated as of SDC 2.1. Use set_sense -type clock. -0416 Sdc.tcl:1649 -pulse argument not supported. -0417 Sdc.tcl:1658 -positive, -negative, -stop_propagation and -pulse are mutually exclusive. -0418 Sdc.tcl:1671 hierarchical pin '[get_full_name $pin]' not supported. -0419 Sdc.tcl:1695 transition time can not be specified for virtual clocks. -0420 Sdc.tcl:1728 missing uncertainty value. -0421 Sdc.tcl:1776 -from/-to must be used together. -0422 Sdc.tcl:1796 -rise, -fall options not allowed for single clock uncertainty. -0423 Sdc.tcl:1862 -from/-to must be used together. -0424 Sdc.tcl:1882 -rise, -fall options not allowed for single clock uncertainty. -0425 Sdc.tcl:1923 missing -from, -rise_from or -fall_from argument. -0426 Sdc.tcl:1935 missing -to, -rise_to or -fall_to argument. -0427 Sdc.tcl:1983 missing -from, -rise_from or -fall_from argument. -0428 Sdc.tcl:1995 missing -to, -rise_to or -fall_to argument. -0429 Sdc.tcl:2037 -from/-to keywords ignored for lib_pin, port and pin arguments. -0430 Sdc.tcl:2067 -from/-to hierarchical instance not supported. -0431 Sdc.tcl:2099 pin '[get_full_name $inst]${hierarchy_separator}${port_name}' not found. -0432 Sdc.tcl:2140 pin '[get_name $cell]${hierarchy_separator}${port_name}' not found. -0434 Sdc.tcl:2174 -from/-to keywords ignored for lib_pin, port and pin arguments. -0435 Sdc.tcl:2226 -from/-to hierarchical instance not supported. -0436 Sdc.tcl:2280 '$args' ignored. -0437 Sdc.tcl:2284 -from, -through or -to required. -0438 Sdc.tcl:2363 -source_latency_included ignored with -reference_pin. -0439 Sdc.tcl:2366 -network_latency_included ignored with -reference_pin. -0440 Sdc.tcl:2385 $cmd not allowed on [pin_direction $pin] port '[get_full_name $pin]'. -0441 Sdc.tcl:2387 $cmd relative to a clock defined on the same port/pin not allowed. -0442 Sdc.tcl:2435 missing delay argument. -0443 Sdc.tcl:2441 '$args' ignored. -0444 Sdc.tcl:2566 missing path multiplier argument. -0445 Sdc.tcl:2571 '$args' ignored. -0446 Sdc.tcl:2578 cannot use -start with -end. -0447 Sdc.tcl:2628 $cmd command failed. -0448 Sdc.tcl:2635 positional arguments not supported. -0449 Sdc.tcl:2639 -from, -through or -to required. -0450 Sdc.tcl:2706 virtual clock [get_name $clk] can not be propagated. -0451 Sdc.tcl:2748 value must be 0, zero, 1, one, rise, rising, fall, or falling. -0452 Sdc.tcl:2817 cell '$lib_name:$cell_name' not found. -0453 Sdc.tcl:2823 '$cell_name' not found. -0454 Sdc.tcl:2827 missing -lib_cell argument. -0455 Sdc.tcl:2835 port '$to_port_name' not found. -0456 Sdc.tcl:2847 -pin argument required for cells with multiple outputs. -0457 Sdc.tcl:2862 port '$from_port_name' not found. -0458 Sdc.tcl:2880 -multiply_by ignored. -0459 Sdc.tcl:2883 -dont_scale ignored. -0460 Sdc.tcl:2886 -no_design_rule ignored. -0461 Sdc.tcl:2909 set_fanout_load not supported. -0462 Sdc.tcl:2933 -clock not supported. -0463 Sdc.tcl:2936 -clock_fall not supported. -0464 Sdc.tcl:2982 -pin_load not allowed for net objects. -0465 Sdc.tcl:2985 -wire_load not allowed for net objects. -0466 Sdc.tcl:2988 -rise/-fall not allowed for net objects. -0467 Sdc.tcl:3075 port '[get_name $port]' is not an input. -0468 Sdc.tcl:3121 -data_path, -clock_path, -rise, -fall ignored for ports and designs. -0469 Sdc.tcl:3192 derating factor greater than 2.0. -0470 Sdc.tcl:3229 -cell_delay and -cell_check flags ignored for net objects. -0471 Sdc.tcl:3299 no valid objects specified for $key. -0472 Sdc.tcl:3332 no valid objects specified for $key -0473 Sdc.tcl:3381 no valid objects specified for $key. -0474 Sdc.tcl:3449 operating condition '$op_cond_name' not found. -0475 Sdc.tcl:3467 operating condition '$op_cond_name' not found. -0476 Sdc.tcl:3481 -analysis_type must be single, bc_wc or on_chip_variation. -0477 Sdc.tcl:3493 set_wire_load_min_block_size not supported. -0478 Sdc.tcl:3506 mode must be top, enclosed or segmented. -0479 Sdc.tcl:3521 no wire load model specified. -0480 Sdc.tcl:3543 wire load model '$model_name' not found. -0481 Sdc.tcl:3582 wire load selection group '$selection_name' not found. -0482 Sdc.tcl:3670 define_corners must be called before read_liberty. -0500 Sdc.tcl:3740 no default operating conditions found. -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:326 report_clock_skew -setup and -hold are mutually exclusive options. -0517 Search.tcl:411 -all_violators is deprecated. Use -violators -0518 Search.tcl:491 -max_transition deprecated. Use -max_slew. -0519 Search.tcl:496 -min_transition deprecated. Use -min_slew. -0520 Search.tcl:510 analysis type single is not consistent with doing both setup/max and hold/min checks. -0521 Search.tcl:515 positional arguments not supported. -0522 Search.tcl:778 -min and -max cannot both be specified. -0523 Search.tcl:798 pin '$pin_arg' is hierarchical. -0524 Search.tcl:864 -format $format not recognized. -0525 Search.tcl:904 The transition_time field is deprecated. Use slew instead. -0526 Search.tcl:1011 specify one of -setup and -hold. -0527 Search.tcl:1060 unknown path group '$name'. -0540 Sta.tcl:158 -from/-to arguments not supported with -of_objects. -0541 Sta.tcl:286 unsupported -filter expression. -0560 Util.tcl:44 $cmd $key missing value. -0561 Util.tcl:61 $cmd $key missing value. -0562 Util.tcl:71 $cmd $arg is not a known keyword or flag. -0563 Util.tcl:93 $cmd $arg is not a known keyword or flag. -0564 Util.tcl:241 $cmd positional arguments not supported. -0565 Util.tcl:247 $cmd requires one positional argument. -0566 Util.tcl:254 $cmd requires zero or one positional arguments. -0567 Util.tcl:260 $cmd requires two positional arguments. -0568 Util.tcl:267 $cmd requires one or two positional arguments. -0569 Util.tcl:273 $cmd requires three positional arguments. -0570 Util.tcl:279 $cmd requires four positional arguments. -0571 Util.tcl:287 $cmd_arg '$arg' is not a float. -0572 Util.tcl:293 $cmd_arg '$arg' is not a positive float. -0573 Util.tcl:299 $cmd_arg '$arg' is not an integer. -0574 Util.tcl:305 $cmd_arg '$arg' is not a positive integer. -0575 Util.tcl:311 $cmd_arg '$arg' is not an integer greater than or equal to one. -0576 Util.tcl:317 $cmd_arg '$arg' is not between 0 and 100. -0590 Variables.tcl:45 sta_report_default_digits must be a positive integer. -0591 Variables.tcl:70 sta_crpr_mode must be pin or transition. -0592 Variables.tcl:187 $var_name value must be 0 or 1. -0600 WritePathSpice.tcl:35 Directory $spice_dir not found. -0601 WritePathSpice.tcl:38 $spice_dir is not a directory. -0602 WritePathSpice.tcl:41 Cannot write in $spice_dir. -0603 WritePathSpice.tcl:44 No -spice_directory specified. -0604 WritePathSpice.tcl:50 -lib_subckt_file $lib_subckt_file is not readable. -0605 WritePathSpice.tcl:53 No -lib_subckt_file specified. -0606 WritePathSpice.tcl:59 -model_file $model_file is not readable. -0607 WritePathSpice.tcl:62 No -model_file specified. -0608 WritePathSpice.tcl:68 No -power specified. -0609 WritePathSpice.tcl:74 No -ground specified. -0610 WritePathSpice.tcl:78 No -path_args specified. -0611 WritePathSpice.tcl:83 No paths found for -path_args $path_args. -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. -0622 Sdf.tcl:50 -analysis_type is deprecated. Use set_operating_conditions -analysis_type. -0623 Sdf.tcl:157 SDF -divider must be / or . -0800 VcdReader.cc:110 unhandled vcd command. -0801 VcdReader.cc:146 timescale syntax error. -0802 VcdReader.cc:160 Unknown timescale unit. -0804 VcdReader.cc:217 Variable syntax error. -1000 ConcreteNetwork.cc:1923 cell type %s can not be linked. -1010 CycleAccting.cc:87 No common period was found between clocks %s and %s. -1020 DelayNormal1.cc:203 unknown early/late value. -1030 DelayNormal2.cc:378 unknown early/late value. -1040 DmpCeff.cc:1554 parasitic Pi model has NaNs. -1041 DmpCeff.cc:1582 cell %s delay model not supported on SPF parasitics by DMP delay calculator -1050 EstimateParasitics.cc:188 load pin not leaf or top level -1060 Genclks.cc:274 no master clock found for generated clock %s. -1062 Genclks.cc:938 generated clock %s source pin %s missing paths from master clock %s. -1080 Graph.cc:793 arc_delay_annotated array bounds exceeded -1081 Graph.cc:808 arc_delay_annotated array bounds exceeded -1082 Graph.cc:820 arc_delay_annotated array bounds exceeded -1083 Graph.cc:833 arc_delay_annotated array bounds exceeded -1100 GraphDelayCalc.cc:480 port not found in cell -1110 Liberty.cc:766 cell %s/%s port %s not found in cell %s/%s. -1111 Liberty.cc:792 cell %s/%s %s -> %s timing group %s not found in cell %s/%s. -1112 Liberty.cc:811 Liberty cell %s/%s for corner %s/%s not found. -1113 Liberty.cc:1748 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with %s -> %s setup_%s check. -1114 Liberty.cc:1762 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function positive sense. -1115 Liberty.cc:1770 cell %s/%s %s -> %s latch enable %s_edge is inconsistent with latch group enable function negative sense. -1130 LibertyExpr.cc:82 %s references unknown port %s. -1131 LibertyExpr.cc:175 %s %s. -1140 LibertyReader.cc:598 library %s already exists. -1141 LibertyReader.cc:632 library missing name. -1142 LibertyReader.cc:658 default_wire_load %s not found. -1143 LibertyReader.cc:669 default_wire_selection %s not found. -1144 LibertyReader.cc:681 default_operating_condition %s not found. -1145 LibertyReader.cc:691 input_threshold_pct_%s not found. -1146 LibertyReader.cc:695 output_threshold_pct_%s not found. -1147 LibertyReader.cc:699 slew_lower_threshold_pct_%s not found. -1148 LibertyReader.cc:703 slew_upper_threshold_pct_%s not found. -1149 LibertyReader.cc:708 Library %s is missing one or more thresholds. -1150 LibertyReader.cc:787 unknown unit multiplier %s. -1151 LibertyReader.cc:810 unknown unit scale %c. -1152 LibertyReader.cc:813 unknown unit suffix %s. -1153 LibertyReader.cc:816 unknown unit suffix %s. -1154 LibertyReader.cc:841 capacitive_load_units are not ff or pf. -1155 LibertyReader.cc:844 capacitive_load_units are not a string. -1156 LibertyReader.cc:847 capacitive_load_units missing suffix. -1157 LibertyReader.cc:850 capacitive_load_units scale is not a float. -1158 LibertyReader.cc:853 capacitive_load_units missing scale and suffix. -1159 LibertyReader.cc:856 capacitive_load_unit missing values suffix. -1160 LibertyReader.cc:874 delay_model %s not supported. -1161 LibertyReader.cc:878 delay_model %s not supported. -1162 LibertyReader.cc:882 delay_model %s not supported. -1163 LibertyReader.cc:887 delay_model %s not supported. -. -1164 LibertyReader.cc:890 unknown delay_model %s -. -1165 LibertyReader.cc:909 unknown bus_naming_style format. -1166 LibertyReader.cc:930 voltage_map voltage is not a float. -1167 LibertyReader.cc:933 voltage_map missing voltage. -1168 LibertyReader.cc:936 voltage_map supply name is not a string. -1169 LibertyReader.cc:939 voltage_map missing supply name and voltage. -1170 LibertyReader.cc:942 voltage_map missing values suffix. -1171 LibertyReader.cc:1027 default_max_transition is 0.0. -1172 LibertyReader.cc:1042 default_max_fanout is 0.0. -1173 LibertyReader.cc:1132 default_fanout_load is 0.0. -1174 LibertyReader.cc:1160 default_wire_load_mode %s not found. -1175 LibertyReader.cc:1331 table template missing name. -1176 LibertyReader.cc:1376 missing variable_%d attribute. -1177 LibertyReader.cc:1452 missing table index values. -1178 LibertyReader.cc:1458 non-increasing table index values. -1179 LibertyReader.cc:1490 bus type %s missing bit_from. -1180 LibertyReader.cc:1492 bus type %s missing bit_to. -1181 LibertyReader.cc:1496 type missing name. -1182 LibertyReader.cc:1523 scaling_factors do not have a name. -1183 LibertyReader.cc:1692 operating_conditions missing name. -1184 LibertyReader.cc:1763 wire_load missing name. -1185 LibertyReader.cc:1806 fanout_length is missing length and fanout. -1186 LibertyReader.cc:1821 wire_load_selection missing name. -1187 LibertyReader.cc:1852 wireload %s not found. -1189 LibertyReader.cc:1859 wire_load_from_area min not a float. -1190 LibertyReader.cc:1862 wire_load_from_area max not a float. -1191 LibertyReader.cc:1865 wire_load_from_area missing parameters. -1192 LibertyReader.cc:1868 wire_load_from_area missing parameters. -1193 LibertyReader.cc:1887 cell missing name. -1194 LibertyReader.cc:1910 cell %s ocv_derate_group %s not found. -1195 LibertyReader.cc:1941 port %s function size does not match port size. -1196 LibertyReader.cc:1997 %s %s bus width mismatch. -1197 LibertyReader.cc:2008 %s %s bus width mismatch. -1198 LibertyReader.cc:2018 clear -1199 LibertyReader.cc:2028 preset -1200 LibertyReader.cc:2064 latch enable function is non-unate for port %s. -1201 LibertyReader.cc:2069 latch enable function is unknown for port %s. -1202 LibertyReader.cc:2141 operating conditions %s not found. -1203 LibertyReader.cc:2144 scaled_cell missing operating condition. -1204 LibertyReader.cc:2147 scaled_cell cell %s has not been defined. -1205 LibertyReader.cc:2150 scaled_cell missing name. -1206 LibertyReader.cc:2176 scaled_cell %s, %s port functions do not match cell port functions. -1207 LibertyReader.cc:2181 scaled_cell ports do not match cell ports. -1208 LibertyReader.cc:2183 scaled_cell %s, %s timing does not match cell timing. -1209 LibertyReader.cc:2202 combinational timing to an input port. -1210 LibertyReader.cc:2297 missing %s_transition. -1211 LibertyReader.cc:2299 missing cell_%s. -1212 LibertyReader.cc:2319 timing group from output port. -1213 LibertyReader.cc:2329 timing group from output port. -1214 LibertyReader.cc:2339 timing group from output port. -1215 LibertyReader.cc:2357 timing group from output port. -1217 LibertyReader.cc:2373 timing group from output port. -1218 LibertyReader.cc:2460 receiver_capacitance group not in timing or pin group. -1219 LibertyReader.cc:2477 unsupported model axis. -1220 LibertyReader.cc:2505 output_current_%s group not in timing group. -1221 LibertyReader.cc:2546 output current waveform %.2e %.2e not found. -1222 LibertyReader.cc:2566 unsupported model axis. -1223 LibertyReader.cc:2608 vector index_1 and index_2 must have exactly one value. -1224 LibertyReader.cc:2610 vector reference_time not found. -1225 LibertyReader.cc:2643 normalized_driver_waveform variable_2 must be normalized_voltage -1226 LibertyReader.cc:2646 normalized_driver_waveform variable_1 must be input_net_transition -1227 SpefReader.cc:732 %s. -1228 LibertyReader.cc:2868 level_shifter_type must be HL, LH, or HL_LH -1229 LibertyReader.cc:2904 switch_cell_type must be coarse_grain or fine_grain -1230 LibertyReader.cc:2928 scaling_factors %s not found. -1231 LibertyReader.cc:2969 pin name is not a string. -1232 LibertyReader.cc:2986 pin name is not a string. -1233 LibertyReader.cc:3000 pin name is not a string. -1234 LibertyReader.cc:3078 bus %s bus_type not found. -1235 LibertyReader.cc:3130 bus_type %s not found. -1236 LibertyReader.cc:3133 bus_type is not a string. -1237 LibertyReader.cc:3151 bundle %s member not found. -1238 LibertyReader.cc:3174 member is not a string. -1239 LibertyReader.cc:3181 members attribute is missing values. -1240 LibertyReader.cc:3232 unknown port direction. -1241 LibertyReader.cc:3466 max_transition is 0.0. -1242 LibertyReader.cc:3572 pulse_latch unknown pulse type. -1243 LibertyReader.cc:3861 timing group missing related_pin/related_bus_pin. -1244 LibertyReader.cc:3942 unknown timing_type %s. -1245 LibertyReader.cc:3962 unknown timing_sense %s. -1246 LibertyReader.cc:4002 mode value is not a string. -1247 LibertyReader.cc:4005 missing mode value. -1248 LibertyReader.cc:4008 mode name is not a string. -1249 LibertyReader.cc:4011 mode missing values. -1250 LibertyReader.cc:4014 mode missing mode name and value. -1251 LibertyReader.cc:4090 unsupported model axis. -1252 LibertyReader.cc:4117 unsupported model axis. -1253 LibertyReader.cc:4146 unsupported model axis. -1254 LibertyReader.cc:4181 unsupported model axis. -1255 LibertyReader.cc:4197 %s group not in timing group. -1256 LibertyReader.cc:4236 table template %s not found. -1257 LibertyReader.cc:4320 %s is missing values. -1258 LibertyReader.cc:4343 %s is not a list of floats. -1259 LibertyReader.cc:4345 table row has %u columns but axis has %d. -1260 LibertyReader.cc:4355 table has %u rows but axis has %d. -1261 LibertyReader.cc:4406 lut output is not a string. -1262 LibertyReader.cc:4423 cell %s test_cell redefinition. -1263 LibertyReader.cc:4448 mode definition missing name. -1264 LibertyReader.cc:4465 mode value missing name. -1265 LibertyReader.cc:4479 when attribute inside table model. -1266 LibertyReader.cc:4528 %s attribute is not a string. -1267 LibertyReader.cc:4531 %s is not a simple attribute. -1268 LibertyReader.cc:4551 %s attribute is not an integer. -1269 LibertyReader.cc:4554 %s is not a simple attribute. -1270 LibertyReader.cc:4567 %s is not a simple attribute. -1271 LibertyReader.cc:4593 %s value %s is not a float. -1272 LibertyReader.cc:4622 %s missing values. -1273 LibertyReader.cc:4626 %s missing values. -1274 LibertyReader.cc:4629 %s is not a complex attribute. -1275 LibertyReader.cc:4655 %s is not a float. -1276 LibertyReader.cc:4678 %s is missing values. -1277 LibertyReader.cc:4681 %s has more than one string. -1278 LibertyReader.cc:4690 %s is missing values. -1279 LibertyReader.cc:4715 %s attribute is not boolean. -1280 LibertyReader.cc:4718 %s attribute is not boolean. -1281 LibertyReader.cc:4721 %s is not a simple attribute. -1282 LibertyReader.cc:4737 attribute %s value %s not recognized. -1283 LibertyReader.cc:4768 unknown early/late value. -1284 LibertyReader.cc:4988 OCV derate group named %s not found. -1285 LibertyReader.cc:5004 ocv_derate missing name. -1286 LibertyReader.cc:5057 unknown rise/fall. -1287 LibertyReader.cc:5077 unknown derate type. -1288 LibertyReader.cc:5109 unsupported model axis. -1289 LibertyReader.cc:5141 unsupported model axis. -1290 LibertyReader.cc:5173 unsupported model axis. -1291 LibertyReader.cc:5244 unknown pg_type. -1292 LibertyReader.cc:5639 port %s subscript out of range. -1293 LibertyReader.cc:5643 port range %s of non-bus port %s. -1294 LibertyReader.cc:5657 port %s not found. -1295 LibertyReader.cc:5727 port %s not found. -1297 LibertyReader.cc:1418 axis type %s not supported. -1330 LibertyWriter.cc:286 %s/%s bundled ports not supported. -1331 LibertyWriter.cc:417 %s/%s/%s timing model not supported. -1332 LibertyWriter.cc:437 3 axis table models not supported. -1333 LibertyWriter.cc:581 %s/%s/%s timing arc type %s not supported. -1350 LumpedCapDelayCalc.cc:138 gate delay input variable is NaN -1351 TagGroup.cc:297 tag group missing tag -1355 MakeTimingModel.cc:206 clock %s pin %s is inside model block. -1360 Vcd.cc:172 Unknown variable %s ID %s -1370 PathEnum.cc:474 path diversion missing edge. -1380 PathEnumed.cc:126 enumerated path required time -1381 PathEnumed.cc:135 enumerated path required time -1390 PathGroup.cc:399 unknown path end type -1398 VerilogReader.cc:1782 %s is not a verilog module. -1399 VerilogReader.cc:1787 %s is not a verilog module. -1400 PathVertex.cc:236 missing arrivals. -1401 PathVertex.cc:250 missing arrivals. -1402 PathVertex.cc:279 missing requireds. -1420 PathVertexRep.cc:145 tag group missing tag -1421 PathVertexRep.cc:150 missing arrivals -1422 PathVertexRep.cc:153 missing arrivals. -1440 Power.cc:610 unknown function operator -1450 ReadVcdActivities.cc:107 VCD max time is zero. -1451 ReadVcdActivities.cc:174 problem parsing bus %s. -1452 ReadVcdActivities.cc:251 clock %s vcd period %s differs from SDC clock period %s -1470 ReportPath.cc:289 unsupported path type -1471 ReportPath.cc:310 unsupported path type -1473 ReportPath.cc:349 unsupported path type -1474 ReportPath.cc:2378 unsupported path type -1490 Sdc.cc:4058 group path name and is_default are mutually exclusive. -1500 SdcNetwork.cc:1095 inst path string lenth estimate busted -1501 SdcNetwork.cc:1167 inst path string lenth estimate exceeded -1510 Search.cc:2654 max tag group index exceeded -1511 Search.cc:2890 max tag index exceeded -1512 Search.cc:3617 unexpected filter path -1513 Search.cc:3785 tns incr existing vertex -1520 Sim.cc:209 unknown function operator -1521 Sim.cc:864 propagated logic value %c differs from constraint value of %c on pin %s. -1525 SpefParse.yy:805 %d is not positive. -1526 SpefParse.yy:814 %.4f is not positive. -1527 SpefParse.yy:820 %.4f is not positive. -1550 Sta.cc:2032 '%s' is not a valid start point. -1551 Sta.cc:2108 '%s' is not a valid endpoint. -1552 Sta.cc:2431 maximum corner count exceeded -1553 Sta.cc:4228 corresponding timing arc set not found in equiv cells -1570 StaTcl.i:118 no network has been linked. -1571 StaTcl.i:132 network does not support edits. -1573 StaTcl.i:4115 unknown common clk pessimism mode. -1574 StaTcl.i:4129 POCV support requires compilation with SSTA=1. -1575 StaTcl.i:4367 unknown report path field %s -1576 StaTcl.i:4379 unknown report path field %s -1577 StaTcl.i:5064 unknown clock sense -1600 WritePathSpice.cc:287 No liberty libraries found, -1602 WritePathSpice.cc:517 Liberty pg_port %s/%s missing voltage_name attribute, -1603 WritePathSpice.cc:1096 %s pg_port %s not found, -1604 WritePathSpice.cc:1151 no register/latch found for path from %s to %s, -1605 WritePathSpice.cc:1617 The subkct file %s is missing definitions for %s -1606 WritePathSpice.cc:1715 subckt %s port %s has no corresponding liberty port, pg_port and is not power or ground. -1620 WriteSdc.cc:1254 unknown exception type -1621 WriteSdc.cc:1796 illegal set_logic value -1622 WriteSdc.cc:1837 invalid set_case_analysis value diff --git a/search/WritePathSpice.cc b/search/WritePathSpice.cc index d0d7b1fb..6b605ca0 100644 --- a/search/WritePathSpice.cc +++ b/search/WritePathSpice.cc @@ -72,6 +72,7 @@ public: StdStringSet *off_path_pin_names, const char *power_name, const char *gnd_name, + bool measure_stmts, const StaState *sta); ~WritePathSpice(); void writeSpice(); @@ -225,6 +226,7 @@ private: StdStringSet *off_path_pin_names_; const char *power_name_; const char *gnd_name_; + bool measure_stmts_; ofstream spice_stream_; PathExpanded path_expanded_; @@ -281,13 +283,15 @@ writePathSpice(Path *path, StdStringSet *off_path_pin_names, const char *power_name, const char *gnd_name, + bool measure_stmts, StaState *sta) { if (sta->network()->defaultLibertyLibrary() == nullptr) sta->report()->error(1600, "No liberty libraries found,"); WritePathSpice writer(path, spice_filename, subckt_filename, lib_subckt_filename, model_filename, - off_path_pin_names, power_name, gnd_name, sta); + off_path_pin_names, power_name, gnd_name, + measure_stmts, sta); writer.writeSpice(); } @@ -299,6 +303,7 @@ WritePathSpice::WritePathSpice(Path *path, StdStringSet *off_path_pin_names, const char *power_name, const char *gnd_name, + bool measure_stmts, const StaState *sta) : StaState(sta), path_(path), @@ -309,6 +314,7 @@ WritePathSpice::WritePathSpice(Path *path, off_path_pin_names_(off_path_pin_names), power_name_(power_name), gnd_name_(gnd_name), + measure_stmts_(measure_stmts), path_expanded_(sta), net_name_(nullptr), default_library_(network_->defaultLibertyLibrary()), @@ -346,7 +352,8 @@ WritePathSpice::writeSpice() writeHeader(); writePrintStmt(); writeStageInstances(); - writeMeasureStmts(); + if (measure_stmts_) + writeMeasureStmts(); writeInputSource(); writeStageSubckts(); streamPrint(spice_stream_, ".end\n"); @@ -381,8 +388,6 @@ WritePathSpice::writeHeader() start_path->transition(this)->asString(), network_->pathName(path_->pin(this)), path_->transition(this)->asString()); - float temp = pvt->temperature(); - streamPrint(spice_stream_, ".temp %.1f\n", temp); streamPrint(spice_stream_, ".include \"%s\"\n", model_filename_); string subckt_filename_stem = filenameStem(subckt_filename_); streamPrint(spice_stream_, ".include \"%s\"\n", subckt_filename_stem.c_str()); @@ -391,6 +396,7 @@ WritePathSpice::writeHeader() float time_step = 1e-13; streamPrint(spice_stream_, ".tran %.3g %.3g\n\n", time_step, max_time); + // Suppress printing model parameters. streamPrint(spice_stream_, ".options nomod\n"); } diff --git a/tcl/StaTcl.i b/tcl/StaTcl.i index d2b6c45d..4e856ad8 100644 --- a/tcl/StaTcl.i +++ b/tcl/StaTcl.i @@ -3545,12 +3545,13 @@ write_path_spice_cmd(PathRef *path, const char *model_filename, StdStringSet *off_path_pins, const char *power_name, - const char *gnd_name) + const char *gnd_name, + bool measure_stmts) { Sta *sta = Sta::sta(); writePathSpice(path, spice_filename, subckt_filename, lib_subckt_filename, model_filename, off_path_pins, - power_name, gnd_name, sta); + power_name, gnd_name, measure_stmts, sta); delete off_path_pins; } diff --git a/tcl/WritePathSpice.tcl b/tcl/WritePathSpice.tcl index 8739035c..8604471d 100644 --- a/tcl/WritePathSpice.tcl +++ b/tcl/WritePathSpice.tcl @@ -21,13 +21,14 @@ define_cmd_args "write_path_spice" { -path_args path_args\ -lib_subckt_file lib_subckts_file\ -model_file model_file\ -power power\ - -ground ground} + -ground ground\ + [-measure_stmts]} proc write_path_spice { args } { parse_key_args "write_path_spice" args \ keys {-spice_directory -lib_subckt_file -model_file \ -power -ground -path_args} \ - flags {} + flags {-measure_stmts} if { [info exists keys(-spice_directory)] } { set spice_dir [file nativename $keys(-spice_directory)] @@ -74,6 +75,8 @@ proc write_path_spice { args } { sta_error 609 "No -ground specified." } + set measure_stmts [info exists keys(-measure_stmts)] + if { ![info exists keys(-path_args)] } { sta_error 610 "No -path_args specified." } @@ -89,7 +92,7 @@ proc write_path_spice { args } { set spice_file [file join $spice_dir "$path_name.sp"] set subckt_file [file join $spice_dir "$path_name.subckt"] write_path_spice_cmd $path $spice_file $subckt_file \ - $lib_subckt_file $model_file {} $power $ground + $lib_subckt_file $model_file {} $power $ground $measure_stmts incr path_index } } From e8e68ae74ca64be9e6c799135029d97edc82fda1 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sun, 14 Jan 2024 17:22:48 -0800 Subject: [PATCH 18/43] SpefReader::findParasiticNode rm redundant if Signed-off-by: James Cherry --- parasitics/SpefReader.cc | 106 +++++++++++++++++++-------------------- 1 file changed, 52 insertions(+), 54 deletions(-) diff --git a/parasitics/SpefReader.cc b/parasitics/SpefReader.cc index f79b3707..e823bd2e 100644 --- a/parasitics/SpefReader.cc +++ b/parasitics/SpefReader.cc @@ -512,64 +512,62 @@ SpefReader::findParasiticNode(char *name, ext_net = nullptr; ext_node_id = 0; ext_pin = nullptr; - if (name) { - if (parasitic_) { - char *delim = strrchr(name, delimiter_); - if (delim) { - *delim = '\0'; - char *name2 = delim + 1; - name = nameMapLookup(name); - Instance *inst = findInstanceRelative(name); - if (inst) { - // : - Pin *pin = network_->findPin(inst, name2); - if (pin) { - if (network_->isConnected(net_, pin)) - node = parasitics_->ensureParasiticNode(parasitic_, pin); - else - ext_pin = pin; - } - else { - // Replace delimiter for error message. - *delim = delimiter_; - warn(176, "pin %s not found.", name); - } - } - else { - Net *net = findNet(name); - // Replace delimiter for error messages. - *delim = delimiter_; - if (net) { - // : - const char *id_str = delim + 1; - if (isDigits(id_str)) { - int id = atoi(id_str); - if (network_->isConnected(net, net_)) - node = parasitics_->ensureParasiticNode(parasitic_, net, id); - else { - ext_net = net; - ext_node_id = id; - } - } - else - warn(177, "node %s not a pin or net:number", name); - } - } + if (name && parasitic_) { + char *delim = strrchr(name, delimiter_); + if (delim) { + *delim = '\0'; + char *name2 = delim + 1; + name = nameMapLookup(name); + Instance *inst = findInstanceRelative(name); + if (inst) { + // : + Pin *pin = network_->findPin(inst, name2); + if (pin) { + if (network_->isConnected(net_, pin)) + node = parasitics_->ensureParasiticNode(parasitic_, pin); + else + ext_pin = pin; + } + else { + // Replace delimiter for error message. + *delim = delimiter_; + warn(176, "pin %s not found.", name); + } } else { - // - name = nameMapLookup(name); - Pin *pin = findPortPinRelative(name); - if (pin) { - if (network_->isConnected(net_, pin)) - node = parasitics_->ensureParasiticNode(parasitic_, pin); - else - ext_pin = pin; - } - else - warn(178, "pin %s not found.", name); + Net *net = findNet(name); + // Replace delimiter for error messages. + *delim = delimiter_; + if (net) { + // : + const char *id_str = delim + 1; + if (isDigits(id_str)) { + int id = atoi(id_str); + if (network_->isConnected(net, net_)) + node = parasitics_->ensureParasiticNode(parasitic_, net, id); + else { + ext_net = net; + ext_node_id = id; + } + } + else + warn(177, "node %s not a pin or net:number", name); + } } } + else { + // + name = nameMapLookup(name); + Pin *pin = findPortPinRelative(name); + if (pin) { + if (network_->isConnected(net_, pin)) + node = parasitics_->ensureParasiticNode(parasitic_, pin); + else + ext_pin = pin; + } + else + warn(178, "pin %s not found.", name); + } } } From b2b9ab3f35a2b74ca1769f95e091611cd976e771 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Wed, 17 Jan 2024 17:47:37 -0800 Subject: [PATCH 19/43] rm report_net, report_instance -connections, -verbose, options Signed-off-by: James Cherry --- doc/ChangeLog.txt | 7 +++ doc/OpenSTA.odt | Bin 103408 -> 103276 bytes doc/OpenSTA.pdf | Bin 245486 -> 244194 bytes tcl/Network.tcl | 133 ++++++++++++++++++++-------------------------- 4 files changed, 64 insertions(+), 76 deletions(-) diff --git a/doc/ChangeLog.txt b/doc/ChangeLog.txt index fea53e71..d6a2e522 100644 --- a/doc/ChangeLog.txt +++ b/doc/ChangeLog.txt @@ -3,6 +3,13 @@ OpenSTA Timing Analyzer Release Notes This file summarizes user visible changes for each release. +Release 2.5.0 2024/01/17 +------------------------- + +The report_net -connections, -verbose and -hier_pins flags are deprecated. +The report_instance -connections and -verbose flags are deprecated. +The options are now enabled in all cases. + Release 2.4.0 2023/01/19 ------------------------- diff --git a/doc/OpenSTA.odt b/doc/OpenSTA.odt index 287535a19b67c29f4864edc97d2951d55affb0aa..f3802ffce2a99e13993d43043d89065d26914153 100644 GIT binary patch delta 72326 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 PNEHN-9?K~Sc(49Hb^1C1 diff --git a/doc/OpenSTA.pdf b/doc/OpenSTA.pdf index fe20035b47257cd50e94ccc48e8ece2d6219d151..94c42229ffc6280a2384b3b673dd0c886473258d 100644 GIT binary patch delta 53261 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

  • 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�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ⅈ67KgHAWlXPzl=-t$5>BYYzrpF;rwf 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

    B6E@;(@yvvf$b~o*49m zGEw+YV)JA-I`+r}-1)dGZ%>tC>-l43F9{Uj@*=JI6lYI&DJv?U^g`ii7PW&nt-mcv z^os%~P@^!m$S-K=@0>B6+vx75Zsmt5-m*2hR-p?{ojP5MCjlfK>PkYSCgAR=XVtpy zjWvI4Ve}YIuHzFJH)%a`Tt#}3v9M-}U1*UwRfSI=j`u=(Ma88Sbf=kwUdYBPsNCxY zW4`thUM`}n)W1Zug8ZdbA`IDl*t+F=|9q?<Mmu8Z_Ru7sbr+(Y{ z{BI}Z6lxl{8{SPd$eaIjSx@;xqpa!AQR%|3# zAQLr*2ZgADtc6Xo&#oo0+7PzUxDVWq${DE2{KQWXF@2K`vO2(176Sr)nkW9}*Au&owzqs%&iu^Hy z`v9&bKhfMR6vu-qO6zQHVz~#f{V6@6ft@6lZV$=2)Hh9B(@N+Iup{l7xJy==SbO;S zysjUh1JRabBG>b(kLl0Dl(MCExzEp#iWLz9oz|FUEem?LHb@)11{3K+r zzgOGG7st~Xf+tu;{zB($g~r@bHD^|Cw_-W}b+DDG~ znxb^{;n1bD;@l{k7P;MK^xR;+90L3B)8|)<gd(gDCxk;=UL%gVu z+icYaFPYz`SsSzrx6ilJ7Xs2Alq{JVB~8N@r*TZ5YfY`vI#mzbsXV>poa%KdLHcG2 zXJ4DiAj600*s2Ci^g46TIS^VNv))?&av87W?*`Ny zX}Y9-{@{)+9CgPgIaa_G4`Q?R+~av9w0K@|^_p5UoM+n(x}@2y@dCzbgj)H=B#<3T zVdj3lgq)|5E?=pGA7-DTNR?q5`WST_ zz<8Yi(j{Efw=^4NJZBt<4gE)1(?njYxoaJI15O%Uvvg_Fa_B;8RVk$Es)vB@q!tnV zYJ0k``z5PDyKk|Lc-#1$G175R+EBuzF2CAC9^zcBk1&0u$^dVzner5`5=)V_u74#u zlP3S*l(&4b1PQu{)lx=jWZ#^dx)-Woo6WFGThuC2SuhbW9{sUjpX4;TQY-X_2Zvbb z9pJ&5{&XPUisx2v_hpve%aAIJ&!uuZ>nk9kZ?bucz`{<7D!34}x1@U3dm2&-?wUB) zuzOcnE=~VS7zsM)+xOqG7nAG%l^|DP8h?8$crsOb%+z~q3F|L21w6Mib$1+ZLj z8DU_L9dp7^k`6&VS>WYATWN{ML|XOrM3M~Fxzkpy@`^^Cf_)RIEP(JkbA322CQAw! zuO>`t>-J}gF`TgP_cw37BP43tP<2e^zel)ITvpxpMnQibgdU`V`8K`YkC_B zO!ZnVlrS?%1v8aORq$gtT3K1rD9&M@PS zhX7G5xe1=|Qj(lSpM23gq2b*6dV^{J`!Bw2>aJ{q6qTZ-0=@@Srl0s3{i&zwLt!L& zPCX;P_72nl+q2K5t#E#rP2@VZf8WhKloGUw=sy^h^4Cn$h86tZC-Wsa|I$-|G5}34 zH!8RULRDvL)HkjjDnG7r%_=Gdfe#4Jk#Hi=)8znFiy+4!^}mLOkb#s2Wdc9hs!@p0 z%yzw};G&k9-zQK$zQn(8$Pk+0$vlq|WU)S2%Uu{^ zTjO-%{z_RZJ=1!loq6X^Ebvg*CoQ>wW7N4!E9-7soc*2kqwA*-uh-H76vW~F?L73D zc5Pp|FqY_;ui|5l?kU$Udql%Oy5SUOc`7o14ULh2EdXR(O zyISRrT)lk2k1~yPEQ72Gkei=3ay1Ru(38Ww%ji3Y>y*YsJ%=uXdCU);pJHMQa%OGosn_4otcl>a45y?td9_a2|+_~XIXa7lwpK6SG&+A z2cG@HI7%e9EC#}QmwA?O!B%ER4a?w<)Gi;S8`lrYqZ(;{7eR~xY(j?NhS?^1K76tW z65GI=RZ|Ww+Po#LNcJYbNbh$cTTNfaiJ|x<+C>u(#VS{6d)tL0<|=4AO{rk8^slu} zUE;0wM+non{h73{eUR15y9X9rU92G%tDpX|8mf~VO!g;oZgk-2rg-5HJJ-uAPrV9u zP%H2r*0nz?IigYqh!pqwHjzzJ+&4s}ePDspw8RhA`RE%xqQ@Jo5y)XBt)lOEwp z52QD7BJ);JEM}17e*wLh{{b;@;2;vK=}@CXWF4k4Zc9jnrGL5`C1z~savCSgm6vJc zGIF(!V@H_L61*Ub?JGMIN~Uxz{gWR~)FYi0gObgkXt|~UXsMWDX^5fNe8Q<_R;m;Y zyEel`|E*lh{XSjWNLri0_2j*!i#VwU#54qEoN0ItDeQ#!nTa?n8T~;RJX{%4pttYdqqgzcCEi;d#mD!1gB4Y(u@)!!qQ_-}r@E93AAum|ZVNhpSShs) z^>FQa3!3TSQMBR59ps)hdJF|s&iKP1L7>y;8Sq1ti7MmNhwONKchv{3ql5-<M#kBh16qpZ^#{8xhi8cJ<hh&#aRVBgeP00X9#D) zcX$M#{QUj406F%{zirXaS6SQUW(b3=kutZ|K&jdXu{qrXJc|twpdi4q_qX?YZ))3q z(}p=;%7_~T@#ggB2NS_{`t6b8mjIfiOFGm zSY0&wXobJ+TA8+H8{Fm{a-w~Su$ zKJrRO;YNql3`H&yUD(V~i!CkE4$g8m@Pf15=5tzx z+$pt13*a)L;d#Jlnb4A1woeuY2$XF+-g6QlndKc!?2hD)I5F-fZ#AP4GH7-`FvwDe zYNuoR%2FMU%+L=pq1gyfa86}(CcA`$shiG1&(NGfSs8b(azbLYAQw*!(6+=A%|C0+ zjSad?n-5MgA>bss7aG%2G(`c=Rryl>e{8*DccyKyb{pHaZQFJ_wrxAQ(obA< z4EyjJY*@VW^17hXF1_B#Ze?8hmb3W=nI-rD#4LMqXH5!q} zKep5=I&#s*ibdUBb80UNvld8Ao*eCIifWF^3%!@AkUSMnofKyc+%;M)`t?9U9z2GZ zd^WNa3be3ye&(Lj@gJVfzZ7;lv=&o8XL0}SI&+Dsh_C>OmeTV`dbhKkCF+g$Ij(yr zkH-P9Smi8LQzO=8N+I;GDt~nV_gt8qi;255bxYrO4mxqpv?-tAT2~&Q4$ojMvYa$H zGwQXH#QR_Uqi1A5jj4zS zFPY&sAgFX8rDrx;eOin=&GjjJotnAH(%N>f9<&gD_Q>7){0tCN(U%o2O5Wj!U zfIrUnE7JL2^^-~x{kO>N0$3@9V(;KkFYgGH z5loogB_5DV{KoxUQn+p~7xvk`ER@3yNAl78^3U-#oTPIXIT{n`v(RP`!^ECva(i>z zx7_Y-v#)+;V0avW&e6*iNqb}_nF48kwy02UPB@d_&!&N5Kr1?&FGoxtqBn_+{bxV4x7HAU1lToTHgD48$hE{O1n}GCrWt`B{cNWb`Iz9o!i*$? zW=&zytggCq?I&$1j4?BA%-?3vMK|K+aRb<93~m}GUyX*{ExTD~i80d9q7;^s6}561 z5IkP|-3tr=NUwoDi$4bd+q>2q|*re~f4cl9YLacX4DShD_Z=OKs%T z1%$EX#L!SNuE~fL=@f1}k^z=%_Ov_`a`-P1@3y0IBye^rSle8R>2J}uG zK2+bmM)Pwh_^?NZxkCwxhEy?e@FiJ>6?mS79LbOYhgVsn3AnrphgAtm*(Ak`ogp%p zvglFWw?~uMhH2Yn67)15;w7HLM_OA%h07t6W=E5JklyDvn%`a_*@d}qnljVjCp
    d)L=?8M}#QIFIXAge2c7MTH<%GT0y_2o^5fB8leV1CN@ zh+X-B?b8r_-&^aW##{9E6g_9k*C<0BNm_9y z#Zb51m`0(2aoP$yzfCw>{jj%Rnff1~TXV_O>*eHn3Bhut@`c$x}HB#m|LoT7K^xb1EhH(}x9idC@zMIi0@pcmfZs-5wiA4@KeG~nk)+AyKq zbbkgH9tC*h!8NeRzp+4M@|$T>WtBMCP;8f7?=-Qh3Egto8*wyixdFOt9)+hs}3_ZiDJ=YgZSQj_9G!fF`x3i-bf-lRx)C!EY0?>&|0v>YlPNnUjU z?Z4-}HXoy>64po3rdx)NKlPUf@iv7Y9Sz#-^f{_E?dJ=^V@CJ09#fc zvGd)3lUg(mt~5@cX;e?0-KIn_T7|2*wMC7&8y_N|^M1B|NT~b`7!c14?$xr~vnD4^ zL8ejJ*aCNd2Ul6S8I2u?*ZONR>6*za25p7ly>$e2Cr!mRVOJj^z?dqZ8N9au{S86- zErnza$HM$r3m|G70J4nNY8c8d+60>vwFTO+{ z%LDfUxG+K`(LN~i*6N8?+txz@?g?ZSaUS@kohLQU!6OSboI5~*oRtyL zJa`}6WM??Q1elF21oVVGHv-k&cpp*#+Wu-A_Pp2^ zOIY9|uWIw!L*ed)S`=&NajUr!rD%l<@_-EX>wV@*Sma}5t!1x^C2$&9XvUn5O2|5h zovsSse#j%<6x%DBWhL>3hJTsWb_NOh{>>v=^zRGm>V(-E5-F28w6I;&*lTj0Uxcn4 z-acb|-k~w_GKRbv?haDCk}9!#nK@|zCY`yqsnHIV%p&gq^E_}XZZ+tq>zRhdtN_ZT z=S!;snCPo{()p8>CX2nC*u@=Crg-rGS{eZ;Co@}Wf#**rlb_uDISsq6y=kx8z?M$2 z)x`LyxfHRt!t|!ku6NO=*dCWt$ROzuzE>RuHHUbQF(R{BUiUSfZKHssI7xm+J`@eeP8HQhG5Vj z50|&EO?(OfLRw^y=49bfD@Ji|YC*jtUsR1WdkZgcuR=hu9~y1WL2Iw85{~C#P)4}3-BOr#}QE$jnRQO17d0r&4jQDbzm}C6`Q|T;<6uZKtsE){x zz$13S8p^)<{VLVEwNFbfc4QPyVOB2AlUWhX>VmNHlUL#QbhKq&emH0J2W3M2_DdFH zzx@F~x#*$n`GMbIOh^LY!^jBSK}ChvFs!G&szM;SNvay$2}PaRkT%|1y7}Cbxiw%` z*@Mm?mwi!z-L)s>(E%xU0^Z2^aX|y6eei*jIB=An>z4(UXME?3ZRORmQd~8$Xxs!7 z0jE(FGtNpk5dhRlDQT1|Q_Q(CDmR-j-jfGFoe9*?3sW1z>IAZQKJ}j;?fU~<*2H4N z=72}Kmj^{Gf7{yvlcri6930jL$*(i4Cme3d<5S!qUuqJYz;crg0W+L0IU&bu%^6{< z^p1m!q4>zuv8i{ymvs`T&QPAK4Auq)8gX%`PV7uIOxA?_EhB$lkKm>R7zPm=e!c=U zlZ2Yk2(=G71ZA7Omyk?{^O2eFHW*fskB>!UMn{C-R)eee1qIu&Sr{p^Y!V{b82 z1Nwdkv+#OS%f{rE)2s^{=9;lT%p}Lua#i&!dK(Ci!8;)>%Ijn2hy$-#VZgus3C+Of zC32CG`Lz$pluw%$qb47`C^PKhIJ^jG2+Loi3rQ$G>=yIN$HE}c@fB0xoAxt3Qb-_; zG`fgQb6&w$J~62=o}bE(z8&)}pnr?6xkS&~66m`pdz$cg4%8#@cRQEAd}FF%p`V)J zE`i?oNN*geB0O#xqTNPtiOQmGzz-7_4pCmNh6@pibu>1fk&9(tVbcRw3v36RIUjfJ zf+Uml1r4h5Ouc)>Y7*Z!;$^}wwZTo-L}1hG9A*|*r7XX^j`mnJ)8|I>BBZJuGkOS2 zs0~NY<2}inIeTcLd7wNHN>-0dOYIlVg+;@bl1m0@^v$%0uYYuk2&j!;8P8v!p$-?+ zSSCIOXRW#YCHHax0vG@}qlp2OAh-O!vqQ$V$>&o4b4EfJ)o6%0y~SB$QEaA|psjQm}_yWUoiKM~hFsdUD2e zc0yK;H+IjBc86mluTa7!#TiO^@8^V}Ed9ZSR_%0jyB~z9zQ@m!kp;Z9UX}D;9GEn( z&dK2TE9>6DXg&m>rGkGhfWuZmiV)7^hiahe6Go_BfW$`~>B1zqC3h;OMICKFq7nFd z!$p038$yTB$ZLMn6XlT#dV7@d0Jrcjsr1pt|8r{Yr8pk6M+_SaPXpL4n{dDnMk`24$yjl$up9;dU6mhnn)O%-SnJ|1!qL2%Lb`J7 z#{kA8eRcSLIY^_#g$+sq0MMVW|1ATA!=%*% z2&Qjdyk4GaAcFU9&ymqKcR}#LyFdyRalmAd9$q2vX8aw6x%dSL?PHUbLmQTOz^gw% zP^D=ME&FcHOS;$!Xc*7j;a75+LNnM%Hh;LfRs+=(pE5l*bNpxF?0go%RG$~)_dL!K z`*V+(YD$9|9nSz;($$0<81?Pl;7zrtoW~9$*->w; z>G+|H?B9->mOhn)GMrWaUYObMezLvXf+cQWJ>#(vYWM&_G4{yuHc{_~fc zcb%ouwVKgF-8Wa1C{5Y73R)mDsL`u)$D#Pl<4!cw6JZHMHBp^Y4fhJ@_jyzeg0nO%1K}j6Soh^XJD*xkK5pP^q?DO?q4lZj&@iX&lYd7TA zRnL3u@u8-WWKuHOtqnwg4^g0i8=ULS{*`y^3Ok^_C^CK^zLp7Q*c_F#W{7GBzxYN| zbEit+%_zR1&TTj241KR5)(mA0GF9{Mi0}Figq)mB-xVbR>Q?^&up?dCaj7SQgoW^| zV=&(6Jr7>Gq}#_$iSnVZsg+SgKn7v|^Pw(JkVkRnXu!9csInpeKQy6`P`ixH8E z;{{l1)4H+>s!sB0m9`rN|2y^-)CPtfkJQuBKsqFuvX}n1J#FM=tbm3k(Ig95wm9MDly|$YH+Ar9dU%ddMRbr3;~XM5PGthj zOnGqUM6b3xT><4HJ`{`&wdsy<$!>RMDr1Zk=V8qp&kMrNEj!0SPWDbl407AiVmq(2 z#~g2La_fu^n0qKrX7IB>+N!_y=mWpUPN9&Ry`B>fumOsx%p4=uuwaRp3LPbHLo z+8NjHE2*NE%1c*GJCYj6({{q>*#tTznv}RH`EH`nfU0jY^QgV@nMAnnmglxmw8zNh zFc3eKhtmZHFXA0DZPk&F!xT;&DkLEaw;!+E@<&cJ-pc=O>6t>htg7{GtsjRntOTk1 zVxU@(U%MtcHgv_Zu!$UFTyS71F7I}j2L3#){%Rd)5_ivjy1#8@)O>F z3ujao7q^rrXEXY@nR)VE8-b#zahrBByu8Im{pa7-EIqzR#PlCk=L(~EA_LQ{0({o@ zAy?||ra|!8`jj2z-&O`sk>M`~H;6W@hr|DO8~8u*b9QFt)Wy)B`1$|eQh3x3@~LH9 z2!Xhj&rljxFk&k9Ya{A^;g$}h_2Vmo8-v4`;^;eu_YWL_kaS9h$$*aIL@WO70)ts#CSRi!wMxUwfL?=TA7Vg z?P4U^h%)Rv`P_Md5#s^f)@Sv&_Cj)Rt^NYT!)Q0zCu3>c$KtZ1#>W5?Z`Ki7?Tgc` z#fa@FHom^IY)jT|$%n~BZ_K9E`AqbK@ip9o!!$}0JVr0Oi=8{m5pnTEe883!^IO*R z>_3H8B`hYcJRjl2j4KX#m{qWmTe4*i80V50R+lV52XosZE=B9!*AP?tCi&I0{?n67 z8*Jm7*mOgiuqJ!%0lr{ccNTnhkD#<@7+UNYe09=2>T!)kyp(a;`s4?&sAw}LRxuZR zT6+`Po>t=o{A84m=aY1s51?-gMRPi^$J~g;V?O0M*FZpZ?-afJ$zoSZtq5A8cDF*^ z(6KPSkwIji?$A}ko|b@;2gj$AH}-u%Rlef~`^znaMTm7nZI=y9pTIR%mSDk0F6anU zh+nAUZw&XUDVXsg5O^Aq%ze_%tjYwz6Tg*cVw}hRxN-+lxOmt-0tk@*H1o_Ofjeg` z&}!)3VCcx%^d`7c5@XGzU-mfYM|Y+*+$&>V4;~c;d%p`_TKLIWc1gSVzc?cHQ`-WS z5RK&_L#O}QTcB2!x&R(gb=W7da{^Bv23`=Lwh zn~;-IDohq6i&xi_>JweyK2)VsXw)!weP^36)o+X=vuEC4Q0Ctj8H1U{oQS;-k+|d& zd#5+2fh1+^7~oyx3DuRq5t3(^oHP4ls;Lt>k9C4Y%t2{n2MAEDH}z&yMKif>S{wAL zOktoJ*0b;dY-9{1Pb+|{v^J6()c8~xkyrfNR6;KEwn)dL5YfsLo{ zP0sZ~4!(tXoC`10mOB;oO$an0J$KkS2c5^E?MHGCJmQARfQm(`|j5WZv55qgid({agXkTYn4oLXz^0)sij%2X#ACEqDv-+zM0*C zolmIPrKLhS)dwBz?SkB6=Z*dVTzNb5kF|6F1AzgaWUhwZ^kev9d-x;uIYx50=0nPo zdH7-S6%v{S_S#v)OXG-f3yWCmX4a)99t?xKYK|cRVJ7c)-0jMN>9Zuk9Obpzgf-LNG+&&xyXZ^S3S z;?w{o9BCiEnh4ZT!p?rF8E+0{!`EO_p}AlD`XQP45&?S%Npm%=Pm`Fs<;n6ST?z&p z?LxtbXSf%{Oy!#E6@lTa zJq@aY1p$O3#;B>@%U?vEgK5~1`ik}E>+UI>>4e3tJ(f%^5&hC;5d^J zWU>6%Ri|o}uyop38lV&Dy}B^;Z-jTgagffee7`_0hJn<-qX}^onY`6@vg?w(Ve#u7 zN~eMOR$|h%@v!|azQAJ$onQa!e5n;Nz%Zbk?98dHF+Z_%j4)sXKuA&oOFmWEU#8Z2 zTwkUhuYi6IPlhi)No#n!cGYK3CipG2wRMvH;Yjgu@6#{tkFENc$EetBkW)(d?3|08 z*sZ-|kproN1T9gl%|&=#86366fiydg z?yh4E$$ni#evk&>uf0By#9TOe?@8*Ke0_4Ak#0^O-17|x93A)j{WgRMnj&a(qM?KN z7rX;`e{1_aNvXR*@5UeAcF?uUPcSOLK}w+umi9V$k;2I-_C7zsPqFyP(6*Oh=yW7P z=D#>wOK7dlKJtt7T+Jv37S-1Dpny9m=j{w&j=<{)CA$WA{MGBNo*Utwp2|d7y*f;w zcjQj}wCH-YnIc%M2xi=HG(QBKS%{; z#84!$FQ#7JQH;|M`GcNafKH!|S_lvgX$f3+fnba|c3}_%E8_K$&?(H4uspyQn;~bB zc8!CGN=jP>Ds;tV=;N&S);zGu$U(9Gm)#FUgY*K36ex*TQ-kip@Ui8x6tOde;pVb5 zWu1eFpK{5_s@5QMh^8EoAsVTkv-SR(tg)1X$7_{9vGwVlP**YXVe2sktTZqR_4xI&{ zZ^z|Dizlnz;hW|QB<1(O%RVh_YnBJc1Y$8Q657!Ci&Ed8JociM`)@ppEHPe56SNYCnbi| zhJ=R`yj@GFDg^OwRXJued3P-U*!nN4MYZI>(7fu?*VVIpn98|D)GMM_^IsySSr|>v zw#M)B>LCm}@N0AKc&ongVr@juBft54ZoqB%O3O|XrFhD?{9xAf2VR@TYMR27rC|lP z!3n1pN3u#2ejego8h<5n5ry+E?+u1=^dZnmt|gYxh!8XqDeSPP-Ncyykb*kkZ^s^g z;&>C6tV9?oN4zUs_^Hxs5{k(|TetmmnuWsSwB5DNW9S0o5zPjgs6#zbcCbVju$~PJ z+$HiLUP3L!4fxNL5wjJm zX0Ov~St;vbBOqO>ek-$WXi=VD+tCkE5dHR9IQ< z(X^V`3KZL@)o@R}EAWiW!o{C2Evad2(A}W$Yb}ll zN0-i+C`mUOL!J6EnLE;BD)*dSNy}&y=dU$Tq(zjyTYrF9#TGkzNs_yC#r{-!7TU`S z5G>4nu$VtCBc=Uw1HIh1l5`4r?!=d8;E%iq{Iv4UmUx5zY2`IZKcHN0&eV>ipDAXw z)@022|KclEmvn@X`cQenuYN*J9aJ6Xplz105B6{G#oJA`Yv~HiLL>3w5juUoo^Wt-svc^T&1djs#k__qw5| z!Nlojc5q2obK%5$Ps_RoxOZaJNE^I4wHTUbLNv|5*57pC5)TPy>H6DR70j!OBDn~6 zMSk3rR=(K9K@b|mk6n z*Rr8GSiry9E!Z8m=83SF!g=T%&DZdit}ilalgM#Y7l^Km>?S4Ber2NT9Tq@bwy+WH zdx&i_|0b(l>fyT@%%|^b+tHFtHMB23H~WU&<59<3r8io%$E3T~nP}FML6v3qIUg+# znyG+vcW$&Q1&aIw5ODkpY0US08GWu!zqVaB3Avc|i1V1{=gV2eRfo$#nkY|9;eHYQ zqJCyv3)F04v3@dA!Ots-LQBi&-i~y_58R11MmuM_F+4Om5a!9lQZLVn&%y!-1~`F9 zADUpjN8$bbH+KEvgz#WT(`d5qj2JemkyhZ3lRIg@XZb6V$(gP_E!2c0IY^q` zM2|KJNXmj1z}8a0|A+?Dgy);`pC>d~V};dqnIaJm{&kfiG}|CU1^9Hou8|M@ub1q+ zNfTUO24R^714AfhmH633xrli&S|g$wjKGwKDS>8~w_9eqG=qdPLfoDjJUm@(snvqo z1zLxt_#H9_+Vt94{4CKk5)$%~cuF1;1&7)OOn7ED!15%X+BX(>Lhbpv1X`6S-lu)V z25ys@Tix?7XCFs$#PBogqatYWu3m+O!_V@hmA}-q71IGsD@8e74uc*Kj^tyl7th@Z zDUZc<2g5}9i6SmX9Q;=jhzIAa7C~;3+w6DbZ$Pt(<*vl?`{@X|xCCdfx%Dyf-0b`6 ze(U?A04+%xsgE*RSqK&=qI5Kp7xFgwL?G+_NtcvOysak`Q2M|U9>w_(d3r-TgOz5s zoFz^Y9>R5_j$8Krxg#4*lFmBuUn8gFx@e05QeyShL+g?Bd$oKxf+@>tjBuZ^exhr@ z1_{p+gq^xlgl!tB0dAp$rb&H?v$X703`!{cfJH4=@aO?!_W%noNzwH{yw7ugTLvH3 z4avnAYsRZ5o->dpIs%GJ44(ZH%Da+MEv@E)hN568bD^nxR zY@U^snAWJ z7O;KKh+BH=J#8|>iqPu71iRivWIN=?I0j-HWnN0SdOsz0a2-9Mt^1IUfm zmKE2%lFhdk2*wuH5=khuUXhm~Sj9sT?2b$+GL}7~AWZ$NE=r~OJTHAJAX2EA zR%lmSRhZoJ1dFegt}NEmq`s)9(@$)Ol&dHK`p79_5SVOwpE^+t?RTk>3Wt zJ3l`3o}a<@VUS{eSyguam~fQ!GkSeb>)w5tm#|&CRkjQ;i`^LS4|2B@Q)8V_zx)8N z2X{}q!*n)%Pc=Rt>wW;vADjEjCpz4wAqX%jirnDA{n67Z6soX;wN-M_Fc=K`rV+}D zsMe*asCwU}-10yU9hX?kdIRK`;M#(b29N7PzX((eIlXSaSpbo>rlT?IsL8B>fBZ8k zlI7|ZYG!22n)x^eZY(EE-6+SkrX#?(u|O{i8g4ZF*{ll;$$N971vXArZ_T|WgWm#- zZc@=va`;=GP;RmSl`wegqH-^qbSmu@@W)+LlnS{RA9KNYGHX8!*CqareJq^n`3!wJ z&%g*zABl6fp$O#ePy)C&6`^SKWO zLXmzguvbD@+=KF9rzaKgdFL>Ure~(n;OYLMUde8jJk~T-^{*^ZlpdJTgoFayKC)1m zsE;o&94j-$OkJ;-D-yQkP!GVoUa*Ard?g3l1sD3L2?zvaEjc>Ey)9vW+VlwN5VZ$H zymI%J>FoO|IyxP@A9^RnSj$tLO@kTo`7zOpGnll7@4=_UceZCOsYJ3VOJPrDLSlXv zp^bg@qCoJ3m%a(EAD8lFY6If+Nm^w)$3SUf9kh+JJ_d(N8&ytdmkwZj*67(E1yMH! zzEHg^#P%X*vnBo#WH4OFYq(R)NubaV8Dkw@&hT!Kr#BWWxI|W zIombGZO+)zOohrdR2o0;;C~5sw9STnCAY&RJ==b5fbN`%A(HjsrPhX{eH-D_~W9Eug;$1HX29UpJ4r5(dg zjj8_}S1n7ys*vI`Yr2g_$sF092B>oS=E(lLJyBl=pi}rWvrmdLp*>{|K4+B1_W#_P ze=HjcvA653{Qk{PMEDc?)p`s5_g~?H=i>O^qhV$))>Om%pXxQN`BS}qj;)?+Z@7Qr zzv{3Vq5q*44}}p#?X?W0K+^x)-9*YZ(63!_LK~&6r09|Vz57dXTL1ojqw&MHAPSu! zdYUn|(EIqjo80@^+z28fQ48?|tizT3D4l1I+RrA#5ISceX?Y@RJUZSF@}kfFwtaNJ z@7>f(*cV*^)F>1uIk;B|VD8#X?{2Oq9m39Wkx^?y@;$aTX17`uw}@RGdUJ$=L?JKok%#8#4Tm*1BVlK1u4*SHaj1QInt3@Bj$CgJ-$qY`?tSRY=Pm~<)i80iHT zRir!l2R%}bsfe`;vhw+kShxBOlfV@QkOjRvvY`ZYl?7mQ|9PKm`z}pHvv2}&5|}{c zn|%_~!2@r{B=|!A*LVx~&=8Jw46^na#+P* zAYl>m|Iwv4*LQo3zl@V`&-KobAQxfRCZzy4$uQipxniP>8t8F8>_=*4@t|N#zI}A0 zMatwv1B;%J^r-xjCgLnb@WjaBeIn>lF=7Yw0OuBxB~)&J162Rjb0X?uEH%ephf z4ACFcgt7Kb^$WD>p^ln&>rBXw;-Uckp9afse+++pGO6fkK7k)0$6NnNH>G1&q+pgk z)ima!zL**+^E+ZRrN--I}jmF&iYW`(rILX z^s(Qc4RwX7J4%ec(v{XpE~LVTUiu3&XcsqOMg#dPDoPUg6>?OFj(iihn%DrqEuAlz z$k-$mQ5n6%rAB`%hpd#R^9QfJ_LxOAVM+xmep=QJG+LN!s4*E(oq5+|y(@NX%n}pn z55-KIh&w%|s)CD~Q)uhKcm8QRrI!i~Mw4B~E&eQ)^toYpN#B!M?g_3CWY}obsg7_@Ljjfdx;tt9s9Qsu!=WTe zVbI^qW*~?ryyzR0=I&1+9s_ly;I6`Ud;E({A^J6^xB9kF?6Z)wADs#ShPLYr!aP!A zm7MWxpPcZfemJ^efIk?fg}m9dhJ>ARnEoo?n6aTrP|N;yJ)+we6KSNM_cH+^vqM&| z9&g-Xv3uppPjxudi_n{8Dfgo8PuiB7_jjS>w#z|`%KktKy*IIpw?Oy;mVhXRcS|i& zR7K9;0z@MU2-a=Y!xk$5T%=m@P#&fSdYaC*c!;L!O*w+T^BoP%WW(oEbRcbLC@$yI zE%VV3H0kpi1!jQep2%ybt$rjFe-vk7h?nwVZKk9KgX$ONeQ;)!mw^Txj%}%DS^64v z6yruHO3lJ=mkb?F^xK&ei7sbER5faQ<%#m=gp-yz`=n%rj!gl8S zlp6ng4r0n9H+f(Tc0g$fc1xl$pHh-T;L-|hxH^Ml@84gNjD;++`wqx2&{F`1I z8uk!vtc-y_uY-DWgj?~gt5E4A?c<4hvYO1`k|gn(&2UH7-gGJksGT$I1grR^lp`-a z(xu6V7L~$w(m+-+=t1$UnO_7VK2-09(+Z`}0ZBvvwnkUM7_Psr-}Ud1&Jm{P|MTc= zFa2?TaImC~l>T&$>K_~4|LGbrGM#x=r|e9v(m2jg?PdYQ(54Kp@6^dv(QZ)U=RhqJDPALl=g4#{>LfB3ul1{ z)XwZ%(S?J1+kG7ufjiVIH|}#(OWkNf$%CDPuoCj7xZk2qx^BP_j$e? zJH);VQ~n_*6{72H^L|yLir=Iz`e9szj}K*1H!&beIHLG`lKAR>Zg9jGLYtnm2^u3V z0c}(Qcf0X1PRLluhMZ5P?)*3~66~>|qM~j`+{bd9ph~$r z4W5Y5jMUq7J=~HL_{(BQ?qVyK#V>4vV{a&uDMAM8Yr|s&Ov#H;Y#G<9YDpqV$5qXm zW4v%WNh+3G!A=j8Cy%^Y6D`|LhyD$=Y?92J4(za2sIRWBO$C&UzF2~)S+F}l1Q1h* z^u9uhDL^;M6n_M*c7k%Q1!alh8l^`m;)UU1`ZaJ;835Ymc8BL5mTL@w7o-B0cB#Mu z2B7B#m4b)tHfD3=o=Aaryl-@cFS4fKZWO*V9QK<)HL6R4F=Ne{%c7WOQWBMzH~aLMj!|4-BX;wd-LaMP zUz#e(+|1dSA#t1K94nW5jPR zdF;8fBZ@GVr2%DZm8-6UZ`r6%y{07orSRuA4Ry$F!8?n!#d(ijbQeB}*oEM(4HK*s zAm&6sV}|X3E^AXGDGjhhXG_vl75}Zt<;A?mMP>JRbATv7@}(Nu>x*Of68MUX))rsB zcOA5_K1%8PY4cK^Xv?QA4{C;~CwdP+5P<9UqR(UC6D%8RQA3uG(3|@0u zEr&{mMPEHUDHm=BnIzML8wCkiL{^e>rQ-{&uu`1H*$H184{Sts0m$j@q<}f_pxYe>2ET>->QQNuIm=XjPq~`TCh)r2UR<$%K2{$-W$buH z=WQ7-z4{<~hJ{z#0X&95g^gkp3X%C=NIdH_6v{HGpUY4KC7H?viulygKOGidt~TWG z+2>hxpP+q#fV;2GSlyvzm^ati@m^~-7bsU zSERb&v-VD%*`T-OGPT52;Ja7NX0z_3w!kpH4g=zIW2U;xTD{Sr^>USB21BRy;+?jv zQ?2fFnH?hA`D)|DHISeMXH%A<{B)wRUfNvuqf%A1m4ypjKHcF8gxw+ZFfob&dMhiw zanNGLp@ZxMV3E6U%2LUgYEcWTcPAX=srH>mRF5n2u;_+|Le8m;X1f!;U$b4JiqA(= zw(%j=xRI^3?U&%Va?9gI7KutiLfetav)MF!=9TU!+niE1|F(+(9t$zjHT10bPRBzm2tabx&5S>ia_ zkpYK?O!KZ*1X97~OYj8=M_}LnKaHcV`oC!j2YYIF^?%cn|L_0CiXHF&yLZqpn@_qQ zPZQr`wbGZ%H2XG7&6zyU9$h2woCd&Wi(EvHDBym-zphNi?zjS8(I1{)pC=F8=A*{g z(yktVq8(K{!B>wP(adOuLW6LMhd-1cKiH%jAn<#@=i|@S7Xu+}3!K_as!xyL*4(bE z2B&AI!7Kd3=Y+j2goJ3>m4+W_=mV0yyX!1x=O(?F&^i~rJnPhIX)f-ckWa&yH?NbU zj5>6kw6^Q`o**e2s1gUc4GrJI*jxj`mZU@NXHjKkhy&?Rp>MN6wwZlvfBnB4kYeEv zu@~Nv`!}dz4mSy(1;Oyq8bB7IdZGfMopdK(pFNKk;=z&Ww7?sRZQ+&?M-k-%IG3YI&M`C;ujRCd7;Z z(38K*4cYaM0$_#K$^x(Io#$)7a|##}6ojSS4H_P@bjVYc8OJwiq(4g2T!VDVvVxlw z_NE%>>H;D{ifK{jbHV|u8`vLkzFm^lOTQHjFs(Jfy*B-4HTh=jj4G4ElUmS8yh@TW zaHIoJyrd1lk=(e9rL%tN(6#Xh&vvc?G8tH7eeh}X7@zLiT;0diPk?t9fGM7x9u6T( zoYInm&b+GEyzUV|k6xojCptiBux7~&ie(fGGJfCVoG9V?XNBl(`L#IzEgvdE-Nw|l z5N@&YAy+@zd9@Exiz%g>q(3r{n3uN1)IO-lzFQ)%RD186`0{J?`-Ak`Lq}r*u-7@K z{mhhVW|6~UJYifTS%#9bLR-?qhWdC1L5oI)9lGrLXZvIbnyz>C2^X zvM&j*N1{?zDA(9WWG*(DCeq6xhei-@I7~<-_i8yK5JbRX5o?(%P zg0pnpo8!RlE?cU-+?-O#1(T(NoQN#OalYn{AYo?la)!-$dltx zRGCVXMYn9xVMS-{;VSuwH*InbCQh_K*T`BBKmx!5v_0k^UkAztF!e^<{G2zDgJo5% zW#H7UP0dD+M73UXedlJB;MumYAoeInN}I0V*g%;H*^J8_Ql%-~Sb>^M4u&5N!*|r5K1m zz(TMS3rhRKa(p{xhhWwWZIYktK(AFet^>YkfB;SET(pD35o|&V143LP_nFLB&$r zCxc4WwciGnYiy5w+2u+t?Zr+N5p5q1N@2`TgL0DFgJ1REdX=^{sGz>RGpMMk-5ylZ z+WsC?|6UaLb=N2^wyT4xuC#AERmE%jV^Hc-d-9vLjmcL$%(lPQudXlpPv@!&_%Kg@ zEqMZuD&8BM^L!AJgRT$vk#qR3@VRc(f~T*DOsh?x93m|!DLTQE4CcxyR^mZ7Mze8B zT3EM8Ik^Y+?-oPS2qFy3t0h}+_j3GF4O+P`-Qt{NclZSyaPB`a5PTh#-Dx8u_4t!`Y zuFeeZ{)b@VQx}PDCWtV3@y4x?W4FSz?8t-Ajhw7qF2eqqbyB<&vINRW*kZ^zN@};YfEnF0qngp#`B_Oxcx`gyJcsn4E!bWe;|_IyV^puaXh9nHL=3#<9ha za~!6MGA8SwtDblQITNPpllsYQ?7Z37C(8>!HKXedaMe%^rqr}b%xQ^wUV}j{2%5yK zz*X`BERJ@Q;!JtgS`y{f1m$Fq3xb>rDryo5x|xBi%XtDC6`#4Zp^Hpf@AbE;SqK(J zJw=7Fbx=l2oV&lvWwUY0o-B4Ku$5<~dre0rq$NQzr+C55WQ7Sj9guga|UM-PhP;G zGXqzbJJAoO(eo9E$z2S}g^{bv6=QKRaffbY;8H+9C0JHB0oEyzoJW@+o&uC3Czo>} zoBZ&~z=h5P5TN{UA^8q^-TzDXV`Fm|g&^0vx{TtPF9==FAl2mJ>Y`< zOZTg?td^d!!3A~7j!-Y_U5hz&#%zzXo7}g ziYeoq8GM{Cz#k)6d@}7g0^;Ty!#d1d#KTR>gcCdi%TeOdp;z-Cu3^<6Ttp7@#t8sU z2UPHQ#s@F(Gz4CenFry2O+ieyW(!ETa5GW>9nXId1b`dCI#B8aNNGjiVO*$4R>Q+o$N5pS zqh2xzQaUZC(c@CYay+j&G#xW?^+rUSKrXYl90J0S4qkPc=RX%P?9IJ^%mP{%UbGii zq%{E-W^`Mg=p@Iuu$un@26fs5=*{j2u-*sz;RUOU&w}xKnEUB~nE!CYr9=V`uws;P zXEwaNOr&M#04mX5*>J-;5vJ=07hijQ|6pw~Fp;BVOBhJLZB* l5tqt6x3f5ZesS&k#e?fN9y!>*yy)|l=EcUw?(=(#{{W?&{jC51 diff --git a/tcl/Network.tcl b/tcl/Network.tcl index 887c653d..b6f31337 100644 --- a/tcl/Network.tcl +++ b/tcl/Network.tcl @@ -25,18 +25,22 @@ proc_redirect report_instance { parse_key_args "report_instance" args keys {} flags {-connections -verbose} check_argc_eq1 "report_instance" $args - set connections [info exists flags(-connections)] - set verbose [info exists flags(-verbose)] + if { [info exists flags(-connections)] } { + sta_warn 233 "report_instance -connections is deprecated." + } + if { [info exists flags(-verbose)] } { + sta_warn 234 "report_instance -verbose is deprecated." + } set instance_path [lindex $args 0] set instance [find_instance $instance_path] if { $instance != "NULL" } { - report_instance1 $instance $connections $verbose + report_instance1 $instance } else { sta_error 230 "instance $instance_path not found." } } -proc report_instance1 { instance connections verbose } { +proc report_instance1 { instance } { if { $instance == [top_instance] } { set inst_name "top" } else { @@ -47,24 +51,17 @@ proc report_instance1 { instance connections verbose } { report_line " Cell: [get_name $cell]" report_line " Library: [get_name [$cell library]]" report_line " Path cells: [instance_cell_path $instance]" - if { $connections } { - report_instance_pins $instance $verbose - } - if { $verbose } { - report_instance_children_ $instance - } + report_instance_pins $instance + report_instance_children_ $instance } -proc report_instance_pins { instance verbose } { - report_instance_pins1 $instance $verbose \ - " Input pins:" 0 {"input" "bidirect"} - report_instance_pins1 $instance $verbose \ - " Output pins:" 0 {"output" "bidirect" "tristate"} - report_instance_pins1 $instance $verbose \ - " Other pins:" 1 {"internal" "power" "ground" "unknown"} +proc report_instance_pins { instance } { + report_instance_pins1 $instance " Input pins:" 0 {"input" "bidirect"} + report_instance_pins1 $instance " Output pins:" 0 {"output" "bidirect" "tristate"} + report_instance_pins1 $instance " Other pins:" 1 {"internal" "power" "ground" "unknown"} } -proc report_instance_pins1 {instance verbose header header_optional dirs} { +proc report_instance_pins1 {instance header header_optional dirs} { set header_shown 0 if { !$header_optional } { report_line $header @@ -79,13 +76,13 @@ proc report_instance_pins1 {instance verbose header header_optional dirs} { report_line $header set header_shown 1 } - report_instance_pin $pin $verbose + report_instance_pin $pin } } $iter finish } -proc report_instance_pin { pin verbose } { +proc report_instance_pin { pin } { set net [$pin net] if { $net == "NULL" } { set net_name "(unconnected)" @@ -93,18 +90,6 @@ proc report_instance_pin { pin verbose } { set net_name [get_full_name [$net highest_connected_net]] } report_line " [$pin port_name] [pin_direction $pin] $net_name" - if { $verbose && $net != "NULL" } { - set pins [net_connected_pins_sorted $net] - foreach pin $pins { - if [$pin is_load] { - if [$pin is_top_level_port] { - report_line " [get_full_name $pin] [pin_direction $pin] port" - } else { - report_line " [get_full_name $pin] [pin_direction $pin]" - } - } - } - } } # Concatenate the cell names of the instance parents. @@ -186,9 +171,8 @@ proc report_lib_cell_ { cell corner } { ################################################################ -define_cmd_args "report_net" \ - {[-connections] [-verbose] [-corner corner] [-digits digits] [-hier_pins]\ - net_path [> filename] [>> filename]} +define_cmd_args "report_net" {[-corner corner] [-digits digits]\ + net_path [> filename] [>> filename]} # -hpins to show hierarchical pins proc_redirect report_net { @@ -198,25 +182,32 @@ proc_redirect report_net { flags {-connections -verbose -hier_pins} check_argc_eq1 "report_net" $args + if { [info exists flags(-connections)] } { + sta_warn 235 "report_net -connections is deprecated." + } + if { [info exists flags(-verbose)] } { + sta_warn 236 "report_net -verbose is deprecated." + } + if { [info exists flags(-hier_pins)] } { + sta_warn 237 "report_net -hier_pins is deprecated." + } + set corner [parse_corner_or_all keys] set digits $sta_report_default_digits if { [info exists keys(-digits)] } { set digits $keys(-digits) } - set connections [info exists flags(-connections)] - set verbose [info exists flags(-verbose)] - set hier_pins [info exists flags(-hier_pins)] set net_path [lindex $args 0] set net [find_net $net_path] if { $net != "NULL" } { - report_net1 $net $connections $verbose $hier_pins $corner $digits + report_net1 $net $corner $digits } else { set pin [find_pin $net_path] if { $pin != "NULL" } { set net [$pin net] if { $net != "NULL" } { - report_net1 $net $connections $verbose $hier_pins $corner $digits + report_net1 $net $corner $digits } else { sta_error 231 "net $net_path not found." } @@ -226,21 +217,14 @@ proc_redirect report_net { } } -proc report_net1 { net connections verbose hier_pins corner digits } { +proc report_net1 { net corner digits } { report_line "Net [get_full_name $net]" - if {$connections} { - set pins [net_connected_pins_sorted $net] - if {$verbose} { - report_net_caps $net $pins $corner $digits - } - report_net_pins $pins "Driver pins" "is_driver" $verbose $corner $digits - report_net_pins $pins "Load pins" "is_load" $verbose $corner $digits - if {$hier_pins} { - report_net_pins $pins "Hierarchical pins" "is_hierarchical" \ - $verbose $corner $digits - } - report_net_other_pins $pins $verbose $corner $digits - } + set pins [net_connected_pins_sorted $net] + report_net_caps $net $pins $corner $digits + report_net_pins $pins "Driver pins" "is_driver" $corner $digits + report_net_pins $pins "Load pins" "is_load" $corner $digits + report_net_pins $pins "Hierarchical pins" "is_hierarchical" $corner $digits + report_net_other_pins $pins $corner $digits } proc net_connected_pins_sorted { net } { @@ -286,7 +270,7 @@ proc report_net_cap { net caption cap_msg corner digits } { report_line " $caption capacitance: [capacitance_range_str $cap_min $cap_max $digits]" } -proc report_net_pins { pins header pin_pred verbose corner digits } { +proc report_net_pins { pins header pin_pred corner digits } { set found 0 foreach pin $pins { if {[$pin $pin_pred]} { @@ -294,7 +278,7 @@ proc report_net_pins { pins header pin_pred verbose corner digits } { report_line $header set found 1 } - report_net_pin $pin $verbose $corner $digits + report_net_pin $pin $corner $digits } } if { $found } { @@ -302,7 +286,7 @@ proc report_net_pins { pins header pin_pred verbose corner digits } { } } -proc report_net_other_pins { pins verbose corner digits } { +proc report_net_other_pins { pins corner digits } { set header 0 foreach pin $pins { if { !([$pin is_driver] || [$pin is_load] || [$pin is_hierarchical]) } { @@ -311,39 +295,36 @@ proc report_net_other_pins { pins verbose corner digits } { report_line "Other pins" set header 1 } - report_net_pin $pin $verbose $corner $digits + report_net_pin $pin $corner $digits } } } -proc report_net_pin { pin verbose corner digits } { +proc report_net_pin { pin corner digits } { if [$pin is_leaf] { set cell_name [get_name [[$pin instance] cell]] set cap "" - if { $verbose } { - set liberty_port [$pin liberty_port] - if { $liberty_port != "NULL" } { - set cap [port_capacitance_str $liberty_port $corner $digits] - } + set liberty_port [$pin liberty_port] + if { $liberty_port != "NULL" } { + set cap [port_capacitance_str $liberty_port $corner $digits] } report_line " [get_full_name $pin] [pin_direction $pin] ($cell_name)$cap[pin_location_str $pin]" } elseif [$pin is_top_level_port] { set wire_cap "" set pin_cap "" set corner [sta::cmd_corner] - if { $verbose } { - set port [$pin port] - set cap_min [port_ext_wire_cap $port $corner "min"] - set cap_max [port_ext_wire_cap $port $corner "max"] - if { $cap_min > 0 || $cap_max > 0 } { - set wire_cap " wire [capacitance_range_str $cap_min $cap_max $digits]" - } - set cap_min [port_ext_pin_cap $port $corner "min"] - set cap_max [port_ext_pin_cap $port $corner "max"] - if { $cap_min > 0 || $cap_max > 0} { - set pin_cap " pin [capacitance_range_str $cap_min $cap_max $digits]" - } + set port [$pin port] + set cap_min [port_ext_wire_cap $port $corner "min"] + set cap_max [port_ext_wire_cap $port $corner "max"] + if { $cap_min > 0 || $cap_max > 0 } { + set wire_cap " wire [capacitance_range_str $cap_min $cap_max $digits]" + } + + set cap_min [port_ext_pin_cap $port $corner "min"] + set cap_max [port_ext_pin_cap $port $corner "max"] + if { $cap_min > 0 || $cap_max > 0} { + set pin_cap " pin [capacitance_range_str $cap_min $cap_max $digits]" } report_line " [get_full_name $pin] [pin_direction $pin] port$wire_cap$pin_cap[pin_location_str $pin]" } elseif [$pin is_hierarchical] { From d493d17ab39fc11136cd00b095b644a31ec06625 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Wed, 17 Jan 2024 18:12:25 -0800 Subject: [PATCH 20/43] rm deprecated functions Signed-off-by: James Cherry --- include/sta/TimingArc.hh | 2 -- parasitics/Parasitics.tcl | 3 --- sdf/Sdf.tcl | 3 --- tcl/Liberty.tcl | 7 ++----- tcl/Search.tcl | 35 +++++------------------------------ 5 files changed, 7 insertions(+), 43 deletions(-) diff --git a/include/sta/TimingArc.hh b/include/sta/TimingArc.hh index acd8365f..87142e7a 100644 --- a/include/sta/TimingArc.hh +++ b/include/sta/TimingArc.hh @@ -229,9 +229,7 @@ public: LibertyPort *from() const { return set_->from(); } LibertyPort *to() const { return set_->to(); } Transition *fromEdge() const { return from_rf_; } - Transition *fromTrans() const __attribute__ ((deprecated)) { return from_rf_; } Transition *toEdge() const { return to_rf_; } - Transition *toTrans() const __attribute__ ((deprecated)) { return to_rf_; } TimingRole *role() const { return set_->role(); } TimingArcSet *set() const { return set_; } TimingSense sense() const; diff --git a/parasitics/Parasitics.tcl b/parasitics/Parasitics.tcl index efe40863..c027efa7 100644 --- a/parasitics/Parasitics.tcl +++ b/parasitics/Parasitics.tcl @@ -66,9 +66,6 @@ proc_redirect read_spef { set quiet [info exists flags(-quiet)] set save [info exists flags(-save)] set filename [file nativename [lindex $args 0]] - if { [info exists flags(-increment)] } { - sta_warn 272 "read_spef -increment is deprecated." - } return [read_spef_cmd $filename $instance $corner $min_max \ $pin_cap_included $keep_coupling_caps $coupling_reduction_factor \ $reduce_to $delete_after_reduce $quiet] diff --git a/sdf/Sdf.tcl b/sdf/Sdf.tcl index c9bc2057..c1c63653 100644 --- a/sdf/Sdf.tcl +++ b/sdf/Sdf.tcl @@ -46,9 +46,6 @@ proc_redirect read_sdf { sta_error 621 "-cond_use min_max cannot be used with analysis type single." } } - if [info exists keys(-analysis_type)] { - sta_warn 622 "-analysis_type is deprecated. Use set_operating_conditions -analysis_type." - } set unescaped_dividers [info exists flags(-unescaped_dividers)] set incremental_only [info exists flags(-incremental_only)] diff --git a/tcl/Liberty.tcl b/tcl/Liberty.tcl index 7a0426fa..6f48dcb1 100644 --- a/tcl/Liberty.tcl +++ b/tcl/Liberty.tcl @@ -19,19 +19,16 @@ namespace eval sta { define_cmd_args "read_liberty" \ - {[-corner corner] [-min] [-max] [-no_latch_infer] filename} + {[-corner corner] [-min] [-max] [-infer_latches] filename} proc_redirect read_liberty { parse_key_args "read_liberty" args keys {-corner} \ - flags {-min -max -no_latch_infer -infer_latches} + flags {-min -max -infer_latches} check_argc_eq1 "read_liberty" $args set filename [file nativename [lindex $args 0]] set corner [parse_corner keys] set min_max [parse_min_max_all_flags flags] - if { [info exists flags(-no_latch_infer)] } { - sta_warn "-no_latch_infer is deprecated." - } set infer_latches [info exists flags(-infer_latches)] read_liberty_cmd $filename $corner $min_max $infer_latches } diff --git a/tcl/Search.tcl b/tcl/Search.tcl index 4ad74c2f..0f48871d 100644 --- a/tcl/Search.tcl +++ b/tcl/Search.tcl @@ -404,13 +404,7 @@ proc_redirect report_check_types { variable path_options parse_key_args "report_check_types" args keys {-net -corner}\ - flags {-violators -all_violators -verbose -no_line_splits} 0 - - set violators [info exists flags(-violators)] - if { [info exists flags(-all_violators)] } { - sta_warn 517 "-all_violators is deprecated. Use -violators" - set violators 1 - } + flags {-violators -verbose -no_line_splits} 0 set verbose [info exists flags(-verbose)] set nosplit [info exists flags(-no_line_splits)] @@ -477,8 +471,7 @@ proc_redirect report_check_types { -max_fanout -min_fanout \ -max_capacitance -min_capacitance \ -min_pulse_width \ - -min_period -max_skew \ - -max_transition -min_transition } 1 + -min_period -max_skew} 1 set setup [info exists flags(-max_delay)] set hold [info exists flags(-min_delay)] @@ -487,15 +480,6 @@ proc_redirect report_check_types { set clk_gating_setup [info exists flags(-clock_gating_setup)] set clk_gating_hold [info exists flags(-clock_gating_hold)] set max_slew [info exists flags(-max_slew)] - if { [info exists flags(-max_transition)] } { - sta_warn 518 "-max_transition deprecated. Use -max_slew." - set max_slew 1 - } - set min_slew [info exists flags(-min_slew)] - if { [info exists flags(-min_transition)] } { - sta_warn 519 "-min_transition deprecated. Use -min_slew." - set min_slew 1 - } set max_fanout [info exists flags(-max_fanout)] set min_fanout [info exists flags(-min_fanout)] set max_capacitance [info exists flags(-max_capacitance)] @@ -528,15 +512,9 @@ proc_redirect report_check_types { } elseif { $hold || $removal || $clk_gating_hold } { set path_min_max "min" } - if { $violators } { - set group_count $sta::group_count_max - set slack_min [expr -$sta::float_inf] - set slack_max 0.0 - } else { - set group_count 1 - set slack_min [expr -$sta::float_inf] - set slack_max $sta::float_inf - } + set group_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 \ $slack_min $slack_max \ @@ -900,9 +878,6 @@ proc parse_report_path_options { cmd args_var default_format set report_net [expr [lsearch $fields "net*"] != -1] set report_slew [expr [lsearch $fields "slew*"] != -1] set report_fanout [expr [lsearch $fields "fanout*"] != -1] - if { [expr [lsearch $fields "trans*"] != -1] } { - sta_warn 525 "The transition_time field is deprecated. Use slew instead." - } } else { set report_input_pin 0 set report_cap 0 From 2dcf169d9fe8a03aac659f9a214dd6dad6cefecf Mon Sep 17 00:00:00 2001 From: James Cherry Date: Wed, 17 Jan 2024 18:13:20 -0800 Subject: [PATCH 21/43] version 2.5.0 Signed-off-by: James Cherry --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1fa620e3..76045844 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,7 +24,7 @@ if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.14) cmake_policy(SET CMP0086 NEW) endif() -project(STA VERSION 2.4.0 +project(STA VERSION 2.5.0 LANGUAGES CXX ) From a83d5c96730554e3a6641113f9edc1afc11aa628 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Wed, 17 Jan 2024 20:10:18 -0800 Subject: [PATCH 22/43] report_check_types Signed-off-by: James Cherry --- tcl/Search.tcl | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tcl/Search.tcl b/tcl/Search.tcl index 0f48871d..da485fc1 100644 --- a/tcl/Search.tcl +++ b/tcl/Search.tcl @@ -406,6 +406,7 @@ proc_redirect report_check_types { parse_key_args "report_check_types" args keys {-net -corner}\ flags {-violators -verbose -no_line_splits} 0 + set violators [info exists flags(-violators)] set verbose [info exists flags(-verbose)] set nosplit [info exists flags(-no_line_splits)] @@ -480,6 +481,7 @@ proc_redirect report_check_types { set clk_gating_setup [info exists flags(-clock_gating_setup)] set clk_gating_hold [info exists flags(-clock_gating_hold)] set max_slew [info exists flags(-max_slew)] + set min_slew [info exists flags(-min_slew)] set max_fanout [info exists flags(-max_fanout)] set min_fanout [info exists flags(-min_fanout)] set max_capacitance [info exists flags(-max_capacitance)] @@ -512,9 +514,15 @@ proc_redirect report_check_types { } elseif { $hold || $removal || $clk_gating_hold } { set path_min_max "min" } - set group_count 1 - set slack_min [expr -$sta::float_inf] - set slack_max $sta::float_inf + if { $violators } { + set group_count $sta::group_count_max + set slack_min [expr -$sta::float_inf] + set slack_max 0.0 + } else { + set group_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 \ $slack_min $slack_max \ From 4480c5a9299c5c5c3d27d58e04af69e0ed0175d5 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Thu, 18 Jan 2024 11:26:08 -0800 Subject: [PATCH 23/43] gcc warning Signed-off-by: James Cherry --- graph/Graph.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/graph/Graph.cc b/graph/Graph.cc index 552f7471..2007e610 100644 --- a/graph/Graph.cc +++ b/graph/Graph.cc @@ -106,7 +106,7 @@ public: int &bidirect_count, int &load_count, const Network *network); - virtual void operator()(Pin *pin); + virtual void operator()(const Pin *pin); protected: Pin *drvr_pin_; @@ -133,7 +133,7 @@ FindNetDrvrLoadCounts::FindNetDrvrLoadCounts(Pin *drvr_pin, } void -FindNetDrvrLoadCounts::operator()(Pin *pin) +FindNetDrvrLoadCounts::operator()(const Pin *pin) { if (network_->isDriver(pin)) { if (pin != drvr_pin_) From 83b687fa3098206d06c9832a960cf741425e9a04 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Thu, 18 Jan 2024 12:06:38 -0800 Subject: [PATCH 24/43] messages Signed-off-by: James Cherry --- doc/messages.txt | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/doc/messages.txt b/doc/messages.txt index 37d6a037..b0201f35 100644 --- a/doc/messages.txt +++ b/doc/messages.txt @@ -48,9 +48,14 @@ 0192 DelayCalc.tcl:282 $cmd check_value is not a float. 0210 DelayCalc.tcl:350 set_assigned_transition transition is not a float. 0220 Link.tcl:34 missing top_cell_name argument and no current_design. -0230 Network.tcl:35 instance $instance_path not found. -0231 Network.tcl:221 net $net_path not found. -0232 Network.tcl:224 net $net_path not found. +0230 Network.tcl:39 instance $instance_path not found. +0231 Network.tcl:212 net $net_path not found. +0232 Network.tcl:215 net $net_path not found. +0233 Network.tcl:29 report_instance -connections is deprecated. +0234 Network.tcl:32 report_instance -verbose is deprecated. +0235 Network.tcl:186 report_net -connections is deprecated. +0236 Network.tcl:189 report_net -verbose is deprecated. +0237 Network.tcl:192 report_net -hier_pins is deprecated. 0250 NetworkEdit.tcl:107 unsupported object type $object_type. 0251 NetworkEdit.tcl:137 connect_pins is deprecated. Use connect_pin. 0252 NetworkEdit.tcl:206 unsupported object type $object_type. @@ -59,7 +64,6 @@ 0267 Sta.cc:2029 '%s' is not a valid start point. 0270 Parasitics.tcl:45 path instance '$path' not found. 0271 Parasitics.tcl:62 -reduce_to must be pi_elmore or pi_pole_residue2. -0272 Parasitics.tcl:70 read_spef -increment is deprecated. 0301 Power.tcl:220 activity should be 0.0 to 1.0 or 2.0 0302 Power.tcl:228 duty should be 0.0 to 1.0 0303 Power.tcl:243 activity cannot be set on clock ports. @@ -219,17 +223,13 @@ 0514 Search.tcl:205 '$arg' is not a known keyword or flag. 0515 Search.tcl:207 positional arguments not supported. 0516 Search.tcl:326 report_clock_skew -setup and -hold are mutually exclusive options. -0517 Search.tcl:411 -all_violators is deprecated. Use -violators -0518 Search.tcl:491 -max_transition deprecated. Use -max_slew. -0519 Search.tcl:496 -min_transition deprecated. Use -min_slew. -0520 Search.tcl:510 analysis type single is not consistent with doing both setup/max and hold/min checks. -0521 Search.tcl:515 positional arguments not supported. -0522 Search.tcl:778 -min and -max cannot both be specified. -0523 Search.tcl:798 pin '$pin_arg' is hierarchical. -0524 Search.tcl:864 -format $format not recognized. -0525 Search.tcl:904 The transition_time field is deprecated. Use slew instead. -0526 Search.tcl:1011 specify one of -setup and -hold. -0527 Search.tcl:1060 unknown path group '$name'. +0520 Search.tcl:496 analysis type single is not consistent with doing both setup/max and hold/min checks. +0521 Search.tcl:501 positional arguments not supported. +0522 Search.tcl:764 -min and -max cannot both be specified. +0523 Search.tcl:784 pin '$pin_arg' is hierarchical. +0524 Search.tcl:850 -format $format not recognized. +0526 Search.tcl:994 specify one of -setup and -hold. +0527 Search.tcl:1043 unknown path group '$name'. 0540 Sta.tcl:158 -from/-to arguments not supported with -of_objects. 0541 Sta.tcl:286 unsupported -filter expression. 0560 Util.tcl:44 $cmd $key missing value. @@ -266,8 +266,7 @@ 0611 WritePathSpice.tcl:86 No paths found for -path_args $path_args. 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. -0622 Sdf.tcl:50 -analysis_type is deprecated. Use set_operating_conditions -analysis_type. -0623 Sdf.tcl:157 SDF -divider must be / or . +0623 Sdf.tcl:154 SDF -divider must be / or . 0800 VcdReader.cc:110 unhandled vcd command. 0801 VcdReader.cc:146 timescale syntax error. 0802 VcdReader.cc:160 Unknown timescale unit. @@ -381,7 +380,7 @@ 1224 LibertyReader.cc:2610 vector reference_time not found. 1225 LibertyReader.cc:2643 normalized_driver_waveform variable_2 must be normalized_voltage 1226 LibertyReader.cc:2646 normalized_driver_waveform variable_1 must be input_net_transition -1227 SpefReader.cc:732 %s. +1227 SpefReader.cc:730 %s. 1228 LibertyReader.cc:2868 level_shifter_type must be HL, LH, or HL_LH 1229 LibertyReader.cc:2904 switch_cell_type must be coarse_grain or fine_grain 1230 LibertyReader.cc:2928 scaling_factors %s not found. From 3ae813a20782a52b3a4b4c3c687fccf1f5413db7 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sat, 20 Jan 2024 15:52:03 -0800 Subject: [PATCH 25/43] DMP use lambda Signed-off-by: James Cherry --- dcalc/DmpCeff.cc | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/dcalc/DmpCeff.cc b/dcalc/DmpCeff.cc index a7c37b4d..ae153fac 100644 --- a/dcalc/DmpCeff.cc +++ b/dcalc/DmpCeff.cc @@ -47,6 +47,7 @@ using std::max; using std::sqrt; using std::log; using std::isnan; +using std::function; // Tolerance (as a scale of value) for driver parameters (Ceff, delta t, t0). static const double driver_param_tol = .01; @@ -91,8 +92,6 @@ gateModelRd(const LibertyCell *cell, const Pvt *pvt, bool pocv_enabled); static void -evalDmpEqnsState(void *state); -static void evalVoEqns(void *state, double x, double &y, @@ -116,9 +115,7 @@ newtonRaphson(const int max_iter, const int n, const double x_tol, // eval(state) is called to fill fvec and fjac. - // Returns false if fails. - void (*eval)(void *state), - void *state, + function eval, // Temporaries supplied by caller. double *fvec, double **fjac, @@ -350,8 +347,9 @@ DmpAlg::findDriverParams(double ceff) double t0 = t_vth + log(1.0 - vth_) * rd_ * ceff - vth_ * dt; x_[DmpParam::dt] = dt; x_[DmpParam::t0] = t0; - newtonRaphson(100, x_, nr_order_, driver_param_tol, evalDmpEqnsState, - this, fvec_, fjac_, index_, p_, scale_); + newtonRaphson(100, x_, nr_order_, driver_param_tol, + [=] () { evalDmpEqns(); }, + fvec_, fjac_, index_, p_, scale_); t0_ = x_[DmpParam::t0]; dt_ = x_[DmpParam::dt]; debugPrint(debug_, "dmp_ceff", 3, " t0 = %s dt = %s ceff = %s", @@ -362,13 +360,6 @@ DmpAlg::findDriverParams(double ceff) showVo(); } -static void -evalDmpEqnsState(void *state) -{ - DmpAlg *alg = reinterpret_cast(state); - alg->evalDmpEqns(); -} - void DmpAlg::gateCapDelaySlew(double ceff, double &delay, @@ -1326,8 +1317,7 @@ newtonRaphson(const int max_iter, double x[], const int size, const double x_tol, - void (*eval)(void *state), - void *state, + function eval, // Temporaries supplied by caller. double *fvec, double **fjac, @@ -1336,7 +1326,7 @@ newtonRaphson(const int max_iter, double *scale) { for (int k = 0; k < max_iter; k++) { - eval(state); + eval(); for (int i = 0; i < size; i++) // Right-hand side of linear equations. p[i] = -fvec[i]; From 6a4e610e07f9964af48c46e7e6680c3bc7f432c9 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sun, 21 Jan 2024 10:19:52 -0700 Subject: [PATCH 26/43] dmp tweaks Signed-off-by: James Cherry --- CMakeLists.txt | 1 + dcalc/DmpCeff.cc | 493 +++++++++++++++++++++------------------------- dcalc/FindRoot.cc | 102 ++++++++++ dcalc/FindRoot.hh | 48 +++++ 4 files changed, 381 insertions(+), 263 deletions(-) create mode 100644 dcalc/FindRoot.cc create mode 100644 dcalc/FindRoot.hh diff --git a/CMakeLists.txt b/CMakeLists.txt index 76045844..bb1d30b0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,6 +70,7 @@ set(STA_SOURCE dcalc/DelayCalcBase.cc dcalc/DmpCeff.cc dcalc/DmpDelayCalc.cc + dcalc/FindRoot.cc dcalc/GraphDelayCalc.cc dcalc/LumpedCapDelayCalc.cc dcalc/NetCaps.cc diff --git a/dcalc/DmpCeff.cc b/dcalc/DmpCeff.cc index ae153fac..c743d70b 100644 --- a/dcalc/DmpCeff.cc +++ b/dcalc/DmpCeff.cc @@ -38,6 +38,7 @@ #include "Parasitics.hh" #include "DcalcAnalysisPt.hh" #include "ArcDelayCalc.hh" +#include "FindRoot.hh" namespace sta { @@ -92,24 +93,6 @@ gateModelRd(const LibertyCell *cell, const Pvt *pvt, bool pocv_enabled); static void -evalVoEqns(void *state, - double x, - double &y, - double &dy); -static void -evalVlEqns(void *state, - double x, - double &y, - double &dy); - -static double -findRoot(void (*func)(void *state, double x, double &y, double &dy), - void *state, - double x1, - double x2, - double x_tol, - int max_iter); -static void newtonRaphson(const int max_iter, double x[], const int n, @@ -154,10 +137,12 @@ public: double c2, double rpi, double c1); - virtual void gateDelaySlew(double &delay, + virtual void gateDelaySlew(// Return values. + double &delay, double &slew) = 0; virtual void loadDelaySlew(const Pin *load_pin, double elmore, + // Return values. ArcDelay &delay, Slew &slew); double ceff() { return ceff_; } @@ -166,29 +151,34 @@ public: // equations evaluated at x_ and fjac_ with the jabobian evaluated at x_. virtual void evalDmpEqns() = 0; // Output response to vs(t) ramp driving pi model load. - double vo(double t); - double dVoDt(double t); + void Vo(double t, + // Return values. + double &vo, + double &dol_dt); // Load responce to driver waveform. - double vl(double t); - double dVlDt(double t); - double vCross() { return v_cross_; } + void Vl(double t, + // Return values. + double &vl, + double &dvl_dt); protected: // Find driver parameters t0, delta_t, Ceff. void findDriverParams(double ceff); void gateCapDelaySlew(double cl, + // Return values. double &delay, double &slew); void gateDelays(double ceff, + // Return values. double &t_vth, double &t_vl, double &slew); - virtual double dv0dt(double t) = 0; // Partial derivatives of y(t) (jacobian). void dy(double t, double t0, double dt, double cl, + // Return values. double &dydt0, double &dyddt, double &dydcl); @@ -199,11 +189,16 @@ protected: void showX(); void showFvec(); void showJacobian(); - void findDriverDelaySlew(double &delay, + void findDriverDelaySlew(// Return values. + double &delay, double &slew); - double findVoCrossing(double vth); + double findVoCrossing(double vth, + double lower_bound, + double upper_bound); void showVo(); - double findVlCrossing(double vth); + double findVlCrossing(double vth, + double lower_bound, + double upper_bound); void showVl(); void fail(const char *reason); @@ -216,11 +211,17 @@ protected: double y0(double t, double cl); // Output response to unit ramp driving pi model load. - virtual double v0(double t) = 0; + virtual void V0(double t, + // Return values. + double &vo, + double &dvo_dt) = 0; // Upper bound on time that vo crosses vh. virtual double voCrossingUpperBound() = 0; // Load responce to driver unit ramp. - virtual double vl0(double t) = 0; + virtual void Vl0(double t, + // Return values. + double &vl, + double &dvl_dt) = 0; // Upper bound on time that vl crosses vh. double vlCrossingUpperBound(); @@ -267,12 +268,6 @@ protected: // Load rspf elmore delay. double elmore_; double p3_; - -private: - virtual double dvl0dt(double t) = 0; - - // Implicit argument passed to evalVoEqns, evalVlEqns. - double v_cross_; }; DmpAlg::DmpAlg(int nr_order, @@ -362,7 +357,8 @@ DmpAlg::findDriverParams(double ceff) void DmpAlg::gateCapDelaySlew(double ceff, - double &delay, + // Return values. + double &delay, double &slew) { ArcDelay model_delay; @@ -375,7 +371,8 @@ DmpAlg::gateCapDelaySlew(double ceff, void DmpAlg::gateDelays(double ceff, - double &t_vth, + // Return values. + double &t_vth, double &t_vl, double &slew) { @@ -479,58 +476,68 @@ DmpAlg::showJacobian() } void -DmpAlg::findDriverDelaySlew(double &delay, +DmpAlg::findDriverDelaySlew(// Return values. + double &delay, double &slew) { - delay = findVoCrossing(vth_); - double tl = findVoCrossing(vl_); - double th = findVoCrossing(vh_); + double t_upper = voCrossingUpperBound(); + delay = findVoCrossing(vth_, t0_, t_upper); + double tl = findVoCrossing(vl_, t0_, delay); + double th = findVoCrossing(vh_, delay, t_upper); // Convert measured slew to table slew. slew = (th - tl) / slew_derate_; } // Find t such that vo(t)=v. double -DmpAlg::findVoCrossing(double vth) +DmpAlg::findVoCrossing(double vth, + double t_lower, + double t_upper) { - v_cross_ = vth; - double ub = voCrossingUpperBound(); - return findRoot(evalVoEqns, this, t0_, ub, vth_time_tol, find_root_max_iter); + FindRootFunc vo_func = [=] (double t, + double &y, + double &dy) { + double vo, vo_dt; + Vo(t, vo, vo_dt); + y = vo - vth; + dy = vo_dt; + }; + bool fail; + double t_vth = findRoot(vo_func, t_lower, t_upper, vth_time_tol, + find_root_max_iter, fail); + if (fail) + throw DmpError("findRoot failed"); + return t_vth; } -static void -evalVoEqns(void *state, - double x, - double &y, - double &dy) -{ - DmpAlg *pi_ceff = reinterpret_cast(state); - y = pi_ceff->vo(x) - pi_ceff->vCross(); - dy = pi_ceff->dVoDt(x); -} - -double -DmpAlg::vo(double t) +void +DmpAlg::Vo(double t, + // Return values. + double &vo, + double &dvo_dt) { double t1 = t - t0_; - if (t1 <= 0.0) - return 0.0; - else if (t1 <= dt_) - return v0(t1) / dt_; - else - return (v0(t1) - v0(t1 - dt_)) / dt_; -} + if (t1 <= 0.0) { + vo = 0.0; + dvo_dt = 0.0; + } + else if (t1 <= dt_) { + double v0, dv0_dt; + V0(t1, v0, dv0_dt); -double -DmpAlg::dVoDt(double t) -{ - double t1 = t - t0_; - if (t1 <= 0) - return 0.0; - else if (t1 <= dt_) - return dv0dt(t1) / dt_; - else - return (dv0dt(t1) - dv0dt(t1 - dt_)) / dt_; + vo = v0 / dt_; + dvo_dt = dv0_dt / dt_; + } + else { + double v0, dv0_dt; + V0(t1, v0, dv0_dt); + + double v0_dt, dv0_dt_dt; + V0(t1 - dt_, v0_dt, dv0_dt_dt); + + vo = (v0 - v0_dt) / dt_; + dvo_dt = (dv0_dt - dv0_dt_dt) / dt_; + } } void @@ -538,8 +545,11 @@ DmpAlg::showVo() { report_->reportLine(" t vo(t)"); double ub = voCrossingUpperBound(); - for (double t = t0_; t < t0_ + ub; t += dt_ / 10.0) - report_->reportLine(" %g %g", t, vo(t)); + for (double t = t0_; t < t0_ + ub; t += dt_ / 10.0) { + double vo, dvo_dt; + Vo(t, vo, dvo_dt); + report_->reportLine(" %g %g", t, vo); + } } void @@ -563,9 +573,11 @@ DmpAlg::loadDelaySlew(const Pin *, showVl(); elmore_ = elmore; p3_ = 1.0 / elmore; - double load_delay = findVlCrossing(vth_); - double tl = findVlCrossing(vl_); - double th = findVlCrossing(vh_); + double t_lower = t0_; + double t_upper = vlCrossingUpperBound(); + double load_delay = findVlCrossing(vth_, t_lower, t_upper); + double tl = findVlCrossing(vl_, t_lower, load_delay); + double th = findVlCrossing(vh_, load_delay, t_upper); // Measure delay from Vo, the load dependent source excitation. double delay1 = load_delay - vo_delay_; // Convert measured slew to reported/table slew. @@ -595,13 +607,25 @@ DmpAlg::loadDelaySlew(const Pin *, } // Find t such that vl(t)=v. -// Return true if successful. double -DmpAlg::findVlCrossing(double vth) +DmpAlg::findVlCrossing(double vth, + double t_lower, + double t_upper) { - v_cross_ = vth; - double ub = vlCrossingUpperBound(); - return findRoot(evalVlEqns, this, t0_, ub, vth_time_tol, find_root_max_iter); + FindRootFunc vl_func = [=] (double t, + double &y, + double &dy) { + double vl, vl_dt; + Vl(t, vl, vl_dt); + y = vl - vth; + dy = vl_dt; + }; + bool fail; + double t_vth = findRoot(vl_func, t_lower, t_upper, vth_time_tol, + find_root_max_iter, fail); + if (fail) + throw DmpError("findRoot failed"); + return t_vth; } double @@ -610,39 +634,33 @@ DmpAlg::vlCrossingUpperBound() return voCrossingUpperBound() + elmore_ * 2.0; } -static void -evalVlEqns(void *state, - double x, - double &y, - double &dy) -{ - DmpAlg *pi_ceff = reinterpret_cast(state); - y = pi_ceff->vl(x) - pi_ceff->vCross(); - dy = pi_ceff->dVlDt(x); -} - -double -DmpAlg::vl(double t) +void +DmpAlg::Vl(double t, + // Return values. + double &vl, + double &dvl_dt) { double t1 = t - t0_; - if (t1 <= 0) - return 0.0; - else if (t1 <= dt_) - return vl0(t1) / dt_; - else - return (vl0(t1) - vl0(t1 - dt_)) / dt_; -} + if (t1 <= 0.0) { + vl = 0.0; + dvl_dt = 0.0; + } + else if (t1 <= dt_) { + double vl0, dvl0_dt; + Vl0(t1, vl0, dvl0_dt); + vl = vl0 / dt_; + dvl_dt = dvl0_dt / dt_; + } + else { + double vl0, dvl0_dt; + Vl0(t1, vl0, dvl0_dt); -double -DmpAlg::dVlDt(double t) -{ - double t1 = t - t0_; - if (t1 <= 0) - return 0.0; - else if (t1 <= dt_) - return dvl0dt(t1) / dt_; - else - return (dvl0dt(t1) - dvl0dt(t1 - dt_)) / dt_; + double vl0_dt, dvl0_dt_dt; + Vl0(t1 - dt_, vl0_dt, dvl0_dt_dt); + + vl = (vl0 - vl0_dt) / dt_; + dvl_dt = (dvl0_dt - dvl0_dt_dt) / dt_; + } } void @@ -650,8 +668,11 @@ DmpAlg::showVl() { report_->reportLine(" t vl(t)"); double ub = vlCrossingUpperBound(); - for (double t = t0_; t < t0_ + ub * 2.0; t += ub / 10.0) - report_->reportLine(" %g %g", t, vl(t)); + for (double t = t0_; t < t0_ + ub * 2.0; t += ub / 10.0) { + double vl, dvl_dt; + Vl(t, vl, dvl_dt); + report_->reportLine(" %g %g", t, vl); + } } void @@ -685,20 +706,26 @@ public: double c2, double rpi, double c1); - virtual void gateDelaySlew(double &delay, + virtual void gateDelaySlew(// Return values. + double &delay, double &slew); virtual void loadDelaySlew(const Pin *, double elmore, - ArcDelay &delay, + // Return values. + ArcDelay &delay, Slew &slew); virtual void evalDmpEqns(); virtual double voCrossingUpperBound(); private: - virtual double v0(double t); - virtual double dv0dt(double t); - virtual double vl0(double t); - virtual double dvl0dt(double t); + virtual void V0(double t, + // Return values. + double &vo, + double &dvo_dt); + virtual void Vl0(double t, + // Return values. + double &vl, + double &dvl_dt); }; DmpCap::DmpCap(StaState *sta): @@ -725,7 +752,8 @@ DmpCap::init(const LibertyLibrary *drvr_library, } void -DmpCap::gateDelaySlew(double &delay, +DmpCap::gateDelaySlew(// Return values. + double &delay, double &slew) { debugPrint(debug_, "dmp_ceff", 3, " ceff = %s", @@ -749,16 +777,14 @@ DmpCap::evalDmpEqns() { } -double -DmpCap::v0(double) +void +DmpCap::V0(double, + // Return values. + double &vo, + double &dvo_dt) { - return 0.0; -} - -double -DmpCap::dv0dt(double) -{ - return 0.0; + vo = 0.0; + dvo_dt = 0.0; } double @@ -767,16 +793,14 @@ DmpCap::voCrossingUpperBound() return 0.0; } -double -DmpCap::vl0(double) +void +DmpCap::Vl0(double , + // Return values. + double &vl, + double &dvl_dt) { - return 0.0; -} - -double -DmpCap::dvl0dt(double) -{ - return 0.0; + vl = 0.0; + dvl_dt = 0.0; } //////////////////////////////////////////////////////////////// @@ -797,21 +821,26 @@ public: double c2, double rpi, double c1); - virtual void gateDelaySlew(double &delay, + virtual void gateDelaySlew(// Return values. + double &delay, double &slew); virtual void evalDmpEqns(); virtual double voCrossingUpperBound(); private: void findDriverParamsPi(); - virtual double v0(double t); - virtual double dv0dt(double t); double ipiIceff(double t0, double dt, double ceff_time, double ceff); - virtual double vl0(double t); - virtual double dvl0dt(double t); + virtual void V0(double t, + // Return values. + double &vo, + double &dvo_dt); + virtual void Vl0(double t, + // Return values. + double &vl, + double &dvl_dt); // Poles/zero. double p1_; @@ -883,7 +912,8 @@ DmpPi::init(const LibertyLibrary *drvr_library, } void -DmpPi::gateDelaySlew(double &delay, +DmpPi::gateDelaySlew(// Return values. + double &delay, double &slew) { driver_valid_ = false; @@ -1012,27 +1042,35 @@ DmpPi::ipiIceff(double, double dt, return ipi - iceff; } -double -DmpPi::v0(double t) +void +DmpPi::V0(double t, + // Return values. + double &vo, + double &dvo_dt) { - return k0_ * (k1_ + k2_ * t + k3_ * exp2(-p1_ * t) + k4_ * exp2(-p2_ * t)); + double exp_p1 = exp2(-p1_ * t); + double exp_p2 = exp2(-p2_ * t); + vo = k0_ * (k1_ + k2_ * t + k3_ * exp_p1 + k4_ * exp_p2); + dvo_dt = k0_ * (k2_ - k3_ * p1_ * exp_p1 - k4_ * p2_ * exp_p2); } -double -DmpPi::dv0dt(double t) -{ - return k0_ * (k2_ - k3_ * p1_ * exp2(-p1_ * t) - k4_ * p2_ * exp2(-p2_ * t)); -} - -double -DmpPi::vl0(double t) +void +DmpPi::Vl0(double t, + // Return values. + double &vl, + double &dvl_dt) { double D1 = k0_ * (k1_ - k2_ / p3_); double D3 = -p3_ * k0_ * k3_ / (p1_ - p3_); double D4 = -p3_ * k0_ * k4_ / (p2_ - p3_); double D5 = k0_ * (k2_ / p3_ - k1_ + p3_ * k3_ / (p1_ - p3_) + p3_ * k4_ / (p2_ - p3_)); - return D1 + t + D3 * exp2(-p1_ * t) + D4 * exp2(-p2_ * t) + D5 * exp2(-p3_ * t); + double exp_p1 = exp2(-p1_ * t); + double exp_p2 = exp2(-p2_ * t); + double exp_p3 = exp2(-p3_ * t); + vl = D1 + t + D3 * exp_p1 + D4 * exp_p2 + D5 * exp_p3; + dvl_dt = 1.0 - D3 * p1_ * exp_p1 - D4 * p2_ * exp_p2 + - D5 * p3_ * exp_p3; } double @@ -1041,17 +1079,6 @@ DmpPi::voCrossingUpperBound() return t0_ + dt_ + (c1_ + c2_) * (rd_ + rpi_) * 2.0; } -double -DmpPi::dvl0dt(double t) -{ - double D3 = -p3_ * k0_ * k3_ / (p1_ - p3_); - double D4 = -p3_ * k0_ * k4_ / (p2_ - p3_); - double D5 = k0_ * (k2_ / p3_ - k1_ + p3_ * k3_ / (p1_ - p3_) - + p3_ * k4_ / (p2_ - p3_)); - return 1.0 - D3 * p1_ * exp2(-p1_ * t) - D4 * p2_ * exp2(-p2_ * t) - - D5 * p3_ * exp2(-p3_ * t); -} - //////////////////////////////////////////////////////////////// // Capacitive load, so Ceff is known. @@ -1129,14 +1156,19 @@ public: double c2, double rpi, double c1); - virtual void gateDelaySlew(double &delay, + virtual void gateDelaySlew(// Return values. + double &delay, double &slew); private: - virtual double v0(double t); - virtual double dv0dt(double t); - virtual double vl0(double t); - virtual double dvl0dt(double t); + virtual void V0(double t, + // Return values. + double &vo, + double &dvo_dt); + virtual void Vl0(double t, + // Return values. + double &vl, + double &dvl_dt); virtual double voCrossingUpperBound(); // Pole/zero. @@ -1187,7 +1219,8 @@ DmpZeroC2::init(const LibertyLibrary *drvr_library, } void -DmpZeroC2::gateDelaySlew(double &delay, +DmpZeroC2::gateDelaySlew(// Return values. + double &delay, double &slew) { try { @@ -1207,33 +1240,30 @@ DmpZeroC2::gateDelaySlew(double &delay, drvr_slew_ = slew; } -double -DmpZeroC2::v0(double t) +void +DmpZeroC2::V0(double t, + // Return values. + double &vo, + double &dvo_dt) { - return k0_ * (k1_ + k2_ * t + k3_ * exp2(-p1_ * t)); + double exp_p1 = exp2(-p1_ * t); + vo = k0_ * (k1_ + k2_ * t + k3_ * exp_p1); + dvo_dt = k0_ * (k2_ - k3_ * p1_ * exp_p1); } -double -DmpZeroC2::dv0dt(double t) -{ - return k0_ * (k2_ - k3_ * p1_ * exp2(-p1_ * t)); -} - -double -DmpZeroC2::vl0(double t) +void +DmpZeroC2::Vl0(double t, + // Return values. + double &vl, + double &dvl_dt) { double D1 = k0_ * (k1_ - k2_ / p3_); double D3 = -p3_ * k0_ * k3_ / (p1_ - p3_); double D5 = k0_ * (k2_ / p3_ - k1_ + p3_ * k3_ / (p1_ - p3_)); - return D1 + t + D3 * exp2(-p1_ * t) + D5 * exp2(-p3_ * t); -} - -double -DmpZeroC2::dvl0dt(double t) -{ - double D3 = -p3_ * k0_ * k3_ / (p1_ - p3_); - double D5 = k0_ * (k2_ / p3_ - k1_ + p3_ * k3_ / (p1_ - p3_)); - return 1.0 - D3 * p1_ * exp2(-p1_ * t) - D5 * p3_ * exp2(-p3_ * t); + double exp_p1 = exp2(-p1_ * t); + double exp_p3 = exp2(-p3_ * t); + vl = D1 + t + D3 * exp_p1 + D5 * exp_p3; + dvl_dt = 1.0 - D3 * p1_ * exp_p1 - D5 * p3_ * exp_p3; } double @@ -1244,70 +1274,6 @@ DmpZeroC2::voCrossingUpperBound() //////////////////////////////////////////////////////////////// -// Find the root of a function between x1 and x2 using a combination -// of Newton-Raphson and bisection search. -// x_tol is a percentage that change in x must be less than (1.0 = 100%). -// error is non-null if a problem occurs. -static double -findRoot(void (*func)(void *state, double x, double &y, double &dy), - void *state, - double x1, - double x2, - double x_tol, - int max_iter) -{ - double y1, y2, dy; - func(state, x1, y1, dy); - func(state, x2, y2, dy); - - if ((y1 > 0.0 && y2 > 0.0) || (y1 < 0.0 && y2 < 0.0)) - throw DmpError("findRoot: initial bounds do not surround a root"); - - if (y1 == 0.0) - return x1; - - if (y2 == 0.0) - return x2; - - if (y1 > 0.0) { - // Swap x1/x2 so func(x1) < 0. - double tmp = x1; - x1 = x2; - x2 = tmp; - } - double root = (x1 + x2) * 0.5; - double dx_prev = abs(x2 - x1); - double dx = dx_prev; - double y; - func(state, root, y, dy); - for (int iter = 0; iter < max_iter; iter++) { - // Newton/raphson out of range. - if ((((root - x2) * dy - y) * ((root - x1) * dy - y) > 0.0) - // Not decreasing fast enough. - || (abs(2.0 * y) > abs(dx_prev * dy))) { - // Bisect x1/x2 interval. - dx_prev = dx; - dx = (x2 - x1) * 0.5; - root = x1 + dx; - } - else { - dx_prev = dx; - dx = y / dy; - root -= dx; - } - if (abs(dx) <= x_tol * abs(root)) - // Converged. - return root; - - func(state, root, y, dy); - if (y < 0.0) - x1 = root; - else - x2 = root; - } - throw DmpError("findRoot: max iterations exceeded"); -} - // Newton-Raphson iteration to find zeros of a function. // x_tol is percentage that all changes in x must be less than (1.0 = 100%). // Eval(state) is called to fill fvec and fjac (returns false if fails). @@ -1683,7 +1649,8 @@ gateModelRd(const LibertyCell *cell, } void -DmpCeffDelayCalc::gateDelaySlew(double &delay, +DmpCeffDelayCalc::gateDelaySlew(// Return values. + double &delay, double &slew) { dmp_alg_->gateDelaySlew(delay, slew); diff --git a/dcalc/FindRoot.cc b/dcalc/FindRoot.cc new file mode 100644 index 00000000..ad96796c --- /dev/null +++ b/dcalc/FindRoot.cc @@ -0,0 +1,102 @@ +// OpenSTA, Static Timing Analyzer +// Copyright (c) 2023, Parallax Software, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#include "FindRoot.hh" + +namespace sta { + +double +findRoot(FindRootFunc func, + double x1, + double x2, + double x_tol, + int max_iter, + // Return value. + bool &fail) +{ + double y1, y2, dy1; + func(x1, y1, dy1); + func(x2, y2, dy1); + return findRoot(func, x1, y1, x2, y2, x_tol, max_iter, fail); +} + +double +findRoot(FindRootFunc func, + double x1, + double y1, + double x2, + double y2, + double x_tol, + int max_iter, + // Return value. + bool &fail) +{ + if ((y1 > 0.0 && y2 > 0.0) || (y1 < 0.0 && y2 < 0.0)) { + // Initial bounds do not surround a root. + fail = true; + return 0.0; + } + + if (y1 == 0.0) { + fail = false; + return x1; + } + + if (y2 == 0.0) { + fail = false; + return x2; + } + + if (y1 > 0.0) + // Swap x1/x2 so func(x1) < 0. + std::swap(x1, x2); + double root = (x1 + x2) * 0.5; + double dx_prev = abs(x2 - x1); + double dx = dx_prev; + double y, dy; + func(root, y, dy); + for (int iter = 0; iter < max_iter; iter++) { + // Newton/raphson out of range. + if ((((root - x2) * dy - y) * ((root - x1) * dy - y) > 0.0) + // Not decreasing fast enough. + || (abs(2.0 * y) > abs(dx_prev * dy))) { + // Bisect x1/x2 interval. + dx_prev = dx; + dx = (x2 - x1) * 0.5; + root = x1 + dx; + } + else { + dx_prev = dx; + dx = y / dy; + root -= dx; + } + if (abs(dx) <= x_tol * abs(root)) { + // Converged. + fail = false; + return root; + } + + func(root, y, dy); + if (y < 0.0) + x1 = root; + else + x2 = root; + } + fail = true; + return root; +} + +} // namespace diff --git a/dcalc/FindRoot.hh b/dcalc/FindRoot.hh new file mode 100644 index 00000000..2bc9a8eb --- /dev/null +++ b/dcalc/FindRoot.hh @@ -0,0 +1,48 @@ +// OpenSTA, Static Timing Analyzer +// Copyright (c) 2023, Parallax Software, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#pragma once + +#include // abs, min + +namespace sta { + +typedef const std::function FindRootFunc; + +double +findRoot(FindRootFunc func, + double x1, + double x2, + double x_tol, + int max_iter, + // Return value. + bool &fail); + +double +findRoot(FindRootFunc func, + double x1, + double y1, + double x2, + double y2, + double x_tol, + int max_iter, + // Return value. + bool &fail); + +} // namespace From 6ebe53794b684d2af38efa7319c9e7f2ae0b77ba Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sun, 21 Jan 2024 10:47:09 -0700 Subject: [PATCH 27/43] dmp error msg Signed-off-by: James Cherry --- dcalc/DmpCeff.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dcalc/DmpCeff.cc b/dcalc/DmpCeff.cc index c743d70b..5fcc6bed 100644 --- a/dcalc/DmpCeff.cc +++ b/dcalc/DmpCeff.cc @@ -506,7 +506,7 @@ DmpAlg::findVoCrossing(double vth, double t_vth = findRoot(vo_func, t_lower, t_upper, vth_time_tol, find_root_max_iter, fail); if (fail) - throw DmpError("findRoot failed"); + throw DmpError("find Vo crossing failed"); return t_vth; } @@ -624,7 +624,7 @@ DmpAlg::findVlCrossing(double vth, double t_vth = findRoot(vl_func, t_lower, t_upper, vth_time_tol, find_root_max_iter, fail); if (fail) - throw DmpError("findRoot failed"); + throw DmpError("find Vl crossing failed"); return t_vth; } From eeb0417602c2da5913ae7b4510e83b6f1c3bf8d0 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sun, 21 Jan 2024 15:20:20 -0700 Subject: [PATCH 28/43] timing debug doc Signed-off-by: James Cherry --- doc/OpenSTA.odt | Bin 103276 -> 104845 bytes doc/OpenSTA.pdf | Bin 244194 -> 249024 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/OpenSTA.odt b/doc/OpenSTA.odt index f3802ffce2a99e13993d43043d89065d26914153..ce0b301b694d4664e4744152a50940991b61e7d9 100644 GIT binary patch delta 71408 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 wno`@6fP8s8*yca`d_TW)-uK*RrfRCI ztFLq2J=4`S6Vn8BS_<_=NfsOe4Fm)R1Z3e0OTrf!@P9%Z7tnE7U_$f%t05M+GVIPE zkJ=)wLDb_-lQ@Y58pDx2{I1^yaXRU+)F)Lw2qHHhzf*d?|`{jo(+} z9q!eh;cmv;Nq}5bZ!(2MKP0_zEtlv z7$|I=S<`D|qpNGe9{5<7C*MwQ*fMrcP_`(viLhENaRO3QMvy6>tU@&$2PX{p7uO)8 zn{~5E$-*$3T59O^J`@Gis9$4lCHwnpV;q}2z(ZLELm;@|96Lvfr7$5!i>{;D%AX?` zPP8Jxvmu$+B#Qgjf-f!fSHhK%$w4VVCtAs96U9*&hxp=t^G&mEdhF3HCv!N+UsU-j zGIgvc9s)elJ72rKRJY`C7tyJh{5-ZJasspb>8Rk798n|~x4*eJJ-r_6?F}8=kz7qv z8CVzffi+QWCHQ6TWsBosmEkq=mvJi)LnVrF>zO8BiT@a5BiQ?L^>?P~=+CC+K=-!& zk%CCSYgM&Q2HPEU6W6>o$M3mv4?T*wnmcS4X>*{cAf@2WNQ5MNl+=AbYz8Gsycg^2 z^q1I=pbTNW5i&yMgHjJ37k#{=vk#O|=zy^<}-lr=sF+s_)Y0?6#B_|K~wqCEO$GwuiQC zJ_GQ=pYr9^E1EOsCGJk$pyTH|(mQ9gOgmfWJ7MqEj{)`%LR}rM<$1O9JIYS1;TXr! zbFc@FHnkd)YQGwR{s#;kUg9?`-It4I?r+%6c5$fAO!WpYTlWQdhz#DxGc~WEO0v)} zsYdhQ+h8CdIM5&<|92z6z`*>w5j2w=!3hD6btwe@9fP?c9~lPudB^!%5NdjQSiJn7 zYrS7u1JA}2GGa2J>5z>*9rOo2;`Q>;^#SK$ zX;^GRYPtA5J@>Lcmep7L)0KwQa+qTB>+Jh@;DhIPpWrr|m5AtEnQr2yPNR^d+5&L^ ztai63Oj@|k-ln^|6D9c|kB_#3P;l|jc3F(KUxQ}1UUm<=ySiXUXJ=)&gGL&T$uef* z>8t7P-oo$S9(S)7cT2l>pCwp4ggp%{3BCTF3zH*ZS zi0=Cww|ZAcXE#@0cXzGBlvmFwf!v$I z?%2}4!1(Hn2b=&uZ(n;k#Vh>yn(sq{;&dG2&Kad28)p>pFqY+PE<8VYTY-^rG+2QR z=eBu$UTm$sR+FQng)vo<0QzK)_Ny|*p2W-y9FS{Oapi3)a~!nnxm}m5*nSK> z_sc|X>rp2PRRrHKeiR`S-Wx6;#Dk`f1GQ#gih$(ux>-W9$K|UcX=xZSc6s_T4p}-$ zW)xAh4~AH$P^hTIAyqq37viS*4(DO91%m4+D19M>!4Sbga~-~U zHa`U{(W708USadMob}e@64X^zv`d6JN z>MjLYdMKiz5-Desj^&WFcx3Eint^fWVy(b`x*K}qb|d4Z3(Q2M6-gh{TV7n4TxaCaflFM9?r33y+|o?ks3N&g)hOF;*CCD+Cc3 z-^5aHXIfRJlKDuGogtcl<|M<&EwdBvN^8$!r{e}<$6=r;_Q2)^DGdgd`A>*d;#xyK zKVq4nRxd-T>9Ye>8wlV=6x@xhi$6<~MB+$jRX(P^YB%sbARBuw8LClO7@ie?U|~_h zE_w#h^L;a@I`9}9O!rx*RMwJFwpCPj zvdHp5!c#B2jfMH3*sFMk3Mk2bS{_}(*CtaVCs7#UDa$EuU{v4+#KglHd+Y1s5sa@( zP^*F!q$}GQ72+BQ4WC4Af@R{s{mn>L=4E9wPZEGe=;Gn!?OAtOB%BlwfPA#ADta2y z?}{N3-^u~{qla`*@K6h6)n)6DF?pa6#uGS?Dsh-0;DeL|zM!JGxsT924(ye%5y5{! zm8{&#^!d$<4f6tH`jQ0b8mJr{jPqSVgAThs0 zn^&|Bu#5I%WG8kU^_18nHRKqk4e|O{^lxS9q(=gBPL@Otf4B6WRDEZbG?|uHet2=~ zeMNCLDkpNKP>q@-k*zYG$J86Pw5LvA5v8d8bLgR3z8CKv(unTMj+)xch64|?iXM1s zGmI;yMu0eX+blH`?w8JelDg@ZK+BuU?VS!9iUN)_<}(WY{THR?%@H=C;xJ#%9F+h3 zOu__kx*TzP=Z2<3hZFqz_a)gWfC-s8Ro*5sCuC1ao2oPYo;=WWY?T26vAmg6OPoA2 zkCZ|q)-Ny=&jeR{2eOHjqa`#pzzC9gk|GxitAE**T8l=Bi@k*biw3`LQIww@Edgv+28UEDaUPe37nqGygD9?aL z^=G&Rn~F_*>NPewTVBdGxdeM>MqXwu9t!ssylIv@9zZSc6RoiT$m&yMgjW29PLV|S zgiA^DoN6K?hZ3ufN-V6e2H|bU>)fXgZ2e6KjBpkL?@PVm!pw#104KEe*#@QDXktJb zeagPlB)V)wTjOs82M5|v-ehpwF-V-F!~p9F6=8<3!HBrnCTM5(YiJ1#RZ(93c{4KK z8m3BBns3-|f|Whw81wIU4Jff`xPzsHUPjodyKF~K2_J%@25l)$cxRX1x)KA?L?Y{m z?-C9K!`Y9$6tk=FCbn0#-Q(uHlc{t)w@b6n%YxO5Q|~E%{}}vRu>qs+`N5y7H3HlJ zTe1I_x+cxS6Q^;fgCfBH%V+<$j3?D2sQyc6|7*-n`(NY#>!AlvoMeLV^*;v~1kV3C zvi~QO;CcR&dho3Olf-E!DWGuwztNinzwm+nYi;sJe1ZVTsZB@ZTuDiB&T#_KYh1SG z@9?EkYeKToaf2m!euXl*MZ;7#fES2LJ=bWTsb(Mg&1Z6jtilNlq^eK%glQLzMR1E% zQu0UL(%whNXz6!T#z=MQGQ+;WO_4UsqXafM%>p(gGjqWJyUMZ^oH_lL-ck1-a6 ztEcG$xT%5VL0aIKtcfLs6pa*w7CRojzDgpLir}sq1#Dv^Z20a#8jV_6;r!&nqHSiX zY958()9lRU^hg5D0J&Sde?^&z%7s1>@8QC%nOFaS@oI0{rgRcOvKR5(+OG|g@xQ)8@Wq!NilqRW!m)~+fRl8RD%d*N>u9(|ZM0<@e= zJIngDFK1Am!$S;byA(+T?sg;U0kNTzS4kqnkKlvB=mqrA?xvCAB!eB1BXCdiAP)}E z5DI_+cDwh}wG!T3|L%ar{2^U>NH@c_fr`a2kqIY}@~$m{7-+14f4b+^+{i9T@{^%g zK)1N(*T(=dCU*IZ?i&W*(F7o<9|elDgzz`?5koim1-O6{it;a7|I3-H%RHO?Zud39 zd!l}Dj`QEpJbAe@M_Ae9)yilIdOqC{+6q9()!OKJ@Kju&M)p*xQ}Fb#9}g<@HcEHc zU+;)tC%&>phkxZyUC|`(tT^^^5Z0})_o_iws8CdEmXdDe_?Mc6DlK^4F*GYs-M$Sx zzpAEctVO7bY(?8f3gdk1n2~-7#UEv?Ulfe{Vp9Cg%SFhpVL06CY+VqVpx_=C5rM#h3dxyaajRR zJf`tUdR_V|Ya)0ZIq9#CR-Wk?c&Avcm@*lbok>|4lI(6+D;@_iGtQSak6%$xb3aSG zlX)!oIe7|tB9RhH3ues_{zCA&m~#>XJ0rGh8xd^2$I@U|QUVCh-?z(QB|FT$c`A<; z(tapvEM)yqq#jG!*`%so#WJAD(x#Y+o!vTj)U(;=K0egQK4{RDX8Gy!eIa@($K2PZ z47=@!%`7VO$g&_~A^L<@-l^Ma+=}8rfwiM$K`vS0W=Brx4{xxHd|oQ2pZ7^Aptxc4 zT-|-tq{HdAtiSO0Kt6A$^XTS2vzN-@d2d=LLk^3g5y4eGEqPok^Cmqq{%UeY0w&PnlFH z9kyy@-^}H|>06Z65NwLsHmGE`0Z<4fU{k8nj=?7{;C%~?ft4Q7#O`ZpIjg@;w_$md-D@rYH9t}LcR)p6f$G3 zc2!R`c%gImYaV!R*NAAqmp7^|-pe|!=*^#1Bh%V{9vrhMvZbv@k@5&vErF_~>g$Yz zv(AR73tTplrKPY(L=Mbr%{<{27MkR3iXKaiWvvQT2M;d``miAND-|IR=7SL=kclgl z0IKa!TKj!Y7jy-0Aw_PVnx?bt=OAPAiSA#8h}j!It>E8Wp;)w16oeGaedT(6=ZQ{c zPO(%<?>JX_Qq%K`ugpkycM(8GE zg1gG=NaVwRcaI8`Qlf_13KDadPgE(hE_@HtJi<4)melk^o(Hw$L)ELiA650B-74B!`o)&Cwj^`P#uU5Pp&ENu4re!~&BLA%LStYic#x^Oi2rLG_KM+XwOIF& z6(VC>h0eE?O=BhTW~ZE*)emn_GS#DKfc0&c=LNo10Rv%zRzQ(MD$9GwVr1m!Hg_LV zt4Hk`m<_^VSLe`;&gsYI_`&{04l|2Klb9}0Dmr9lvWv9xqgV$IdZG(Gd}>q?I}3KG zD~E{;F(0_QlKBlv?+wC_^hPR@5Jyr&8T%bmF1+%r2`r18U@5DHCgi7VcA(8d1Mi|} z8*}Dujw1TgairYr#D~36SVCTj%dUPMl{$35ptnL9$Oc=uC|#!$_%7nN>1?s$G}#q9 zkul1{-}dFXakDq}3VvHV&o3(=i8C9ZjTz#6iH^XDb2u8gPvI)Ak$qk7jnZ$((7myO zNRYNGyK)x~{0Qv{{Hu=PWO*tFG3{xJ*OHlEI^sI0crM}Wb-r9hp^T{tBO?jk1G0c*bamLC| ziv_53S$@D5s^sdPAhO#p5wa8I83GWB!HOeS@R_A>z1EaB;-?k$BOj)T)v~M1;yJFr zmbDV=DMa#;T;P2hdD4WkB4sSI#+_d>wnauqR>N~Ki{QAPu5m}fPl!{*7K0Q+XGAsm zG|@D)qSSO?yOaf#Vy>gFXae?!ThN`GfOw5<`iJScq}+{7A;r@b={0%?&di+bh)<#I zGe3dm^qFrcbZ&(aJfWA`66!Gm(jTKn^_bd!5)J0 zYs{erzL_ZxljGwq`#MMw>UtPaG5yby*cqn%<=-v zL$p^zn{zZd#f^nXUrlqUgk4V;_&Ro&H7{xMD2Y%f6uj@V?RU(^~`a36)~1fr}^J z!|X9c9hEQjSXH@FgEDbd!@Xl__V4%hDNUCNW_#ui64#O<)3>t#_dd8h<@MPa*7ZI> zIcX$AUZH)DkBipm z+HU_YW)I09wIfzjWp#Gbw$dxm-yZ9fGl{#KC)0{Lq5nv^^as6`rqJixYyY4X{zO?f zT+pp4IA$5_+L+rKLmJ@)z4vyY-m2#@z$?SqC8d4Mb>~F$Ba*%snADNmTLGcxE6YzK z%@_aiy!gGd3V z?#$gx5w~)2s+^oeKND2n0DK+p^Jq>5Q#OG0&^Jo!7sd0R@0C$~tQ~I_daFQX>&NZ( zsi4Lxz|i*54gUhnEZ*mBWxZj-y)f?I8@L*MbgaMM_%wZdGx{jme4k=C?NizSoE+{A zs89P6H-M$kw>0Y)#*3+U(uzAtmW{a1`d1mdr==XNcVVL!=#D!=o`w%g&Bj}tZCo%D zNH7y_u-~*Ob$)seUe6y8za-9zxLRmxJ1~IXzv>c5?S@f9yqMs% zL%(bk(=Od#Rc*|gQb3Ych^uf|%FQlBnTH`D9@g&FB&PMscV&YzQi*DPK!yu*6CJ3} zP@4S#cg0UcM)|0Ex%lfrTR)-~-u75xU3o-mW1{lGk4P0WU*U>c&#({4*E&|PD0VDw ze(BXmNUFD|K$qI}yF4{ub;(d)!TTP~O904VM?M59=>_nNjKvc>d`HN@VksVIDyY1x zDG)(GH!erUM`2No7+uAp5%UQ_KriGJ2!or$B^C{}jE*S~X_g#UBJL!;H7}2^C=j{T z`h~-?e=ZV8Eb1yb9#4#8Vls|=hQeYRvHgg}BIXc+fL+MU5rzQF5fF=p9mdXP5sR9K zAcIR5~ADdZJ#2!qPN#SzP+ z?j#mHXF&Um?D791|6kykIAYOTiT^(U=P*6kET(g-(1hFI^*~JzOG{FnY&TK}!c#t{ zNSN;|7Otp(Wn4Tl;qB;HJd!u5={R&u1M`0HJq-4>ut&%?!c#rl{?M6$vUNGMC_mQm zfD%&M=%^CXI;m+nbk7y@V(>N$_OY;uEy7(szet$(EPer}D1SA=oui_xj;O$4>}TlD zu^2f%$07iTKP{gi3IBma`o|LVCrkUm|3F@Y7MZPvcWH8CZx37|W|9^=T`+eC@8W;* zaf$fJhbQzWAKk&9d~6GU@^O*>$w#;c7WVdTuKC|EKc>^*KQP$$pFmvW9RBa}5$j&~ zllqtZPwM?<35bUTfKNE;r@?U~SlS%doaY>fAaf0A6q>EjgO?S3!c-)E2U1K=Okl#M z{NRkE>iE~;(xXaD{h+o+3`h&JcWoHdGs5n230RAB$j`Ad!Wy-|h}?7t&2h#n3%+9{ zkd}hzr*A=H0hRqFulsMuo&NZcBia5;h-Gd4!_)Fbs4 za>*oyNER+M4Vwhm^vmzQ<7>|GC`VhYK{1>|pq#@IIkxMf4J%zTTOELJ8m@%JsY3YR zeZcO)?6!8crjTV@W|*`J5Z-G&sIftMfMq(n=2(VHZnIU-mGK_hdknXemdtq_VJ(h} z1V+Wcx4#qsL~sGP-|@dZ%-Zfw<<%&MWVu~)>DSWV$iSN zfQ-4f`4ufu2?wAiVTMufiR5q-IWh#v(EqA_ z43Zk-@Ieg0CPZ0{L$6f-40ag-#NJu$NnIr{HJIW#X}z)$a-;`8!2i{K?!H@Jp<{r6 z@Y;d??@i7BsyLcDjFMGW79b!^b7V;t|5alwqJjU)GD$}<1b|&qkyIkl>)R8$X6>2w zjJ{c^XZUsv&&g5lwp~~5TIW$_##pt7To_TZu?{SbP)bS{yTu#k^7&NG+E(6)f%6p@ z3@kDi1hNQDQ-!(=^6vTP&tdl}?&EIZM*TUWa1|-I&EtA#PeCLQ*W3T{_Wm4+u(zk} z{Qacs@te~^&#_kM)W=(W5Vv`(Nk@U%D><*Nc#|8rO%AZGi@4v>Sx+qM7c0G(O&@xz4R}njW`0Bw0jV2=Gpn zhK(-&cDRbW&D-(M<0m}L)1b2E#noEm^4cmSb@Xe#n@72%rA}%vnk~bR^koTZdSgKt zdijf$6dcC|8kf`^hYeV_;e@z|I{0-GQR1NkzSch{3G?a|yta+L<^4iCOJu!WAS7*u zFCxQile*JxBJ*$MLM69YaGncCY~p4-vvAR`|Hf|~-^v(n^O~Co?rpeaPQYy>Lla!1 zaiD6*&q+CLPiRN2#rJ?>hvG%+pG>%~`?G6$`HVUJ*pKu+ zffihHz};WjlgZWd_PUbFrS89S#)wTDA1ic1u4yIvKy$cQF^Zwfwoo_|ORMi&Z^Aq0DG_*6MrCZZoBFNOl^|@`i8!VeTR$QLD@d>d50mQ z?xgxfi#Yz54Pd3s1NeJ7_(%vhQ_px_Ttqz4^q@%9FBhD#%YCbahR5G{gNk`!X7ho1 zeNKQ266tH911fXx_cnYLML4E*{@;t9ZwBEn;{fHJZmz(G8P|Ffb@5I?n)Wmm z-$D@fbKRIxXC?a)n93^-hd?F z#oY{!AVA(~$$#BD6fC=~O~mWMmidTQqwI1aVE#7v<8?@&JYC?!Na|M5Fo}<1UFX>^ zQtGZTn~!t!-G#-Bf2!ZeMzU>;XM^)?dyUdlpxWa6h^s?c?t@<<6oLBhP01`PC#z4? zyIbE-E=S~7Lek-0|118ljm!jeLzm3_E4yhk3c&3?^n-M}k53!dyFEGuEUd&_oz`Lh z+Oy(n_fDZ(BB;x~>%{bUE^X#3QOE}U`Yn1*?KwNo% zNwnaR-Giz*c~(iPQsY4Y&Oo8Re+SK|-{t{Tgtt3Wk!meoGpotZN#Eo#Xi?}_;n{ui zSKzS<70W$#Y;XWuv}O?Ig83oDZhITjC?Il2;(eiX&t^0M3EnSF%BlU1|HuJjA8@`Z zh!#JZVj^q7mX4)SgfUPK{nk;6T)Z0B!*&%Fu9nZa)%?9X-FL_H$xpyi}ZEE zPl>H6nC%Pd47;hy3E0$Pq8~c3UQh{FB7Yf36P-ke76#=oog#rrY8}Zq-3;|49T0_L zo;vcKbt(xu^Pnn%ZOYt$xzJrv*c{6nJ}_hokK(vX$&E`V3tT$g+9S}+8iln^bQq#h z;4kAjm~@xWpg>2pL1=jt*-_&%uM2H=wF%xxf;(6=)3riChPTH`ElHj19Gc|u-8TE} zo@|eRl%1bs#Y#9$!v)FR^R3$bGoZG(rouLo;9XOvS7+m1vM5MrDlYg=Uc&WmRWRe1<4_$`Nu-7)S^TCK-V$ zL;9jGX{uD-Z+O85xV)}KbRMqG>aG&aVLc(b zINpc;xmd+z8P-sZ@^CKEOMQYDp-1{6oaU*(xe@B1!i~5WE1+6-EU85G{nq z3q8pjU0kkGie0YJAF@J0uUNN?;aj6hp1?+hfn=u&CiPCmt$ieUH!w>Z+&p=V1&dv2 zpq?f*zW=2uxymwKyuNw@kR!V2!8QNRcrnyGcT901suwjYzD?;+RH7@6OD|r`p*{IZ zninaQpeUX{UN+BvJ>gFio=%r!A*9d|*PnSnmA&(Jj2t6Q-{#qt+b$9*f|4jn%`L^qFXuGQb(=26v;qo6I4dJ<{hI)bP3Hf#Mdh_oM;dqgGqPt0kZlSRx40*RUOtk-;}u1FN29G1Dcea_6;;D>2F#*C`OZKdOH{bQYzgL z61UFKVmiHR6JHiRC>TFgl1+9W+K-A=I1|zkRa7o96r0b71?L?@ZIVC^9_WuGog6w) z%%q5%3|OObyMnfKYykx*uw^2Lk+~)LxC+iJ_=Njo zL#H-io?^a(KR)d3YnDcyGMC&yB$8`&NR06rkIRZYs6DK8U zhf6H&0LRoy{U`Y%ai*+mLdm~#O36`{Z28KZZs9|UmdM0BQJaaIG$K5i?1DiYxxv_* zX5&0BOdX)!wm4FoZnfBD6-k$z6?Vkbn`drGv-m*lh)7yui+vKH_GL=F6NI+~i*^O& zqR;afzt71^!9(Wn z+&(4q;2OgGmoFrmTfDFm>)($gs5deZcf%h_>VE(cN`HRb?onpFfcVM$+Pv*G?Q0YM z#hI7=S5LS^K3cS*y!H#Cfk_5dj-HIpQ2U}ilH~*%KK`sKU=&N$i(k9a8#Ty8hd?mW z8@{7A9&6DB2Qo2F44U8xK)lLg7fg*B%=Lttfm|}8TkC=((dHWQ;FuE9r(76-q;~$U zMneLE%qU%qtm*hYS^}7=HzzjJai&_#`{Ef7`e#t672#8_D#uNo^e&(y($p_JGdWKEEyAVV zA+|Ag8?Y|o8ClaoP&c%?VSkO+!mhVY<lDcvktVnup;`Z&)zV zHO=7f)8^jFTUGT7z zIY+WZtr>Kp1%rW~&n`rLOA5TS_E8$v{wlzbWIAfXz*Jq;=?qoUF|wuz3_e8TX;F)DfqQp(+Ek`-kxWY`dfspFhj4vJKt*& z4P9_!b1Y1(szl7NaJh&bz(O~lnVeBQvjHTV!QbJ>RC*$2ZmA7&0z1R(rz(|1Kdx@A zYbYd>iZ9AeqyXj1&y3>g$wj8vcVfYHqV!)-XQ7k6Q zjVRX6v()UGEEXu=ZDkl1?(E*1ho;8aURi{VJ!6%@ zAi4Kr+*98w)8d5hJ1gmLuh1>Ga9XENFCTav#*h*&WD9{&msHh1l6XG5gZLky6o*j)d1E|Mta z%!h?ZHB$`(WBrHUagGmyw-(>Lc=A2AbrS4GK-shPFRheVe_XpZqEPDR9?9FBHcp4z z)1L#aSZS>}bYoFP^vh&6vidP{8w%znht2#4%NWl-x|LDZ*Vk$oRt{D$Ruk3Glci0v zeWHx{dUC5>>W}knW+I*-&yhHGe`I&qSzLQMxU4~*-JL;)=O=}+_<1+H_mNhRA6@N6!vuXJ|E-k8uPK&U9>Gv6_kZa@zR&`CPPRhR!3z$qK)j9w@ z{+dUWrDwv;^}+g%{l!&WZk+S>)O$BAU!&7kkEC}6LBd7iXo>warggh)qET7J58tbv z%h0!!7%Ajc!Ma1Abkfcoa#hUj$w0QMgs!cqh3U+rHS4EkiKo*+Jt4B^VUVDgJ(Zo? z1&%kiQ2woxulb1r=-6}c)G_6EjE%sH<&4D}zn0s~Fg#Sjsn8jmOzB)OB2#R8ro>h) zGLHy~YfrQBI<3-R#m1T7QtL*4{5@=Rt2&pj(Yad_B4N6l9w!k$u&7W(*%+@nj-Y!Q(%;B{KWeI@nFQ74s0mjED^9IFYw zAhAd?ZVwReI~?|M!Fz-dkeq06DxZVPj@Z*$97n?$ zA;({heZg2?5KVx#j*RYOur)w?2r)wd9Mo?U|J#z;5QLcx*CxbVP%8r6cK*Y~)Cxjp ztD{|w@bSC_NWMo`R>8+;F;8VtVB^3RgYqF#h4~cAAr45#hB%Cn`z$7pw$GPvkyTdY zS;_lo=uz`zyM`b$HZ7>FJ_?U6mHZQ^+M~=4ZO-zqdTMO(&~sTdr6;fE(fddvkIFvZN7li*$7yT5!*rIM^O0@S0|h^ zR~Nfyo@pF2|3WKHv+MIGv6!pky+IsD#Dy5pF+|PSo*y;HEI%FTv7(DE8e4lBF^R;9 zY(MT;NX?cM>1m3IAP!OG{_OE<#hPU1`<3dP+|)7$+^QelqK2-Rsb&EjPZeF}H@nQ3IyU;Ech;X^ zIEoyuYlHUL$7K!{x^N(hcBy!%P8O>a+0yv!TeRuXW(iiR{8$Oo^@f&=x|vMp+l&`l z^qjvDfc;9=0NOwozqhGlLM%6}Hdzp@#wBn{z_Bcabvr#HK)4QExJ)sttW<7?@cTdo z__a+B1R3|S@L`);x!HVvSazRjmk;%Ua8zp(2&e9I_kPfb)L+t~^LGbU{fC~8x2QX( zA5_p=eBcWl$jV75^yHT7Nzn$nkk{_G&1~qXbDKg-5Ab_jkLc|8$W8n-1Ct_JiNRE9 zFBl|pmz(+lNJT6^dqk=_LqnRC7NN0(b4{4)C#n#Rv?SUUG_xM-h$Rn0MCG^w4afe; zr8^45&-o4G82F%*!b?PNIz!~fYth2&10|9bB`q`_m10gey|QHf>B8jB?&IzS3o)vU ziZ}`2)ZCR4h@WD^ATA`Mj5nH;Ly^f8xt<)YC9Grnb~_!KcD}MY^9g#ASdM4k5|9Tp z-Q@+fc{uHfNprmQo&6p*=-VFi6hRPbFo7rg7K+@6t36gW15&j`hpSXgbo4_G5(K|>J%QjvJbobm07SA5i zz0nukZ;1w?LBbHs3~XdN=llpHIY_oC(WNBa=cU8StIgcy(Gufc`_@$0Ks-kyG7YBq zkfc{92?Xca-eloV#jxu<_{#bC8lhj^H&Y+ORi$5MXkUdX9|j&Lp8Zy7^k{v!ns#d7 z`}+l>sYCl=Ob$hmE!FSBHfI=V@E+||$yk{MwmpTOh~Twg*wMlQ@6me-iToWKB=hJ&SIxyYRuT&Gt`t-XDfb$um10xLYhZxv433TB(;ACJp(W%mCMQ#hK`FP| zvCPa&y=LOeG@;-Z8zIe2Fbti7h}nHB0om$+*y4be=V=5w{F6EiHFymuV_OrR_xzLQ zgwwJ8SEyUpkl@`QW){njNoWmZfV1+21)jk&NPqAY2R9l4-;zNGsi30Vl*lR9zGI&u z+hHqnp4M{isfPWIAdJvoJQuDXTlaJ3vC8r)`X?qP3wBL*fiW!-vHTnyTkiW9tMy?8 zq@UIe`_WR8J|-}Zt^0e7Rl4}5#?jHzEYR6#`SlJHQ(Ny0P@EyC1V?vV>qM`UDq`56ym5Z99KOUrw)^nU#+Yo`UZ820kV3O3{3BH{PeywhKSa zvo>ooEAtGo($RszN|AASqeUKU4MLy{Bho7ZO|`>WdAZ}7-|pN8s1h~j?cb2d3h$`O z?5Tiqgyu4fEsrs=P+%$-afTita8jtN=ljF+UHgm7lRt<;xn^hN^kU+FcE4qCH#t?P z^|LINY|(s{S^GS9dVKVhKzE;wW?cte(mr2#P)gN!hPqL+`s*4nUnM73e6Qcu_16dB z-AY>2=j{mUy%GVaG-0$=7W0Y!Mc7Hs#s>QrVGMBVUK;;|vr&i9dJv0SO0}cb51-Of z6Jyh!T*vk+L`HON82Mj&S5!)AY_~Y#r^e8@Y$3A)EmY#`0rokt4X;HcYnYH({?@h% zn+C3i`eYi0qsWNUor^{M|CwFPOxSC=wR*t<;c2c1g)N!?UHtfjRBZyxmX{+mZA@Jc zGD#o;X>~lmNNKMp#h%;4WS=A;6kxlJ&|vALv>z9Sv0 zumNB?Bf=DPm&6bm?Z7J0>v8;30;~{t`qei<)>k5)AInrfd>4&^vq8Ff-&!7yMz2E= zCQvWN_G95_?H*IK4tX%Q{CfSidjvvs>qTD$FYA!bp+MBX)x1xY-M(1->CzoCaUA)Nf!?>ay#xYM2lv zr3Ie#d+u5v#s*4^wUm)754Q}GaP+i5HQEN)4JiCNBBVN8J*(nyPykuCR zz=mKUxBXjtwhx-|wKY&(t|FboQD#*@ow=mb-H-vQ-a~C9xw95GAS(JYnW;vfxg=2c z%dkMdIiQ5Dl1YmS%0NG$GU%#1l8m99Rc}Ae#Qxdy%o|Dy9i)q7Ng|V2<$g)Psv42S z%;9Y4oF+hSP3I-R#JpdDA6>=xzyyS0`iTg<>*_MXAN1u&Rj#7_1X8L7{AK%7t))X+ zmhY~+S7tNmfjT4WM`T4;+4B<%H(Db#dc6Sh1n@1QgPDX<{*d8S_u|NW)?Xmke+6u5 z(3G;_fn!`kyG!pHm4SCtplL=<)TReayT{;hDwIekC+TQft__Kz`St?*DDjq8I;POSsEuWwk7n8Fu1zNl*f^ z%JgqK*c8zw|9bvrF_ih0kRM5n(ufcr4>I$n+QO2eK{M>C9uV$RSz6roTcq@~%5Ofb z=D(3r3Oo^qZ@vXsxYCq1OSMp0ehv$LLI7?WLDkH)G?w z27<333PDuW<6zbj9pk7032E}Iu09pn+Ne%Mzu4BOt&T7S3MXqoU!0x_OJk+;e#t-4WA$yUWG`ceW=yLN9W&@g)|JBC%4o#KRZ7^Kc){^qW4_FY?J()&t00{3{Q-~~<} z%HPxv*~d8(ZuX!Rd&WLLI9ZppovEOFkL?l0Jew#vs6!d+h@$*O%P|&&( z&^0lK|B6O-(53>|TR4at1$~I=yCa??|I#EWsaun3@YP_2{`2_{lH6azj$V`aOpW25 zm%R)tUUtEHkM2t=VRza#mNaUs>@e|7Vo~UzP$n`+N^<7K@H==esVmj|o8+@(> zckT&Q&w;4ZpOgnE#Qh@1X)pFy(X}b?@K4O)>vwy0=t#GXGU%zwBDfA))TmYtt@arRCdl@YkM(x3-I#5eW$Xxw+sj8N@wHaiz9h8Q1d z4-0U+0crki-)EoCwsz>!`Xo=#LJpjth+WymInPQ8X;Z5w!t@U)2yT#G-iiocV6V?l z@_ZhWjCxSbe)DpRFM4@=)y0NUlqGjb@l0fWE51lzE-d&sQ8rOa{U)+$Cnqsa@07TonQQJM3H0O;bCK#lJ-piP7iI&bEF7Fd?ZC(Lf=Xj zAL8v{7d~mNhY`q9^gP=8{QiX`_Rp%+`cQeEAWwqgk6_ZxTe!{0RInz?O8R`XpYqs) z2&6b3b+9XC4t0Z@gmM)}B<_ zuBF;zHO{#p{N%XpHTebn>@~qEjzcH-o$Z&Lgrn1!4VweRc|tXxlQxsicA%`&FKA)0 zm>V_La~FXzIeg}66Y^<6^*#Hhvcxq*QZg!Wyp-jQCr36O7nea69pbOQc=;d__v9bH zO3^ldF(AlHQMMNQ%1rh_nQlDrGba+`X2GChb3WwecNfC#n8yQd^OhOVXrxQGQtTQm zL_L=W`+f){d?rY_mh8I7#&U1P-dv2yK}-pkvbnc{1caH6!zKy3 zj@{HT=J-$>;sO&(d*q6Fexq41?jkd>*|snU4Pqy70)o7G^#@U_2H&1H)*e1zl2#}J zPRpkM9{{C5TE9b!m{3baK5Di0=N|f?-o105z2(~9qN9PkO@C62pO_HWuqex*j}LOQ zHG);qpEf8st8nNMC|Z$F9Q=n5UrBV!!7kbEO{UCZs)g2m6sIz@j>2ck`j~qoiO8Mr zZ2f2G`(|@7_2F#ocA>fpF#7{@lvazHv zKvUo=>vHR_P?WrO*^k&LMIobje9uP28fq0e(JNIxSatpm zzy5|ju`BVhqKVuMAv@OY(cVq=SX!h%VqLTipV%8LE;S_TAK7&MQBU;0SrEl*101ruf(vz>j7cdN@1GH2S@brB89EBwg!P^w(k&VHLPv|1QUg;=6e zZ8#|%4JVstEHMpHo#uGXv%i6DzC*&RBsCyI3x-Xra9ayQ%eZ@o{X}Lg9=T?erce7B_5B=F0553(DHvWCL`l- z%h8CUt&%_g@Ui@0!CJuVzN;AtE6KwsL}Qj7bMb!?v~;(j`;$a5lH4u+gnbM@^dxy9 z{RjSACSNM#AN8;0F^E9=!ET={nYz4Zqmgm&>wX~PtxlbW*}od)q4>5K7W>)n5Xw6A%G3CA#tTfawUdq~{vx&2~H#dDHh=9xS=>+YPY zrq;VOQB&uW)xA^~kRF^=m!Y?D1imVw796-eRdq4-i*wT;LMRIc;72HFsCN4=kN5K8 zZzW9sM-u7v5II+c-vH~k+K4{hRWV~Ovq@iEDS6#VE4M}$Wm@o_y+D7S&qJ?mHRI_R zWWxMi{0HFGRn_!sCr*Y|%tTwVEoVs=1xfeFiLeW?c(7YNeO_UiSYZ)U_Q)`jA7p`5 zKc3P_Ht7f$)g=jmHNA4+fHp3pHPzOEy{+ZJN9wnKNdJP3*(k#yE+NrmK_4N~7L;$8 z?My`fJ;viHa&{Z?$G3lBkYGp3^CLujy;o6ox|32OK094i9T6-f2?C1Kc0;bG$c}wt z$1M(}c)w#dFGd^BD(xs<&QWz3z}ut(Nyn)4ILVg1a#jwpxbb8$9^T#1APh-7`1DLP z@fOL!W#@^y-?__3m5P)a=po*|u%rA;vf7oS5YLpRE{M;*^MikqlUGR|TRD!4O7Tyx zvbxxK%cRXN@Z@3xJAI>RC&16vn&|HFNW_1yc@!&?lV?dVr&1}?RavGa!g`s}^FIHg z!3@EM%Hl|(EB24tX_jQ!uzQ6cD9pI1Rp~_zIv<{}@7{e!^jtxc(=<;uM;4)=U@%_} z!+`mRN95_0Cg6X_)`MJpE-kv4};{>zVD^(0gB8>!CJhGMlyQuYl|0xRh6%`w#zsGl(yyj-u54mWc zzCdaWzQ+UNkxRdkjwm0(#M##8_VZ^IJy+&c!*u`Ui$8xkNfQ6648ncS|CLAlfu8y& zIqx!E$=0GiC?>jJXl3N_kLH6#e$*>}R32;tVXvX`N9|!@6o z*Su+%$Dn`7`op3EwBI^z6jp<_cvvjZe_2%HKHQHLK)!dpGKjWNAo3SGs$!~F#&}rN zOB`NjyY@%ld#N4bT~~BmnZKo z3v=|ZD;G|>k6r9GrLs&Emn_|5nUG3CQZauX$PG5^Hm>UVO}YJ6t9IL=<#dN$0@MPV zjcn6EP5hqRr1|c5VUpDqq%i_^{wb$I$}5FEeC3d>t+0p(=NLcfuYF9oWcw<)Oji=6 zkZ$|15GUsoNyn!NIaLu<9VLXtI6+YHiE;iq^j`1Y{WtXb5=O;>6l|^J#Wc^(D`9_r zXSE{xJqa^DNJWdOmv%eKN$dk3`{vE#F{p`r{$=lfbhao+vVyyHxZQ>?tX!yV-A-HZ zTJ2j5hb76##LFaH;&s}EevkkqlH6i9*rsKqRuDb!b10IJ6SCN82@F*ew zA^8t1z%+tR(Zv!NrV;h3ach8VK{%-|Dp5pK7sW#(p(@z%j}kQ&_2SXE_QL&;13z{Je|sABro^U=)q@`+YaEOU7} z`Zg0T%EQ}~hcN*3GidSFPJkDeJ$t|K7yhkKVw^ot_^SOhgw6Kb7%h|W$ufVEu=3~o z$j8{6ez|tG+mkOjJ99)OkEAe@O%(2*h0GIxYoXok5r7;YsT&OM6Uk96*)doO z1pP>U$!wqUkF95`GpES#Om$O{>a6@z;cM)~(bz9Xuimo@CTgF4_={nI6Iut=W)2IG}p zSMiZ#Gw#!dM@d9`64vtc2mA%$wiS)Q^kItQ7Bgq1fBvXlqLXc$6&0AhTHWNr_IOIh zF$nvfT})J-`tgJVj=wn{BO`>PXUAB$=X~s#k`}CwE7l^9C`H)Givo6-C{DWv%4*mCwxGv}QQ99o>Btk?4AQyu77!>b26TgQQc3N~aEzP8}qj`bA17 zGyX*s&tCMrO!2H(j0X8keYbi6g$brnE0_jIFb$|+8X&iF`fh#X@a$;6{QRHA0hwN)16ERpdjHE91?1e^$EtYckN3!XLQA}$Pfw(W z#-Gn}PFb@uSjw5ffh1h%%8!dyfvICYJi8#8a`!G{@a`FkTE?#$w6`>OrC!5%>ulfr ze|qCYq^U%7s|@p;3Hqg@lKO;G1DkcVOuwaJi1Zv@*8BBeXoKyT1P%$uZcxcu zr-l9WoEBMMauGclA3*R&7Yz0)@0KXh_=vg|scue@09ktD2~MBnZ#{Sm+j49r+EzUG?NoD4-qiytHPc>LFVCcD}~$?p;=4-V~$HYw5ZT zIEcXpmcxO}BY50dweQ|#jM!Y1*iTqGBAp(j>th)HKrRKrb7MIo)x_cIf8P)>Jc@h7 zzwPlZf})5tSRlpZW7zo@&NekVYQAjrH9faSYIvm_+u}6_#a{AX6dPC*E0Q#3OKl^n zXMc5LuqFmO-q_~OSDF3#Nd1jMY?iWEMvKhzxjN>#dzV`=*SGo(`{Mdm9jY>pZP~f2 z4Axb+*UFkv z7xdJnoXgr$5zUcHReXA9DAn|(gA3#eqW=5+FtKaWyssuclSiU=C?ZEyV<~n5(nU8t z7Z)B!n7_kb*+<{oV`fhuNIN5?ucJcuuQYg^U;V|*>+D;0HFAC_e+mb;w?M0JH!!PcDwmBGfXu z3zfL6h(d!W&48eKgSHY5(yJ)yIHtf0<*=t+8}_t8VNV+x_OwA^PaC9-?8^&#hCzT_ z8bcQ_?8$?kea_>me|PT!RB`h+k+WKZulKB^K=bo(!(*gQS9@?P4J<}un)(5%X>Qez zbEmTbz9Ow!=y`e1lTrz%39%#`!6FxWt!pIrq8FQXsh|z-=t|S;4q9rA9xWQwI>G5V z>6|!}bftWs>)Oj^GE%E?WsH4|0sQylz!Yypvcc$TSxqFx07YDRbPxfUxMn^;Uq{aY0 z(hr!!X(lj0m4yp0&PQ_L`Ex(0X!T^L?sb(wVcW3k`+lqF2VEf?eADls1v;PEYv>R= zxajaw9n%>ce>5h=5>pht5v)QX8DubJHV+n|kkcVYA31Isb9e{(PSPDMHdrD94i7)x<2Hv~EZ z?cF<;5#_=~^v={gqnp#6eBC7QAN?rVJ14hwe6KY9evmaX zOPlI5qU{{~dW7f>b?8gH!q55ak{TyT9CyRUB3+Ct4pqVEcxZf4CPvZLq8viwM))zh zdQM!Re;9cbGP6Utf-*&lSk*F+T|34ovkPsr?VEnHakd2;FmoB`v8kNh{QQ&}%kUGL zmIjXt*r6>Vypr7?!rt(cY*zMYjNB0ao<7?e=b9Rs?+zkCz}-glO5UtOBP2(VcIoow zPhnO{f8WQX5P&WfddWzEHO(`kM-oZ#z)5K*e^WCI5wf~?@HaHK-}?UHQxhUP>4q7S z+^$D2w%L#yn8+327&;28PamNz`B#Wm$$vxFec)%MY&m1m9~Q@~r57Jht4YWj5Ku^A%};Wl3wny0Q_7+N7(_De_=LdRwDF%d ze>o|LpuIVef_|q^@*I=QVxq<-qAW!Qj8Ix@#7Na{Cpq9v*{S7GLj0O?{95Zng!onU zNNo?Wng{RfKP*Z4tHiu|JhSv41YzAZyzhe`p3%P2C_1&gRBf|AuC^A z57~6pPf7^|tft{Y+Xiv!7JhH`sLn>Qe|km2@6)nK?jS!qq{x0*c|TGwB*@J?bm)pE zZcsb8Dg9cUi8tlRRYD(q4=u47%$@pV=s1k{!uN|O1CVe`P-~JZs24e1$*QNXF zZhHod&$EP$Nt;i^pSpg4O~I<`by&N{m_MVOi+T1$h7KKX{B^<~Y&z^fa95`WlZo0D ze@-=w5fBxTW4c)_Cp*x=LYWuOuyVB#V*RpV-MtGVR#J7QsJip)EFML#f6N4cty-4g zNd0yi!eK0N4RT_(m6OIAx-+(P;d6x)BM};fAVQHD7nFPLyJr4E>#2@?uG-1V2vAC_T{629M-?-+OD!E{gQt8>jr0neJWsfNu|mlUIgHPekMd$MM$4uVf7z;a zMH-9$&CDJBjv`f3gY#Nqj+&z)(p&g^8nB(t5woqq{4mY9d-r`>5O%b6GTNjbS6T~l z>gr3sp%2l<4g2R6tu~_77V-nXD}T=WK4#y@dQaM6KNJ&hg(Nkl*ftEFZq8Us;j2no z6h4=750|W*e@DvA_Pexo%B;9zf7&|mX(Paub>L$~ee!ZQ{+jPr%HF@lm~bLER)zb- zNtrVh?xRSiefREQDh(u>!dK~^sZ+~~N3)`CtTwa9^FmT;NaBfd9ha7U=7qfv(sxO5 zgy+yhSqXeP8Y%yE{m9*u($jeFZu0JP5{m^#F?ED@8wXpt>75)$eF1Gv0%pNK@5vE@?JFj@yWPiFXa=A`9U5shcQrqd&;|BO z))D&49tG}ekwFUi$kZqKaEOOgXDG=mY%N%15UMt-gM7u(WKKioz6EKek>1$k2MKyY z5iPQJBofz>Sm>*CjN%mQe>2A#QgZ#hR0yR#lIT#@2=LrIM;SVL?2*)JGoBiN%p=L= zd5+wMFEEDe$QKpKlP0D(oY_cUW(QJs6k;L}FJXDvQU<_J=2Y*tXcYjzIXV53o^Oc{ zr$L;!1ks!PG)ziba)6dHmrra`#7^R*U~loFoI#!*U}_*hUO0ckf5807F#rRXHG9gu ztWjx|GRX18SjA{d`nKU6mPIfs**Jd#a@?x@>7H^pwjhAV`X&b*@7|dCJ;_;xA1Pn3 zK@QG!yAxrzV^9sWdT%aBXgM92n&(nXZXa18a(!CHT8AS*xpj z#eyag>>$eHROYdbdvq{MTf8|rUnL)#1?(JFn{#KWIF)%MNSTBl6g@H`vR#!)Q+kq= z2{c&YG_4kZ-UkCnUr7I2UcrnJ84&KzQ%!Op|VOdlq{jb~?L}?{D@{#BqT<(fbNtR;s0-ClwC>06K8D)_(`SiU-zkT4z-RA@0C5Su@gQuU+>T{dAI{@? zsDt$Dbb21qe`~~|^2mxChLJ~ZvKSb>!#wquj}3?A)82`^<%)>Fr(yAAGkuyC$ND-s zjyTre+`|dSAyKF>Wl!%O9zPyUvTlb!GIqUae-QH5QxHaJrx$i*ofA0Q*VvC+Z^%ad zhHSt#WCOe*8?b}#u&dPxJeRif?xP6XflJnDM#N2*e+Nw)B(z_{)H>2NOxmYiY8Rn? zY!XYeUMx+RSejt5G+| z0+L?cqBjz9$mP)tXcCAg>HjiUM<~XtPw~MxY+uQx(}-PcpEf(iOJ1I2h2muCIx%{D ze+i@XBON3RmhQ&iEk8PuPiH6t^6UqX&(5b>VB+)8v<*dQ)|n=J7R>9>EO;9}3)qJb zcCju6>EcX=EvmdqM+}334@m*hg|iBZ9QOF}-q~*d%JM3hz87qXz)ac2F!$Lz|ggJi9tlV^YHJ@&EGc|e=eMO zZN5PVww{G=&;t)nzQIX-rodi;Qmd&Ike*hcT3P|=Xa&T|%BAXOfm78yXbMmcm6RAn zPl8!%OdSa(!w7iv(vjzL1tzA^cU^Yc^OI)xyXWTgB!|-jl)QuyIhx=n#T$xRRXUwf z5b4fBqWOob?DIo%X1j#fuFWVZIS?Kj1>ozBTr!-=z=d zv!QqIc-0RN$I(M~L~34vK^LGhB*@WK=s`hQw|iB7p<;OFV)mo7=77KqUhGpvcG$NF zD4ln#GudZg@)@3c2Bw~Y$+`D=zhupAl4)dt66f( zn4h)_qMpNpL@*((#@sj)4c77_yQ7@8dZSK@*V?VH>)i?)=2qBXx59?G6*i2??Td3O z(AL?-$XiDHU`aZci0D}Gpz3)Cx&cy768C$Q?4y8nWlO@u$vT!|+NYiI0x3r1U_dO< zt~2X@ZRjLz#mcA`D+4B023V{Nn@1xV114?8!$Ha07mjKoht1=K0KQ7Xrs1Tv<1wT}JB?R~>OR0b0Twxjbeybwf@qK>JAs5X z%4hulB|(aQAkfrv6a&qDdne0SZG3)qK9T>YZ{rWJxAAoNrRq*Qcx`t}lgZ>Fe|4FS zQPUcVo(ya9^^Q)M)=wR89rq_f(niF{TG6N5j@i&ola7g(v*noBXIQRY+0*qLN_n7h zTKZJ$SSxAy5g!9Mh?m>JBkk6sBRxt;~d`rzunS`M47w zm*~mKIixpv=?DHu{AB!}5n@BKe`(yk%lqM;zdO1+2qX?M9y(z}I(EAo$#W9gU^%V| zdkh%08dIK)HuBs)yM(!)nk=Avl(_2Ry=*MT))mC@#x%_OonyEMP#!m>aZ?&1DGlnE z+>}Nyr9o(T(;7FeA*$ABs-K}+BM-`|~Et6UuUC>fVI;@`YL9>r9#? zxppj-p%4N&eCXLeH6FuB0?%oM){Rd&8<027zB0?v&NrKzAPX(XK`3d zQgPRs2A8qFq`L>H5u@G8zu1IZ?^lw$L0IwiT5$SepQ>u0VnMQ*}3X7LT3D-c0#9Tef*|GYwe( z^7DVz9ow7%XJ#92e}2^u2>Gu# z*Lv9G4u|%SlinLg!hF)_;3mx7h50E$PI9tE@|k-~d9G@Fag*n=Jd=KmN4-C0AVEKn zIt?a2tJhR|BK#+2YRZD+$`cXc)7H~mralBS#zJL)O@3a|)NXeycG4+e&z7<=s=)s$ zxC<$TWD=bvf37LD;s@zHf1bp{j};=K_*CbX`dZJ7K(wjrr3bu_C;4lvyZu-ScO-Nn z;ZH%BNbwH2{@OqEtL>sjI^PU(mLTK?kh3i!^NU2Hw3Von*QZhj&n~wmj(qG!{*K%} z@*w>oMzoDV5Xx{Zca48Wpkh39M`{Vt_N0Ae`8-iwKE4xkXw$_R8 z+i)$?&kpUdE=$5r8Zk$u68N>hExBiH25WMe(5Kx1&_?J94_x_E5V}r`{>)(^jvAao z!T$07XfJyoRri7n*UL-|_X6|y{`7t%?F9%{>zH{0C?o*xSM9rZf3D@DK@9v3I(_hx zk)jUbZmlni-Ogpb zUN)0W>L?-}YBa|{+car9^#fv&ycn@?+%G@>pKqB~{Y|b_<6nOMzmu2hUnpOK?W=^L z@;z4l0alW~{QN(Uq^GAM8zDnGIycdX-=#CtHzCb|y*QH|>n$TGrYcD-dX!~pv0c~A zrt^74N8S(^58#nTkp00Uqi|BD(ub37>lp;)=l=wgi|eU>`G~N?k2R-<)})bbTQ5S@ zYrP0n2YC^y4)r4N8xSu7KMs*70?!3{5o;%?IygJI6Va2L_oPkBIkOMDtg#>bRO|;| zK>ws-dh67b_hK7?`SaCxqLWo)jn9_k(aML?`o|_<>0>RgtKa#-vgNSk(RPC-k>jGJ z6S-Ig&=VuI#<_POw1dlh(iM_jk(wHEvzhGlQ2d-Cmc?FQMzt{ z8>H2e%1g~mXFhyiNP^^dyr$Prk?K-%{wuw6HXzxP^@H?n`tzHk?eJ2-w43uS~R~Y1fPhH*E5>YyXz!=mI3e1bGNhf$c zJrHorxYD1}W>sC%N*tjln>a&(G}a=eSH#{gfgZEpu+q8-AXESkCY7jS$gf2U;gUmQ z#|?u3xum)gYkqo!_Ec7G{L{=or#APDxrjz6qqMgH;T7td6NOVC!Zq?tFN?bO@VcCO zYr~#@4ykbn=g#9*-Eg2gmm4THQ6A?>#5Y-c8Ta>H?-La*~e@S)ElRYoRm91S5> zFEf2~R<_35LyEzyhU750f}DoCL}J6fo?tW1luId<@+-I*86*|~%q$I(`SSdj1_DRU zeUHd8MEk*bCXI~>#xxCAvbIoM99ZI-*kFi%TVEz*fe%NkPm+R!4&)wGce^J!rF`K@ z>uB*3pjlrlzQ#Bibh++j?4Ks#4rM5(IoYh8JBu-SDE6NMX&r^n@M_S?sCqFLorj`V zj{DP#6M3<80HqMZV^Qbm5X)$t4L0ku!6qylY=X1FCM+9l!fb8xQnSI~zCt{vPY3sZ zqvw62gwTX=xR0=IA2KDJ--LBb2zT1-;ZiuT#|zEmGDhT<7_H%0ULtoHsZo*{s?3eD zAEa&Qc+;mw$79_~O^x=E)>~@ymKvS80FIR!omB64N{wRvzcElV105Tm!ZT5QezSC+ z?A%xSmeCZ9HwDZ8%qF8LoPT#28O`~BarEV9G)LV-#K>q)=fDY`(WEbSKJGBCQWPZ7 z*^8HEndlUm4F*YcPR9aQo9L{_0F9H2tPW&@vymhc);S$1>sD<(lKciqFXHE+8A$Fi`qYWR`qg=!H|W1=&^9evp3i zm%Wc^LaumeI;2f@u^)>)yIcE|HM2L)Cgr;3s7X}oCTVJYlQb2ye<&)rNtz04lBU8M zhNwd~^(v`-ECaRaj-E|J21n+9j^pKDXPK7VyHnpdw!PsuzkBY)YY;aaDP>DLcf0Z+ z`~QdvMCOtuA^bK-ZJ?DtpiF>=&KET}CwTi(HJlnPQ1*SVg+}gE@!A%_7wNA%Og0yQLZ|!=t zYZcOA9n;i3_%@k!dN4|}Hm}8tOS8vl1o4qPOFs=0mhIF1wKBGLrU7gbeJ*!U9LIz| zoZ9~`9&d$d9HAWwyhGt1Z;AX&+b8XCZ{cN0Zsw!B!F!F5G4u+SaVz@fMeoa#O7TVk zQ4;?GT`gx8?l#L=^wj+q4Utn`O}k_|Qxy~OgYI9xJN_NG}x7%&&X0J{hV%tbI@E`o89E&@5oEuxFSgPP5G z^t3>Ppm{rYHJ}3oMu^{`y{aQW9ZAYL;b&uA`eTn}Z?S=LWmjDzR2kQOF<|bjF?|2O zBc;LLS{V+1gY!n}4~XD|ZPJrYv9Yv5Te3i;=5HTGlq!Sd&jHvdwhjjY@b9EtI`eNr&(y`fuXQa0;Ft2T; zNsvhIm}}S8P9D;ozkFl)L!p)MH;c$klCcDeEV(GEtMN zm_rULKuLA}s>_-WpUXPUP@KtSk^aE!Ub6nBex1@=vQ~dql>7!sSK;TujcYa7aZ&O- zsB@@)c9{o8$*%$?x%iN?PaI{cj=VWYgGJl`SlY3 zP9e7{UQ#Iqfp_du3b?wy@KTE5Fu43uit(6#VIHLvliurhE2ZeK%x|R>w^E8x)m}sO z0^mO3Dm#@c3n&$KtUwy{z0q((Y*XMnC19b*qi_noyP4XD|8-3BLxI8A(x)3(FQ&ne z;n)gGfb{n5fP5=sB2rEoP&D!ccP)o-S+AE3ipJTq`>uV{b=4#vGYTH&pm@al9kFVE zSOPogl0Gg*9614%X1*S3G{-QMR*VJlX;=@67`Zfk{mak)=Ub*#f0Jv~_?MsmFZE*_ z&-2Ms&X#J}N{419yFB+wxW2&LD&a1jn>bd&O~*`vRKkt9cC)F3n>5yOTnRUdE2`hU z3s8MxxBGToQ^PkRQUlzC)W5Qicl=_1FjQ~Fjkn^)!iJRXoxXj4D~0=H zw=bB{g@v!Ey0Pl3ZY)^UjRmf{v0zm^wPPBW9oD|W)dWIdXfHrUtMfL$UJKglJz>D@S%M6avV?2GH3{wWYzeap-!>C z0f!V_bz|h4rWGr_)E$wk^it`%ECKUNr;+i71XB|3*y$sFmtb}4jIpTCv5?;&DHHrW zxHHBAmS!Q(gE|x}E;P|n>vd0_YvDuE#$*fI-j`%x_(stbD=rM)EATddcr)_m{ub@0 z80pAwi=1*2JXRlR>dk(1dOoRvd_ux@pLc%n8QbZfiD~nhUS#u`H{@9U z(i66yv+Gjn)Y%^dgkFe$ur@qPCvs<|x-O~jQV%?NwB`#^jXX|iFc!vI@0h>b=jE<% zq^$UheIgEa`W^91*hh97)tfx`7nK#`3vLVwx&5oUb9eI0(c#zjMaZS*W{T(@J7Q_U>k zJ~E=`FzT-Im6Ug_E3WzA0jYFWAH_6J?fL69q8)3p_&Py^r6l4__!6+*HhF)HvxUH< zNQn~eiyyxETFSKVuiCt-*o}oQSiP^D7_ma(lF_;Lx2Wcq{dQaPQflm-H(}|kZBW3< zfo^kc9#$K2BOhdc6%+Fe=tT(qc=?0^M0&?~6qPQ(F zkoVMza4L3VJ+yURm(R|p<=WY9%TuSn`@#9&@%xbcwM;-y0sRrIh~vdyFCFnu|YCbs|_h!qc* z0o6s$fMwH5@+^XQX4ly{u1~erdG^fD`GCoYXQ9WLmJy2mxMr%;Ct9CZ{h-Krf_!gk z`&L10IfFsBu!+IQcH-&5sHO%NWkUGg4~R`4`|gsH!1+J{sFMNu8UbsQ9Qr5)yvP6k zCX-3}KYs)D&>d`=ee{!tU`c~|C5_*==moY%(&?++{*F@vw>qUy1w?V`+VDmGbMwZ- zGATfTQ)p<8GOHIpJC%1I9GPYHruZ3|Z@J@Pw(O!bC>@(U$2Mz$C6n+$jnE!(W_?Ji z?L?=eoee;N+^ZrswJPX%{#p*~gv~L-HtQqos(-dpNKLi|i+9`RF1=Hab!G%)g{NOX78^)j8j3hg@XG8(fw`8~|7m+xT?soYb@DOIK)n zk!_w$hv3S2(&|)t=Cl`IoE@HYzF7}9yt24^7lp%u|2%9jro5tJ$U3e8*{rD@(+I(8 z*|Lcb6%Wz?nYQd4UL$e-pop6~Fd&4%{$0FS|q8V{kZ$ z5@^#9gSYj5lY9{*|In>IjPfKjJ>}B9V>~gpI6+7{7Jxy(9x^Wi(MI+0JUi82sLpPZ z7kf~XiFiXad@!t4cJa+=d$7T+IW6zmZ_R0M&1rAVX>ZMGFRMB2@LjU%@?RCrvVY(< zI^A{X1QMM<`hpzY{*{!3ZzP&?!lYZFB-7M+{D4ZSI_y*qbCq(}xFX zE4?-Y#CQPDj|s(7;uMEz+r&#<)aH3vg>~z!t-65bdGQ;+zB^O@)XwO|qd<&a0_LTq zf1_}}Taw~e0TaJ{=t=E=^7*{TDjpdL$lvF;{2%XMkpHx4I2MHmWRDeJt;{~Ukxxmx zlOg>Vf6w=%8fD3OOj2FbW6bJY_y#ZH)A=TaGz!h0s{ynwf@hwlHp_f+c3Uv<07v;- zM%PONnl4;lpleGRn#KzO9Giqq!%1z&V@P)z@6SL(XShvi?#U~r=ZB1x6gG(=<0U;7 zi}P)|#O$YMVkqV#1Q>;5>swNY30G$I3;}J~e^i=*82v6x4uOPuNsg(sV3?9+TcAME zioLC|m}}g0aF5-ccUmrcYOG)K>NaGS7I*LdiR_AF2k=b`8=7QOj#=c$86X0hb%W1Z zE9QyeH&WVoaTH7q(shy@`eUFBa4MTMmmCWnl2@mV^gSnWYAbDKqCyO?{d4wd%=gr< ze{26n8a)tGL%o-c#R%$Y>_!GuKjk@!f}SG21YW-^1deGofa1C-tee6TNnz2z(M@4p zl08L>L-4ZQ6xB^piK?iYnix<;l?Ukys8Gesr0z6e@ubzO?`;2KH!G^O?_OK`pA5UoBp_b{n3>0 z0tN=m(n;In!jUO;Ktn(H%hUn(!6XkSNth7180lQ?<;q0|v-~DW6G+lE8RK@oncftK z(24_Sklz%?l_-wM%M`;K;awIM<#_Md^nY{w6WM56fowP+C z(N=m6z5NzFQdr5`*>MdfveL#!krTO_SF(K)SsvaDz?Lhvs=vo`NnfC?vkJ+jp>L%1 zmb4uWenp{6j&Nwa;jnT8s$6JxU^+$qc^}jMJOppN@j7c#<`6N>M#7WSe{>?7U)JM@ zTrL!6L(nyl=+Y9R@_~<7GX!~eAJHpu8KlJx^NexD)}CS$NiIetL9v9Mcgd^tcYoQ3 z$v>=U3CAk@#QtPGo2WH%Xz4`j?-0F_*G1AEEA6#Uu5)M4zHCrHANlA+KHarj2_@Yn z7(~kzZFY`f_ie-iCamh?{qsL|n|w%v)HB%vrG)GU~vgnyEBS){e&Z)4DE zwnwYH371+Dv>Hr4rpEdJeY|&FguJ+|L3sCWaXOZtlxc9*1gy6JVFn=B{sXms2kwIx zXXQORKcQu&BSf_GhBx!h+7&9h7MXc^^ykJq_J%jkpgcM0!QUeae-3JyP22r3Gq{MT zkQM9B7l+MSo4b1t+ajS~);F-j#%hQMPMBtLre|4X*RlY?edbavUwE{;B z(VvOCBHMuL`5ojB@i_g3ZH*+GyEWlDKW`qWCq)fW=%P55Di({cZ)2HN`d|b?62_H0 zv~{pUOi?3t5p(F+%Ou@WR*4`82b2b3R?cx(#na2*2=< z8*TdTim7Eye-q6EY>%`6APH%XdvxEhrj)96lC#eBC}cSulADyi&xjaC&rWibyl1(4 z3Q+!ivcV70jIHBIF-lkpd>{BpT3EPxm45i<>&FjYf1gdoGN3HQi&-zd^{5RJe&BBR z9$FG$j&sKe=Hk^pK?Iaiv$%6tb1O}yG0a=|A;fE+f02ga?qg5g3ng+(Q3_XUMsF3b zU=uTMrUNgt*I7{~t5RS!2z0@m2&Dy-E6mc76W}pu#RQ#>RB3z{uqR_b*;C~Vx}yPr zV9{$sovuSpG0hlxy>*_lZvI(mE1iR-;xhzkp%1$(fZP%wWf!ie<)y661%4HeLfr>x4SiOKC)8ocy0S`~hZKR@x$cK_^8XBh0U) z|0p}Chf6AUe(=RNXP;ryyKnE*yT^AP#*^JL@g>G>w@;*hX!&MJurJ!prQeZz>@flu z4GbcljaAP4CM}?8GpnA@x+MD*9s?_x{cf36f1J04{I3^;;U?UAJP~a8k#Ns%dT`Gf z2wTkj-@DBm?vwEu_Zz^nUK-P}vtRUPmce-LuWf6$=R5b*2lXL??nDb#EKg4 zV-#e6Q$>xR&9rpO0M-wXeYaE@afvg9AU`F%q9i48R*$94BnT>HK?|B&oWGd|Ze{?;5 zYdB&m2d-~B2c)>mPa`+;QW@RPy0Ju$ULVuW3F zV*7Qz6ZwBV{_^wx<`WVdBVv2W0&-P4aFiwLbyM-_tvh1`rip!qbqN1(Gz)W&e-@8^ zFWU_*6Bw=?uCQ-!?UIAbW%GTo*|ae&d4gMOL;ln)@|qR8KdPuU*UenuM`0eHs)f=Iwix6PO|P>>FYvwd-&yh`q?OB{0&kln{5 z3@g#qknlF?KeLQsYgWVa>W!ZMe<5?weq2Sv>-JR;gbCf0i+JD>$=$Hd6a58CD(iY3 zg!?4ZKu-SRnJyCNV+(eDY{7=b7Hn{A!RB(z--hk*_GQ-n#hxpoL(YSm4JPN0_sHFZ zO^&F*J{p`shd%m4Dazk6>j8PMDuMTS^n_JAXPegwVZDzeM4)g;o>=mee=*z*(bjq_ zqkO8R|KXdj52;&HWH5GR#qUYwLIH~Oh6*lA1J6ak3OY{ql$?-p67Gs+7Uc6QJ6<14 zC~(7lkdW-M^s*r~VAi$4VJ6`|*pkxER$$-_bLrxR^n*QGhQX4~aRgJ_jsS8$!VR9p z(dy5zX|OYF8u$#G20O#1f5FZXX_t3~E#>~TfEE=OYVwK-5f|WaEMt^FROR`OVbcs% z&65CUORj zj-Jpman|574VH}H23#`h6E#(#lZ0g!EUAAYwi>PY30X%^(#V9Jf5IhUKN2bX;hS%> za@&pbkp{jQhJ`L{8LEdyTlqM|3{5HWAbm@Y*0R!~H}tXemplqe-(clb|4I^a@+0|I zk+RNTthzLB^yNuToc>mLntj14O))Q%+BJ$r22SCHe=WZ8Mv8rs0HlrP7)BU#ObLQJ zw&$_gO7f46js8 zu#JBX`NTQ`9tnN2-)+-qdRESzZ3JmAM!G+cEWuewNcyV0ZKj3b zEKz@ccK;~|NqwR8-CBCatL2l*L^fiaR@Ad*f9JsH=0Qb$A*JcCoCG|R4|yKG9O+{!3vZF0+K2+|{nP7t5~Fe5{gv!-8=^&jd>*57l- zMO^NH;|#X7q)3u*xIcgQ=^e?|d@wu9V=Q=;pl|ZWpTGU(`#*mF^WC`{APlbnyQE7P zmT8nGOO+?^MDMUmq{pXc{*fbV1+3H0~U{d49^6;U2oMyk2Ve4zauC;|7;EujXU zYW)(j4IWUNga69>R<#Y5VPh$Wfg(r29Yo3>M2KaL#zW;8otoK zjt-R-RNk7q6Pae-2-ReWPd3;|ncWJ>{M}zqCh^DNVyYw+>QvH~D68}*QI7<5rbDf5 z>npuhe`l*eS%$n(D4N-N$<_&Nj6LcAi$HY0<2{Ex6-Iu~L92x^-m^4o%juBY;kDOt z4g5#EH=HQXuhnOP0-ZI&uOe-V-yEjCqn;PH^I57pTkiFn2*JmO(bEzRP$3SYXSy3C z)q_%{tK!@-@wp?-$2+$_-oN|)hswzw;VQiG?oDwPnZ8)FrrI)X zEPw9wJ1ZgEgaF%cx4cxWkaJugzz|#ts`#iG*kfG*jk&xw2KI=5gqYu$bVg zN-v@RI**o%JXX9TaL=aTA^nc)v+ypxdw<5i#RmxIB)sulbwS1y*~ZD;h|T~mGkti% zymyu5+y#7Rj|B6%&&|&(%{$#g)Xg`M9zv4>4tO932mAFqK2s~h9?6t|Js*4~Nns%j z+HW)b)390Yi8NW?aA6=*Jk0mr#({;7Oe4dfLU16Uq~=S<@<}Q42M0P8)TgbVOn(?I zUokh8^!ML=|Nh5+|9SJnPk;K0_7%ONAVoR0{?};-_3z(no<*L#jBmcvcCPseVGqL` z(?9qT`?174z@GM1Vsd2St1vAag0~c*vNrR7Yc9+i)GWuK#;ilxbH@AL1Ktw2V#j4EMeH2+<#GF9%=Z z3_R?FgV1$UuXZ8d;5gZ6w)&v?OzDjs7`CQMhrB3Po#g);zbbl?iE>}yf z%T>GR!^~R##44ZCa<=otWhD^pW%6SM)Eb4ITjwCNw6V%jH`7w>k#(9uVJQO@I)!m= zT+1Sz&gMXW0c1F5uVI|>1#h&ss79h9l3W~B+Vq4Jrh-zD&OF-K?KCKLqVoS^V4n%= zdhpPOEtCaHVf8I2^_)&7I)8*`P84~-&ZV2&T43HW1Gi9ILoPczVtgyShN%2evWq`P zVQYsC@1a_1?>vDDy^5L`u^)W z#REQlf&S0e-?VC%7bz8sd9G5y+J*|N2#dL_QbC`PQ7Y)qWjH_VXMb=?#nCdT-HS#> z|C9n0U2wCSFAa`0?2d{gJNwfywal=9%Pm~Y@c z8AsNeoNl^>5X}IQLkTtY9zQ@Mjhz(qu-Z7$q-reD9eG+HQ?gWQ)*QnN$pVOmt{l(} ztNV|`3V(#E={|^&dVgSLpi+or_mzD*+=HVW_H=~`ujB5B`!yu?#GNp|Gmeh;4U8|M zj|Hwaj0pH=FJ%Mfyc334A5NCAuCvJ3bry2E&O%z(S*WN7r>jWuki`&HAc&iV4#5q^ zy!xmN)qt%oSh9kHc3^T}W<@JZyvzK;C0mCYn$J039vr&c%zy7}hcST6FQ3d^P7V2y zT7^#bRu0DJjrWl}<$ejD$j8vi1Q)DYsTq9uhRh8ELyJ%||0nbZB|pQUhe5?EjM2>M z#HU*MkY^m7DjzW5o}qrTI!BFj)=Y&(2^qyb@T@Gr-$uUKAn^eh-U~qoIO+u(3b7%O zaxVlUg5zGWqJIP{P`!CENP(xl;6x!#1ZwRIL5kqG7py463bbcl2uk2tFZfW156p^v zAqc?^d%=i8j0l_;F9atbZ5oa{O01ZPjVUe7v*u`lZmVK1)1Z;#kH%;7a5`wrc@JR# zJS@8OV|m6Ea^I6aG|?4Gny)}qL83$>mKSsGty8oio_}CIE*cV^vsQ4&gQkj~Sjtww zFn#lY1EAbidTRCdqVwrz_?LaMFV`JicOq&ro}1>HP%tE3i%Ru09QwxEhQXP&o$0|= zQ36`dqq)@rn0VS((&EP>{svdsI5xS`qJRF4xQ-f0RIB({EQ{ftuCJR&UeJZ2!Gcf< zQZ2sS8-H$M+B2W@r+Fv(iTezy4vsKj#Lg-%BZOcX5YiW2BoW0oovQDXQMoEn|3bQx|3XP4|Akz6{$hx2{Le_0 zjXCLI;zkYFmL_iSp7QYi>U|?Kld|3!ctx{fY zIe$X@o6S`qAP#%ZRO^)@;_7^qrP}4;6b(*Mn3b6WgQlKKly5LmzWzzK#-n^)QAM{= zzP?^`!%@CYFT2AiUk|Ul;V56ns^TTecaEz4i}IloUrDP=2CPb>eC$Q>@E$a(q?Q9J zK2>y$e4}4@*OlXZx#phutAhw1i{?4F6@N75p%o76vBW@GZT(`Cb$$EljZrXDMf?~L zab%Ycqv!7`-sL4|TPtWg%@5j6<$|_T>7eaYNzisGC!D844cfAV-#*4_>w%QTRf~H+ zPdU#{^}oSC6J5Q&T)U=6Hj3ALFf6Oan%TkPz3ZGF_oXZH-$@+4k(Chybyv=bntzwC z=g1u2DO*kxU5_2Q(t4Rkh3;?AN!g&EX2*@8%PrTfsEzZ5{$~S+!ara)8QbK$V_ORv z*?l<}pW#3JY5IrU)AV)pq0BA9=)~g&_3_e+!{gvjOJPG9*3mJci;>XE;m;*rak9<7 zo(MkS(QDlVYve@mp?Q4qK4w`1Tz@lH^DJZg5kOjcFsx{SUyH68PI)L;lU}FbnjmZL zpV_bTF%)s2^tJda;XD}q_RI^NorQx_Bs6+;Umi}D^~KxM9e?3AgD`%>qnjkI zA)o1McR7^#U=nNRmEr^YS?Mu$=A-GCtVSWoepb4g?O=pp;~gzC6Pthc=zo7xF1s@N z;^r+@W5H&eH1c|2RS(CiB(%e#HcVTH9sFD~sIPTZJOJ;gTE|aQVk1rhPfisxvCf-U zw=m@y$BH2Q4fPuc8x!eGt3?3l}dB{?Phkpo*PMF|;y07>X+*au)i+YCxoto!Q4bV(EgW|t<{U*k! zuzjM5BQePC5jwy(z_~6Q>%y`6#Iex2zHqETX;e68h~C?UQ(ZV!UpZAt6rFLZ(3KfG zdWPF_tPEw=1BMb@L6cTmoP*$0FE*F6jkJ-zVZ5-Uh0&Sv*2IONI)5anwqLr|5k)`? z=;FK={?T{-A+OtC_{R(5AAuQhVIZ;$1RrcMW2Q1+nX2^}tRNF0$snA*@P_p$dBZwV z)}2nGDL^lI=IVe2u3EyVps-&^sS8qiNox8!l(HAj(QD2jsj6Q%$4lWHohj%S*3k%g zOeqQ{Q&77m*``yGrhiMyt$tCDK`eP70ZOhWw?H4$CDhO;H|^|y#fsF@@Y7gc zsp%!EgK(fWEBK<{uv(c0&ORz)7p^2tCY%eyU>MASXZb*iG@{p6Fth9H7MthO3!nA- z#<4))C0#p~5C^$dyZ~TilD;Y`V2Q{}LxnJ#<$?<#E*PIjihl;iXO0Fq%d=%k(C-@` zvmnU6_KPIQ#f1?|f&yH)h=NSDVASFOdOw`u1b)_mrO=iO`L-Bz%!Qn&@{JuoRcV{3w&LVt;^m~&o6w83H!%N0)Jl>IP%?FdaD68}k`bR!7)d+CV z)vh303eh6{Scm^a=X^VW+22QNp^U+nsDQb`|uKNPnPGqQyjq;nlL(bDfyLWY%Dy zhSx7SZY$vpIEquPU2_RpA6;ilJWpc?(N3^tGC}#*z-a;j+14q{n9y$Ga$1Z3!C@#e zH*f|J1W6hrSa9)pM(8+b%PKUm{#*C) zbRh7K%zs8km-uW2L^P8(ao){ogot=>K)Y6jh*{mQE{GU91(Qv`Mu1fBBW${V=4j;7 ze^R{~v59?x9v#*|I_BXS)#ZwDnRrLH*y&mKwqi|0&mJ5yWaRmYCkIA2(TYx&1IfA? zU8wQ4WG(2-TNZPEMUJutQaM3i4ex1Wx+-wysDInx2q^29NX)~D(8ELxWgKY3#6HHH zt|-3z^<=ti&;!9}407zzUN5wu9NGP{Uf6JT(1@BvQ}LgHOA(yp%r)r8_yzMK(jC8u z`p7dBU|mRG03uw4Sa22Mgy)>xEhBdP$Z#Kt&%5t17xb8^|EvM+1qX6)K>LveDA;F| zd4D_-o47a+0iHOz4kdZ`XS96Ow~9T)Uvi|vhdvK^^dk*U#83>IB##HFF!Yp*S>wG$ z-sF0O_lW9XqymoX3ROo5mqC~DWGlpYsrEW4Gho91T@X@~q#>Cb<7#0%; zaSuq`GlBaJ%#TloYr>I&j`rbb9Pv~RDv36HR1bf}Cf&UM;&hILT4H8F_ZV4gZsB(h z7A)dXG|RCc`H)_Ue@>J}grBuB1rQ2E1*ZTO%$L&6NAod{I!_DQ5zlQ)uN!MT=J8-^JX78U|uAW~(RVe%sRD`l&;a3`J^}J#m6~09EXx{L%LJ++t zf*^u%kPp;SV7YDy7~woh0LIoed0x~5gwdTRx?AZ;Rp#`lEBSTu<}a~Hchak+ryFU` z{eO~eq-&QBnp@`&np>YUo#L@^Yk%oMb89|mPLK_*<=EhQ&=ci0u-9IWm8%EW57(be z$1;4!^)e^sd?N0>daq4iUTsJ>~BrG;9Hk$9lDFWFAokqbM{~= zbQMv4NTIO7f`#&*K{Z3}2|&ZnJwV}?#}hEcCv)fT^M6BJ)5(6h@*zklfPYb~$h`IO zPeGFBUCkB~B?U>bc{8C(VMw&Op+Z%>rOWx&kY>kD8XIO#87tGNH1|YBXsFz@}d4Nw7cJMVj^tyU4)KAH_Wy-m|^kyN>Og zpr(_Zti>(~ZC@RFVa9lKc(Bo4T-rr8iaU(OK&VOsJK`epMcgCEkblu#BMQcGUt-{5 z9>v{(B1%;i+cPoPm+;t)`TjnR=>Fg^FXQHtA)0YqAawGCGii9HmvfI8MjOu+;&EQg z?TttNnNU9a0{G|f(lKis_L7b%dE{~7I#0)pWlwaEk@L~yWB!}7dxot&n6BqnOw3HD zX{E9=v4AQW2!w~QrGHyliUFg=kL3Buad*7Io5#`^HAC}G_q>@KR#Amd;rdwMeNR#~ zRHYe#ll+XpiCjkDL^>mIB9{?3k)y=PU^4>I-ICHadzBWb0=NYdo#)MoH}blpdIEby z_z8GVW(J#SZ>`ggZ16HL+xoW_7ola`08@uLUm zWI^ohGiyF6#+3#0C2v=mj3@SYSS?++4iM#adLhl=+X$v{MZInzeUY^)C|Z{#eVr{C z(-TnTID;L1)qjpqyWxNn!S0_m^4Wl&P~`>H8)`;a#N(;iL5C;eKM_Jz8uDm*^jR-x zY>S=z<6Ui;$DLk8@JQJ2KlQ5{?OkGV);brU5zGwC$LL!cD=0=8o<{SQ*n7 zi(G9CzLQa|=}91!UFd!&OQ2^kfPbGA0W>0Z zDY-5L^g6{xf~1!J={w62XM zcQsQiR_oA8vY;Vd0c1(bX+mvd$F;Hqul`&arhj*h^Tuu`!p=N#XKJBSW2i_0ifFu- zog$@pxJZ!}aGJtEc()gw3WO&Ig|T)fZ8U*d-zL43+$9+}sI~;UurTs8T-Stj@W9(u ztf9;)Hj!9G1G~Uj??#U6fkUorxheE3;ii$n%0hyToHd0!TR4G1qK4EmKkm4ci#sl* zFjHPP=jgyF4% zcGB8r4SK-r5;bcHWY45`uH?;OMlKFe<}-232R0oKCz-+coaDexmP5m0i&>Ibb4W!VSK(|MuZtbPaSobfe%(~T-PGPlua_1 zRWNRwF7B$Oe@{xB^37LwnMuIp7H74Rx+|L(l=4o7$w1!TdGfS9pfny9Xesnvhn5CR zt-##OfB-=<|A;_2dF0__@xZ|S>3{JNOcg56>2VJ6c_?w(6?Sy%`Ht=sofW&Sb!kVp zF6ZdhJA`1EqQSUjY1(zUnRzeVu;w?9lo<<~S{eof`% z*Hl`5P37d5+~geC&oJdzKn;DATq=N?AMguK&L+U5&^!*17Z8$^$M-sxS`zlEkfoFG z-G7+GrNVprUYGIUSw0V*$?@QsG!LH1@!**pPJhmZ%7ZQQegh}# zBM(*q)O-#Huf{s57tep?alOr~{pg;QJ6mgpv%UREnwL{p3x}D-;R&mBLH8LgA%!o$ykwOn50*$hjPBk+4ntK1zd{ zWx-1G1j`noAiSvd)qiNFa$I5+mI73`V`V5>dHc6rM^#FC=9NZSnhgH7heoS7^>&RE zO&EvtaIGsDd7)e}9YLQK6su1qi`A#{#p+YZV)dzHh19f0IrF+xO`$@9R=7m5M|eRY zc%(QD?QFIi!?qnCz2C)IQJpI(YVI;Gi(vK&XSpKiPc{b%*?;{edJO^<=%d$2Dp6Y-<^0Cf;ac@vp;{eLc_vWoNEpqc6ziLYWj$-r=TzRbQJ@%4POGB0jN+Cp>I?nJ;~oa>8dREqj)7qGu_G+snRmNs$&jN9QRkx3_ctuLPn6No3H} zllk`LdVt73#ecerDibUMC(B5AD|~8}X~&hH>4gix3Ou56`Mxfa7nzBhDU7X8mtA)7 z!2VvqvsmZO<_ig?3#v_Gx3H*0>7iJ8u2fRc!ck^X$TokDd*xT(w00Z3dumi6>1q48 zi4I@-R8g^Fm=b>g`prWlPW&+OWPHi<#_4UP=eNgIRDWk%uN%*{u5sAQC=FS9Zr;?; z7iDc}^yQoj+aFMNjaCXG;D78#=x%I$G#+`^mKcjnc7Xnl4WnRR#gk<{0>+?EEY>(XkxU6qkD;kH*sWLE z!PvSEH)VI)qwAcGbdT?FMI?l?Y)g93C&N!v8Wf;SN#(MN+;@!UQ%rAvLu=Npp}pg4h6Ywv zTj!&c8FI~*UU^G}t9c0OdZ1gs?P$>_@k<6KW_&VC3q;*j-u_Cv{mWzjlvM>Fy#-|O z+!A~iF=5x@mF%69wF@Y&#iLT%hB-^^(X-!{e8BT@;ki)DP-*KgL-oB6+__xEk09PfOoHC;--xm^~#XO_Ri)y<-4`|Ek`vVW_a zWyW6rh$d|&T25{z6Y{Tz9@#vZJAZ%A=E(N3=Ri&Hez^Wb+C+3u~c7=gpa3P`t2zxDM&2NvYC3Mhds_=^r>(NfFyArw^tfqJL)vJS=Q* zVAZM7P4-NZiwB4)m+`Q~dA}uSN{Nqa_&A@C#9GP5+@^evB=Mgd_anwf1kV!HBA@G9 z1=Ea!7ex)*&Qo*BhcxE*tby-jEFJoL`5}#RZEN87a+84u+qmXrXUd<>Z67rt6{m-i zZL1%SUTk$tRUx&$^e@>5rAbqO=nR#=UB~o%Pk$ zI2v1%CHv{eA2NR763^t>fci&gf5`aBC&%)^yR3i8dc(=ZdE@%qj4zoZT|fRM z+S5Up!OaU8++32u&E*-~T#~`fB^lg&s0@w@F3;b1ma+ZVOE#whuzxuWfE6PY4j~$2 zRYc=fP$lZA*TOq$(5(R9x-K6;l58Vc9q@rd?lqeao8|#SF}u4!I7RbudW3NFNUvj) zbel%J3%+$T(`MPUQ?u4-FI5mNqI(maA7}YN-kDsGcP1U=ohb?O&g8s~v*87KAureP zAhVF{mdhA%RsZGMC0hpuA;Vt>hn}rM&YZ-~ zv&cg?BK}pGoS_PF3(U!Gf%B8TZPmSW%sawKQe!T3UZd^T<0k9S5VgaC^3DkvVZ1ULAEv90Jeaw))yar z9JG7;>djl8O088EC?%!(e3D3xWN+qBO%&|EOnOM!;4g(7at?l>hL=nYfvWr>DWc%; z7pi#KRFO6tUk*{^o&7=+Id!MxX^-*F6h|g?Bwv<9eFTqXvZ`v(pV^r?sw0`Ac#p%V;)Wi9@*rRVb2hGd{?L_ zBd8}=XncNgSEw{XARkglOTacFQS$p-1|2#Y*=u$LYJb>-rCIR;o1pnBMv5*(^m2)) zDB!6&_&G)b+8MqvF8YClB_2UmAFd8#(j`bYP$X%|Fq%%F9bL?CS1D!e+Tf-294P zn5W$n|9^=P`no5F*J#`H=g};7bP7fN^3Z>%K^)IDcZB5?2Oa8yui+Wfi|@l={jstC zAJLxZ3UpKV#`fcNxHIOMq{8?kyiR-n-4EFJR^zaH&rt$m_*no1?yUxzlxw^SlQ>J8%?cQSoXY99FcQAE7?@w8dNDSD(NH3Qej%HeOEyExIk}KbPe?}2_u2dFy$f7Mp~t8JnNi*7NX?N{ zL64QUGmtQQ3Pnr9>|(B8Xo(IU#2$s&#lQ%2I7(X^=UC67-3zlmu?6{ao`qj$^_o_7 zY05!c&bYT#gY7HyNep$EI@v&E1c%^o6|I)Bk`cS<#8&AaNhpoC^n!^6@s@~*;eSw) z5nh|Bz)L@_jR#)Fer?jc3w2}VZm}+lsFHO@mun8Dv&k7dy}xR84(=9ReA!-u@^YFa zI%{76)qc&BR!sZcvv>aUTpwQ!nUs2^@`vxO$6(5if@3XnDqG)qVuoU6*`r}k;IYzZp}g$(@_69gcW42xx$<7gvxD3m_**BCwW zHOqN4x2%uOjrOyn9SwiahPG1M`Di?%Ai->w@DYTJ_HFP_eAa{aYEP!WFMkc`NS^0x zEB@YfPLF$S=RDE(Q@TB9@P#K3etL(F2fFVa%0vnqUdL*7TxLna~!xBwFA(EVY@Q~D;CMKe33kp6Uj4akvx+V$ul`lG#jQ! zh8_qTih1;t-j0k>0^1TI{(r#c707zn%3Op9<Ov7*=g)!}0;U zz4^G${K9gcvOZT14d?zp$=0vr*p0!WdBsVdT~*aHRwcCzvV|K9P9zCTPLWN07SfQS zSZx1)i%n*Tjq;EkleOt+!`U-voJcXZbG|eNjKD*V5h2uu@@s6Qwtu4*iS~8uqQL(Z zG)Lp%eX@HD+jnkb_dC8jRTu2MG^aThA>!OS;j28s}o%MjqJ zUFHq#ckr#)6O$Qx+kfr2ML|!9vMkxp4&)g$Z{;4;=s|Eaa%d$|ybDhC>dlW2n(c(t z1U^ERuWq64TA@t~Z=T^-*f|HeLC{WJZq@D(1r-iQaoum1GQ>!1JhOZ1!a8iv@Q#7OOsy}d}hW>E+PJcNUo z2k@k<#5-;GntuV6C4c<&{}C(_L8>`W-en#w<*dL%oO|YRkT@EJvJZy|n2u}u&*ABU zhw0UNd*{j4?gpG1taFt!HBtBFk&vJRDaBe9E`vyR3F0-)uGCmfnXp4 zK2Yz~hriT2^f59BB4|TCZ>^I@xoPI_j{9d%=!b^)Y;X6jV>>4=`v(?fPa6#HW_*8* z*rOhLOk2u@Uo)0O2Sl$bd!@KoU+JrsGltyiI%wvQN@v`op1-*?%P3O!81cYYS+>$k zLUq(7Q-7@OB_ahHWjpiXfw+`7f*g^ZL#;tSEV9-@U}^U!U)vg>R%#K`r@AEZ;BlTj z;sL#G_vZ0NdxwcSL2Y;p55q(h&)g9xTn3fgcBpBm1&KBnEX@?G7c>npXp7m#h>IKn z4L?FamURqyWkRS}MZOdtkM2#)LZxuJ&`}8;#eenAmqNf9h)$si_Xc)F}Or@cfz&(%D-+DA9Cw5*X$dd9fWrbIE#Dp$50k4ao;O~u?=8O5( z#MthcyZA=?R$Oa_Hy#u0l`e5WwhF&<3B;|S4-d2$GQ^Jg&%gf{zAfoN=e8}fXxwa! zkADj%Z!hxwr3*QK=|b9Hx{&jiF60==V!-}VsFAa`y&ND^53C=qJ?G?Z13zIt4^F!Q zMtS{M?310lja-@GBFMDnJbyCrH{C9gH?{Jv*@V8U+U!bs2;OG!-0=`t zJo3*KN6_ndYegV9gOxGvna;`nUYiy);l46Xx zmL-di?+VpriTCUZb92MTcZbRvVl{V#f-STwBLUoeyqgwBh!NhksxDe1xNF{mYk!n? zy_zOr*4x__DWPL#3M4<9wnto4oLD>XQQcXuvi!Tc@pP8|;8OcD{B)t)c}KjhYu*!2 zBcG{uA2zl>OB459LbRtnu~~raZ)bVN{&OV2J8awcbEHm zkgd`*quh-wa&_k6Muta{Ty3< zI~=@fXPcUbuH*$84@If-2wf=ZLQzSI>fp#h@68TQ-5le<2P^lcXqTTT^G?=bC#zQY z2|enCr?hnFaSLH(Zr%&gT!`i+5X~xarQOp`eW!VLkN!41=B=_iX^*+2Bcu1XeeN(H zf``0h>_mo>{0y55-Q|CKE`N2Gi+X`?^S!{ga$ewDX)o}toEP|3j_Pg)>;*pATjKhL zY5ToQhOP(N57*GV{tJ30H|$TaLGjPh)MlKUotNJ%;|h*H{-NygM0%v}@V&zyxO3kr zTR`)j++El0D~%nTa+_*b08JeG>cK4|c>7yJGFhHG^rb=YoMClB%YROxd3}nlJa=+l zOM3qZ@l0N~5JRjW<)O8Vvq9sB?`TO5G;Z9W()E!VzazvAwGp`*8@X-Fb)nDa$(xPe zCWMR#`h6k80y7=3Z5>7MfByX+EgSs$oL&c)7h8K?^;UYJ46 zo$^>%7vyyztp-R7?SG=qX{*7Z?XTYC`3aPzk+*`06hse>+rR->OX-|hV9gw)(sZTn z2h_Jqnc$bW5atUeOsQ#ab&tS$$Y1EP#A~5vVeLT4^V@Tm!np3LS9LU9-El@8P1c~` z=Awk}^q}pWWNP(Da$bUfz3tX{H#@Bg>Rh{q- zr_l%u7_~s*$Q`s$*w1T|t~8#d$R{fJ97J8_p~^oS2XTGZ4ZX42M3So6%~Zg)uw2 zbXEYbikM}q3V-VZ^yjy)-q5{Dt}g)$_KGv3Tn+F-z*T{i=zG$eZ{Q&8(tCLfe&a!} zI8V!w20~0Kokm=lcL_&*B&jjQzO-xKiGAq7r_m}_Klxc3*f&h385uAcNq@`yq`#$H(%(`#>2E2Q^tY5Vs+Yq|`aA3>S($z> zM@7{DsXi%7h0*Cop{=QLG`1#dbRe$d(Ho-=BILv$f){2d-Vx9ADr|v1r)mqB#xC`8 zctX|NKYuxvPt{zx4e*Cl?O}UzvCFg^60nCta_!)$O1o&@ zIV#V`E9a!?CH^Irf0xH{&Nxba=2`h1Wz4g@>tFng9u*+a^l$4sE;n_^PP>0j9R7F4 z(eb`{VE=RTQcxj>^Pe&HL1RMfh!Tk4><=#t6@O9^_*}pa8Vm4rx%bbm+DqQ}i;@Xh z8c>FU(e=?0gak@btnEAk%EivdRXH2D?%YKGRRFsN1PajGbiAl}(oaHQYe- zS_9gh<|3Sd+hntzH8@NBm%$iF{)Bf^zJHJJKO4|k6_5)415Q^8`x2B1@#>G7{{6o$ z(|(hzKF?UkhR@gO&yVoAK23k|fL|=C+{Ig4BMcZpHv-{UQHpBf zl;Z87t?oUc7t;8BB*<7}2A)m-i2Fv4KWL#EcX+FXcEF#tG&lnguvc#X@JgS(dVihp zA$x9c08q|FGFne@m>xx8}}Xc+ZJl* za27XFHW#pL4T{2#$ul&h;LG!m%75jLLIwNTJsL_7Y?``pWt82?D6qGf4~#mh!P1lC zX{c1|!zr=tOx)`mf~1=?yh!9g3jmXsfsMV!QXhsLFr4vtv`jRU#)Tn@>rHFyq+U(M zZU>eYmQBV9dwiFrt^~2$yF&6B?^WHFfQY-`nf4QRz^iMI)7AanWwFrKT7TlSN{xb+ zS5(XjKc&hU$BMohTGju~l>Vdc}4lPKXUbC%pra-Ai& z6DeoO?L^jDLZ6VyXQe-vp)1%=FT5g^)|jquC)GVGrUww%m^L*jT(aZY=Z}VeKCGas zv*m1iox5w4T($%gm8}S_EPqTYApICBqwAbQWo5L+XeJyb=UpW~2Ud%vz3fwBBbRNb zhPs;MNid7zc$+TEO|pa-f7(mJjaS|}VI}rCpwn=Ufti08L0eeb>G{$wMP|jaOP7{* zx}3DrzBP z$3R*iqpBWYJ!N=3V(6zm!57Ha-TW#=&)or1U)7rY6X|C$l?L+EvQp1vxUWdc3Rt-*h-9SwgEAu;FlxMw51dA1ar(t)W- zkc#AjU&nr?&plwU%zuY&JcnrBM>rznNEHN75goP+NB(3smI`A>AO(k~0|7NLhfU(J zMr=$q9FId}$MV!vY>`66hLUqH{w@m9WD6Vyr^HsuGz8m8=osPF69ZIofKry1be=hr zMlJ0$6@|Sp0$-sfc`#$uwn?Ermz2(&~Z&$7e>-7=0KT7DCXesMwl>);yJ-215^vK>i!w> zI$=@djqm`Qc7J4Ody~*rw)wlizds6Cwv&wX*gYh~0bJMOc z+9^s?&d4A?bGVe|GPdDZkw^DljAp5`5q(u_9z!rT7HNo$Scq=Dh17wTuT0qhjow@t zoM_ZnrfPO`oqaUe{av4hH>%#1qEX+}VdN zKG`k^Ed)8vP3(-}t#lPB zN|+7S4MYF2fur@&8&eOeAFeI)9?w=@I7xrBfq#FN=C%aB*|HV+?@HIJ;4lguLt>7k zV@VkCE?uUUy&=pn5m+qvVd;v zRJ^ceyneO@kRo#C$DTTK+z%8zemx)Q*dTNB%>&dbxZ4I8o0h8a6%6r3l~w}WIn|f7 z&il^09o7)E4y%ddWL~dHQvWDg%yXU-ABzDZ6$=|E&EoK)@SLnU7Bjt>OO7Wc7=Pk} z1M5(Bb_nyLt|-G}IZ^n?!tA39; zDRNb=wViaitW>CstT{zFa`XHgxw%}9+*~?GZmuLpZZ1be^FijwQTFPQ4U{~mxm))c za`j+ZX%vBc#+rD0DPS0JFz0SyqknkKaH@sEHT}Jd74oI|X6$zohi_zMHXWmhmBspj zNgQ9@dVC~^y8RL08Ne-mYe;jEXS)69d0%5E3UrYY?TZTBw;Ae5O-1&2w4T9}!CE4- zE;el_x9y^cvQGOi7(=2C@FPSJb?&K`iy+($hE13t3uT08qRvP2a?vF41%HhhPa+j- z1laNmIXIt)2K@pLhQHmzlOv7&5k=HJ29&5o@kXbdwBhI2Qu2}h z`v{QXeJy!UTj5r_f8x!4tF-vd^gsr!ErXkK$s_#*abH`YR>UukUfJ1~Y+wc6qbA;m zHgv-#wjtgTGkcKmNAmpSxH~V|g%)ox=sODV4|~n>nI=@#Z3Xsuet*vZ{J;YfWRmFn ziog&0nnKWkeJTxgzKc45&sstj_Mw%*XM(!MC*pe8SAvmC)YiJ4%Sk(FJ0gp-Zm+U; zH7t*oGg_79hLQY9o3^X=rJ12i*ImYgP zr0lltgOe(NT0$_T(SJIGP&!fr+DnRAw6DaNUVP#JRU{mjh*Rk@pGuch!E7R{K3@@UrPAVPUav~iMJX^G$N>1SJLS|3c0 z;D;nhJr~w$-%1Sn?r!sUi5mlL(@1VOn(;?fdT!?O2?NNsqkowM!Kj$~=fr#$)28n` zx&+>eLp6+@W^h#SP$N9joAE)Zqu}K#=8ge7xw?=b{GD-hyl-B!|B1s{SemTzrO8T8 znyjRy$x2R|tmMdiHArb>`<%!V;>1$ z1z1Z7-*z@f*P*t*0iKMS#6BD{&$xC)WWLTP^R*nAucgU+El1{SIWk`ln9L(*T^}i3 z1!TJu@v(|Ctd|-N7s$p6HH=_A$z=rVi4-GPPh=SZeSboR5zwE@Fap@m5E%iMN1{I3 zLmp5QsLhPTN`B4)HD#_~{8b#l`D<-*x8@R@>AEGQoscs*5`A2#GqUHLT>1{K^HU7j zTBjY!uE*gTgV>La-Hu^eg=y;yLsO5TE1e!H&z-K=$5(+T^dfn=&PJLXW;AcIf2iTQ zCOv9Yu78XZ2UspM299~}7G!}f4^*Pvol6$eYr4}G zKs#l9sKM89q2(e#I&}?u`iEy(T1+k6OQTjpTz@wk-Nu1>%aTbT@>Gv3^vqvSf&NAP z2;-xcC)3|Udc=`H$}4LK$V3vR8{^NR9gld&D`8k(_;JXOb6iowMz<2}lAilJ&2}_n zw^J{&V|dJ9t8v(BUzxT?Tuj_XU)$FK*0Wp%gwOa8EYE-0Ifl*khEdF+IOaEwWC3=i zaet|uHo5eqPkUm=b_A);5azn5!{yWwI_x_qhguBx?QTaAfL?qkz$%OU($RMIj~yo+@ZmXd;m9;6&sd7-G3z8Yq1apUo4#F!Lcmo38y6RZPBfJfz$H} zyyI6Ib{U87a9S>GjDnuYZ%K+5*_LVRRrCP%aJ&&~1AEhNCN=hkS9-EdNcTs6nGyVK zVAEUcV-1Mr&{hHRty1`}anCXAM58d&K0HFl9&8vuulqNlWy?B?<8EQr19rMOT7O~X z1$P_(up{kBbB?TUc0hgRb5sKor$JBS18a(i!HvBX3yW{GALxgKwOqJjF20b|_zQ`b z_r`Na2V1j$xWVd}8`;&g=NOC2#Is&f3zTm(LdN)xqc@kYkbqK2!c*$^)#*@J4*v7+ z|CMlfCbr8dFhdT~H4|bm%kdZd0Dp?wu@=jWTa?^~z{oI28>cS`%KpPFfs~Wcr5ECx zpGeZdm{fLI5m|ULeEnCsUK}72zMt^3(D9#mg1<7c@Yn1NXdlPgu83?sxxuWx-DrOa zSfkK=rh_r;DjzK4F|EC1Y$=Fyq+1dsHhZJ}_yGPk&iI&THyiH4dl%Hnf`8;$z5@xc zBvyoqK+fiOnUFchX^TGWVj|6TiRKhtma<3m{ZNY z#S>z6FPb376dD2*IKaDGJbO`2d83dJhz`fB?~KX>J-;#`<$WoxGti|g6Lb}AXXq+Y zZX$ia1q;2dT&fA#=BpOUGA&}zO+72`>8tMdlt<`(WZT!+NRyG}Wq;U|qJfxS+_%(9 zXm6Ro(?Le_+Qn~mX>Bz&GA|h?+g}843#qx;+Q11ewAowQR908fYthqCs!5PCe>S3W zgjk}gvf@Qz2`|1GHI}TV8Ju^Z$dWa6_AAdKPhXGg&MM_xG?#DD)pZYQVr!8XqAcqo z8>dV1FQNlwxUQ!8u79hkoa<^T?Yf%EHPx8Pk=1mNJ}QfRBG$&+n~-_2p<6Y4^4QD% z8YC!W~0ZCi82*2K1L+qP}n&X@anzqNX= z`UBmk&#qlnyE`fUr?RBFv&J2;TP5Vr4G?m!Pn|>3W~}oWQry~}bFVqhWkq^ZUd#I! zvZa#`e6%q7)^Ws)tPC-4ANn7?klDpZKSOsO-NVnF`||P5K8;Z%o?PU5`h(7vj{Pb0O;tXNT=hTx`yxZv0kr|6_?DR9kU<`+mspYcbKDT!q(1&FP5%a# zz}NwU#i8prat_H1VZl?a#q4}#8v7iyq4{=QQgAf zk%oS>u-})l49t>me!Gu!>>8!Nd8mh40F(N~ zA38jiq!-Pjf>`E`o)3fdi@bt6h)>O%u)XFq;1Q3l2I}>=NN8mb ztg8kSCmIFy%DfLXW{)h)QXp?Vf5+sy3exQ-{XqtU;%9Z3nMEGv>h zJ0hI{-N_qYlb7=o%n7*C95>@tJPsL$&_CtcA+oUvUm_|*Z$JxrQXhCr{B39t+_Z0Q zKyrXr)fG=82JinwlEwtN4B%5>U^SCQ&rG6O|EOz55KfVkF z-WGh*9oK)ulgb3oX_H2nfy%wo)sE(k4r`jNSNwx4 zo2}%_lYyQAkJbBQqz}QstuTg5#Y^*I>mGSY=<@8>K$V{tH?pWXp95|9xh3#~gZJin z72c`SW66#c-c*zS0l=F|Om^JQ)CZWx?EbXN3TpV(2{P5p3`0d@1EH{MilshNc zDYf^<`cC!>ZA07xjYbl-Hd$Td#$Mso163!vB`;Z4w9UqL`_!pJ^<~LOo|`n0pMLX7R&OgVINsYU|wfD*Qslc zM9?{%A=LH|Y__t2s7+-q>`FCSXahl!4?l7mH=GtbYxSxy9wv0@pp|Ndl_BL|w#uqk z8C(1k@6N@}uu5YfX;xBWJyZMQb>a;1S`G^tMiWvft>^u^Ymq=YBCs+h?CBt_OU~Nh zt7GbT8eqls)sb{GZN(*IKqrQL-pjn#$J2ZDS_{*&WXy(61CoBQe7Ca7);%S}a%kN? zq@ku{(8aqIQ5G=6%UN7d3E6((F{cb1e*yYFJ4S$Hd8fq+`W{h~0|n)o9M2I%Lz%dE7Yv4Jv3u7-d7U-tzjNJ8^I z7+_$}D|Ym9wqz8d+QJV42ejdrs>ib06C4U=WI)|8G=eLgtKMEYQ0+DQnKvbyW(TO% z*EKC+HkL{8S-REMK#kPop0&fh2+RmOfZu@v+yPu% z`@3H~X4dJF|$mB(2?yTy9?(808~AJWbDpe%b=#ldU33O@?ZzWh;T5%^Zd!14K2 zf>Ksr8^Wx-{EtW)PvNDQRgblTZnF zYRY6V)Z3CS=>+?V#BVn(1`Re;>lzSu+gpZ>eu*2OOT`!b{uP9Whu8lmtzrpiPgZb2 z)wM38@B-^~EX=J(5v{e$ZdTpv?+FIzOPsXiFr7SSyL;dc>BD5HR}HM`M}e& zqSpy(K^itLua6&C`U{g2oNc0)=DxrJm|^m!!0byPaDj^%5#c?AVA@Rz#(DHE>Sk(A zCpk2+)zmlB$M$cFFQrho)=!!;RPGQ;yvwMpaFlfhl`4@|&0$Vm>vU^K;=Ji%T~ zF-f;g!CI<{{6`{d%WglKSZ34DVe$R(4mf7kCklhY4*{)8j2WiW^Um3yYWrPM|QF2$x|2-b(iD%+mnM_LFfAZE% z7aPP5+tk31w&Kat7TxA_QDw@+wA0L=^1@8V-K%QCOrtUz=7m|J50c4$me~;Cwjly) z!%U0o^38OvgQKYF*k&)F`2PqZaLye#!u6tjN9Ce?pGJe@G)HS2C20-Ja;ra zTbFef>&|Q`C0k#YjyFFqkga>20pc!sAN`u13uvF+L870HucjoIVVW0oq12#_rLew3 z&O2XIblj!5yhR7fOfjV2MC_3-U=;PJrlk5IX(-r~b0dnJqHpdN%#hhyTxu071P1-~ zEyN3P^2BkA{xDpxj$Jq~C0P{}w{JLdT}N`7v8p7#vP1>9imD-lK3#la-fETg*vGW7|WDP1P&uDS9kZ5!yG=&i}6 z(16D_GAe~b)-!HrPp zT81K+&4FB^SzrR^2vf^m@nRtFp=carAaQTShZ5ubT$-e_B(*%Y0Y<{qmfSH2h3;>A z;Du{qrN9`r&Jiu2V+{nHWerL#vzUPvdG?@$6njGslZ^aJWB}gOnO~*0{JWC1-`V)j`sy3( zJ)aw>-(dnE*YT+604`uiIMa85WBKX)GJfum+kfWK_*kXl#3+}{Qh7ZF82p8n%WQ5d z_|z*vQYFE5Ou1Y0oCIV~d$(vG!gsf1jd~)M-S$@^z541pj*J!b{8*~VcyQ%X2*HaX zTv$uFJfk7^wJ@c z#^ET+n-@C~SE?@ZcN@pa;D;g@>3qj)&k~NYK1&y{WeKfMJ>DXTzzhjk1^6Jk93F8d zfrTX;>_*R8K*YizaW>9N=NE47(c{w1NaE8$%ZD8uCk3UELKhg?aO13fNoaB@Oh-^a zRZSMdlJpmUo-cnECJo#=ms6Io`P&3Z!NPyC6A4Wj3slhJb?&5p_;(v{U6GANJAdkY z=y=%S;Pex7(Qqo#872Z;n%3i`$k5d-AQDffM(eWxVltn|U&ECQO$$$m)uz=0$2JH- z7fzfT?$I89i}MAS>J4a$Fr_UK%7#Hri-GU4afS4f?IlM;p(m(eDicypV{hu@A4tzwCz0agw!I*f zk^7kee#M>I92+6xx%AjziDkm+m`s$Qa^@qsXfk}7qq?aQx5VGPW;rB8JjHvfnT}K< z4K$Yz{YZqun-qDbUuZv^)Opj1PRVx2w;CXCX#s zjfaRk6rC%yLagGiT(WC{h+19lw4ZGC@)B66B^Stp9rutXL zdvMvW+kOu?)zdZsY&qQx?t7;rLz)9KMl#gDDmaj4QRGg|M{$sQC|*+R!*RlX z(pgf3A&^pTy)X&>f0NU54o#2jZ1(uMuEc5yaoh2Q8prB06k~R!??}pWMC}n`je!gfzPDpXJ>ESS};AbW@x{#2p8`lqD$=$`yJeK8PU8U+EOj%F`M(Y znj>Ff&V$Y`3RIhKV9#iTKAWQZY07aqM?sLYsz#rK+L5?%1R{@`de{62IU5 zcVvh;?S6X*+GBULb)q|zJ4SH0KD4+1xYg@gtdMz6iwA;ANwHKceU~Ow=h%woUCKgR zxSDIa(wM{~wW{+oYW&)%rkL_5y_KM|Ty%dMtq_t1F@cErphLvu%%%>W4fQ=?04uFO z44h=Z`NaTV#ze%h72JbOwt;}wV2n$0#WAc&iL-m&vW-UoDZ5Q|T$LHi1#@%(yrz`6 ztvBHJf!X~61?POK6Rat5!h)FW`&}mGz$o;ohW%i{~|4Xi`F>xlfK+@Gx9R< zpe+zApi*Lp5+h~+XAz#I;5yHM8b8fxr4vWy^l-)Fu}{|?m^rvV34xRWtv-)KJ5Dx( z*=aJmonep1nBIuT8Y?nXHv#>Fz2Ir={6b>|R9jF8q)Z>gK3b)~!FClBby#>P?q#2r zS_AjO!H+HNS)TPLY1T?whJr@-Nu-c9dk#wujk!*j9x9Q0MCHvWc@9IE_ zbf+q(J;t$U;eV`KF*LOo@nJHv`gHtArRKs4XkcI>JO=?$shNYQfkEArL;fdtl~jhXVwcj>9pt#X^-dOuTbe+E z$#V)RwV!oT$N(sn@9u@u`tEZ-KJcnLF&w{w13CgEL+Yg(?WB!^$4@hNj2Vx2uXY_b zjSbeh4>ZISBSoG=hJ$)k*hKD1!Ux2}@X8jD?>R#UYD%(&I-~)(?J=w#JzU!3dX4bU z_y{tV{rba40mvn%0Q@TbW`IbIk0BojFi=XW`Du^mAJzgUywQ793dyS|s$rNP>RH~_ zp^3Mveib5JF?WKtoVdEy79pvzvvdhs+RSS*fUQ_(ia*8$Xb?tgkHa<{+>b1_hppZ1 z)6H)pE_5W%I?@2Ps&?n6HAHNxPt5qbk>sI)Gar3hkYY7K_ACXfOY)MGTO+u|R!{vs zL)H-XYqdS&Z~bt@6wnFHDd=xx^}zAiK@W2bOXfOBS&a?WJ-eowD^J}NgYUfQY_#UZ z3UGGkx22GwtSw?iAL3sI+A2iC5BK9xCWcntjwt3C!oUG;c4aiJe;SM4@((v~S4FPW zagx6$gW>HgM{ToA?1Lfn#0=s+?u^Q|CF{l5FRSG6W>h1JF-VSw0FXbj}Ei3ZLGhruxwu0 zF(ZrtU`>{uYC$_Q$>VBveY|AoH2q``WiHxbx*oAm7JrE`22+bWTQ@HB-jX z5BdPV8Pif+ZbfcB-E!{}8ayms%1rb&^?iU}3Q}w;M9Sbdz?}ML+bNI5nQ+D>JGC(i zbm_^I7?STwe-bIVMx{nyP90Nrb8B++Nib2$Z8p!M0>bB!x29I*89;AAJFrTQ!8a!+&Pnd&vS-=4T!?{z=PQ1)zg? z^#}C9sU|?8hTJNZQ3{-O{*a04e8L8fcGmp5M$CMFLEZ&=BiJ0YhMRK1{8UVSCJ(Fe zFqus(jNk{&$V=O^Uafn_dyjhD$D>8fGLb^DEd3aMeT>R(1M#0~;3#HfR1T_lC}x2F zFiyD}r)c2y;8}5G!S_g;@ARvmt?-i$O&{Y}t;4e)fEl83b)wN;PxIYlRM*I9kSP}oCNbeE7~|DieqiXUl{r1gAQ8q zQn*3%_xYF`KISZFf6P(Toz4XvYJ((s@PI~B~Z*yUM+*Zx&TH;@^}YmFTS*yC!*O1`FF_EUN0nqXNgz4KG0hc;DqmL4>R zX_{MOo<%39%+XYDPT1XO7sWKq30+xgE>a!?PvU8}s*cj&>+-$e3BF1y2}otB{5$8V z(@(H)!jn(7T(Q;nR9*)K02zX)4Tczsagwt-I{Q|5>(mRxck-GS`={t;Q9 z4f?Z55)LpVwSS|_0RbfBo=J%2vi<%sug6`ek@Drs6Ya@u+?hKLN){(2dRNaQPWbKSc zEWYk7S;v{j0zic`E}b29#>A=ME@}63JHW{JClI$sg)e_N9x3?);?EneR+I#Tp|{nK z#7TrZ{x_`qYS^D_DE&<{i1gk+(;xm=RgW33@Cy-#kX7|s&xeKJD}gajqq?zu1s7I$ zX-c`lfqJfQtt*cJN-fg-jLT-zhcU?lbqbO0mlOF<04Qgnc5+4I^=ScVreZ@>+PE@w zDB+w^@T=Y>>)F+&NcJ=X?y(5u{Jf~wJUl0`f;j8htJU4ip!gj=3>17!iH`_+V6~PM zD>ksH`f=LA2@0wTL^L&t!yk&imRT?kH$gaw0r5#~0xH7+F=;Evejn@7 zOu+UmY5y_zg;clH3tMC*qEL65+)z)LuEIlRGcK-WacCBajnn5-Ti+UG93cj_-fYa3 zPQQ;R#8EB6PC*ovr%T^QYi>b>{rAt(@X|FyK(hPF2^PS88Uv8awCb3Q$PszP!G zV4_5-X?>YHV?vz-MkZ{_xT8Ax*NLaV= z-*=hITVE7E+o_9>Hc>E99vh8%tC)08zp8+)z;W zd^UL5!X6Y#9B(g-YK))W3qQlAl}8U&H@fdgzSGv@jvuDbrv@JZM-c zN;V6`_>5*L&{H?~Y>5g$Eq#{v$DVO<<;G%Qg{Xwwq~s7=^SNf0g0sN#!Q*{zmcmA% z5U$7|AAvi^a=@c3hI5j9JmE;#*sDpB*-{ctmGNa7m5)gXRL?of7PS*7t~!Q3_q&p} zcVj$%*RytYj-V*21uPA?XPC!_LfQ+u1=MSN%G*5$)?gnd_aYVmgc7Dx?}r`yWZc5u zfvOqbRx_Kaz8z(McxjLv?8LJlIEgFc?9#IhD-8vC;Qn}|#=~APcVhvKHUADomCqR zpItqlO}OjillBGJ1MVKdY1V;xX>Jnb!wn$;&m{Thn<(MoV0r&E6<@iD3gh!@=iJa} z(a3Ho<D%rHBmWh5YE?B;#XbuJkkxWHp`(&Nu%SbAfGm5qxYC>Kc=qxoKMx%;Cj+DLe&-J?(Qq@PHewGb2X*a{-J=b!+EDo>xJNL%9L?%6TZhhjgMU z)2fh7=G+YnV84!Wn3Hp@Sm6b69PslCvfjTO{P!>jZ+>Y4k00^ z1JvZ#sep#K;DM7Qyg4shlWuwa4mTyjVrcDV$Xg$8?h^7W)P+AA3dg4^Tt1&JM>09X^-yly z6EuRpyE^e$c=9f6@(V?CCKJ=A5H#=;m-RzvaYS!tKQdL`N|(V}*qSTeZ~cY31kW&t zJdx2(g|y$p&8GzzL!WJ@n$w-Y9-19CCTANsX6(D*7iDqg z*A}j6KntQksnRHWQmXbXhtul$al^cXon{JjlwS|<4nDHO)QNqIptW z7ha?|IhEd275o$!RRkSN{67HF;G_Rw;$%P|IpzIe;VzUxL6I(PMAM9qL4=_7&)rLY z8JzXADLtQ&dM1fn)b~-p{yK#KSI11zd-ktlF$^gK*NO_*nnm<|x~kRC5#k~Q3VH6h z%qeE_z0t_d=xD57;V)Gtr8f=GkDghkGxJv#sL@DU=T&IsEzI-Qj)WmKw zSgjj%n0%YfdKwI4RVYy$+S-a)c!+8(5f@#)=2YJ@K;LpdMRIV6@j#f}1T!@J#7}cB z@1-*j#3<|9A#>bA`*;pOu-uw4>_UGGnU1)$AHM8W*Q{K~F1>!8kF0~*LRj^S^!{*- zjknGKz=xI8NCm&p^Wpe{462C7*qz9$nt}5CV|+Y+srCuE#{cTce3xAXNxMF{db1|Y zgDy?Q*6T@U?#?lH`fd8R-mOAsK4-MX%pt3E_>gkytRXKY)i%i|sUT5Z2F8K$EZKwhLox~ zvT6B>BN!g}gtKeUa6q7Ng7{86&Kki(rp_p@_~9skD}Wf7AKV|cr_RO~2&{AC&(L@a z-ovRYtZ}NLk4FjU@{T}Ap50Q(4v*t*-;dN+s;+lo&J5*>q&XDX$Rcr0@mE@mN_jpy z!|Z#;)00`jP32G0r{_r2r{_)3=Zn7=9cz@!K(u=R>YvU8rs_S8Cw$)vt^i$h*$JT? zz3%pTBwtsel4i(Vj$_(Zgw#)EVQMOD0aY~R?jmW!{e zOXbeVUPu?1!z3F8mrFZ4GalNIK~`e%uvM`3f~yU15PzBxI5u(kq~Vp^XFKsB8|&06 z8tZh*7keKRK3nG0YD;jx`xq=uOsCZOPFa5@_|)I%E=d+B1Ew8MTqWXHNKJ~)PRetr z&{>C_0DSg#qTs@DUU~=C>nfNk+yF~N1IjF6l?iaSq7c@bSr#~HP-xI0~ch#D(s=^z}%5d{+k?E zbw&@;jJHJ>F9TkZ&I9H&B%pps)U>BchJn(f>VOsRiLFG*1-C0$@p!%FS}?U=W|Iw# zs}=&mS|yq$sE7Ur93FEe{FC3M*JlWzDb2trE5o3%&8Qv9u{&T6cY)347ryk7!%$&| z;obR8U)%p~>~)MSm3yl*eKMt`yKts^&>W^d(io;L{{L|VeU&bFjeO7i}APkjO4EnWF#*O>H4IZ$b9?xys3N1J*9|o9{%THye;-DgEznkz!2b zOA+<+i1<|=a+s!{;6r{}=a4KK>06Q>U&KC;-rUbNR#hiZ!E<%kUUt*J&5<|+N7hS#MLwQ1)4bH9L(}%&JI5w5L3rq%+Za1XHzm$SD43vKNjGR zDi8e9NRc(=|LI$|uLSoop3IfVMo3mLg(TCG2I`XAzKYqgdvUCL)ZR0%zT_9L!sJts3p)BSzlNnrf%~9Bczl^99nYIuHMU8-x!Z2WA#a^j_h$`4io|~NLk&4!qxU( zo0Pyev$8tghqgP&v1>aLLd(EQNBrwBE+0FY<8NiR8@_%C2FLf;w(;VzK>Ol(gfmsJ z!}mHC-2W@&^~2j?E;Ga!6GQM)_=%|S-ie~Jz`+wHUV%kpaUxP?UCqQX*%@Y#R=eODS-=-Xw+0|jJD zx9xl7wHlkX8B0Z3O#~8#@M{Van|T#rGj_0O%KVuNLvF6&QjQgte$o7N%|^5fMraeGTk6{XT}6Ih(L&+ezyh8C0eC zfs9Zka^6GEca&}rLCda;jqxAH*IB1_v|5kF$rV@mD!*s!FOy&S3iw^arl*&Uo+T8@ z%gSqD-vLEbV%iAHYI zoaykKb~40lx{xh4)RN_2+BSGWVw$m3mh_l)&!|PqTCsqJ3qY3MCs3@rMkag37K9*k zMRuh6-~6vdA=9$p)AyDuWPPiD6u=XJ;(k1vtP9+m_;31$4dTh7#+2%BK>e?T?)UT2 z+yM)@6+#^Mot5mV(d7U{xu+z}m@X>;sod}U&u$An2i7*)!_RL!`dfkg-0TD%kE>O) zYO~@V6_+WN7eH6IS_Ib}3x**pWdqXv*7s}sHEZHZ&iATvfGOYIJF zE2&s35|6D#tOBoH^Q94IH8~Hz_Vt9=JOlEC^0+a7gb-1E?)3il#Kn_N9z5JQ zAWU)l2|uH8w`f!DTw56xD`_>zMOVl)dKEiRQo(%#<7N#q7kSN&M?&bm(ux(lW#h1l z65U;jT)?C+LgLar#CKflzZ@a%M(9bg2WO(J-&egi<2>MfYBX8*98@E(>EcHpG6zmy zF)Usd%uZU>3+UYH=QGp9xju5S@H(jo}kQ5WF;jTv% zPGWMOZ{spY&)WL7Cz}U6)7H&RzDevL+(4Qtr~p*J%?~4ex}w45r@~BWR*93RvSOMp zDJ7GpG_;2E+lem19Qg$EWa+X^M_;ye?Ddf~iFcKr7}C4R3$ENu#KA%^aVlPnwM>u) z+0e=>z9qPQlfPb@2M$DV0BE8-M+_~ZYr|L~Ja^khS`^{qF92@R==7m@8(VDnJ@_i_ z6ObF4zOzbl{s9@4Mc5~){(>%DpNF!jKQDuTclxu4%Xi!$GtbTwaXRf-e*SuTfQ{~0 z;eMijl)0u9jQ%LDJ4+f<)fL*{`q3Y=o)gQ<1-J8Bb8yE+VlC17x!okEfXrUJP^^{Z z4l7Qq)rP!eDt}}3G3i{+jNp*41a08yFJNr31dCOy5Tf*%(ybVlDTetTUll23yR-9M z_g@0sJ;%_9I&u7K5XnS#_xIsv4B+k6pG7F##ks7!L@?2@7AmeLwG2CQ2@E;ysGsS& z=3SE1>5h zPgsiY=E-G(wcmTX@?72rChfD<&68tIkBFk)Pe^B(Pi5#A5bDB}N;ZuzfHsx$)Twnp z&B~(aWHScv@%7nk2au$svacqXDcB7&ne=aJ=2|Vv)*d{%Ra=gL`NN2Fjv~~8yHDJW zz5k~QbN^2p`VXT16!Lza=ro|mBzblSW=pRYg7eMVZv;#QHU&~k8aES?^L!(xia{#3 zHZZi1QLd+lhoJ=p0Hs?e2u=Gjfucw9anA+t+sI-jv9iaGO9$t}R#X($o28mE1Tu_lW1Jf#k<{Sy zBl|ET3&vfg_G(Lnn<23H+H5xrq3mV&Hcs;0xw0vT@M>6>8x>`0JvOkw!oMa#nfa_s zZpriJl_qk62|GDw(gB2)N!!Y}N=t`7hlH)8gzi2El~{K;y8HkF4qxE?Jx990;#Td0O$h>n-t z>8oBGx462F z*1`L2?B!}i#+k<2Sj&Bwi1cqi8qX$vL$=(E>COM}Pf@!u11t|1>iNq2lG(`a2(oA{ zLw;QhoT9tZU^B;key}5XH-txicg}p6V8`3R8hghHI8U){h=EWI-Tz{x-)NZ`Oim!x z-?&e_2T6%HTaE7h;%G6kR+KMj;$X@&-uGrU=K3KxfGuVWRQU#a{ImJwt0u^uS`W;z*GtajoRKR8v2_le z;RskxPP2JY*U?jTkH#SPt}`=@xMHT)rhd_WbQh~x2Q?E+ewpaIYTwT`*qzJp8okQ(LQEM7zjNx;^PRfS^*2TY7;yl_-}N%iw7>(nrbax-KrR%{O^=Sn9<1h0bwnot* ze)HfNj_e@Fd8p}&;xHZa;$X@ZHLl}a*#@Gu$m2C!M2D|MX;#fCj8{nWvMDQpo(o&4 z`l3rc^i0>N&%xhJuY}11gzheIlIB!jSIY?6a_4@dAOe4z zpYS_QU1bTF@0K$rHg=PQtA8@S(?nM@g$9)L#WxvScwKuhTiZEm`NQOe1Uvx;Kot*!o|tWN%jz+(;rb(UxT_j>RooC`-8$j&k1kn}pzcs{Nl-Lf zekLilia4LYhn*%FI`KvS4|vr?F|xK#)I|z&m<|&NVbxa%|HygeAaR5(bnj+~Q{L3$ znI~P)1!lo*Y+tr9H8V>lZ>qYYhgSy!((5@ih`elPWg$Zy0M(|N3qwJr5THQ&=k{+> zyqeutw{wdR3Ok*nh9u%MdkD z``NU9ibFI-{3&>=(Dz)IcKoTop6k}cYNCws)_6SSOscfPRj#-c!Tn0?1YC-mcbSo< zwwcc?72q0=@fl0iTOEzrjh9JKV`AC#uP(#%bV1>7Q#;`0*e zgU&dlsdNw#K}6#Xbizs6lHn90fCs@ghGhzkEvd0QKH7W9tO42QWn<&p(7cg;uhDU* z@=?P`L}7SOcxlyNQSc25`79bSBgVYM@sEI~=+OabpW}&5?xRSM<#s30Su<7CyLM3R zrCghCsN~KspU?1ql9@3Eq7s46wMm9Wt$F;VDru;_6Pttt-C0OOsndHO!UCQ4) z>xTD1_AOs;`*Ib5WYo9Igx@L#`$*s!VoqhO@~FEjK!imGu3&g}SASePUBNi4iCO@^ z{_O-i`{SZO+lrI6>~5JXpqEUI5WZ)4grWMcgHhDrWAwpBxy79}&5le*of?{^47$w@OF%6I+^S}zgY5&en9J@!weN_4sgXAP0M zO?zn&F|lEBY$E`sG5L-_Q#~=L0#BCb>CC!vC0vjIvBtPd==L}u=#v5iZeN6I z=SJjQY+RfOKZ+z;8N? zD(;`iVO%jGtl2sCxtszRP2DpI;MBU)l=Zd?aPRTv6!k1+J~qd0J|o8=4+zQhB7wE?Ve3 zUJfa*t)i(jSdhi?!`sG^=<~eoqKwjMxvb{@0#ndX$DWuj?V<&6UWNy^JYJTvL!#G7-841vbr9Oos+`$=x1! zB|X&_gob-T^4?Uk(`5oTNT8XG>8{kUYP;1rV4xWseJP5 z&Z%#$A*vMPZ0P~J5_F5#tfOmGS3oo_at1!ohK@oQg|#(ZrdK`)aEN1Ng*R+$dK!;d z&uYRE#z`3`{gMn#`s=P19CxQf@t{XqsV@u3D10OKxG8_Wq>6aJw_RJJQ)CPtB?EC@xwQ#M6=TBo3_pV^?%o%saO-j5{8O(@^EOm{}?Wj;8iUUM>*s` zoQ}nLuQJ)=nrBA#wNYm#ufm$g zj0`&;95~$L)uGcB-ugtCU;bVWjkpL}7ex{o7_80%=aGKnyvJ1SvP%AcU0r8bQ_B|3 z2`xl=C^4Z11Qcn~kt#)s^zIdvE+rJHh7u4#ibxHiH${++6j7uExO5Z&=~arCE=@29 zJj8e3^}h3c^Ua(!Yt7nc?_cxd%vdw)ZF#^Z8wPy#Cfo$PshQTL>Rt!t`A-zopLKk1 zUmszQSPw16ojRz&%Wu|}lsnMkn_{RCv5%&gK05oo!S^h3!X+r%YtZ}tF)pQrG8%0VX+q_l8A$nt#G z_>7afF>`^47T*#3jG0nfV_R|neRVE6qW>;2&oEb}>$>Dv|4Cgd>piWs%(>j|{#h4> zSa8nr9ixxxjUt>D!53@e-@?$I$J%}3NTL(hN@EOCI4yFjhvnw;$=HFqfF)zMv5wdW z*cxQr5byn$I$sRaJM$&uwbzdp4ByK^Fahp$R4WsqY{#Y5yPnUC=8rNZIDYh?kI$hd z=h4T>!%Mlinkw0#XtZTjQ?_u%#tixCr`#&mqZ(NmY^@=-xtA)4-YTBC&^2gu1!J}2 zv!-`s%ZFEbTfNCL=P}BVF3CSE55|*VDIYBd@aW}syHPC7UK7{IGgZBtKC$zq?gFaJ zr*eU~e)$dgckXn4tnJ`ptV`aHc%3B0SH5b;h51k?Y(JsOzT)`;S?}V6VxmRS_@G$7 zY2&VE70=bpDSL&tNX1842Uk_i82yuFy)IzP=8Spm+3a$hzlYVjZRJgBmN7TcV-;xPaxAd%jX~Mb4wmkR#r`3(Wn7a2k zhme{oliBYRNW3+v(naUXl`QrrLZ5}o(%q`Ze{1EIP-=P!5V4`;aB+#|yLS+G*JBcb zp|prd&1c=byzg$d26l?*?6@@Tdy^bqo;GzXq+i>eEv;RA>>J^u8073WeG%KEZ6ocl zI*>==eewO+P;3}S4hfYG;J!#87*U|3ic^O%!sNlYF$s(sM)kRA>8zR+1c=U|NMunI z6?%WZtfMM!D?sPAitGi{)OBT4c&127YBAwQE1Y-nR<+HGvrd8EDsTB{vmF;G^=G2-jv31O~_Hm@epQ=zaP z|0ARjL@Izhkz(IxStmaZ<7h^;*W*&6pWb)s1@cZ0Tv}G?^s{RaYR83;3KVjc;x`ht z@O%l=!G-~!!~fjW5)|ZxHPm?=T5TEM;Bz;)E|PT)#P#)hzv#RW2piVY&O;N{VI*@1E=_UA3d<7%aztlVQGv?eyIP!n6re&Dk>QDD#Uos$%Ks5TuGjF zMEi%o;#PEKPYT`?gRQ-3HBXxh)stnsU2)CP#5tH+X(q7E&I zJMj1Rg4wYX>V?ug)O_wtUi>!6FO|AN-4IEYG6gx^ZfZiYuC#tbm~vJ+at#_IC6U^k zE2LB>^rUMLhW%%iPu1XPL~711-cA+Jm2rs#u4PB5UotVRNY@$UUe{O<4 zf~d(CY}Yp5raUFa)}BJR3+s&`R2Oo!B#YQFu)-6~0d*L7_ywg6d&|1KS%AQ6Ct*5+ zxGS~?cKI<_7aM28P;mW~4G6d=HMih(6}op@Mk|mT3G<>!f|kuiu0AGfjfxQGFjIeo z?kx!hB|Q41XWMH5;Yzij`|FWMBh(g`-6U4DtLX)|0bhe}%&aE4B6rkG5r^*agN~dq z7D&Yc;~3A2xaoH=)iPJ+QJ%DWK4tgJk5k?#PX%M0LQqRr30=Ny1}l#*P-_@jcZ!Dd zEG5EgaOV^F&%KVz@LN*36$|65u$BoNWnks0eX49yD1W<>k49593K5`7h<7HT3nMnO zCqx*bezf}yA*?rogoIZI0Xg3}OwicI^Lb;8pd*74X@0(W?fzdHxcm;T$O8aH7cS$H zZj8O8qW;hu?ZD{4E?7S|MB|8f;=Vo{;5Lv%E{)sNQSa})&-PfnD&$+mro5lB9R`{3 zLhAH~y2_NuDwbLiO>v=p{bE5?u(FwQ-`o2=w?bvPbST4Wgd5cPc-jTC7hPz*%47Rr z3|mo-t>u1Qd_3V17VxTJCVhb+n@Pf;fd=-8g=DIuTg9$SD;mj#ja{n}dijU1Wh--$ts&O~h}J|6h4@gv(_!$#1RdwN8s#ZO-W#lD zg|0$w;2uJ^v$k~Zg-y)5$12T8wQ{{Y*3I(T34J!-MWIH7N+;cl%NM=Kg~@<&SV83{ zeR35-Yj*Ru(B@bH_6Kp)+wU0IY~`v7tOm#DBRyI#W=IqVuDd%?pZMtS2?QCJj5F24 zZ2bQSftQWd{8?Huo(WH%VJHj|4UfXUYG;v_ket0hB~sg};O}DKqtmIeT6$nKzr~+B zoZ3Q~VJ^)pLAbL7IRP^X(b?RyJ6|a8q2Xs4wJbK1PA=4~;K|TstB^lNI6x;)>MiW9 zwVj(;1shTsNlVzblvJ}jx;ym}UsbQb?f8PBMlt67Dqj~kFhj538OFfe{Km0eT?CK8 z5B;reN#N_A#OvM2LPf4m96^BUpjlY4QVyQ9s#Rx>7uf zSl3`<7tlZc@SxhSc@(=Ew*QLkb1s>T$;0L&mnq1M)AD^E{x$0IfJ;RiiMz9`mv|n3 z{+Lvsf^cd%Uu8|U+m4Aa)X=rVD)&QKamaj1k`MtYR*vhF3=IR>a?N4JUNor-TBFiC z(%PlO*2l5KwD3Hnx!E%RSNYWjc=W?<&Z8l4S({jDIhkuyaDhX)m8DV<OQYThdZyb6-3Z&WyRKU_wN*OE3_aL%H_biPD`># z?$z*09YFwh5ZxX0Q1wVuqDN7~k{EF@;?%0K=*gcW_YbxZP)vS~X;)xOK<74pz2w zVr2W`Sn8>qT<2Hlt@~S>6DNSaHU-3KE#JHw1c0{FXh8bf0GJU9Vg!L8AkZN76+ANz z5TiUDm?v8ekWAwZaeyGl&sVHfWKJjr2t*}*+CaZQR`@I&fF$`TM&kh_z>cp>24HxZ z6oC0m`I8I&uYm7&A;|O>a{&)<|06H`1!mv@28zFfdUt97EdH7>#RH6I?5X5a5Q+bY zKQ*Jm1Mq*AF!=?xCI1$|-^Lt&56=3SUrgWArOxDMM%`y%V$eA#{%SG+{oe!_M2#QA z0Vr+=1oAUi=GFW62FL&qD3s*?b0Ud%O#zT*KS_I$r#l*E5a=oz073s{?o9&%d3rr? zvGWx2L%W<+;-5m8{~>(6*wFz5`q|+B(zW1cQvklRu%M}@Ik3X>rUE=?x&FPh=l&&{ Q$2+D1?Bu6sc%H)l0izPjvj6}9 diff --git a/doc/OpenSTA.pdf b/doc/OpenSTA.pdf index 94c42229ffc6280a2384b3b673dd0c886473258d..23d9e20d793249719781a5bc403a404eb588e62d 100644 GIT binary patch delta 150625 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

    -cL=JN7ox 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 z zt8%E_vdJg*5%UcRWg1VBmVcp`l2MymUj#6nk~SHri&6jVb?QAS=1+DZP8?^PV8W@9 zpNU`9Fr7y1CLz_@aCw8r?kbW{xHMzvrlw&u9LQPVhJNYkKibUVKYuDaNgBCw@(%;= zC5P+}H^XL7K?W#JhcG3L{(~_F@`f%|h#e*z2ce4xDQ_@+b4y~L9!k5No!RGcykcGS zG*owv_l@L@<0&9p#=kYmM&cH(g#pT5)c>tBwtl8oz14DMez8h2 ze<2f+Y8b!cHkDfZ{ltSSdM2FK5Bzm6=7O^#(-**tfE|O;6L=g%&=-g^@6n8Nly9GP zQ#etM!IG%#ksBAwieb3{$=^8d+6+7+Y*5G!v?tb#A}3~FRB#G`6YaLI1jI_{B@jkY zCl4Z@vWkXhHo4 z^jAHsvDjeQRYYb%hYR+5bU)^m0(C@{^&=wkFmdLvt~z7J>|$N89$*64kKQ!Bb`Hr; zuUo5p)x8U1QRt9o+dt#npyJGbC}eM#-XF6)2PX* zUSDOokh%q-<#eS8I1PR}N6u zH!}67q>EE7bn1{*M7t%^H7}Sm?wAgM_tR#eCFGDCgaf zV`!Q$lVxzGip*h5L#N8zqDf0R^#-&mF;pp9*!AhE7g=66>aH^FIJ6x#V(=HgYcgES zYqsb!NaRbMOF3!9byhK2XvkGpR%PnxkEXp{eEL}Bo2&m`8J^_nb+*D3=+V*U{9X_; z+&^^c1?0C72d4O^dhODP(t*3&1P5|{SzmI1ea>}NP#uUj%ucR-w z)>qn7@3&e7;QmmnzlEBe$pxg|N?c8kJg2V}hRL_uXS6pN!`5F29U!F9Yb`DJ+psg( z(y6|=wYwYV_#y3$QdO?D5>zwgTN^+f4{xcVhLb!Fvb<~axiZ1MWDUxG59b_~!9vAx~G<($HAqWp^Eo#-{em5G?7>Mf1;o z_x|nLWIbt?x~xp4LV*Z@U0(W`MZuiGU_9(U@Hvl@ufRYwHie(~ig6|@Bb8JJ#G<~k z46YKWmZSpGf~pdBj3B;V4rA+!zIH}a&v{f1cX#_V)I=y<0-*A@o~Ki#eX0!BCU6b? z%iy3Ov89OPKPm?XV8hn7Q4+kBD^XN|uRnz%ARl^pA^!BcpsFBW)6PS{ zDj8_|u#f%l1*EG1g{4vHQno1Kl}UOCBDezIR`f|g61=C#=)#J~bUdn32$$5u=8r*D zX!NorF6PT;)@Yxz-*cMd!LX|LzbZ!r(eulYuc@L8#)B%>CRcDnQ|ZwfDN@APXz3uC zf3sf!bST6n*W}WU@kmydPV$#i!RLfM^^7u=u$IW)0UDzGC1Y^?p|g6_DPJgZQ)E!8 zy_H7`s6zX%J2_ElWAA3$sxsMG3?@8!xiQKeBApN=o>fK&1e1PNE8W5LC6Xhcnztw` zpD2ifK6xNDuF5;g<#}*`CR4pE5H^@O9^ute>_j{D*4n&Sn59SN_POvYD#uR#--9Ts z#8b36fRw?SlvS6!!U>eLQ?E&KI;#oBvu`jgX01%lXpIswO23GyBbGlGWS2VS>J)W} zvwEZ}WTI$1a+yuyfif0Y@TtbP_9Ad9bv4P#v$CnT@T~!Q^hP=qE8yDHa^7;O7BF=l zjiw0%_D9MgWS&OWsZ#Ta|6qG)$^I@+G(nI>115JFr(f!W!3{6jBBG3DV5VHR>ZnfA zPI2SMRwPp^Xr*@mBMzl;A8^hI z1}G>NnngB;M$8MKnPWu{{*#-z@p&IPK!!RXE(bzPyD7SrG!?Vc1#;)y3?pGQl?O-S z_AYsrm?v#V-24#wx9tGH%01%;br;mV5&u$la5oKRB=uFvABnnm;L-f+)o%P6YO`dh z%URCek3Phyn+4P2Ai<|AvkTinpzB#t3>c*jW2Uhjo(Ll>Xe-uGZ0ah_gSG$#dcT4N zdI$BVYqyw~%edXtNZ0hwyv_NXy|#De?fRFrvEs|iIn?uh+?oYxpV(is()JTycKfWe z=3DiuzKbFJC*&gfSlh1YgV124tMBa``Q?wnNISg29)f{i!Ucy>;TaDT*i4W57iJL=a_N_F*hxxcfuQ7S02%4bBBFx0f;AmgQNZ z4PWS+$=ld@Tu5xglZ2=Q_7H7G-KJLv+ddSrqd{($Kr_W~u!x1|O_=2Qz;w{`GiU+m z^g8Gbp`r4N#kECiPw?EeH-K=75d>F}r??HgACI3&2a&d5A{-bO9Cvo-N3hspPU~rI z(*1$had&N(6)Xq0dpjxa?ZPl3)}v%Uxz$h*=j|=XJ}c}iG)j0$FNW{q67A2fgv6sUpkRRCru zsN+@oy5=V|4wJXO2GE~tN6Ta+8o<1z*zaFzG+$?_k+Jc6oDB{47)LXRc!g;hiK&`H zmzfPWIYZHXN(clh8f@Ec49{-Z1|bG7A)TvSX`RnUQ8LE>ZBRzkk@Qpzi-V$A6GsHx zBoYSEsC%-_@<=*)#YmCL_m@$5age=YIUEcK{j%u5+Fm@q8Q?9@b)eHKVh=GjN;o-P zQv=fdOxU`hu9U3Rhsn1;VxY4#Ul){gw}Qbj(?t#rLI+~8S5b%w-XAfLIYihsLKw~t z%8n^g9;V0`{QlOEpwj(YfoC%I?hSED1^1FeqcNO)2 z5T*YHe$s3_Kw#5$8$qCunOT{+SpN@r>A%>fhW`uJ#L1KPg1$BJ~Zv4dyVk{MZ6!NdP+qsN>UM$eYi;D{nm5w9qs^I2$e~gW7 zjO*m2*1pUG_gV$@L8aTp*W7m7ZKgW!5a3)hRxRlr7q@{|7xv9pt*&*)>g%3WCh`6F z7oqHxoVHitcXsDDAW`t^FW%D0fiIrm0sFJFzWIgg_NepuLkmIQ${)?~+7r>N-s|Hr z=fC%LyI;(so0Arz(yYyQ9IJBK=iewzYFa-zSAKo7#yj6HTTT=7WzG*u3Kh%6i;dNr zJZ4ju2|0%$!q17nBkt` z-`=%-#kSJ5jPWb>31^6>_NR68OXUWuD~uQCV_MPgd(7u!veEC345EM#XY6-OWB;90 z@$(f%f~P30FMDd8cYJf3Gxzkkl{XpqF9ct@FN81pFZAhDzp(FAKg7P0ohhC#;pfGh zy|zcl>2;@XfH2&n&h+LYVKL8X2qR?*I6=lh<^ z`4~3-7Y3{2Bk!kM?6*sC@(LsSBjkFOUq#tY!S>Qk!}ZzAtw)cbvS{C!7T*`}$0H04oxe*r%&2{;2R(yuU%A*1h>wuVkWWPl^B}i-#NoLg(iY}H(1HI8m(vC2Y7=Mzu>elXw+01E!?OWJMd$ec!gD{PQDzQ= z41|R5L0Zd|3%MnuyL^c?{UrfKk!`JEJ$M7{K9|1bNX{2;lOE&+aPFZ z@ADwT{}*(QlRYhL2ZS7$^FLr<+YcC61(&wF3j&42%FNCEe|-7>0Df4m-ehkVB=!Ho0&+2>v48#Na=89~mjhsCVd47!WAwJPy**S{T6RA8%vq!; zrcGIrf~Cxl$&w&ZSu%q8Jh4THh!i|C^21576Akq#fQ5&n!b$Fgy*F^cwRO;8(R%!) zNmC`xM3L(kQk6R@=rv?UBz#rt;>ajp+FrPm;85PY`fk2mS$8tEEOMNm0qfphe%>`L zFH#a4=SUIcxDk?*8f@S?FFo})&?4hjB9@<#?D)BDCHqvTfDn2!GaJ373q#rP$~fmI~Cz}#@$u7qLJO+RogDJxBIB`f9H z!7r`dnfBTD{eYapC+)i|hYew}{6;2UNpyA(owy;V9-FfwC;L!^2vB@?kmJPfZp%_F z?Uj`MrR#?(|0m|jqm*6sx{UK6-;WMX09<=WbMEoWc=Qo`<%~U7Ug2c=ul$^gf^WTB zU-AIJkz`pb>1162L!EQiTdAe7uX~icIMmvDv?xcd8b6|KNh=6L{fxePpFTeTSl8uZ zO)K}y`1teuqVmPQ8sKuxSXb>x6KV1H`{1GKg|N_>=%kA0oiQ%{uJg)z%DNGz7!&tabU*jGryG_R71WiJhwNIv` zm`Jo9uRIPX31BZKXvA<5JX9LDgSw`y6PliyXVI3q76TPeltm%dibs(|KlGBsKXe<% zkilR`a`*tl0KMfa% z_Ic;>SdR4`i9a>d+Aq{@QOWmlJN+qP|W*;D;y-pu<3-&%L=6KC&O z`QzRnH#1Jgj-bfiyE*v?v2D^eYUBXSqZ>?QzF_|e*t$?bSReBxL`IMw&X_+~{;mHD z0RJmw$ulz7u|j`h($Fjc`Txa`j1S=4$%~gGp-s-+?Up zpSE&h`V-%-W7tS2iJWpYo++MrL>3?k=Z$ZQXG(LxG=e`86`zEw8)I9*L{ZwGEr^Oh zMLp1*X}%MVj)7(_eVcU#akhQ?;!i$f`l~{JqsDAJ6z*x0!cE|=cld1jWG_x2S4M#A zW^avJ1!L-%Ny2|x zJP2=Bs1_p)HI4>o{G}QsvY(!MsjnhW20BD$E0o74;>@75lhR@L2+o<@TN*>1W6Gmu z!XW~EVJmnd#pWl`mzWP z9$p?yd>!fkVus={jQRek)7`=Q8{_|^U3$I=Fbnu3A3&$x)n!k-yBwePGn`unpm!tQdAZ3zQlY^?#MlC z@4otGrFCZnUczuHsKz3dhG#uiosPA_1@PjVT8j4y(@cmvZ+Jbmt|(;P8Ql zQOwlvnOKr2ZK=;%LXcg$Ap9W*`;fTwYsg%`G?$iF!e=qldl8wi$6!@iFlU(B(a|r{ zo7{rMc>413jAmnNEG0A>NNCq~dHyRA*8eRcUHpg=RWKVRZu(`)5%Zx&1>! z3+R;$;Qvb)n)J;&y2bYSE3@Xb@0uV4_xwf=pXo22G18~ic`n#Q>S%oYJ7WuWpdM^a zBV3P`w;DNPD`we5%&LR*s}geZf700S{}I2&TI4Mj;)ik|HUOx19K5ip>JZUID_Dt? zU@B>&F~4W_d=_Tm4KMIZPgkzsE2c!CELFDCuzL1}F8;l(9&Zm^Y&cQ*B{^Q5Ln8XX zaH;Lpf48o$rR)(rxSF+dqQ4-^Ox0yQNXisc7(jV%yjFK8C=#mh$=)gzi9!tphR*mv1M4zs;@0CP7<1fm51G)PvA4h6#(pw?cE_#P!8ha>R$yvv-qQp zTTlbyR8>Ejo`659m-2YJ%| zP3BoeXNK__FLDONDLIi^vn5X=G+{<3GMJwReej(@oqeu<9G8#TG4=WPBWBjrv<;+K zGFNpQiK*byAuRFBo0R2nmjTS29rr83vj1SJ?7+^nHdl5zqXBZ>G`C0Edyz=q)sRm6 zX>y|~EW43l;Z1U}O-hNWQFAbbE^u0El=-L!W^qC+A9i3iC9JYvxoL_*bn|}hUnA%%R3qtbe!^oW%jJ3FWVOd^#Qn1^1uFK;=zcWL-^pv!+rRZ!Zi$OO%)vf7FaS?f&)nbr6QI79h{j8Y)R$+{|4dof10EAkYz?z$Zba#jdBH)cu?Zeq%v;4{?lJ%hJdaUhc*3lc5;W?4~Ki-*QG$I zhr&xExp?_UH|&UoX0%2&92y*( zc-09?US6y@PRZYmfa0s5GNUgty}OTASs2ullBRrx?BPwW!`o- z#MKCwt&TMJ27)I1K>6k(Fn`9ika z4njBn7rlzg0kP_wXY9j-z(+xoX1ShBwh$2NJZ=Qavacv@bea`n;T)%K8hbXo^a{n7 zjMfY8mnU@1Na9BOQz3NI(lASo0Xs}Tw!TE?B~n7O{czC+B#vKNf`BvLt&{6vL2H$h z0#J1GOogrJEe{94&H1CaH5}RdmCRg7h$Z8PvO0{rG@R*BHsgF_Tfklxovu1`Q^*Xg zLPDN`lr$DDWj0XAY^;pM^iL6&rT#}NFntp*bCa=4%4`!V0iM*13SdWNJ-le?CBS#8 zhS|{nm1K+lrysHeg<{+p`U3KsmZTU9y_usL1_sVkV09H$!)vJBY#YiPa1!tAb=aqm zaW>jLW+^_-c8*n9lvsteCDHS^#M7%b&r?5$5$Q-O1LP>+eM%P(a27)5 zzRL-ApsTEZrEV*Bp8=5IdP;>7^jsU*KQ;*caX=k|fb0=_;DB3%fH)v`!2c_WNB&R0 zlbW9U^P3@ZKX=e(UI1>Mhfm?o9y=3jzP}IET)CQkbHelD=RifCnYl2-_Ag1oYoYtf z2vE^BP-bvt@C>N309L^zp(bJcpo@SGNG<>r(>YpNeOL&=kbJT@nSO1)-y5d2Mqe|V@>O~O`f54VHAvwE+O8#_}7G2jfWVjEh~`f5rU6G>xqeg zv}^9$&Q_basZlXZA_SoKO`osY9fJ+ucX7NAAUU;d^TW8IfP!fXw$ zI7_lmp48}n(y$bOe;bu`5!13CyQFb{J%p2ishA&Is1W#lI3mFac3X?b+Q-M6uR1h8 zK+f_a(oQBQ9~6{gSnNALc28TkRRC=s^^jQ{*ok6BAQEi!kK1UydBg zcB7uI=_Xq|M>{HJPm}6OmcEYE9-OT^FsWMt_Ep(D^a0eOlWATre$`36d+({7R|haS zS9(}mDg9e1yA0p!?!V3d2Dhl+T-aWVmdF0ZcP+2pz#=ir}4b6bn z|GxnEpL=MNe7(B{33%{Q|-0NNhGk^M^uB~s=BUIaKqYkwJM?n z8H+Kry-_3JK4$q49;eCLMO}bD@+M534u4#N$F$}0)QPGz2)ANYRbcmh#GV&f6c^%q z2Vlv~XQ;`>Obl4pD{HA#4Ry4%#3Ew%5=U91sD)p^Dx$b?uDKIWpS*qRB`A(1t!c7E z_41pmC43(sRDC26^Y<%bYL#(-VV3UydOZhU>R#g*T|2DMBv3_&=|=%RBT2G5VWg(! zt(#4cs_@z6JI&7*t&2T6&7~LmT#5T!jX8BG{yxE*5Sqnj#A8c>{O6A)$n{RXQO@>g zGNJOm^H7iWLCWxqQ=lLP7bd42eWQ;h9JdYL5|_z1oIhKN+j&&SX$PYepvx_9zagZ; zygnOV^IR_1K1Tt^OT3;!`{3*AoP-1t?o~1O!l*bds=*k<7-iUK_ZWf|@Qf#F`2pTU zb@1`n=9-s;ZBjy9S{uH$bu}JFU8d~}KwG>Wbql}r{4HHDS zwlt$-Fd$&1!1)oyBG3XZ`L~7YvGQ)tQ(ySEl!!T^nv`gSfzr|mgb6j>j=c+%27|K zcw8UHQYWec$kFJkO%bT&f4dmF^>*rE!2JLFMWg#42_AUU=_lBc6tC+LkDnonf1&qr zbja&9_B+=A_7%w`i;uK`71n24|7rBlY4CsRKS01jodeQ>ScUe4t%K-m8jwG8sFg!n zY@dL3=jl(txVn7=6@u*+n^)hoXr>)uP+^!&-lKB17kHYEqi7k!7rFF1?q=Ig(7wp% zR^#WtS-rRbepsAVd&u3nPXEXXGvE9)d=diCT^YrWr}Qj~vP;ekjV`Z@7gJY@-H>VgDS^la=O}@$FV&I0Xb)apr5LTi z{}F&6Zy*t}^ixfqoKZwLSZJE1BWi72o^E&WtewEAf-+K^)q+A3L#qfC1xc!OQvnW8 zmTc!qY5Nw`=`Lc6#!j)BdN(I?#uIm)$@n62togFgp09b(dTaXSKA4&`|5dPuo?z+S zri}7ab|T!_Y9*=v++~cD3Lyl^1mP(@LBh4k&|cZS+}CEo{ri8MLP2MI_c0G=_%D)Q zVr_bQQ@4{rZxlcVAZ70wX9F~WZSWKTXrXLvTiSSKvbd?jLl$&wcP#zx{>M~IV=%)yl z0gIx`=Xdqk)ThyFEb3^Rd|0JLa^pX&l`-^jRdE@ZcdoXCZuMMax>kO~_O=_JN}ozH zboAre;{+8>OQ${qSf+tjC_iWbdN5XG1J6~@pwmwNVilNw$KQzvlqNP`+UR%2u=Ow^ z(rD*hp&C~=+vtOy*IhP&ywj?1q<*Xxo!{2v%)9v1lEoCO+@BJBr(>%vizN!0xatw# zE)<+IGtB~Lp`Cza<(`WJgFET%JT|u3lcJpZ>RLRM#$?a9l0ePWYwrTW;UWbUs>#dUfE1wXCA`dk(d#y+wb} zmBYaTei^OGVETb|%RK&^-_I9idHk8}Qa5M9^{SupN+;rtF%s}5?d5;2ozp#huQ_(P z5mr09(Pa@w(Op3suY(AQ>RsH>#2(74qVr2z!##M7m*uy{Gv9@eRhNaEh_lRa+fuxR zbc#fG5$$$;xE6X7Yt@ydrIr0L#{?u>6_hJ$1*Ccd>k>Sk$I2|If?tGy;%|bnoE<7i zRM4LwX02c^X$An4F5{73-kv;gm)W@`bgIiUvG}3Ze0X-fYlZ1RhSlg;^x79(aY) zybLKl$bxbhwy-t6Wr%g*N%vrE^@Xrsvx@5@bc=a7mzI@gD-CdbMtE9E+cWuZm2@k! zdu4W*tx)f}M;D0M8W?j9upw*Ke3)K#rL~<@pgGl0?11z1Pz3IE-V@d5QzBjhj;2cc zGuw8y11&)7hYmOkhwAdu3{tcU%@FcI5EMLI5&LtcA6)G)ya3xk4z@M-SoYfNj3xk< z{-epe1bp4mq=vmOi6t<`MqM1fyf%-&g*+e7{rb_~jl=JC_%PoMc)0E#&e8V>n;;`f z-m-hXBJAa9Z~6+LB`z<^U^UU=#aq(;+!W#-cmoWQ>{Sn%Jo5`uOTt(Uw60PnoJ+-5 z^g4l5X~+ERf*Zd43mB~)2lRBNIc`=SbUO`_WzJ6T^{Pzr8qGUP1sbWJlFo&~leg6aKs52R- zPgpp<`K4qy#zeU~qFzv2Wq9rV%Q=?F#7x(mXxLGQJ~{yd3UiYbnb4}@yVEqmRNrsi zC|m2dVmk8WSHTy=RZ=G4znqbu3xdG>uhT>>_WxqV$@zVn_zql0$;teGxPNl8eN+FO zhv732;h3^%}!q!#^oEH-3k3guhVXVTa zCjrd{widq|Ku%z4vk-=jv~sNZXm`uA)?jG!30y3Uvag!JoI=)fLCQoq8lntl+wpKv zg6W^?reLBQuS$3k`Z$_77~If)i*V@e5*%drY9kZ%=4G=T&Vy*uFHSqS<-10WpSs=%?H}u!v*q2LMLdbA^Bf@US2B8 zw?1B4nCO+dr$eP#mOd5mQW993*pzPlc-mzmKrV9PkZaBp^&c{Y@|_ zHJ8eyIzSmV9kKY7zeNMEWRsDYyQFRrn2^3%e3yB0^5X74Pe@h;@^r5iCO)ASExus0 z$liwUvp)7wGd@`ElP_}SS}zDpwn^V84thSBmQ*it_P(gE<33cozBCP9KEKOF0#c{K zACtR_dlw(k(U#XsZBBVVinw~Auvp)xYBFHWXYb$^>AUT}pKIEIAPDk*dZjXd0n>lS zMqj{TyzESjgdEJwge)v9gluf=gzW6>gnG~n;tuvMqGrw}Kdl^H9DWiqbN-*!s+??T z-9jM$acuja&aq(3tQ_o|DV8AA074;PD8vI;BHTzE1bIEt1d|^KE?}T3KuEyh=ft%6 z6@d`c_~kS$7YU0GV(wtYcl?ViP`zeP`vh;EfE)vIy$=^x_lJ1}z6ajz>P7PEu3man8;<3GDe|XHFpUVggSUZ~c?U`fq6*Gg*Dr@A9FfQiU90 zFLz%voQoIWmMh<(^VX?%eBLVB#GJbo2~c*P4ID3i>v5FlO~*auh*?&^5%u!APraM( zfXK^@}mJ*so-3fscgvm!RBOa-zRysCYr}`cM>kxWo7;L0m$`@GLR8W7^xM^2<(^ z9er82LzfCV3BOEPVKR0vuyHT6frpWDDGDIkvxTHeA?YL}l$aXYz+K(=wi^kiV#Q5n z=^Jpa05A|E`b#Sh0Oe&c(tM?vqaep4+vS=nz7hY|+@Gw-)&!!}dxXwiHr#c2$UF8l zUeI_n`MJG(s)s3>5vk6;q#gL znNR%Z4)8OTi0i&d4?KMZ;sd|ADf;~iWz>WCz&|@Ikds0*03qP88K--^S0sRlZFH=a zxxCAv`v*axu*fdm>2KCt^ydoyX>5-YlJsFM4I|d_ zP;;g`e4d=mVZI5wJ+-+fJ&87XH(&pXk(et%xf6Ylc9Rp>w&*HD@U@@2g!H|K9>hM{ zx9C419s0vY0Fv+6{333<0z1_=9M9Cd;lI+Qu&v0?N9=z_cTBP}pJx~_0Svn=-kgKi zhx87D`Y7g1ty1pYG^Cc(^u7Xn$%qB+Wx22eu0&mLnw*vJU%@&Cqi$9~I^A%y1WOL4 zHC95nXS)TV4QXmXj(2u%umT(gRh&rtkO@Mk%b6Jj0Ej1$`Gj7^Wc19TvgGxWG%x-Q z%<|+ZSbfnJk3Gk5N4U-@tz$nc64>h1E)4G(d7?I9b1pCB-3Z>`H6|X8#T}cSD>taG zjLf0kQ+bBB$E$arZntl?p-1}|jbd*Y@299{R=2kpVKp;BH;!{xEupJ=l4ikAV(ePr zE5R@S0ETG-hFd9H%Trs^%80dc;i~i7g>*OyiY(Dse%PJAhOdV3gUbDAhw$nSqLZ+< zC%K>cpoD2Sd9}d1f1N)8!^CJ8l7}pkGC6cQKGql8m6W!Y{>h0d3r+g!s~@+1=(1v` z9<^%9dg6-RC|!mKmTiI+sFX9-(<9Z@G*igV4nW0ZrOd*IILpni(ikjcCs2j!xc$Yx zP5Q#T9it(>Ggcv zwazPt&o~WX?hUtYQ)e%%Ss>X@=9SLHV6S--XZ`CmK=Y%$y6oUQ7VzUOufQAB|1=3W zC}5g>8})_ghhbAVI-Hp0Lo#s-?58zjhdId&OKyz+6k{(tJ!eZ*rK>Cl&OD9r1VHYW zQmulK`;2?Ksy@iFf_CLOOkBXZ>yPcTYa|z=+&c%3rG-J8=iDoAQK_|AzBb_F_EU5% z#(Srx9+$Olx|G{}|H?WIFkF>c#q4!iJ1!9k^|y5&HpSV1xmVar!N`O~Zzg?}`GEFR z*Iei)qC&xmER^s%P~#b%ZK|OPrJ6@M8nu zhkTiqntDl4$hazSKZTonQApUP@ayu5iy0b{q}GiN-PD%_VOaL)CgOGc!SfxJ)N}G~ ze&r=B7W`S)rpdHRh{QetQ`}w_S8whF$J0;&(J*^*gnlcEY2uvb>T!0XMg+9hst*a` z%!p2&E!GzJcV9LxmS>fpVn*S)8{W@HN_OOfjKcYg@;IJLzNp&tTqm1dAv_0EVpGra zDxTWMoC&^s>GgqilIcQjppPKazY<8bJReK8Tu&!Dj!u&4Li466LOs0!D0V+NBwH@J zWjN<_`kH~7k+k{_zeu1Eo&j9QRnJ<;RUNIt5Wv$Zs(or-*QC5B;7|yk*U0$a$sz&k zM0LSoA919-@5hoJ1Jj8&l^kg|-wvMY)VoUml3&50;$E(iyDFQ5hk=`$N0GZe0HnK4 z0up_T0y2GU-^m_3t)bG-vG`CDnRcbk!8!n9#d`samtY)GeZbqc7=LZ^$TjFA#TaqU zy#TW3<}}jFK@QnpDh>=!z8l_<$d27FkpzWHvY(LBV??Z+Ah%3GpsYX*{FNXP8F=9# zatp46F5v85u&j4fGc_27(>?mPRNS!cL@wTIMwSslzUppOTh$2t>QhyxEsqjcCn-Ph zE^f--z6Y8QxdXC}kDM@wtZ#BV6ObvIksNj~86NANzKtBINjSt!Q`;ZBShklZOW%H> z;qTq9WY{X_k1z4~MB27*p06L}FfFF0vhV%9nL=tK2zA%LVnwycudAD4mOkOGuLq}% zy%(dmnZcX`&mu|@O9)~m*Mnz2L2(I$iRBzPFqG94w*sgf=YoQu<_Asp(uNYleb!W| zYWzw?r#apBZER5=SP}$>CnfHjivO*mshBKf9e_n_6c;}>-lQ(iSovu+VwTe zku!CD%yr~p8+UJn;dQzP6XvAG?5@NOFr9Qe#XAiqmFo8FI+~SHz}@`o{SI8kdnX|} z&rPOBP!I5P163B8u$QnQY5hF_*JhxVZQ>re?mDf*J-{)5uo|@{@O!~mY|9R1!9Hk= ze&x~}S>BNo&8U8J_o65A%IY83?FiBv|>eRj%#ccgGlg3_k_Ye@s+|v4YbO{;en|N zHIeF-Y(%u7jl01@kLzmls%L_Vr;ZR8(tX-Ne$9)OyI=!6dO|~`vQ64}uc#^zLvOfL z_A3CfWJn8872y$l`Kz8^AD^R#b)?c^5)3Ew?)tH@rM9Kd*eO~v<73ic?rvvrOU4x( zs5p`J^@^2D%eso1@xM(PHQ!9ySk6ISd0%3vkYZI3uA&YWCv5O$Da!6MLgT~>@mp=4 zqYdy}3MaDK3bH0QTx^uP>k0#!<5s=ae^~;ET3wb$*wzc;5=rWRhVsA2-@~m<7qs)I z6ug0|21?IbB;+s9RxFfdT5E8+$5$yaiBOczNufxeq;Ib$lq*M=e|HX3XEn*2dBK_N5z@nfNuE&E(3>##D)h zY84-igCq#C=#>t&IV7ryIDX z*>XiLknj-7C6u`InMN|TB<(0|f!*KjzcIWsjq<)uOtDm0#nwwQoqbGNmQ1+25bg-; zY#)6i{1BU3PvXjG}*yG#%7JRZ_3{22IE9{Vys=29H^hu!sGZx(c_b36e_s7Icm$WJMs z=OwE9_cVas{T_B(ux?h=cjT}-5^+(?JtM9JC&+YAF4N->cwY1FZZqTN4jG9PLrs-@ zTAp!8`H_oluSDH8c4*!icW>j5D49LKD#ATv`nns$Y$fWR;G6V9NZ7ilNWJCu8;^#2 zj}2`>1o-RZ-*6|+lK}t-gg%1bUJtnL_YJnq5a0I+Zw8M(IXF-gPpd=eJ;fv}ZMT6m zfF+|b6ttcyKQ?^;6$1YccTeU(w~0Kr0J4C3=A9pEi)kmSV%9> zU7+D@yI$a&of23`Och>LP!)on?Mxz~i<4WC_DoQKOBj~~Clx>ha{V&z=I!&+shmKg z>#4wS$xsrbpT53nSR_?k#?|o2c#{VaOfz;DGK?$rDUgEYB$_)Z_HeOR)Iu5ZC7$Pd zq-BU2BvFbMP9L^i&u$nsJoIcaEKv+Rbn+74)nRSUuT(FBY>lX+#U)~xlc2$ir=9fi z1>+f4eYbo{j4*&{614A{UsY*OZu=u#v)ev{!#MLLn*Ahx=X2_;gCwB0Nx-<8+H)l8 z>EgiAzp~BdqBKJ!+w)P>PDpLE0Ep)wysv2aTI~wl15P`P`Z% z?9GY>U+o0~9*S4Ik5q!RDdT=SQW_8phyh|NAoR;1o34oiI;_s=W2J_@S0*fPPdcP{ zh6RKgG^Y7i86KJpV)VuMe=7PmxcQ2pZg}i?+>iH++GuYCj1vnjDchQPR4QKs;fxsa zgJm=xfewu$9$}l^{Q|7bwTP9`@zdkPrVCBbCehiI(0d6rMH-@*R1EoY-e8VQZvs3G zpRVG$boQA%A%d^*zD^1@JWhjLXUB*Opp)33Z@a7x2Dr6~5A_I`Ay)Eob22zd{z@ho zqcr#4(9DzH6|3@dQDM^GAlz$^sf9QwU}I$eVx?=)?9{B+Tt~K)w}xjAYw~t`WMVeV zZgFAn563kxSu|rQ`OTb&q8ejNsR=+N?G=qllw(=*JN}6Swv<)NC6_`)*}zSlD+?&@ zx2a$0TlyR&BFelNS@P;{`=rb?njYI)Hc|P(J>=4%34ywJz9$PE9~ouUtaLA0JI|}N z8n)|#%nX4?)V*{r5gETTEKAU1pi8Z253;}|$1d<|UelUybp)e$u$$KiB50JfP9UU8l?9;;+DvG*76KH=VzCcS;s$~Qc zmaGP?H}154i;%B6mj*z9PTMBHP}cByf0)c;t7a0YU|+KBX8!#mv;-jA3AqGquMVWN z7A2Lssi}y(H55h7mncJC6s;r=cOWH$4ogJ}8mXFfGhFohdR22`m$Bk7xWZ4!y*Ddb zuoK_y1){#cje&2mIZtn}Az*ycQUm!t}c@m-TG`bZn4k%BdSVSq;+_9%qSPE$rf13Vy`=l^%wQIX-gf?;$ zS7I_&8!SNDIFK*Cp%2i|G(0?DC_HfiBp4$CoHiK2DG?4wL;(N|$pnM8T@FPwIowZ= zTQdy@hxxm|l0vOTA3H1$-brs>()SAVvKhP6(=S0Cq$rK$4NdI6;Va0!(&2e~Qjz#L zc-^_qZFHURI{6g6K6RnT!r7|&$}$i(ZQH`K&BFPrwGp@H$80VWkuH?Y)JaSg{$uhC zY%zCwPmm6LP94zLJU3@_{F-0m;U!WlKN~*8BZ_0J8!IX77 z@CbVCrA)V)p7LB1Fj<7_RikAx0)jCL*NN~548)F%wglMQO=!X@OwD*FND7lC;~(@| z`j<(HoMQcrl|h@YSwE2zk*}wNTemYLnu{l{knR^kn*!374Cpg)EK;&bKyOBG%O(dl3^1>^rw3?i_Emh zQJ3tvXuBGLnD>cZJJR&4x5Ehg8g+MDSvgRwX#sS7>SY!2dtP(bUM~Deutp!4%F!Y8&ro2qJ6SK#B7ov#<~vfm5H!na)nUcaZkFI?1Nl zc3R_OdbddhA8&~>Puz;0(6`gKS~oHQ-5SHd0>}CTHy<1_A-roePu`HQZn|Z;YPlKV zrtK0mqv)LSkepGu<2Rguw&B)*cfI4L-3ll)oicCICNyU*SA()wl0i{Gr(lF}s2jF! zx>OP{uI0(Rek)NzwF&cUHH<>X=(v#hfrVt({=j ztYnAZ*8&f=rD2|Pk%=4UL3&JwPxYMn(a4!*5iV$Ik*W|B87O=M&WXVi{bhO*FbX)- z(P<7<=FKQ;%ap}iHlSh48PcCHmrue^`Fu=dZOp;|RPKJT-`?k7r=3&&%ga-GMc3D|AealIDt#WgDRCBsF+i-HLPIt` zh*#)3IKNzsZ-RIEiXODTlSeM2W@Dfh9lc7IR4hw3ihM-3O15%YF*M5nxLLs;F-_Vg zN{sSUsB$%FFS;^g^n5W~7W&mh*f~QPN2oVQzu-eOT65LlT@SV}52Z3=&?58&7}8cT z)0KVce9kIikEpe(JZ$qYA%GDMzDfBV!yrwlMNemL^hPAC&aW0# zcVTjM+C{wUZ<81;9)~SnNS`cFUhd#1YR40TF5kyVcLA$3c|5MKEdbIf9T5EGM2$^Y z`k!)(48LW4h=8G=c|Y-o1BXOk1@9TO!OAhs`-i~#fR$LS!;yG%w%Q|dW4r6_J9ZzqmoGA14+uUg)|c*#HFDZB?aKrT0GPf7~j2d9^K zrJUvHLKc5d&qk9SIsiz7JJ9aO!?z+ARCn@VcWVP{4SDW}j-pov{fpG&`WGkOo>7i` z7b&dC%1zl)Ou39C5@Lc2DU;a5#)#$6uq3p@5i6D{p-c=JmCE2?8GhxJXr-R_=n!KU zr77Jiv5_mqECaDYd|M$}XV9z*Me1CnMMdpyy9IRFD)6U0aspf~^kdpUuB|E36-z11)^a`Tlq#vHMp)rypr=dBZgjnbdF{y2t(EJ^=X3<8JU|d!S22jc;ISS%cws zwc&w&nV=iKftI3-3aj#PrekIsFA;{ZgN(W^cjku zkr#&$$!#-E@;5Y|w;xs==-24q;rzl4VZO_AJU&*{2F2liO8VJO$It z-FJe!Ws(vHFU|v^e7KOKP*%zyzK$?!8?jGhkQGowH(6-pH^F{r$9^u}OM!aIviSHX% zjLLwi;ltrNS3cwE0^?@IS{QsxQc8b13dlksqj8r}Y9h90NxLn`uUY(VpN6&^3!ebPR@YSodHI zN6Vj_q13ds0=Gdl^ZjCs$$e=(#Yx-*QD`wwL2Kr`z`%EcP0C>YW+umN$MVZA*?V2{ z`J|ZNk-{t3nk?zI-$9*bq<`R0-z`NV_wZvlQu9zLKd52YgjxVx}gvzVuMmvO#^$RBkhS*`DJ#|f36fBKZAu*%DLV!-0 zX&BVwWZW$>D_Rj5HeH&-KR>#iBd1^l`uu@ ztTWacc7(rSCs|#%*prQ~BuUNmFwz2`197<~kU}jGcQus?+0z&mfc?D_n_+Cow@%c& z-^(uKqfFotaq&WI4KtaHdl(J-oN0O<@X}z;z7Rcn$iaSWhtm!~~lKPbT=SJ)l9QaqX+i9K8X@63^s&;4IC&W+?@+NaXNq$L$S=iCv zW_DThS3`)Q!rmn=pfbM}EpI1o@j7XzCc&WgjCFpuVtJ6tIo?Tg1fj?dqQf~Tt_e{! zV*5re5@I4Z=+n*Wv#iZ@;QB5e^$E&Ew*2Pz+ueu}FXFN!}2;Gr+ z_~%AZxfj+rEb4GfZ4deo=YZ5%*+ZnLN?i`6xLiHqaN?&?%9(~K0Hj`jrNS%Q)*>6l ztqfUINimYT-BKwQ#Uo{eTI%ay%#C;b|o~=V5 zZwJiW*cC$84cOH$@PMvZ#p)^5-e#;ZyiV=bf zFdv*FW^FKIy~DO2j+pSo%A6Nr#C1MDm$zW?d{KYwS7Q`1d`3)aU+twV7qQIs-szo0 z#oZugzVa{W0X)GOKJi&vRJo}-owe4+>aUnBgKHn%ztv{ zdKQSAC%mBsntN@&m5#o=dAcrG@_xM^EkACn1(~0M4}I2%Fc%+#c@eV2{WG-xY-P!v zJ;ZQ;n!f*n3TafU9N`(e%SdI8g%9P!1Pf8r^MHYCZ4OyizVPOSKBIdAmC&m(4i2!0r}wJIEQuk z3<}G=6D?~|d`q*EvH{ zMcic%0ZyPe81iGQ;!*Q5aL!4}hba%9!~DGnSk-9Hw1)y zK7g~(6Wdtw@qy5l$t^-+qAf4!d2dx!T&rviwt0A=49O1~jH5`GXk;J-gRH(jO zMYvh#8PM9h`OgPu2XjJc8!GV&wl{KwpX8>)ejB>lcl!6S7aR}_Y51x5`t0dIg{@2P z_t7N=na`+qH;qYi0{BUOJ!8X;z$&oswg9l`RO(~1H#tT`x>+`C$uW^OrYmf z@J@BCePw?cQGHcrRSB`a8D|FP3K6+RLmAPs+_RU4ZZrF9$DAu;Z7K$}Tu-(p9RZVb zImRr(ft&7!>VxwFKsb4a^lM-d-n2ag&D+KzkEvp)63xj;_d#nCUcxJO;9KO1Jb-Z$ zD|WxwDe6V65BdtxIg)Fdk}DQsx!76ED1T%bmf)pt#jW#aYp*k89?5CooYpI(c9H?8P-^~qe!@Os-h(}y86`(`#Y7)13b9cw{I|lM1D?w7{d9|xnMy?{ zk_PS`*|TAUmJt~#LiUa~$qG^AA{iB0NMvLdDI(dSq(~XrviYA^^v!#J-G862@4cRV zp7WgNJkPn;c~3k_en7hKd>={%Pb&7-jS)Ma+2ZAUWz{p{3&W!pS{X5i<_0PcMccUD z=*jyi#HQgWJ!*7*{iN7l=+I2y_VSV2qPxpun?8lzZrTrB5|wt<-=F_@L>E6oR{Zc3 z)8wr1qXY9pa_hGmLDf`*M9DgYOz?Zn07x zZa?oPACZ~*5n};GhGn=6{WReg=Tq6+_;M|gmF=$Im`e^jAM--lO$ z?OHc}O>55%q)nM``(!-yVZ)PKtt(7+-dVAqr+c82+F^Rd)vu)pB789Ea3DGUhGsULL|St-O}DCx^4iN9m=!7@pa8^8Z@g=L7; z?hjtcKgX+cUbGopt1u6qsP$`m6n533qejhg(!VaGJ~f^_T=(a(E`b{M)gd2vS>8t- z&m~X}e%WYOjFGeL80Pdh|4|v-VBDvZ-&=hMd%3!i>7~OVrSX+*=#jCqBhb?$LbF3Y zb+vItWqpS#Fb;kpm{Gg2yFCu=+TZdy zR~eYi&8O&_<4QB z;V5l8?P&jXjThIb*Uta!_%K{D^(%Uo?$jq*=M#Ww3jE_L|*ytr)t^?xFdD;W} z)_$wu*DE+Q#2oHrmHg(}(d0W05%}l9A6-pXG;?j+`F3otifa$Vivt$9R~ou}ibIqmt$AJ0cH66ENp1HxrZ0gQr> z@JpE&*fo#Iw|2+|-k5(A@8TB|SmAnMbG)kTTxdY-t2V3tR|f6RZnNCw$)v80yeoBW zK1q@JaZKCvTt;qH^FC0 zQjhU&lQAj2ePn!0InA!D%6Z?#`@*=G6X@Hp|O z!zsa&*1Dwu5rX7(t=GBoc6?(f633ULtDiu{rJE%U!roR+NNwWc!3wRGI+$R?%(roE zZp#pzcy=;^yMfny3%?8UqXJPy`tKK}LXc8NenmwT2Q)4=TH&~f_ zimG%iKU8JV(Dk-&1B;lP!5g{n-jNUe;;ec|$L(T-B%I&5oonoDeQmq)F80i+6AyKs zX+Wp*757lebGoE|DW)^MOtfm|y35{Q$%=m#n|Ax!hw)1r&S@~!zFa+3Suz}QR0cUu>R4lvt$Xu3oJ?1`*V;a>M?UMOAa!BYeMQ%vb4V0DVrV(!vW5MM4XYQ^ zfhhE`vG{5mW&&QLKy+X#)X_%o#XD_HHn+W6juL#yo8vT09=~S2nzw#y@H%jF)APKa zqFzbuGlNpiby4-4ZMCzq?4yyRxKq;JJ~i64YUKxSC#jVk_Kpm4 zA#Hd}6*95+C2TR*O5iwk3VZhAskErg&C;I_)O8gY8CZ+>e|`kc|5eONrX&8^!zdtQrkt44c%u_MUtBP_TJb_ow}VdfxgM)AgYjg6iD~7Is=sO8O6L4!TLd z_~OX%n((6k*T;QB8w+B8^}KWY(zj1$f`|95{Wtw1(As<+Zyw|5*4De9`}B%DKYhx2 z^2zihYsRk9P3aiDru^qN(j^xJb3zJSnzvRAtm)cp-qm(_4*b2zb)m!*gUonY`QpS^ z;dQGl3bt4KZWx0sW7lh2j!?gqd7Q``9eJ0tiUp0MR;RCckmsZsVsi=HgH8y!PL?$KnexzpkBcGAvO?)+F6BbN!*D6dh z_kC69xl~cn-Rp`)WP60dD-yHu%vkox%FS;ceH9O?5lh;ZUD4~;$(y2lpZnXd zTuG$@|Gt*pcjrY9@IbTSmpPt<6=-Fqcb%&|!zyqjIzg)8`Ds)~dheQ9X)ntVLC$&M z%UhyViVbmVU+*9nAMR`a5&Z@?cZ97XFiq@-XMC}fi_Y%;ZEat51=-qd@13z2U3EOw zrS05a9D7JaE4xxq=UPVFr-gN!pjMQNTiWNuP^OSyq-hfkzpV5V(41#gUi!1>RYtBU z!rq=LPd-+>^u6`CA>2=~y#JHUt;z#?CcaAQSQ`XXs+Fz2cQweQEWIw$+;W|cP-^L0 zo#Wca4>ITOu-*Tf6D?vVR2;BUJ0af7Z;c$onfLL>cAKgwYDQeOxx=g)T3p8;p((OO zXpifr8eL7V)jkR(hHF^&Lr>g_;?&dMSTtF_b`j_x`FGhKiThUtnkVqpYZz{JR*Jh5vO3bzT1)fpKlXude!QV@3M=Rqsqt@ z_f^ldqrlU~owiF`e=5p)-8KAte=~P?(2i)%fFP43%-+q6lPoOv6RR(Ac6pusva?u9 zR;X-!sSR(t0o!v1h4|Noes2V!Jb~2F&y#jROrO|KM88v`w40y3m%sHmt}f~(i%RYemT!JWyJgxR zUv${;D)-LN&ZJXAZ?+ppm>jfDeO$ch+e7}IFXw&UISHO*j$xmV^cd>l?RxWU@8MsX z7iITYzQ);@2RUyFK?fZ7U~9KWGu zs+C1Z+@qtsv*xS2nM1UB-Zix|HnqW7BbT>R#a~=@5$jYL6zT}2?B0?aBwI7KBhoZ~ zKZIq|eOdm->eA&@?rwt#H$k!V(vxe#dh3eq-iv%+mDaH#spp5ZetQHHssHG&IG5=l zr^gXsdqU+>lO5hB8D%O^MCzyOu`^>nO^M?+#0#YlOLFEa z&K2cCzsjrhPLvH#c;`tQk9|C=b0SZ0i<4NeN*2r4N4eb}_e>vtE$n9;FEUZ`4EJVc^NYW&}p2^eJg%4KP(}gQ8O97D*99mU3P-;`xZM7<-n*U zO)iDW0#3fh0OyS-+METBJ$LSrn4g&5c`EZPgpg6rjw+&*TTQS8&bdCAXT@PQH( z-9vqlaat@wl*@q{tXw>tuVt&eyU9YoLT<&aAb+$`_fyr}&?+Cv?#Jvuf*()^o$_a^ zYuMG*S2s1p@#bZTwJ0lNGmI&#yIJ}n!&wmqAst>@)IF`nz_Mf8#P?JUhd+|jNmID< zNwJRksRGlw=4OfXL2F#vrQmP)64~USgnZX=Xz+zj)th?WtGCnmg%kMYh z-mbmcVco|J=4-oN*sh)4I9$@kQtirS)??2yx@9mwcvxygb5#p@^|a-OVM89~F^A79 zd8|I~oLRqm(ip$~hyMGBby<>A``XX#%glz>Wu@4BtSG!BTsnDe&4puZzYnfhk)?kxr+1Bk zSJrwi-F4%M@)F0`q6SY<^Q#V&81b--Gk*PEw35Od|5@&Xd!*#SLPOsd$x*Jpx6AvD zi@rfb+s{MadB4J(YCbw_^0=;JyPpQZjdqSZ?bG;tCvol zl}x}J<)x-w$o0&e3-a3B!}_yqds%lGk<0o#<|nqmO6=K_2=0Bsc2z7eCkeA1cG5n8|P@SKz-r-SB$io@>Fre1jyN`01})*s7WVpANC8u5N7>aTA>@QpcP-=N@&U#_f`7_=!5VGLgEi z@k(Xlb-MAas#jHeJ9|~m=pHHhRLOGF9QDm_3$(XRc`{n!Ov|dw=v~ z#KX*QsmkoBbDE6ab*5!|U7l&n?mE9SEuyC(tt2UI+(3Ee$<%qpq}kyy=tj3<)cl9( zq*@DEYZ-_8O0rJKj8?yMwJ!ym65h%?o-dx4 zL*5HX?b`dO*!k_pTpZ6uR99tmUVLssImzW$I19hj>F}RCjbwNAk*~R|g?bM!4(VOZ z@W`%-#@L?~GrJIjb1%GD67L%&%32kCv`3kws)x=}9g&2fx1qbIt5xGJjUR(h<2FG2m0 zg~9uJG{1pqV@z{lYzODMvueKFJhtjM>_HRprw!34vd(P7a;uD%CT8Go{z4qQjjr7vuP| zQz{Mmpq@SMc34oOAPzSoV~5TlRk?kzbP~~f^~?L|#IEs~*PAj|+{!#_)dson*}T+k z=FM8uQe_;N@N)7tcSHE0UeINp zBj?MQPFMO(s(QX*tyWHt`#dKOjb;lE8kK%g_yN7c&+uGaHFm&NWOZ(LQ?iCai}m2% z;#a|h1DcP%VCc(CO8rlW~n+ z?4_Oo`+jkq_BPt7tyR@2P3^&OVXN2VuU!TFt%dt9|2*hjSo+Ij>%APMfVi?FUdrx6 z_9Fh&csY?R)@^avI*GOFQXyS08<}|osheers>3=wHjc~5Z7Px4-f1+%Fc9~&u7Ep3 zVolq3sZITcM&o+yyh`iy({kfR=gOq2ruSIpnIt9zanvAdj0v>a?a_x8J=)enI@@RgM>Ge0?RX2-u7sB%6%c-B`!k>z!FzfoI# z-)Hx*kHe{s_G>K?>9I(XEm8*!{E z$!m2CU-@-~_|c0@p0?2Ao>%_V#0`7n-gD}foj?m*R)Q}3#uI1Wvhj&#WQI3au*{CV zLhYS9is|;n{*;+-ev)TZ@*dM*mG_ZgMG605*EAY4BTg!ti{_TC(GW}X`}i5_Ty|`- z=_2YT>l3x}?)Ocfr=&POtX(Ooa8t#kC4 z+w+|o>D+25XY*6s2I>zgyef=17&xO)Hoc2VYG@mLd|ayf{GKB4cgUIP!c&jSpOGl~ zDo2haRXT{&rzSSwdk}C&tSAKyccHk%oq24(&fjxf!_y zMj?hQWtQ{QFS4kOTgZ#oWMGH{G7-LY1HLnZ8B1QgN}ni)@)se|+^#`E)7-8>M3chg zy!j#h@TzMqvK&_iJem1Pej8(Bx9|vEDXrdN`zAzwc!eQ*sTMk7h|gs@=lOn}-Ao#; zAL~YrkLR3gE$M&%tfQ~hCN0FgQrxPErP~(b?+K5qd-fB%%eAiYu2eVVAu-l$+2Vdt zy39esfjVs$RaJOofUje)@^oX>Y>c#NMw&txZM>*X)X~J?%%kIN z_uhtoA9*lu_dGGG-%Sc%*Xwk#P+d=YrKjX{c%Zbzo%(TMsi~v4eUCb;H9r+OF=_ixDu?wDw}r{tLH_p4swhwRUI!7(0(L)+r_HfYIKN7=6{ zFsxh&xv6bSAO+RL=r!Dw9oT$SuEbA&`w@u#d5`rE?&uCWfgjS2cn{d26lW;{CTJ3pYP78o!rF>>MS>!$02ju52&45?N z?chNX@}40x@^k+7J~N43+l&01)2A$0ChtQ11kX|3H{$obwP#g&qqNx@-#4N3UhXEmtB~V~KW-R!f%B76L|Boj`P{0!+%;2j=D1V+1k$p!QRV47|iW)Kw zPx@~mQ5GL~5q}O9MwPcfZD1f|A2dT%GA!MIqHrGd6QaG+gaY4Rqs1&O{g)_s9WGvJ zql^I;p{_jLJ0y`(jt@y2o|9vz_tk8O9m7RVCLl-m$C!6 zLfl=%PTUBDi=Ko6VxFRX1Kki60Q zAG`o7O!ct-hs_JT9dvkiQV-kwLo)EB5cP=-3jIGvw1DNdrHA#TgFW^yp*yK+cK0-BDqQ~n^7u!b{d)$kj zw#&D4M&qeg*HGbX3r~O( z*RV5nf~8SI!%%$Gtm`O2szwOv3JQnDP?c_=q^PPPC^_o!P!x3mRDJ_>m`b^hI>iA9 z7A#m4fTP|HLt&_m*HK3N%OwA%Qa5#hjb5k-se`eo%_kJB9pNhUkBJMN>5_?Xv8u%^ ze$3p#(o|AeNm&_<#^cdwA}INZSTvdhzmgVzDBxA;_j@dwiitsOrpDhuZIZ!bNMb;_ zzPN^wo#{fsyUebIqFj8@t_93r1v(B*qNV|d5b>~NpdBbh1BGbNkDy7gC1mgl+y=vm z#NRXvR>Ac61p}~H97YV(%YO`59R8Bdg)uJENnX$i(bKtL2lyZCi3NLrZ6xsff=#ej zfNcvl0Xt!@EWC%|3wHg-LtOM42`|ko4z6T$(8Da0_~P0+Bwf&L3E)TsG2j&%;}@rU zVYZeTPgyV?jy_&$>4Iw-ABL#9?4@he6vm1?Kp7XSlc!mUL4!l|e%a7Ue3c zN;rxgJV8+}92KyV3yc5V0fEabe+MubOLdBZ*8~-nN+m{v1tS!R(qF%9@B|!5j7%Mi z2F7oTM6IEIi9}tZPKKdaSHZ)e7TrP}_>FiGg*v*Nb-`~`#@oLsn5g#AsOwbLSQLq> zb{j}ixP=O)lEP6O+3mMbBnAdNwdNKu;rMM-E&~C6Pk;q8QB`75=_@f<>Rc>}9}Jr> z4rR;$j)me-d@C`y?1VU!62m$y21CH2F&I%0`$O@l%_}i@>be9J&nhw&JhX970*btf zj3<(*XBXZPh!pCbg?C^fQri+xLJ$QF8gZ~5Kx(=mzzn~F$1Rdb2pAeoK@-5#!T*-% zfL3s5wHyX`$#5f!q$7jSTMh%u5Y_6oeN5Ge}~~1p+z>2I)a85q{ce3W^I_m}+3a(oCZP3O*6}+a@%YOu*BsqQKh^ zk`5VmXdG9R2N5Hc5J<}f!tzK2WXJ-e@mQo+aU>!dLM#?E4&(${#RM!ebO0TE z+wbxbQ?LYtfj}`4OQVB=U0Qt5pLxflNno2=CJ-=#J$X3{4d`fM8;`{iX?e-W^aXqX z%w8rB_#cnQEC$1$SOAJCIOKc+Ivmo4cp`?@TNpGBnW_LCa!Sy65(P_ymRSSV83uz~ z%`hP{g3)-84iPZ}c(Hf{4A7A=NcR)KlX;g00xe~B90o_D1l~Rnv4AGva7ZOUF`lp_ za8VviN2F1VCz25H0Rd(Ld1Yl?a_b^E=88hBZKm3ISlZE z@E2G}@_*(XO(26u3NI%_6DVZl+6K&InnXjOP>^v1%1bhB{=k4FxugU7y|KcCG#eoi zM?_|OEDj5bAQEVnEa1hE|0rJMJq8Hz2)BY#oCrTp`fnEkW{`xJ!(ck3 zfoLKHlqK6UKxT(Oi27Ruj3OYNOF|Qo8w*f{N5(d&jfpgSJ*bmu6D$@K?+beW%ItuU zrt%=+NXYa66qC@%F#azv!V0W<9u3F!U{ zlf~I0QE*7FVsT(kS*94)OTl9xgoS8e-=AgwXVrt8fgCXz6mQ4{2}(v}2?Z2`H2L?4 zfnqXv9`~ZW|1vunk3nW^z>LGuC;G8DnakBk|>3wlSSVi3j4kU{rKqZmZeau}LICLy;Ykk;|YZ42ndfmF3Tv%`eQvJ!*F zfOuW51Tf=~#=vyQ{S5=^5Tt>Cm+)WWTFmT#5Yz+9m0%W*9hSoYGtHg{(;*uT3`k|j z=m)%imfg~HVjw_>tW7`$0H+uzLcmP3>|i=%aDi+DoQ*J=>Xm`o009im5WyaU3~itZWXa_cKy!@4Al4aZTFDsN zA>xsl3Z{cgyoC_^<8TZah+M7&C?+6H#{fE{A2As4>=c9_0WT4msbIRlA{JU`%7GKX zRzaf}oL()5!E`jCjRhY8(~g*o%v7K%0u2dLo(!H$q**@%Fcc&q=oAt4AqH%!F0&N9Ro@iWcvd53yZnwzd8XXL~hNXDkdSr1Tf=} zYagaV7Va1v5uEES_XXg^FR!CO5W$4Vg8~eW_P7KvgUVyMK$s3$?_%J@ORJdpUvm0g zPr!5}2r+{gJUDkiOf^sp&PNf70UgbV@nF-WQB0xGgeN#nSlYb))CpKT=$jBq0E~z% zMgWYa1H^(P`}f%moO=Kai$)YO00x%*vVlM_Aqm-+U~!P4% zNE9Nn&jBzJ&E7x)eGbwFt_t_EoiYy=3S!487-0t8OZh{$CEU|_RHGLx~$W(sso z1mu|r2AtR-lPL`QD{=nLo1oGHM-zxTfdcX_awH%WkjGD;#{{)K!axw{$W0E=k^i`Q zsp3#qMx)HpfyM^hNZK5F2&=jj!xV=S0Fo1!Q7%32(d(pzk zwAC~j{nw8EdlLl*L*Q@~DG+onG>XYI8zJB&(Hx_KFSH@gy+BUE(8$AcgF_a?a>9Z} zh)m_oMe%|PM_kL=8vaNSxE}rp?a+m@*5Ef_*1~U!0(t_H@>sMyL4mA4|%?gZteng4$h_;Fr})+P#OrY08lj#dKV@JC|cC{UT8Kvc#nf{*Ml6lD-n nXhkwOBT+&tW8tr(**h57Ik?!Fo@E9$6L19Poja9|C^P>b7w3nH delta 146178 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 z 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 d10D!?ub8)dh2m)dY)%X*)i5#|JH Date: Sun, 21 Jan 2024 15:50:31 -0700 Subject: [PATCH 29/43] doc report_slews Signed-off-by: James Cherry --- doc/OpenSTA.odt | Bin 104845 -> 105081 bytes doc/OpenSTA.pdf | Bin 249024 -> 250794 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/OpenSTA.odt b/doc/OpenSTA.odt index ce0b301b694d4664e4744152a50940991b61e7d9..eb707f6e016dfc0d805c701dba38d7f38de613e4 100644 GIT binary patch delta 70552 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 jDb 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 delta 70463 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

    _j#}()v-mm_>VJ+0NYq5^PXJT1Y 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ȠNyZ#-2^ZoAt+Wh_Sf~&H+2tsvooy2j_ zywQAK2i4Ou%VW$J>nyq*GYtBRc1Sz0R!CZL+C9m6!nbaVTm=P%wOI1|OCL3DCKSf8 z(Wq*(Z2g7k7^EQ@gx+gtvns<*AeyIOdUhW26N;+?)>Kt$0LD6hA)qc%zbgtAnt zmQTg?t;yuHcIWl#D#A&-*nIagV`mg*#h?L%>)jI&)eoixiv_6@ zgDdIbxY8l4m!Fz93dff=$Oer6z_%y!W9eZUiKqFRjs1)C-+PDxQCpeZ9FA_-p>g0W zguz5DkqQcRyAqr$efTXMq3b%vVs+7N^upe~O87cHzy!Qei~qA(Y^yhSuJp2i^BxP5 z6%Tk%b)jog5|PSHM^736Rn*z8L6a~8+ED~fPxZ@ykzD}konRwUHDDiny`;Ld$D+cV zF@$0KFGiJ7+E6`CF!JZSHkeeL0vv^m2%k#?Fx^KZdlJ%buxi`qxYg1^mdhPuS$vl3 zt@5#4r}FW(5U%KK_5HAOV)>eWVxg?ui|YQSk$8?U0av0JnSqvNiJiuswfdOe`pS0bJG?sIxq#*X4Yq zeZ9LN+EFD0Jub)K0N+UCiaRnJ4xh@%jSnH&X?iZE)z%fTmuv%3_!4Kvtx%5?uv|aM z#qc`duA5|#SoLaHPFKcn7g4jlFa#}@G@N%-pV(z;2>7uOLEl8fk)=iqH-HW(bqsOi z@l=uXEmc0-k4k=+ykob(bZr~pA3&iWqpDi0b~gs<-~X~%j&z&d8%z=WebA2+Oc?2K zN?#vU?vDl#Aic%Eq^gVobu;);o&duZ{0)W2Oc2`>oTe{5>t=*{?t?ELMr3BMCU(PQ zLZ$+c4rG3PKi9go*^z1W!NddTQ2HC_Ba?Em$pSdDFHIA3nJ-Ntg9m_xmFOcW(JJhe z)tj;Cj)mO~?DGy?)i@`P#Z@t>4Gs_IVn{2ZXL)GmR*WzBWIceQ*W!@u|*o#9aHjynt~%-j>%J&14ZYKRTEtoec?g}^z*$y;UY zafSu_*!b@n&*X$~T+>n!nd={as{~FqvS3I{dvRDV6Q=X& zyKQ6=O@(Ni(RW7**}@>BzWSH;y`|D=?3=ML%R^?`VT_GGYRLxH_)t!o&-48qIF*Ck z!~Lv>FRF%QPsHz(FLYfguppNI)M7JT?#lz<3YQ=fE&HBFlqbElJhxTv)Vj9ejX1`v z6Q{tRg|l#s-H8^w8t)B{brrC%YfoT1BCu|uH0#fbg{6&l_(I%31Vs`O|9*h5nZ`RB zMS=SBn00RmzWzxFkiW((C2o@b(Ix!L-QSWfa-V>sNNb*|u`nvpY(e^@u$?g6^SspM zZhyJs2-v{hN`~JnnewL`g*hFH&H;71=NMhBox_pJoQ)`vvv5@|VyghgaO zWFRmz?o|c<8d08InopSiSC40#x5u3_|3iLQzl?GzXVC|g0Wt)e+po>YYg&V~3Phc13G{yW|IGT3sewI+3u`m5LIwNSB zLBm@rir~ZJAN8V*_SV5E;0dlD*5YNLBoiG^t%zD;`jbX)~=}uR` zD~Q*z{iNV%=&I-=Ry$9lIL$57`(vFQUp@CM7d^lj1kyitM47ywaUc?z*y|HNEm!sJ zsgj_xu#zVUCRmCvqq&<~=iajM-j^w7*)PcwI?jM;{y;vbJ`~vu@Lld|nA%lbz<&dW z#<#;x)v}h}r6N12Z_P1NwV1LEEh~%V_UhIwGymQ{e^^y42TdrsaMHL(8_G4yo?VuN zcVcq5{<$|I`&;nR;PGEfOOZhO75n?OGgoHlLNi0xV_SyxgRsD3JN-VTGPs|Rz$(us<0N$ zc7XbqIgZ@{otBepZ2ULk6ihs40)Mj@QR*-@5_aO` zP&L}Nf*RqvW%IH)2TmfNX)*G$FopJIV49*-;VI($%*tvA!2Q*b1>8Pefi(9WVV$|_ z*JT>=tK55)hHFpD+c=8e;9jrFiCFsC)e{f3>1z8}6Mk>m)_Aqs^HOcn%C<_k&}BX? zl#uv#r+V%<#61(_?HV zGTrrBPuAH#0EAvRgkC?_0(_Tyr_uMxGQPm>zazghk-vte!0JSQcC!UsfeJvPkz@9D z@U2CQc|%jaxaa*C(*7O*s?{@J%oRG3v{SGuzc?+Kx4M=?mkBiHvzJ;}KlyoO1q9 zx5Npte!+)zFiASg+1B4#7u*Mjwn!phggo<|SburVC&FFteWW?t4=^K}gtBR-VcFGfu*(6)cxMd55YL#2Fz!_MtMjh|Y9d%QPy zW87m6g@niu2wbUX)97nI$bU^o{pMoUiRwuaV>h)&oV8f9GJP?aI6GRnm~u4na>1;7 z-cmtti5~dMsMXG04Lii(#Y~?K1*QX>vJ+{6v$^*x$H$rSlO#PwNUiX4k)cvPSy=4( zo6mAN_RP(4y$@O|`x64ExnXVc4m39XZS}#s23Gfn5CK28$H1YX5ru6kLOrb={Bu`(3p-N({?2cdTkwP&Npt2jTI0YwZM8A_8dCNknRV#6BV~ht?-#AZgK1q+SH=8ykOTXgU#?>oCtB z1k!2UDE{kcaQqwwG3vGif8-WIWK)3kC2|U@erbRKHNoxIGTDzZ!&0PN@V&{!#TC52R|)glka~u5pRouyk7LiU{yhqUzLuX{nkA-a~!hT8-oQx^3p?UPjc2K zS_ps2iDbBE`@gczGpebj>*FVM2)&n3B?-Mt7b$i8vFm|#HXXk6sYTTdaJS|6vE%iJ>^x6sN8*xZ%OZ5_In$Tb)S$yk z({!KLsIo?3%WswK3##MQN=-kzt%WVxGvy6mg;euGgjOE(jUGA>_i2}EiqSv5JZ;zw z4SKc~n3cj%71U0%xDTUY9j!t$>AA1Ae?0#_v?RdUZAaP5+mSOwod<~08{l-80m zp(LrENoNH$yjQy^N?6WO>Y3!x$8apy<_4Adzk73oUzp!{hSuqZ(rOm#^#WXb|^k zwF5{ddPPRwnIv}EtHNs1iv1!kie}s)oQh(x_k>t1PNa{Y)w_!6_L0Ro!9eW11w*;7 z*_>(ImjgGrJv@3l-lu+#Ucy=Y7Bvx6y7u!b^=bdqk58vJyKI&vpH+w4zqC1hl`RUL zDrRV41bY+#Q{2qA&uf$67usLYLuy=ll0>>L`GLg!y__PV%2Z}LeP`8V`{{*to#nwq zyukz&SK{u_+>6Jl{qh!&`@8vc{-YsBcSA(p{k_}3pP{lj#}wDJPp&3=g6U4s6jF$0 z6nMlWYa%Tl@iQ{5Ung=&JbwBBoJ>s$avUOCH#PQU!A9|Qu**VmkP#sdcGc%e! z5JCF9ycW9xC~v7@Oj{X|Y~|$Roh!g^4f9dKIY@GT)vvb`ilD8np9AYI-8qBkdf%M- zs@;R)y%ep+5+X*MQ3@5!YAF~_^j|%<*&!`P+_)nJ?{6({`IR{@FG$oXb z@11X2tV{Y9rX%DlPBh{`KQNWutG7TF%$CC|ed>&if-{VAmY!#)Sm|q4%v_V!G(^k0 zw!d>ub1rw#leJobTSqGQs-uRB2EC-t7WNlMjf#|FCN=F^7dCcU8(n(cpV|GY|IS`_ zFqNCC9!oE=YYR_g3)ln|X_FI~;bj;0j~8~R+U5-|3> z5CFIJJt@1I!S7L>95_qFa&>fi{{Tx{O(h}x4hD)eD)(}>-Bpl9rk&=QkMosTjJ-tg zlMmzbp9LrH)cK+7OqMTUXigpU4~yE0{6cT{M$g)BIs)H74-f3zGv6cB29^)cZelPE z)x7sizyZ@bn_M;mf90{ev}7BGYCz2(w*TeL7Cef%uE35gm4LUlK`f@!C=w6t;xr+%0_W zs4|g6w~_kj^ocWbMHO3?+82*y=kn)wM?Ow(fnTCmw6D(^a?hQ3W2VB6_rvZGF z@#8@{w_M9$3;7jk96wPIi_s}Y)=y#vd^`%dEB9HL5)u-GgpsI=JspN#Oj~qtW{;*Q z>>BRNr3;UWc`Pci$-)WX0 zhHc(Ue<9CURfPytAmESR3Olz{&T!2SXhm>*Pad_~Gc4_;HuTYQ(+KRCYcjV>=(z0T ztsXue3VqDBZ$?0da$=(233jw&8)?K8m8tyh++1&v_jYo^zeW2WWEox~UUqHXr9>A6 z+AxeY?y(#`_0@l_cR8w(J7ufQ|L4sSI@EPIH&U81EcQib)A zB3U0jj1HbJxg!ninnT-{MNFVV@t#69b+&;ZN~!09k5`~4r8)auT`pK-o}ALr@%ti{ z^KK7`#)vy!Si12;yq{*AYXjhfcK#~WxH_m0Uof%u7w8y%{bO6+Ga9RF?nh>!&EM@0bta=%+BM)`6#(t z3JB=A_>tA-$Id;xgcs|XHt?K#eRet7n{Qrkl6TCPW!O#Ul?;IVAXaH;AY2*@kGp9v z{l-vk$n)lq^8woeRUlt+47=Y9t;xyMb)(~&m$aYKxczx_S%0Ao&yJDsJP`ux8eCQ1 z6E1%r&$ekjpd7+V9aHLrY*S&ggdclXvB7*b4(M z0##J2?J{8cX+d`Ah0K7L5zl%;anL*N^)e3wDnWa1HoTg0{hJsJ-}9vv8QGY8m;ei# zuwr|;-2eM^eIG9MA-X4=5~m7?coe01!D!_3-2-#NMROn zz13%XPb;_(&fPYgpUhnKT48twxpp^}T4?=6ML^R2sYJj-GzEQzmKa5qpnRLa_fDx~ z?<;PYCD#5eeT1CHuw}UY*4Wg|=CFbff8Fa`FQmvwP~6*4v65U8s<4zTtrl(ej(|lg zx&|la)l3({m%P8^P*o1rh}4>Ysph)V{e0v%h!U1Ls#60C^kD735$Ux9A8pF#CO8}VW~SqiWf;evRZbLfrVHdfun<*MK@UX?TYHFsb=x~yqt>b8 z1+CP7dGzv=I`p`m`8JcuqKElGk=00iiL(z?+FY(2D``2AY9<1sU4{KOai&Y+y zwR6>cJSDT{X3c-aO1LCQ`+C2AXDp8yXC%#4xJ)Pt8>1)7x^nn7u86y5N|+?GfjeHp z4tj64Yhq%+-Q2crR1z>o%5r1Xu!Rb@cX!G(2;NkNfU^;uTlXz z?{&l>AKLtEIpR8=<@x&l>QPwyvj4rP*7_I;9F=tCk>oD+WMW;}#yc@6pRt@njP%p= z?G$pob+<2MMrW>qQt3wIyJOTe&Dqro{y|bZ4CSGc#ok5_e3>{N>2BR2+DkDg{lMB( zuNH`yUP^ zUoBFNj<`eivv;*u^+3U9;qJ6Kop)`@DZ@_~v$I=bcNvZHk=>+mlm?#EcmsSVSwqXP zgZ0M8DGIf|Qks-wRn~xrh2&}vRk4FcU2&Vxb#+?>LrH0e@HOfPB_hgk_=c}%yrZpV zEBbW5<64e}EkW}HbsQQT7IrZI-m&G1i}BY?N(z}L;{g@)$w8Apbd(I0HyzOEkmCjF zEmE&$>*?mnyzHj?#tiysYpp+VcfG)4exr6k9DCfiyCyT-dE zKESPzO4|&LW4JQURY8RsT0x4~v_<#yvxOGYt=MK;H^D6UFYC-(_DvoP5;9Xk+E5e! zt<$knCNpDdnjLkIiC_Yh;iTvp{=XbZi6EN>g8yGW z$m87P!sXD@{O?#A8k+O@=BAy2UeM#(=*1cTs}%p}9@68u83g{F^LIK30#YE@ri1v@ z&TC_fe;LWj2>?P~Ab{>)lkj5%fV%;~o-TJ~?t6Lu7r*=*(@5w`2f_a-v9XG2wk8Mw zQYZj`<6jtC0&50HRQFu#&sPWj*Py9H0C4j0KHEMG_>UMR)p?xd?D0J#Qm3Awf&T%x CewIuC diff --git a/doc/OpenSTA.pdf b/doc/OpenSTA.pdf index 23d9e20d793249719781a5bc403a404eb588e62d..5fb586c1d318df0fedd65ac19c8dd28e40a41907 100644 GIT binary patch delta 65535 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 delta 63903 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 From 84586335f78f30c59e0428c80c0c13fac71860da Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sun, 21 Jan 2024 16:02:24 -0700 Subject: [PATCH 30/43] override Signed-off-by: James Cherry --- dcalc/DmpCeff.cc | 158 +++++++++++++++++++++++------------------------ 1 file changed, 79 insertions(+), 79 deletions(-) diff --git a/dcalc/DmpCeff.cc b/dcalc/DmpCeff.cc index 5fcc6bed..70cf302f 100644 --- a/dcalc/DmpCeff.cc +++ b/dcalc/DmpCeff.cc @@ -695,37 +695,37 @@ class DmpCap : public DmpAlg { public: DmpCap(StaState *sta); - virtual const char *name() { return "cap"; } - virtual void init(const LibertyLibrary *library, - const LibertyCell *drvr_cell, - const Pvt *pvt, - const GateTableModel *gate_model, - const RiseFall *rf, - double rd, - double in_slew, - double c2, - double rpi, - double c1); - virtual void gateDelaySlew(// Return values. - double &delay, - double &slew); - virtual void loadDelaySlew(const Pin *, - double elmore, - // Return values. - ArcDelay &delay, - Slew &slew); - virtual void evalDmpEqns(); - virtual double voCrossingUpperBound(); + const char *name() override { return "cap"; } + void init(const LibertyLibrary *library, + const LibertyCell *drvr_cell, + const Pvt *pvt, + const GateTableModel *gate_model, + const RiseFall *rf, + double rd, + double in_slew, + double c2, + double rpi, + double c1) override; + void gateDelaySlew(// Return values. + double &delay, + double &slew) override; + void loadDelaySlew(const Pin *, + double elmore, + // Return values. + ArcDelay &delay, + Slew &slew) override; + void evalDmpEqns() override; + double voCrossingUpperBound() override; private: - virtual void V0(double t, - // Return values. - double &vo, - double &dvo_dt); - virtual void Vl0(double t, - // Return values. - double &vl, - double &dvl_dt); + void V0(double t, + // Return values. + double &vo, + double &dvo_dt) override; + void Vl0(double t, + // Return values. + double &vl, + double &dvl_dt) override; }; DmpCap::DmpCap(StaState *sta): @@ -810,22 +810,22 @@ class DmpPi : public DmpAlg { public: DmpPi(StaState *sta); - virtual const char *name() { return "Pi"; } - virtual void init(const LibertyLibrary *library, - const LibertyCell *drvr_cell, - const Pvt *pvt, - const GateTableModel *gate_model, - const RiseFall *rf, - double rd, - double in_slew, - double c2, - double rpi, - double c1); - virtual void gateDelaySlew(// Return values. - double &delay, - double &slew); - virtual void evalDmpEqns(); - virtual double voCrossingUpperBound(); + const char *name() override { return "Pi"; } + void init(const LibertyLibrary *library, + const LibertyCell *drvr_cell, + const Pvt *pvt, + const GateTableModel *gate_model, + const RiseFall *rf, + double rd, + double in_slew, + double c2, + double rpi, + double c1) override; + void gateDelaySlew(// Return values. + double &delay, + double &slew) override; + void evalDmpEqns() override; + double voCrossingUpperBound() override; private: void findDriverParamsPi(); @@ -833,14 +833,14 @@ private: double dt, double ceff_time, double ceff); - virtual void V0(double t, - // Return values. - double &vo, - double &dvo_dt); - virtual void Vl0(double t, - // Return values. - double &vl, - double &dvl_dt); + void V0(double t, + // Return values. + double &vo, + double &dvo_dt) override; + void Vl0(double t, + // Return values. + double &vl, + double &dvl_dt) override; // Poles/zero. double p1_; @@ -1087,8 +1087,8 @@ class DmpOnePole : public DmpAlg { public: DmpOnePole(StaState *sta); - virtual void evalDmpEqns(); - virtual double voCrossingUpperBound(); + void evalDmpEqns() override; + double voCrossingUpperBound() override; }; DmpOnePole::DmpOnePole(StaState *sta) : @@ -1145,31 +1145,31 @@ class DmpZeroC2 : public DmpOnePole { public: DmpZeroC2(StaState *sta); - virtual const char *name() { return "c2=0"; } - virtual void init(const LibertyLibrary *drvr_library, - const LibertyCell *drvr_cell, - const Pvt *pvt, - const GateTableModel *gate_model, - const RiseFall *rf, - double rd, - double in_slew, - double c2, - double rpi, - double c1); - virtual void gateDelaySlew(// Return values. - double &delay, - double &slew); + const char *name() override { return "c2=0"; } + void init(const LibertyLibrary *drvr_library, + const LibertyCell *drvr_cell, + const Pvt *pvt, + const GateTableModel *gate_model, + const RiseFall *rf, + double rd, + double in_slew, + double c2, + double rpi, + double c1) override; + void gateDelaySlew(// Return values. + double &delay, + double &slew) override; private: - virtual void V0(double t, - // Return values. - double &vo, - double &dvo_dt); - virtual void Vl0(double t, - // Return values. - double &vl, - double &dvl_dt); - virtual double voCrossingUpperBound(); + void V0(double t, + // Return values. + double &vo, + double &dvo_dt) override; + void Vl0(double t, + // Return values. + double &vl, + double &dvl_dt) override; + double voCrossingUpperBound() override; // Pole/zero. double p1_; @@ -1353,7 +1353,7 @@ luDecomp(double **a, a[i][j] = sum; } // Run down jth subdiag to form the residuals after the elimination - // of the first j-1 subdiags. These residuals divided by the + // of the first j-1 subdiags. These residuals diviyded by the // appropriate diagonal term will become the multipliers in the // elimination of the jth. subdiag. Find index of largest scaled // term in imax. From f8338bb5534594ba55d6caecc8e7528166a72467 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Mon, 22 Jan 2024 09:21:35 -0700 Subject: [PATCH 31/43] report_parasitic_annotation no graph Signed-off-by: James Cherry --- search/Sta.cc | 1 - tcl/StaTcl.i | 1 - 2 files changed, 2 deletions(-) diff --git a/search/Sta.cc b/search/Sta.cc index bb8c2100..eb617e9b 100644 --- a/search/Sta.cc +++ b/search/Sta.cc @@ -3935,7 +3935,6 @@ Sta::reportParasiticAnnotation(bool report_unannotated, const Corner *corner) { ensureGraph(); - findDelays(); sta::reportParasiticAnnotation(report_unannotated, corner, this); } diff --git a/tcl/StaTcl.i b/tcl/StaTcl.i index 4e856ad8..33b9c2fa 100644 --- a/tcl/StaTcl.i +++ b/tcl/StaTcl.i @@ -59,7 +59,6 @@ #include "ExceptionPath.hh" #include "Sdc.hh" #include "Graph.hh" -#include "Parasitics.hh" #include "DelayCalc.hh" #include "DcalcAnalysisPt.hh" #include "Corner.hh" From bb5d70693a795e2413baa01bb106c8eec553d60c Mon Sep 17 00:00:00 2001 From: James Cherry Date: Mon, 22 Jan 2024 11:17:08 -0700 Subject: [PATCH 32/43] rm SlowDrvrIterator Signed-off-by: James Cherry --- include/sta/Network.hh | 1 + include/sta/Sta.hh | 5 ++-- network/Network.cc | 13 +++++++++ search/Sta.cc | 64 +++++++++++------------------------------- tcl/StaTcl.i | 34 +++------------------- 5 files changed, 37 insertions(+), 80 deletions(-) diff --git a/include/sta/Network.hh b/include/sta/Network.hh index 750b9821..8a97dbc7 100644 --- a/include/sta/Network.hh +++ b/include/sta/Network.hh @@ -238,6 +238,7 @@ public: // the other primitives. LeafInstanceIterator *leafInstanceIterator() const; LeafInstanceIterator *leafInstanceIterator(const Instance *hier_inst) const; + InstanceSeq leafInstances(); // Iterate over the children of an instance. virtual InstanceChildIterator * childIterator(const Instance *instance) const = 0; diff --git a/include/sta/Sta.hh b/include/sta/Sta.hh index c40692cd..a343d924 100644 --- a/include/sta/Sta.hh +++ b/include/sta/Sta.hh @@ -1106,9 +1106,8 @@ public: // with normal constant propagate for timing. void clearLogicConstants(); - // Iterator for instances sorted by max driver pin slew. - // Caller owns iterator and iterator->container(). - SlowDrvrIterator *slowDrvrIterator(); + // Instances sorted by max driver pin slew. + InstanceSeq slowDrivers(int count); // Make parasitic analysis points. // per_corner per_min_max ap_count diff --git a/network/Network.cc b/network/Network.cc index 09125bc0..7160d5ab 100644 --- a/network/Network.cc +++ b/network/Network.cc @@ -1189,6 +1189,19 @@ Network::leafPinCount() return count; } +InstanceSeq +Network::leafInstances() +{ + InstanceSeq insts; + LeafInstanceIterator *iter = leafInstanceIterator(); + while (iter->hasNext()) { + const Instance *inst = iter->next(); + insts.push_back(inst); + } + delete iter; + return insts; +} + void Network::setPathDivider(char divider) { diff --git a/search/Sta.cc b/search/Sta.cc index eb617e9b..13ca9623 100644 --- a/search/Sta.cc +++ b/search/Sta.cc @@ -5152,67 +5152,37 @@ Sta::crossesHierarchy(Edge *edge) const //////////////////////////////////////////////////////////////// -class InstanceMaxSlewGreater +static Slew +instMaxSlew(const Instance *inst, + Sta *sta) { -public: - explicit InstanceMaxSlewGreater(const StaState *sta); - bool operator()(const Instance *inst1, - const Instance *inst2) const; - -protected: - Slew instMaxSlew(const Instance *inst) const; - const StaState *sta_; -}; - -InstanceMaxSlewGreater::InstanceMaxSlewGreater(const StaState *sta) : - sta_(sta) -{ -} - -bool -InstanceMaxSlewGreater::operator()(const Instance *inst1, - const Instance *inst2) const -{ - return delayGreater(instMaxSlew(inst1), instMaxSlew(inst2), sta_); -} - -Slew -InstanceMaxSlewGreater::instMaxSlew(const Instance *inst) const -{ - Network *network = sta_->network(); - Graph *graph = sta_->graph(); + Network *network = sta->network(); + Graph *graph = sta->graph(); Slew max_slew = 0.0; InstancePinIterator *pin_iter = network->pinIterator(inst); while (pin_iter->hasNext()) { Pin *pin = pin_iter->next(); if (network->isDriver(pin)) { Vertex *vertex = graph->pinDrvrVertex(pin); - for (RiseFall *rf : RiseFall::range()) { - for (DcalcAnalysisPt *dcalc_ap : sta_->corners()->dcalcAnalysisPts()) { - Slew slew = graph->slew(vertex, rf, dcalc_ap->index()); - if (delayGreater(slew, max_slew, sta_)) - max_slew = slew; - } - } + max_slew = max(max_slew, sta->vertexSlew(vertex, MinMax::max())); } } delete pin_iter; return max_slew; } -SlowDrvrIterator * -Sta::slowDrvrIterator() +InstanceSeq +Sta::slowDrivers(int count) { - InstanceSeq *insts = new InstanceSeq; - LeafInstanceIterator *leaf_iter = network_->leafInstanceIterator(); - while (leaf_iter->hasNext()) { - Instance *leaf = leaf_iter->next(); - insts->push_back(leaf); - } - delete leaf_iter; - - sort(insts, InstanceMaxSlewGreater(this)); - return new SlowDrvrIterator(insts); + InstanceSeq insts = network_->leafInstances(); + sort(insts, [=] (const Instance *inst1, + const Instance *inst2) { + return delayGreater(instMaxSlew(inst1, this), + instMaxSlew(inst2, this), + this); + }); + insts.resize(count); + return insts; } //////////////////////////////////////////////////////////////// diff --git a/tcl/StaTcl.i b/tcl/StaTcl.i index 33b9c2fa..4aebec68 100644 --- a/tcl/StaTcl.i +++ b/tcl/StaTcl.i @@ -441,13 +441,6 @@ private: ~VertexPathIterator(); }; -class SlowDrvrIterator -{ -private: - SlowDrvrIterator(); - ~SlowDrvrIterator(); -}; - class ExceptionFrom { private: @@ -990,14 +983,7 @@ find_instance(char *path_name) InstanceSeq network_leaf_instances() { - InstanceSeq insts; - LeafInstanceIterator *iter = cmdLinkedNetwork()->leafInstanceIterator(); - while (iter->hasNext()) { - const Instance *inst = iter->next(); - insts.push_back(inst); - } - delete iter; - return insts; + return cmdLinkedNetwork()->leafInstances(); } InstanceSeq @@ -3618,10 +3604,10 @@ pin_logic_value(const Pin *pin) return logicValueString(value); } -SlowDrvrIterator * -slow_driver_iterator() +InstanceSeq +slow_drivers(int count) { - return Sta::sta()->slowDrvrIterator(); + return Sta::sta()->slowDrivers(count); } bool @@ -5021,18 +5007,6 @@ next() void finish() { delete self; } } -%extend SlowDrvrIterator { -bool has_next() { return self->hasNext(); } -const Instance *next() { return self->next(); } -void -finish() -{ - delete self->container(); - delete self; -} - -} - %extend Corner { const char *name() { return self->name(); } } From 28524edac840dda8786f1a5740017dcdbdf77f78 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Wed, 24 Jan 2024 08:32:09 -0700 Subject: [PATCH 33/43] doc Signed-off-by: James Cherry --- doc/OpenSTA.odt | Bin 105081 -> 105077 bytes search/Sta.cc | 1 + 2 files changed, 1 insertion(+) diff --git a/doc/OpenSTA.odt b/doc/OpenSTA.odt index eb707f6e016dfc0d805c701dba38d7f38de613e4..38c37ccbc4a853bf2eb845bfbcdc61ffa70d71c2 100644 GIT binary patch delta 73587 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 delta 73586 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 diff --git a/search/Sta.cc b/search/Sta.cc index 13ca9623..04c0ef4d 100644 --- a/search/Sta.cc +++ b/search/Sta.cc @@ -5174,6 +5174,7 @@ instMaxSlew(const Instance *inst, InstanceSeq Sta::slowDrivers(int count) { + findDelays(); InstanceSeq insts = network_->leafInstances(); sort(insts, [=] (const Instance *inst1, const Instance *inst2) { From fe70638d8336d686564dda2c910d2dbad273c9fe Mon Sep 17 00:00:00 2001 From: James Cherry Date: Thu, 25 Jan 2024 13:20:24 -0700 Subject: [PATCH 34/43] ParallelDelayCalc for 1 drvr Signed-off-by: James Cherry --- dcalc/ParallelDelayCalc.cc | 19 +++++++++++++++++++ dcalc/ParallelDelayCalc.hh | 5 +++++ 2 files changed, 24 insertions(+) diff --git a/dcalc/ParallelDelayCalc.cc b/dcalc/ParallelDelayCalc.cc index 24f043b2..27522150 100644 --- a/dcalc/ParallelDelayCalc.cc +++ b/dcalc/ParallelDelayCalc.cc @@ -36,6 +36,25 @@ ParallelDelayCalc::gateDelays(ArcDcalcArgSeq &dcalc_args, float load_cap, const LoadPinIndexMap &load_pin_index_map, const DcalcAnalysisPt *dcalc_ap) +{ + if (dcalc_args.size() == 1) { + ArcDcalcArg &dcalc_arg = dcalc_args[0]; + ArcDcalcResult dcalc_result = gateDelay(dcalc_arg.drvrPin(), dcalc_arg.arc(), + dcalc_arg.inSlew(), + load_cap, dcalc_arg.parasitic(), + load_pin_index_map, dcalc_ap); + ArcDcalcResultSeq dcalc_results; + dcalc_results.push_back(dcalc_result); + return dcalc_results; + } + return gateDelaysParallel(dcalc_args, load_cap, load_pin_index_map, dcalc_ap); +} + +ArcDcalcResultSeq +ParallelDelayCalc::gateDelaysParallel(ArcDcalcArgSeq &dcalc_args, + float load_cap, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap) { size_t drvr_count = dcalc_args.size(); ArcDcalcResultSeq dcalc_results(drvr_count); diff --git a/dcalc/ParallelDelayCalc.hh b/dcalc/ParallelDelayCalc.hh index b5ca9640..7f361218 100644 --- a/dcalc/ParallelDelayCalc.hh +++ b/dcalc/ParallelDelayCalc.hh @@ -32,6 +32,11 @@ public: float load_cap, const LoadPinIndexMap &load_pin_index_map, const DcalcAnalysisPt *dcalc_ap) override; +protected: + ArcDcalcResultSeq gateDelaysParallel(ArcDcalcArgSeq &dcalc_args, + float load_cap, + const LoadPinIndexMap &load_pin_index_map, + const DcalcAnalysisPt *dcalc_ap); }; } // namespace From e8fc1c17d91046fa8b7444dc16e926d2f5a6facf Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sat, 27 Jan 2024 16:12:53 -0700 Subject: [PATCH 35/43] FindRoot headers Signed-off-by: James Cherry --- dcalc/FindRoot.cc | 4 ++++ dcalc/FindRoot.hh | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/dcalc/FindRoot.cc b/dcalc/FindRoot.cc index ad96796c..a6bdde60 100644 --- a/dcalc/FindRoot.cc +++ b/dcalc/FindRoot.cc @@ -16,8 +16,12 @@ #include "FindRoot.hh" +#include // abs + namespace sta { +using std::abs; + double findRoot(FindRootFunc func, double x1, diff --git a/dcalc/FindRoot.hh b/dcalc/FindRoot.hh index 2bc9a8eb..1a62df8b 100644 --- a/dcalc/FindRoot.hh +++ b/dcalc/FindRoot.hh @@ -16,7 +16,7 @@ #pragma once -#include // abs, min +#include namespace sta { From be7c9b22886e7fd4cf24494d0db94d39dd92e330 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sat, 27 Jan 2024 21:34:38 -0700 Subject: [PATCH 36/43] restore ArcDelayCalc::reducedParasiticType Signed-off-by: James Cherry --- dcalc/ArcDelayCalc.cc | 18 +++++++++--------- dcalc/ArnoldiDelayCalc.cc | 7 +++++++ dcalc/DmpDelayCalc.cc | 7 +++++++ dcalc/LumpedCapDelayCalc.cc | 6 ++++++ dcalc/LumpedCapDelayCalc.hh | 1 + dcalc/UnitDelayCalc.cc | 6 ++++++ dcalc/UnitDelayCalc.hh | 1 + include/sta/ArcDelayCalc.hh | 1 + 8 files changed, 38 insertions(+), 9 deletions(-) diff --git a/dcalc/ArcDelayCalc.cc b/dcalc/ArcDelayCalc.cc index 1b7ef4da..4b5a3cb7 100644 --- a/dcalc/ArcDelayCalc.cc +++ b/dcalc/ArcDelayCalc.cc @@ -25,15 +25,15 @@ ArcDelayCalc::ArcDelayCalc(StaState *sta): void ArcDelayCalc::gateDelay(const TimingArc *arc, - const Slew &in_slew, - float load_cap, - const Parasitic *parasitic, - float, - const Pvt *, - const DcalcAnalysisPt *dcalc_ap, - // Return values. - ArcDelay &gate_delay, - Slew &drvr_slew) + const Slew &in_slew, + float load_cap, + const Parasitic *parasitic, + float, + const Pvt *, + const DcalcAnalysisPt *dcalc_ap, + // Return values. + ArcDelay &gate_delay, + Slew &drvr_slew) { LoadPinIndexMap load_pin_index_map(network_); ArcDcalcResult dcalc_result = gateDelay(nullptr, arc, in_slew, load_cap, parasitic, diff --git a/dcalc/ArnoldiDelayCalc.cc b/dcalc/ArnoldiDelayCalc.cc index bc453595..88d0c880 100644 --- a/dcalc/ArnoldiDelayCalc.cc +++ b/dcalc/ArnoldiDelayCalc.cc @@ -117,6 +117,7 @@ public: Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) override; + ReducedParasiticType reducedParasiticType() const override; ArcDcalcResult inputPortDelay(const Pin *port_pin, float in_slew, const RiseFall *rf, @@ -297,6 +298,12 @@ ArnoldiDelayCalc::findParasitic(const Pin *drvr_pin, return parasitic; } +ReducedParasiticType +ArnoldiDelayCalc::reducedParasiticType() const +{ + return ReducedParasiticType::arnoldi; +} + ArcDcalcResult ArnoldiDelayCalc::inputPortDelay(const Pin *, float in_slew, diff --git a/dcalc/DmpDelayCalc.cc b/dcalc/DmpDelayCalc.cc index 55ff6b3b..15145abd 100644 --- a/dcalc/DmpDelayCalc.cc +++ b/dcalc/DmpDelayCalc.cc @@ -132,6 +132,7 @@ public: Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) override; + ReducedParasiticType reducedParasiticType() const override; ArcDcalcResult inputPortDelay(const Pin *port_pin, float in_slew, const RiseFall *rf, @@ -255,6 +256,12 @@ DmpCeffTwoPoleDelayCalc::findParasitic(const Pin *drvr_pin, return parasitic; } +ReducedParasiticType +DmpCeffTwoPoleDelayCalc::reducedParasiticType() const +{ + return ReducedParasiticType::pi_pole_residue2; +} + ArcDcalcResult DmpCeffTwoPoleDelayCalc::inputPortDelay(const Pin *, float in_slew, diff --git a/dcalc/LumpedCapDelayCalc.cc b/dcalc/LumpedCapDelayCalc.cc index c68ae660..975ca045 100644 --- a/dcalc/LumpedCapDelayCalc.cc +++ b/dcalc/LumpedCapDelayCalc.cc @@ -101,6 +101,12 @@ LumpedCapDelayCalc::findParasitic(const Pin *drvr_pin, return parasitic; } +ReducedParasiticType +LumpedCapDelayCalc::reducedParasiticType() const +{ + return ReducedParasiticType::pi_elmore; +} + ArcDcalcResult LumpedCapDelayCalc::inputPortDelay(const Pin *, float in_slew, diff --git a/dcalc/LumpedCapDelayCalc.hh b/dcalc/LumpedCapDelayCalc.hh index 48b35285..0968c494 100644 --- a/dcalc/LumpedCapDelayCalc.hh +++ b/dcalc/LumpedCapDelayCalc.hh @@ -30,6 +30,7 @@ public: Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) override; + ReducedParasiticType reducedParasiticType() const override; ArcDcalcResult inputPortDelay(const Pin *port_pin, float in_slew, const RiseFall *rf, diff --git a/dcalc/UnitDelayCalc.cc b/dcalc/UnitDelayCalc.cc index 5722b24b..d9ce6c7a 100644 --- a/dcalc/UnitDelayCalc.cc +++ b/dcalc/UnitDelayCalc.cc @@ -45,6 +45,12 @@ UnitDelayCalc::findParasitic(const Pin *, return nullptr; } +ReducedParasiticType +UnitDelayCalc::reducedParasiticType() const +{ + return ReducedParasiticType::none; +} + ArcDcalcResult UnitDelayCalc::inputPortDelay(const Pin *, float, diff --git a/dcalc/UnitDelayCalc.hh b/dcalc/UnitDelayCalc.hh index 0194caef..788a3742 100644 --- a/dcalc/UnitDelayCalc.hh +++ b/dcalc/UnitDelayCalc.hh @@ -29,6 +29,7 @@ public: Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) override; + ReducedParasiticType reducedParasiticType() const override; ArcDcalcResult inputPortDelay(const Pin *port_pin, float in_slew, const RiseFall *rf, diff --git a/include/sta/ArcDelayCalc.hh b/include/sta/ArcDelayCalc.hh index c7b98be8..db3a4f0c 100644 --- a/include/sta/ArcDelayCalc.hh +++ b/include/sta/ArcDelayCalc.hh @@ -124,6 +124,7 @@ public: virtual Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) = 0; + virtual ReducedParasiticType reducedParasiticType() const = 0; // Find the wire delays and slews for an input port without a driving cell. // This call primarily initializes the load delay/slew iterator. virtual ArcDcalcResult inputPortDelay(const Pin *port_pin, From 0d8ffda061d5915b1a4d0d1a4ff6364da71e7840 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Mon, 29 Jan 2024 12:26:27 -0700 Subject: [PATCH 37/43] Sta::endpoints() return VertexSet Signed-off-by: James Cherry --- include/sta/Sta.hh | 5 +++-- search/Sta.cc | 11 +++++++++-- tcl/StaTcl.i | 10 ++-------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/include/sta/Sta.hh b/include/sta/Sta.hh index a343d924..5425aa99 100644 --- a/include/sta/Sta.hh +++ b/include/sta/Sta.hh @@ -937,8 +937,9 @@ public: void delaysInvalid(); // Invalidate all arrival and required times. void arrivalsInvalid(); - PinSet startpoints(); - PinSet endpoints(); + PinSet startpointPins(); + PinSet endpointPins(); + VertexSet *endpoints(); int endpointViolationCount(const MinMax *min_max); // Find the fanin vertices for a group path. // Vertices in the clock network are NOT included. diff --git a/search/Sta.cc b/search/Sta.cc index 04c0ef4d..6b77b365 100644 --- a/search/Sta.cc +++ b/search/Sta.cc @@ -2659,7 +2659,7 @@ Sta::ensureClkArrivals() //////////////////////////////////////////////////////////////// PinSet -Sta::startpoints() +Sta::startpointPins() { ensureGraph(); PinSet pins(network_); @@ -2668,8 +2668,15 @@ Sta::startpoints() return pins; } -PinSet +VertexSet * Sta::endpoints() +{ + ensureGraph(); + return search_->endpoints(); +} + +PinSet +Sta::endpointPins() { ensureGraph(); PinSet pins(network_); diff --git a/tcl/StaTcl.i b/tcl/StaTcl.i index 4aebec68..12fb18e6 100644 --- a/tcl/StaTcl.i +++ b/tcl/StaTcl.i @@ -3055,13 +3055,13 @@ worst_clk_skew_cmd(const SetupHold *setup_hold) PinSet startpoints() { - return Sta::sta()->startpoints(); + return Sta::sta()->startpointPins(); } PinSet endpoints() { - return Sta::sta()->endpoints(); + return Sta::sta()->endpointPins(); } PinSet @@ -4058,12 +4058,6 @@ port_location(const Port *port) return pin_location(pin); } -int -endpoint_count() -{ - return Sta::sta()->endpoints().size(); -} - int endpoint_violation_count(const MinMax *min_max) { From 7bed384fcee0c47fadaf59e176719a9126fb8f56 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Mon, 29 Jan 2024 20:48:00 -0700 Subject: [PATCH 38/43] ParallelDelayCalc Signed-off-by: James Cherry --- dcalc/ParallelDelayCalc.cc | 13 +++++-------- liberty/TableModel.cc | 12 ++++++++---- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/dcalc/ParallelDelayCalc.cc b/dcalc/ParallelDelayCalc.cc index 27522150..732a239f 100644 --- a/dcalc/ParallelDelayCalc.cc +++ b/dcalc/ParallelDelayCalc.cc @@ -69,17 +69,14 @@ ParallelDelayCalc::gateDelaysParallel(ArcDcalcArgSeq &dcalc_args, const TimingArc *arc = dcalc_arg.arc(); Slew in_slew = dcalc_arg.inSlew(); - ArcDcalcResult intrinsic_result = - arc_delay_calc_->gateDelay(drvr_pin, arc, in_slew, 0.0, nullptr, - load_pin_index_map, dcalc_ap); + ArcDcalcResult intrinsic_result = gateDelay(drvr_pin, arc, in_slew, 0.0, nullptr, + load_pin_index_map, dcalc_ap); ArcDelay intrinsic_delay = intrinsic_result.gateDelay(); intrinsic_delays[drvr_idx] = intrinsic_result.gateDelay(); - ArcDcalcResult gate_result = arc_delay_calc_->gateDelay(drvr_pin, arc, - in_slew, load_cap, - dcalc_arg.parasitic(), - load_pin_index_map, - dcalc_ap); + ArcDcalcResult gate_result = gateDelay(drvr_pin, arc, in_slew, load_cap, + dcalc_arg.parasitic(), + load_pin_index_map, dcalc_ap); ArcDelay gate_delay = gate_result.gateDelay(); Slew drvr_slew = gate_result.drvrSlew(); ArcDelay load_delay = gate_delay - intrinsic_delay; diff --git a/liberty/TableModel.cc b/liberty/TableModel.cc index 1f4bbded..46439beb 100644 --- a/liberty/TableModel.cc +++ b/liberty/TableModel.cc @@ -1794,10 +1794,14 @@ OutputWaveforms::voltageTime1(float voltage, FloatSeq *voltage_times = voltage_times_[wave_index]; float volt_step = vdd_ / voltage_waveform_step_count_; size_t volt_idx = voltage / volt_step; - float time0 = (*voltage_times)[volt_idx]; - float time1 = (*voltage_times)[volt_idx + 1]; - float time = time0 + (time1 - time0) * (voltage - volt_step * volt_idx); - return time; + if (volt_idx >= voltage_times->size() - 1) + return (*voltage_times)[voltage_times->size() - 1]; + else { + float time0 = (*voltage_times)[volt_idx]; + float time1 = (*voltage_times)[volt_idx + 1]; + float time = time0 + (time1 - time0) * (voltage - volt_step * volt_idx); + return time; + } } void From cc9eb1f12a0d5030aebc1f1428e4300480e30b40 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Wed, 31 Jan 2024 17:14:07 -0700 Subject: [PATCH 39/43] multi-thread delay calc missing lock Signed-off-by: James Cherry --- dcalc/GraphDelayCalc.cc | 134 ++++++++++++++++++++-------------- include/sta/GraphDelayCalc.hh | 18 +++-- 2 files changed, 90 insertions(+), 62 deletions(-) diff --git a/dcalc/GraphDelayCalc.cc b/dcalc/GraphDelayCalc.cc index 3d6180ec..ba9f1463 100644 --- a/dcalc/GraphDelayCalc.cc +++ b/dcalc/GraphDelayCalc.cc @@ -59,7 +59,6 @@ GraphDelayCalc::GraphDelayCalc(StaState *sta) : search_non_latch_pred_(new SearchPredNonLatch2(sta)), clk_pred_(new ClkTreeSearchPred(sta)), iter_(new BfsFwdIterator(BfsIndex::dcalc, search_non_latch_pred_, sta)), - multi_drvr_nets_found_(false), incremental_delay_tolerance_(0.0) { } @@ -103,7 +102,6 @@ GraphDelayCalc::clear() { delaysInvalid(); deleteMultiDrvrNets(); - multi_drvr_nets_found_ = false; } float @@ -184,7 +182,7 @@ GraphDelayCalc::deleteVertexBefore(Vertex *vertex) MultiDrvrNet *multi_drvr = multiDrvrNet(vertex); if (multi_drvr) { // Don't bother incrementally updating MultiDrvrNet. - for (Vertex *drvr_vertex : *multi_drvr->drvrs()) + for (Vertex *drvr_vertex : multi_drvr->drvrs()) multi_drvr_net_map_.erase(drvr_vertex); delete multi_drvr; } @@ -477,7 +475,7 @@ GraphDelayCalc::findPortIndex(const LibertyCell *cell, return index; index++; } - report_->critical(1100, "port not found in cell"); + report_->critical(1100, "port not found in cell."); return 0; } @@ -655,26 +653,50 @@ GraphDelayCalc::findDriverDelays(Vertex *drvr_vertex, MultiDrvrNet * GraphDelayCalc::findMultiDrvrNet(Vertex *drvr_vertex) { - MultiDrvrNet *multi_drvr = multiDrvrNet(drvr_vertex); - if (multi_drvr) + // Avoid locking for single driver nets. + if (hasMultiDrvrs(drvr_vertex)) { + UniqueLock lock(multi_drvr_lock_); + MultiDrvrNet *multi_drvr = multiDrvrNet(drvr_vertex); + if (multi_drvr) + return multi_drvr; + multi_drvr = makeMultiDrvrNet(drvr_vertex); return multi_drvr; - else { - const PinSet *drvrs = network_->drivers(drvr_vertex->pin()); - if (drvrs && drvrs->size() > 1) { - PinSet drvrs1(network_); - // Filter input ports and non-leaf drivers. - for (const Pin *pin : *drvrs) { - if (isLeafDriver(pin, network_)) - drvrs1.insert(pin); - } - MultiDrvrNet *multi_drvr = nullptr; - if (drvrs1.size() > 1) - multi_drvr = makeMultiDrvrNet(drvrs1); - return multi_drvr; - } - else - return nullptr; } + return nullptr; +} + +bool +GraphDelayCalc::hasMultiDrvrs(Vertex *drvr_vertex) +{ + Vertex *load_vertex = firstLoad(drvr_vertex); + if (load_vertex) { + int drvr_count = 0; + VertexInEdgeIterator edge_iter(load_vertex, graph_); + while (edge_iter.hasNext()) { + Edge *edge = edge_iter.next(); + if (edge->isWire()) { + Vertex *drvr = edge->from(graph_); + if (isLeafDriver(drvr->pin(), network_)) + drvr_count++; + } + if (drvr_count > 1) + return true; + } + return false; + } + return false; +} + +Vertex * +GraphDelayCalc::firstLoad(Vertex *drvr_vertex) +{ + VertexOutEdgeIterator edge_iter(drvr_vertex, graph_); + while (edge_iter.hasNext()) { + Edge *wire_edge = edge_iter.next(); + if (wire_edge->isWire()) + return wire_edge->to(graph_); + } + return nullptr; } static bool @@ -693,31 +715,41 @@ GraphDelayCalc::multiDrvrNet(const Vertex *drvr_vertex) const } MultiDrvrNet * -GraphDelayCalc::makeMultiDrvrNet(PinSet &drvr_pins) +GraphDelayCalc::makeMultiDrvrNet(Vertex *drvr_vertex) { - debugPrint(debug_, "delay_calc", 3, "multi-driver net"); - VertexSet *drvr_vertices = new VertexSet(graph_); - MultiDrvrNet *multi_drvr = new MultiDrvrNet(drvr_vertices); - Level max_drvr_level = 0; - Vertex *max_drvr = nullptr; - PinSet::Iterator pin_iter(drvr_pins); - while (pin_iter.hasNext()) { - const Pin *pin = pin_iter.next(); - Vertex *drvr_vertex = graph_->pinDrvrVertex(pin); - debugPrint(debug_, "delay_calc", 3, " %s", - network_->pathName(pin)); - multi_drvr_net_map_[drvr_vertex] = multi_drvr; - drvr_vertices->insert(drvr_vertex); - Level drvr_level = drvr_vertex->level(); - if (max_drvr == nullptr - || drvr_level > max_drvr_level) { - max_drvr = drvr_vertex; - max_drvr_level = drvr_level; + Vertex *load_vertex = firstLoad(drvr_vertex); + if (load_vertex) { + debugPrint(debug_, "delay_calc", 3, "multi-driver net"); + MultiDrvrNet *multi_drvr = new MultiDrvrNet; + VertexSeq &drvr_vertices = multi_drvr->drvrs(); + Level max_drvr_level = 0; + Vertex *max_drvr = nullptr; + VertexInEdgeIterator edge_iter(load_vertex, graph_); + while (edge_iter.hasNext()) { + Edge *edge = edge_iter.next(); + if (edge->isWire()) { + Vertex *drvr = edge->from(graph_); + const Pin *drvr_pin = drvr->pin(); + if (isLeafDriver(drvr_pin, network_)) { + debugPrint(debug_, "delay_calc", 3, " %s", + network_->pathName(drvr_pin)); + multi_drvr_net_map_[drvr] = multi_drvr; + drvr_vertices.push_back(drvr); + Level drvr_level = drvr->level(); + if (max_drvr == nullptr + || drvr_level > max_drvr_level) { + max_drvr = drvr; + max_drvr_level = drvr_level; + } + } + } } + multi_drvr->setDcalcDrvr(max_drvr); + multi_drvr->findCaps(sdc_); + return multi_drvr; } - multi_drvr->setDcalcDrvr(max_drvr); - multi_drvr->findCaps(sdc_); - return multi_drvr; + report_->critical(1101, "mult_drvr missing load."); + return nullptr; } void @@ -751,7 +783,7 @@ GraphDelayCalc::findDriverDelays1(Vertex *drvr_vertex, && multi_drvr->parallelGates(network_)) { // Only init on the trigger driver. if (drvr_vertex == multi_drvr->dcalcDrvr()) { - for (auto vertex : *multi_drvr->drvrs()) + for (auto vertex : multi_drvr->drvrs()) initWireDelays(vertex); } } @@ -902,7 +934,7 @@ GraphDelayCalc::makeArcDcalcArgs(Vertex *drvr_vertex, ArcDelayCalc *arc_delay_calc) { ArcDcalcArgSeq dcalc_args; - for (auto drvr_vertex1 : *multi_drvr->drvrs()) { + for (auto drvr_vertex1 : multi_drvr->drvrs()) { Edge *edge1 = nullptr; const TimingArc *arc1 = nullptr; if (drvr_vertex1 == drvr_vertex) { @@ -1526,17 +1558,11 @@ GraphDelayCalc::minPeriod(const Pin *pin, //////////////////////////////////////////////////////////////// -MultiDrvrNet::MultiDrvrNet(VertexSet *drvrs) : - dcalc_drvr_(nullptr), - drvrs_(drvrs) +MultiDrvrNet::MultiDrvrNet() : + dcalc_drvr_(nullptr) { } -MultiDrvrNet::~MultiDrvrNet() -{ - delete drvrs_; -} - void MultiDrvrNet::netCaps(const RiseFall *drvr_rf, const DcalcAnalysisPt *dcalc_ap, diff --git a/include/sta/GraphDelayCalc.hh b/include/sta/GraphDelayCalc.hh index b6ae00dc..ef467261 100644 --- a/include/sta/GraphDelayCalc.hh +++ b/include/sta/GraphDelayCalc.hh @@ -17,6 +17,7 @@ #pragma once #include +#include #include "Map.hh" #include "NetworkClass.hh" @@ -176,8 +177,11 @@ protected: const DcalcAnalysisPt *dcalc_ap); bool findDriverDelays(Vertex *drvr_vertex, ArcDelayCalc *arc_delay_calc); + MultiDrvrNet *multiDrvrNet(const Vertex *drvr_vertex) const; MultiDrvrNet *findMultiDrvrNet(Vertex *drvr_pin); - MultiDrvrNet *makeMultiDrvrNet(PinSet &drvr_pins); + MultiDrvrNet *makeMultiDrvrNet(Vertex *drvr_vertex); + bool hasMultiDrvrs(Vertex *drvr_vertex); + Vertex *firstLoad(Vertex *drvr_vertex); bool findDriverDelays1(Vertex *drvr_vertex, MultiDrvrNet *multi_drvr, ArcDelayCalc *arc_delay_calc); @@ -238,7 +242,6 @@ protected: const RiseFall *from_rf, const DcalcAnalysisPt *dcalc_ap); bool bidirectDrvrSlewFromLoad(const Vertex *vertex) const; - MultiDrvrNet *multiDrvrNet(const Vertex *drvr_vertex) const; void loadCap(const Parasitic *parasitic, bool has_set_load, // Return values. @@ -263,7 +266,7 @@ protected: SearchPred *clk_pred_; BfsFwdIterator *iter_; MultiDrvrNetMap multi_drvr_net_map_; - bool multi_drvr_nets_found_; + std::mutex multi_drvr_lock_; // Percentage (0.0:1.0) change in delay that causes downstream // delays to be recomputed during incremental delay calculation. float incremental_delay_tolerance_; @@ -288,10 +291,9 @@ public: class MultiDrvrNet { public: - MultiDrvrNet(VertexSet *drvrs); - ~MultiDrvrNet(); - const VertexSet *drvrs() const { return drvrs_; } - VertexSet *drvrs() { return drvrs_; } + MultiDrvrNet(); + VertexSeq &drvrs() { return drvrs_; } + const VertexSeq &drvrs() const { return drvrs_; } bool parallelGates(const Network *network) const; Vertex *dcalcDrvr() const { return dcalc_drvr_; } void setDcalcDrvr(Vertex *drvr); @@ -307,7 +309,7 @@ public: private: // Driver that triggers delay calculation for all the drivers on the net. Vertex *dcalc_drvr_; - VertexSet *drvrs_; + VertexSeq drvrs_; // [drvr_rf->index][dcalc_ap->index] vector net_caps_; }; From 902a1bff86e0f725f47e49457dc260773fa418b6 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Thu, 8 Feb 2024 13:54:52 -0700 Subject: [PATCH 40/43] parasitics api update commit 5eb41d9304fe43d22dcf32b5346a6c9705c0d0b3 Author: James Cherry Date: Thu Feb 8 11:49:16 2024 -0700 tcl endpoint_count Signed-off-by: James Cherry commit ffb0e0a083edbbdc3753b829641ba26730d3d882 Author: James Cherry Date: Thu Feb 8 10:51:36 2024 -0700 ArcDelayCalc::reduceParasitic Signed-off-by: James Cherry commit ed167b218ed026b0b7427301ace67c3d22cc969a Author: James Cherry Date: Wed Feb 7 22:46:40 2024 -0700 parasitics makeResistor/capacitor rm network arg Signed-off-by: James Cherry commit 41244abfcfdee20ddc9aa8ac80cac2e3e7f68146 Author: James Cherry Date: Wed Feb 7 17:08:04 2024 -0700 arnoldi coupling caps Signed-off-by: James Cherry commit a14d6880be0dc22bf008cae63ec93880c8347ccf Author: James Cherry Date: Wed Feb 7 07:28:31 2024 -0700 parasiticLoad Signed-off-by: James Cherry commit 1cacbd7da71c7f8c5ac311caabd03bb74b66e675 Author: James Cherry Date: Wed Feb 7 07:21:49 2024 -0700 parasitic resistor/capacitor index -> id Signed-off-by: James Cherry commit 6c749158cc94e5a91376721a8ccb71a8a4d020d5 Author: James Cherry Date: Tue Feb 6 21:42:03 2024 -0700 arnoldi Signed-off-by: James Cherry commit 4ffa6002224d76321287f64448929e5ef0ec6edd Author: James Cherry Date: Tue Feb 6 18:27:33 2024 -0700 arnoldi parasitic leak Signed-off-by: James Cherry commit a9666dd7c44126b262c7bd1170db69fafa5ef327 Author: James Cherry Date: Tue Feb 6 17:05:24 2024 -0700 arnoldi parasitic leak Signed-off-by: James Cherry commit eca0e8b5ea3b4dbb22a1a2ed11018e6e40229b3f Author: James Cherry Date: Tue Feb 6 14:40:38 2024 -0700 comment Signed-Off-by: James Cherry commit 0263245b5e2412ebefbedc67babf23e1ac047c7b Author: James Cherry Date: Tue Feb 6 14:24:51 2024 -0700 CouplingCap -> Capacitor Signed-off-by: James Cherry commit f9da059814fb09c44cc3529a9a787c3c2192a4e9 Author: James Cherry Date: Tue Feb 6 09:31:00 2024 -0700 rm parasitic network array if empty Signed-off-by: James Cherry commit 28c2728e5f2859839818ef228aac51fd0100ae65 Author: James Cherry Date: Tue Feb 6 08:13:03 2024 -0700 parasitic resistor name -> id Signed-off-by: James Cherry commit 045fd7efa3ae8b1cf07c5aa421f3119022e3895a Author: James Cherry Date: Mon Feb 5 21:09:39 2024 -0700 Map -> map Signed-off-by: James Cherry commit 8f7d18eed14a8173d91fd98a4e345a16d168b0ee Author: James Cherry Date: Mon Feb 5 21:04:35 2024 -0700 ParasiticResistor, ParasiticCapacitor Signed-off-by: James Cherry commit e2df87a10febc573c77b51a22e82d2d1f6f52af9 Author: James Cherry Date: Mon Feb 5 17:06:34 2024 -0700 rm ParasticNode::devices Signed-off-by: James Cherry commit 07133b72b73d204d16f964472c38907c18f9758d Author: James Cherry Date: Mon Feb 5 16:52:43 2024 -0700 Parsitic network nodes instead of nodeIterator Signed-off-by: James Cherry commit 48c08673b11d0c328ed7d70606b6c7a979d9d0b8 Author: James Cherry Date: Mon Feb 5 16:34:31 2024 -0700 mv otherNode to Parasitics Signed-off-by: James Cherry commit 99fccc76937c25c68454d8db667306bff2a142ae Author: James Cherry Date: Mon Feb 5 16:29:23 2024 -0700 ParasiticNetwork resistor/capacitor array Signed-off-by: James Cherry commit 9de49992ad403d7bc3468c53201d50825d7b961c Author: James Cherry Date: Mon Feb 5 09:42:01 2024 -0700 SpefNameMap Signed-off-by: James Cherry commit f296850201debeb2cfe1fd0b9c61c3c196f00d65 Author: James Cherry Date: Mon Feb 5 09:11:17 2024 -0700 comments Signed-off-by: James Cherry commit 86ca29b9bdeb732c1a596c196e0c4bf91de3ee37 Author: James Cherry Date: Mon Feb 5 08:29:53 2024 -0700 rm Parasitics::reduceTo Signed-off-by: James Cherry commit 880bf458d473004ee5d3dc33baa62c9e643ddaec Author: James Cherry Date: Sun Feb 4 20:15:05 2024 -0700 loadCap Signed-off-by: James Cherry commit 67322e686f4703a2a5d9cdd1dd66534814662fe4 Author: James Cherry Date: Sun Feb 4 09:39:21 2024 -0700 report_parasitic_annotation Signed-off-by: James Cherry commit 8ef4e9841bca62a5879e74da83cacee70fa50b2f Author: James Cherry Date: Sat Feb 3 19:13:27 2024 -0700 ParasiticAnalysisPt use string Signed-off-by: James Cherry commit 109a85ab37b5a869a72738ac6a6cd84e4a1d1ac4 Author: James Cherry Date: Sat Feb 3 18:59:02 2024 -0700 rm ParasiticAnalysisPt::min_max_ Signed-off-by: James Cherry commit bb7874537d20a1fe905779fe46d783dba14e2db6 Author: James Cherry Date: Sat Feb 3 12:21:28 2024 -0700 parasitics rm pole_residue pointer Signed-off-by: James Cherry commit 9e1e2c484e5cd088a08afc278f25b9fcf2cc5dd9 Author: James Cherry Date: Sat Feb 3 11:54:22 2024 -0700 parasitics rm loads pointer Signed-off-by: James Cherry commit cb4a7f870b2371a2ac6b3ce1d340bb5d3c24791a Author: James Cherry Date: Sat Feb 3 08:05:55 2024 -0700 parasitics use override Signed-off-by: James Cherry commit 8e0f84c4fec0411ad3626c836710545531ef219d Author: James Cherry Date: Sat Feb 3 07:53:59 2024 -0700 Parasitics::unannotatedLoads Signed-off-by: James Cherry commit 6b45e369e7be158616219258e6e9a675e87fd8ca Author: James Cherry Date: Fri Feb 2 12:27:23 2024 -0700 format Signed-off-by: James Cherry commit 27e820b36caf7867d20307c7045e86486819db6b Author: James Cherry Date: Thu Feb 1 18:01:51 2024 -0700 rm op_cond args Signed-off-by: James Cherry commit 351ed53925c7cc9815f75c34a0320b0dc50445d4 Author: James Cherry Date: Wed Jan 31 17:35:15 2024 -0700 rm GraphDelayCalc::loadPins() Signed-off-by: James Cherry commit 3341c7caff595dab0b7519ab5103958aadfe1510 Author: James Cherry Date: Wed Jan 31 17:31:56 2024 -0700 read_spef arg check Signed-off-by: James Cherry commit 7d0c1e78b42e33d5298efefa87a982f28f51bc57 Author: James Cherry Date: Wed Jan 31 10:53:35 2024 -0700 arnoldi use parasitics api Signed-off-by: James Cherry commit 86b39ac10e5c6556a9b0b5b7bce016884cd935ee Author: James Cherry Date: Wed Jan 31 10:30:47 2024 -0700 range iter Signed-off-by: James Cherry commit 469fad36af69cc8b76e4dfc88a085962795d7c46 Author: James Cherry Date: Tue Jan 30 16:43:46 2024 -0700 read_spef -reduce Signed-off-by: James Cherry commit 2b88aa471f083ae895f6277c2c844e308451fff9 Author: James Cherry Date: Mon Jan 29 20:31:47 2024 -0700 Paraasitics::connectionPin() -> pin() Signed-off-by: James Cherry commit 7b9ff7e228b215b3121b7e7189d9c0c18ced3ef3 Author: James Cherry Date: Mon Jan 29 17:12:32 2024 -0700 ParasiticNode::isExternal() Signed-off-by: James Cherry commit 889c27af846ed1cdf76295da5262836378ab9162 Author: James Cherry Date: Mon Jan 29 11:17:59 2024 -0700 rm redundant op_cond arg Signed-off-by: James Cherry commit 7d7ce5e7809bc80f36dd81cb05615a87433ed315 Author: James Cherry Date: Mon Jan 29 11:03:42 2024 -0700 mv estimatePiElmore to Parasitics Signed-off-by: James Cherry commit 04e1757b3c8b4e9f5cffbe3b03214fc065fb1c2c Author: James Cherry Date: Mon Jan 29 09:09:28 2024 -0700 ParasiticNode un-virtual Signed-off-by: James Cherry commit 016ce50f82cbb68f9536d3ed5fd511b2f82f4439 Author: James Cherry Date: Sun Jan 28 17:26:04 2024 -0700 parasitics coupling cap api Signed-off-by: James Cherry commit 1748629fb462b24b43002ecd3fe1679d367752f4 Author: James Cherry Date: Sun Jan 28 11:12:46 2024 -0700 Parasitics::value rm ap arg Signed-off-by: James Cherry commit 1272cb86bcae5960c9af7d589f99f1488aa0b322 Author: James Cherry Date: Sun Jan 28 11:10:57 2024 -0700 read_spef rm -quiet arg Signed-off-by: James Cherry commit 3d86a9d86115dde5f20eb4bb8ca15f0c85de5810 Author: James Cherry Date: Sun Jan 28 11:01:24 2024 -0700 reduce min_max arg Signed-off-by: James Cherry commit f7abfd5e72e0f74b9ffabf6306bbf809b62d4e98 Author: James Cherry Date: Sun Jan 28 10:59:29 2024 -0700 rm spef_reader Signed-off-by: James Cherry commit e3550523b1964b2137419240f748a0b44c3322b6 Author: James Cherry Date: Sun Jan 28 10:58:24 2024 -0700 reducers rm op_cond arg Signed-off-by: James Cherry commit cec793accb3db5c41cdb51f85c8530ffc1e085db Author: James Cherry Date: Sun Jan 28 10:08:45 2024 -0700 rm NullParastics Signed-off-by: James Cherry commit 6596d35f6da51cbacb2c21588715773d3b5edb64 Author: James Cherry Date: Sun Jan 28 10:03:29 2024 -0700 ArcDelayCalc::reduceParasitic Signed-off-by: James Cherry Signed-off-by: James Cherry --- CMakeLists.txt | 1 - dcalc/Arnoldi.hh | 2 + dcalc/ArnoldiDelayCalc.cc | 85 +- dcalc/ArnoldiReduce.cc | 146 +-- dcalc/ArnoldiReduce.hh | 20 +- dcalc/DelayCalcBase.cc | 36 +- dcalc/DelayCalcBase.hh | 13 +- dcalc/DmpDelayCalc.cc | 83 +- dcalc/GraphDelayCalc.cc | 210 ++-- dcalc/LumpedCapDelayCalc.cc | 78 +- dcalc/LumpedCapDelayCalc.hh | 7 +- dcalc/UnitDelayCalc.cc | 17 +- dcalc/UnitDelayCalc.hh | 9 +- doc/ChangeLog.txt | 6 + doc/OpenSTA.odt | Bin 105077 -> 105281 bytes doc/OpenSTA.pdf | Bin 250794 -> 251507 bytes include/sta/ArcDelayCalc.hh | 13 +- include/sta/Corner.hh | 5 +- include/sta/GraphDelayCalc.hh | 88 +- include/sta/NullParasitics.hh | 198 ---- include/sta/Parasitics.hh | 213 ++-- include/sta/ParasiticsClass.hh | 5 +- include/sta/Sdc.hh | 8 +- include/sta/Sta.hh | 15 +- parasitics/ConcreteParasitics.cc | 1237 +++++++++-------------- parasitics/ConcreteParasitics.hh | 293 +++--- parasitics/ConcreteParasiticsPvt.hh | 431 +++----- parasitics/EstimateParasitics.cc | 48 +- parasitics/EstimateParasitics.hh | 15 +- parasitics/NullParasitics.cc | 467 --------- parasitics/Parasitics.cc | 212 +++- parasitics/Parasitics.i | 8 +- parasitics/Parasitics.tcl | 35 +- parasitics/ReduceParasitics.cc | 428 ++++---- parasitics/ReduceParasitics.hh | 12 +- parasitics/ReportParasiticAnnotation.cc | 14 +- parasitics/SpefReader.cc | 234 ++--- parasitics/SpefReader.hh | 15 +- parasitics/SpefReaderPvt.hh | 45 +- sdc/Sdc.cc | 36 +- search/Corner.cc | 57 +- search/ReportPath.cc | 16 +- search/ReportPath.hh | 3 - search/Sta.cc | 44 +- search/WritePathSpice.cc | 150 +-- tcl/CmdArgs.tcl | 2 +- tcl/StaTcl.i | 6 + tcl/StaTclTypes.i | 15 - util/RiseFallMinMax.cc | 4 +- 49 files changed, 1886 insertions(+), 3199 deletions(-) delete mode 100644 include/sta/NullParasitics.hh delete mode 100644 parasitics/NullParasitics.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index bb1d30b0..2436b263 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -115,7 +115,6 @@ set(STA_SOURCE parasitics/ConcreteParasitics.cc parasitics/EstimateParasitics.cc - parasitics/NullParasitics.cc parasitics/Parasitics.cc parasitics/ReduceParasitics.cc parasitics/ReportParasiticAnnotation.cc diff --git a/dcalc/Arnoldi.hh b/dcalc/Arnoldi.hh index 545bec72..3dc238b1 100644 --- a/dcalc/Arnoldi.hh +++ b/dcalc/Arnoldi.hh @@ -64,6 +64,8 @@ public: rcmodel(); virtual ~rcmodel(); virtual float capacitance() const; + virtual PinSet unannotatedLoads(const Pin *drvr_pin, + const Parasitics *parasitics) const; const Pin **pinV; // [n] }; diff --git a/dcalc/ArnoldiDelayCalc.cc b/dcalc/ArnoldiDelayCalc.cc index 88d0c880..5cb2cf86 100644 --- a/dcalc/ArnoldiDelayCalc.cc +++ b/dcalc/ArnoldiDelayCalc.cc @@ -30,6 +30,7 @@ #include "TimingModel.hh" #include "TimingArc.hh" #include "TableModel.hh" +#include "PortDirection.hh" #include "Network.hh" #include "Graph.hh" #include "Parasitics.hh" @@ -117,7 +118,10 @@ public: Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) override; - ReducedParasiticType reducedParasiticType() const override; + Parasitic *reduceParasitic(const Parasitic *parasitic_network, + const Pin *drvr_pin, + const RiseFall *rf, + const DcalcAnalysisPt *dcalc_ap) override; ArcDcalcResult inputPortDelay(const Pin *port_pin, float in_slew, const RiseFall *rf, @@ -140,6 +144,7 @@ public: const LoadPinIndexMap &load_pin_index_map, const DcalcAnalysisPt *dcalc_ap, int digits) override; + void finishDrvrPin() override; void delay_work_set_thresholds(delay_work *D, double lo, double hi, @@ -219,6 +224,7 @@ private: int pin_n_; ArnoldiReduce *reduce_; delay_work *delay_work_; + vector unsaved_parasitics_; }; ArcDelayCalc * @@ -259,49 +265,53 @@ ArnoldiDelayCalc::findParasitic(const Pin *drvr_pin, Parasitic *parasitic = nullptr; const Corner *corner = dcalc_ap->corner(); // set_load net has precedence over parasitics. - if (!sdc_->drvrPinHasWireCap(drvr_pin, corner)) { - const ParasiticAnalysisPt *parasitic_ap = dcalc_ap->parasiticAnalysisPt(); - Parasitic *parasitic_network = - parasitics_->findParasiticNetwork(drvr_pin, parasitic_ap); - bool delete_parasitic_network = false; - - const MinMax *cnst_min_max = dcalc_ap->constraintMinMax(); - const OperatingConditions *op_cond = dcalc_ap->operatingConditions(); - if (parasitic_network == nullptr) { - Wireload *wireload = sdc_->wireload(cnst_min_max); - if (wireload) { - float pin_cap, wire_cap, fanout; - bool has_wire_cap; - graph_delay_calc_->netCaps(drvr_pin, drvr_rf, dcalc_ap, - pin_cap, wire_cap, fanout, has_wire_cap); - parasitic_network = parasitics_->makeWireloadNetwork(drvr_pin, wireload, - fanout, op_cond, - parasitic_ap); - delete_parasitic_network = true; - } + if (sdc_->drvrPinHasWireCap(drvr_pin, corner) + || network_->direction(drvr_pin)->isInternal()) + return nullptr; + const ParasiticAnalysisPt *parasitic_ap = dcalc_ap->parasiticAnalysisPt(); + Parasitic *parasitic_network = + parasitics_->findParasiticNetwork(drvr_pin, parasitic_ap); + const MinMax *min_max = dcalc_ap->constraintMinMax(); + if (parasitic_network == nullptr) { + Wireload *wireload = sdc_->wireload(min_max); + if (wireload) { + float pin_cap, wire_cap, fanout; + bool has_wire_cap; + graph_delay_calc_->netCaps(drvr_pin, drvr_rf, dcalc_ap, + pin_cap, wire_cap, fanout, has_wire_cap); + parasitic_network = parasitics_->makeWireloadNetwork(drvr_pin, wireload, + fanout, min_max, + parasitic_ap); } + } - if (parasitic_network) { - parasitic = reduce_->reduceToArnoldi(parasitic_network, - drvr_pin, - parasitic_ap->couplingCapFactor(), - drvr_rf, op_cond, corner, - cnst_min_max, parasitic_ap); - if (delete_parasitic_network) { - Net *net = network_->net(drvr_pin); - parasitics_->deleteParasiticNetwork(net, parasitic_ap); - } - // Arnoldi parasitics are their own class that are not saved in the parasitic db. - unsaved_parasitics_.push_back(parasitic); - } + if (parasitic_network) { + rcmodel *rcmodel = reduce_->reduceToArnoldi(parasitic_network, drvr_pin, + parasitic_ap->couplingCapFactor(), + drvr_rf, corner, min_max, parasitic_ap); + // Arnoldi parasitics are their own class that are not saved in the parasitic db. + unsaved_parasitics_.push_back(rcmodel); + parasitic = rcmodel; } return parasitic; } -ReducedParasiticType -ArnoldiDelayCalc::reducedParasiticType() const +Parasitic * +ArnoldiDelayCalc::reduceParasitic(const Parasitic *, + const Pin *, + const RiseFall *, + const DcalcAnalysisPt *) { - return ReducedParasiticType::arnoldi; + // Decline because reduced arnoldi parasitics are not stored in the parasitics db. + return nullptr; +} + +void +ArnoldiDelayCalc::finishDrvrPin() +{ + for (auto parasitic : unsaved_parasitics_) + delete parasitic; + unsaved_parasitics_.clear(); } ArcDcalcResult @@ -1304,7 +1314,6 @@ ArnoldiDelayCalc::ra_get_r(delay_work *D, r = tlohi/(c_log*c1); if (rdelay>0.0 && r > rdelay) r = rdelay; - // else printf("from rdelay %g to r %g\n",rdelay,r); return r; } diff --git a/dcalc/ArnoldiReduce.cc b/dcalc/ArnoldiReduce.cc index 1a0779d7..5c80c382 100644 --- a/dcalc/ArnoldiReduce.cc +++ b/dcalc/ArnoldiReduce.cc @@ -46,6 +46,14 @@ rcmodel::capacitance() const return ctot; } +PinSet +rcmodel::unannotatedLoads(const Pin *, + const Parasitics *) const +{ + // This should never be called because the rcmodel is not saved in the Parasitics. + return PinSet(); +} + struct ts_point { ParasiticNode *node_; @@ -62,7 +70,7 @@ struct ts_point struct ts_edge { - ConcreteParasiticResistor *resistor_; + ParasiticResistor *resistor_; ts_point *from; ts_point *to; }; @@ -131,23 +139,21 @@ ArnoldiReduce::~ArnoldiReduce() free(ts_pointV); } -Parasitic * +rcmodel * ArnoldiReduce::reduceToArnoldi(Parasitic *parasitic, const Pin *drvr_pin, float coupling_cap_factor, const RiseFall *rf, - const OperatingConditions *op_cond, const Corner *corner, - const MinMax *cnst_min_max, + const MinMax *min_max, const ParasiticAnalysisPt *ap) { parasitic_network_ = reinterpret_cast(parasitic); drvr_pin_ = drvr_pin; coupling_cap_factor_ = coupling_cap_factor; rf_ = rf; - op_cond_ = op_cond; corner_ = corner; - cnst_min_max_ = cnst_min_max; + min_max_ = min_max; ap_ = ap; loadWork(); return makeRcmodelDrv(); @@ -158,18 +164,21 @@ ArnoldiReduce::loadWork() { pt_map_.clear(); - int resistor_count = 0; - ConcreteParasiticDeviceSet devices; - parasitic_network_->devices(&devices); - ConcreteParasiticDeviceSet::Iterator device_iter(devices); - while (device_iter.hasNext()) { - ParasiticDevice *device = device_iter.next(); - if (parasitics_->isResistor(device)) - resistor_count++; - } + const ParasiticResistorSeq &resistors = parasitics_->resistors(parasitic_network_); + int resistor_count = resistors.size(); - termN = parasitic_network_->pinNodes()->size(); - int subnode_count = parasitic_network_->subNodes()->size(); + termN = 0; + int subnode_count = 0; + ParasiticNodeSeq nodes = parasitics_->nodes(parasitic_network_); + for (ParasiticNode *node : nodes) { + if (!parasitics_->isExternal(node)) { + const Pin *pin = parasitics_->pin(node); + if (pin) + termN++; + else + subnode_count++; + } + } ts_pointN = subnode_count + 1 + termN; ts_edgeN = resistor_count; allocPoints(); @@ -191,50 +200,42 @@ ArnoldiReduce::loadWork() pend = pterm0; e = e0; int index = 0; - ConcreteParasiticSubNodeMap::Iterator - sub_node_iter(parasitic_network_->subNodes()); - while (sub_node_iter.hasNext()) { - ConcreteParasiticSubNode *node = sub_node_iter.next(); - pt_map_[node] = index; - p = p0 + index; - p->node_ = node; - p->eN = 0; - p->is_term = false; - index++; + + for (ParasiticNode *node : nodes) { + if (!parasitics_->isExternal(node)) { + const Pin *pin = parasitics_->pin(node); + if (pin) { + p = pend++; + pt_map_[node] = p - p0; + p->node_ = node; + p->eN = 0; + p->is_term = true; + tindex = p - pterm0; + p->tindex = tindex; + pinV[tindex] = pin; + } + else { + pt_map_[node] = index; + p = p0 + index; + p->node_ = node; + p->eN = 0; + p->is_term = false; + index++; + } + } } - ConcreteParasiticPinNodeMap::Iterator - pin_node_iter(parasitic_network_->pinNodes()); - while (pin_node_iter.hasNext()) { - ConcreteParasiticPinNode *node = pin_node_iter.next(); - p = pend++; - pt_map_[node] = p - p0; - p->node_ = node; - p->eN = 0; - p->is_term = true; - tindex = p - pterm0; - p->tindex = tindex; - const Pin *pin = parasitics_->connectionPin(node); - pinV[tindex] = pin; - } - ts_edge **eV = ts_eV; - ConcreteParasiticDeviceSet::Iterator device_iter2(devices); - while (device_iter2.hasNext()) { - ParasiticDevice *device = device_iter2.next(); - if (parasitics_->isResistor(device)) { - ConcreteParasiticResistor *resistor = - reinterpret_cast(device); - ts_point *pt1 = findPt(resistor->node1()); - ts_point *pt2 = findPt(resistor->node2()); - e->from = pt1; - e->to = pt2; - e->resistor_ = resistor; - pt1->eN++; - if (e->from != e->to) - pt2->eN++; - e++; - } + for (ParasiticResistor *resistor : resistors) { + ts_point *pt1 = findPt(parasitics_->node1(resistor)); + ts_point *pt2 = findPt(parasitics_->node2(resistor)); + e->from = pt1; + e->to = pt2; + e->resistor_ = resistor; + pt1->eN++; + if (e->from != e->to) + pt2->eN++; + e++; } for (p=p0;p!=pend;p++) { @@ -313,8 +314,7 @@ ArnoldiReduce::findPt(ParasiticNode *node) rcmodel * ArnoldiReduce::makeRcmodelDrv() { - ParasiticNode *drv_node = parasitics_->findNode(parasitic_network_, - drvr_pin_); + ParasiticNode *drv_node = parasitics_->findNode(parasitic_network_, drvr_pin_); ts_point *pdrv = findPt(drv_node); makeRcmodelDfs(pdrv); getRC(); @@ -322,8 +322,7 @@ ArnoldiReduce::makeRcmodelDrv() return nullptr; setTerms(pdrv); makeRcmodelFromTs(); - rcmodel *mod = makeRcmodelFromW(); - return mod; + return makeRcmodelFromW(); } #define ts_orient( pp, ee) \ @@ -415,7 +414,7 @@ ArnoldiReduce::getRC() p->r = 0.0; if (p->node_) { ParasiticNode *node = p->node_; - double cap = parasitics_->nodeGndCap(node, ap_) + double cap = parasitics_->nodeGndCap(node) + pinCapacitance(node); if (cap > 0.0) { p->c = cap; @@ -424,7 +423,7 @@ ArnoldiReduce::getRC() else p->c = 0.0; if (p->in_edge && p->in_edge->resistor_) - p->r = parasitics_->value(p->in_edge->resistor_, ap_); + p->r = parasitics_->value(p->in_edge->resistor_); if (!(p->r>=0.0 && p->r<100e+3)) { // 0 < r < 100kohm debugPrint(debug_, "arnoldi", 1, "R value %g out of range, drvr pin %s", @@ -433,20 +432,33 @@ ArnoldiReduce::getRC() } } } + for (ParasiticCapacitor *capacitor : parasitics_->capacitors(parasitic_network_)) { + float cap = parasitics_->value(capacitor) * ap_->couplingCapFactor(); + ParasiticNode *node1 = parasitics_->node1(capacitor); + if (!parasitics_->isExternal(node1)) { + ts_point *pt = findPt(node1); + pt->c += cap; + } + ParasiticNode *node2 = parasitics_->node2(capacitor); + if (!parasitics_->isExternal(node2)) { + ts_point *pt = findPt(node2); + pt->c += cap; + } + } } float ArnoldiReduce::pinCapacitance(ParasiticNode *node) { - const Pin *pin = parasitics_->connectionPin(node); + const Pin *pin = parasitics_->pin(node); float pin_cap = 0.0; if (pin) { Port *port = network_->port(pin); LibertyPort *lib_port = network_->libertyPort(port); if (lib_port) - pin_cap = sdc_->pinCapacitance(pin,rf_, op_cond_, corner_, cnst_min_max_); + pin_cap = sdc_->pinCapacitance(pin,rf_, corner_, min_max_); else if (network_->isTopLevelPort(pin)) - pin_cap = sdc_->portExtCap(port, rf_, corner_, cnst_min_max_); + pin_cap = sdc_->portExtCap(port, rf_, corner_, min_max_); } return pin_cap; } diff --git a/dcalc/ArnoldiReduce.hh b/dcalc/ArnoldiReduce.hh index c5e1a004..ad49da34 100644 --- a/dcalc/ArnoldiReduce.hh +++ b/dcalc/ArnoldiReduce.hh @@ -37,21 +37,20 @@ class rcmodel; struct ts_edge; struct ts_point; -typedef Map ArnolidPtMap; +typedef Map ArnolidPtMap; class ArnoldiReduce : public StaState { public: ArnoldiReduce(StaState *sta); ~ArnoldiReduce(); - Parasitic *reduceToArnoldi(Parasitic *parasitic, - const Pin *drvr_pin, - float coupling_cap_factor, - const RiseFall *rf, - const OperatingConditions *op_cond, - const Corner *corner, - const MinMax *cnst_min_max, - const ParasiticAnalysisPt *ap); + rcmodel *reduceToArnoldi(Parasitic *parasitic, + const Pin *drvr_pin, + float coupling_cap_factor, + const RiseFall *rf, + const Corner *corner, + const MinMax *cnst_min_max, + const ParasiticAnalysisPt *ap); protected: void loadWork(); @@ -70,9 +69,8 @@ protected: const Pin *drvr_pin_; float coupling_cap_factor_; const RiseFall *rf_; - const OperatingConditions *op_cond_; const Corner *corner_; - const MinMax *cnst_min_max_; + const MinMax *min_max_; const ParasiticAnalysisPt *ap_; // ParasiticNode -> ts_point index. ArnolidPtMap pt_map_; diff --git a/dcalc/DelayCalcBase.cc b/dcalc/DelayCalcBase.cc index ea748e8d..7db5663f 100644 --- a/dcalc/DelayCalcBase.cc +++ b/dcalc/DelayCalcBase.cc @@ -23,6 +23,7 @@ #include "Network.hh" #include "Parasitics.hh" #include "Sdc.hh" +#include "Corner.hh" #include "DcalcAnalysisPt.hh" namespace sta { @@ -34,6 +35,35 @@ DelayCalcBase::DelayCalcBase(StaState *sta) : { } +void +DelayCalcBase::reduceParasitic(const Parasitic *parasitic_network, + const Net *net, + const Corner *corner, + const MinMaxAll *min_max) +{ + NetConnectedPinIterator *pin_iter = network_->connectedPinIterator(net); + while (pin_iter->hasNext()) { + const Pin *pin = pin_iter->next(); + if (network_->isDriver(pin)) { + for (RiseFall *rf : RiseFall::range()) { + for (const MinMax *min_max : min_max->range()) { + if (corner == nullptr) { + for (const Corner *corner1 : *corners_) { + DcalcAnalysisPt *dcalc_ap = corner1->findDcalcAnalysisPt(min_max); + reduceParasitic(parasitic_network, pin, rf, dcalc_ap); + } + } + else { + DcalcAnalysisPt *dcalc_ap = corner->findDcalcAnalysisPt(min_max); + reduceParasitic(parasitic_network, pin, rf, dcalc_ap); + } + } + } + } + } + delete pin_iter; +} + TimingModel * DelayCalcBase::model(const TimingArc *arc, const DcalcAnalysisPt *dcalc_ap) const @@ -67,12 +97,6 @@ DelayCalcBase::checkModel(const TimingArc *arc, void DelayCalcBase::finishDrvrPin() { - for (auto parasitic : unsaved_parasitics_) - parasitics_->deleteUnsavedParasitic(parasitic); - unsaved_parasitics_.clear(); - for (auto drvr_pin : reduced_parasitic_drvrs_) - parasitics_->deleteDrvrReducedParasitics(drvr_pin); - reduced_parasitic_drvrs_.clear(); } // For DSPF on an input port the elmore delay is used as the time diff --git a/dcalc/DelayCalcBase.hh b/dcalc/DelayCalcBase.hh index 1c7e8173..76137d0b 100644 --- a/dcalc/DelayCalcBase.hh +++ b/dcalc/DelayCalcBase.hh @@ -28,13 +28,18 @@ public: explicit DelayCalcBase(StaState *sta); void finishDrvrPin() override; + void reduceParasitic(const Parasitic *parasitic_network, + const Net *net, + const Corner *corner, + const MinMaxAll *min_max) override; + ArcDelay checkDelay(const Pin *check_pin, const TimingArc *arc, const Slew &from_slew, const Slew &to_slew, float related_out_cap, const DcalcAnalysisPt *dcalc_ap) override; - + string reportCheckDelay(const Pin *check_pin, const TimingArc *arc, const Slew &from_slew, @@ -72,11 +77,7 @@ protected: const Pvt *pinPvt(const Pin *pin, const DcalcAnalysisPt *dcalc_ap); - // Parasitics returned by findParasitic that are reduced or estimated - // that can be deleted after delay calculation for the driver pin - // is finished. - Vector unsaved_parasitics_; - Vector reduced_parasitic_drvrs_; + using ArcDelayCalc::reduceParasitic; }; } // namespace diff --git a/dcalc/DmpDelayCalc.cc b/dcalc/DmpDelayCalc.cc index 15145abd..8006a0f8 100644 --- a/dcalc/DmpDelayCalc.cc +++ b/dcalc/DmpDelayCalc.cc @@ -19,12 +19,13 @@ #include "TableModel.hh" #include "TimingArc.hh" #include "Liberty.hh" +#include "PortDirection.hh" +#include "Network.hh" #include "Sdc.hh" #include "Parasitics.hh" #include "DcalcAnalysisPt.hh" #include "GraphDelayCalc.hh" #include "DmpCeff.hh" -#include "Network.hh" namespace sta { @@ -132,7 +133,6 @@ public: Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) override; - ReducedParasiticType reducedParasiticType() const override; ArcDcalcResult inputPortDelay(const Pin *port_pin, float in_slew, const RiseFall *rf, @@ -210,58 +210,41 @@ DmpCeffTwoPoleDelayCalc::findParasitic(const Pin *drvr_pin, Parasitic *parasitic = nullptr; const Corner *corner = dcalc_ap->corner(); // set_load net has precedence over parasitics. - if (!sdc_->drvrPinHasWireCap(drvr_pin, corner)) { - const ParasiticAnalysisPt *parasitic_ap = dcalc_ap->parasiticAnalysisPt(); - if (parasitics_->haveParasitics()) { - // Prefer PiPoleResidue. - parasitic = parasitics_->findPiPoleResidue(drvr_pin, rf, parasitic_ap); - if (parasitic == nullptr) { - parasitic = parasitics_->findPiElmore(drvr_pin, rf, parasitic_ap); - if (parasitic == nullptr) { - Parasitic *parasitic_network = - parasitics_->findParasiticNetwork(drvr_pin, parasitic_ap); - if (parasitic_network) { - parasitics_->reduceToPiPoleResidue2(parasitic_network, drvr_pin, - dcalc_ap->operatingConditions(), - corner, - dcalc_ap->constraintMinMax(), - parasitic_ap); - parasitic = parasitics_->findPiPoleResidue(drvr_pin, rf, parasitic_ap); - reduced_parasitic_drvrs_.push_back(drvr_pin); - } - } - } - } - else { - const MinMax *cnst_min_max = dcalc_ap->constraintMinMax(); - Wireload *wireload = sdc_->wireload(cnst_min_max); - if (wireload) { - float pin_cap, wire_cap, fanout; - bool has_wire_cap; - graph_delay_calc_->netCaps(drvr_pin, rf, dcalc_ap, - pin_cap, wire_cap, fanout, has_wire_cap); - parasitic = parasitics_->estimatePiElmore(drvr_pin, rf, wireload, - fanout, pin_cap, - dcalc_ap->operatingConditions(), - corner, - cnst_min_max, - parasitic_ap); - // Estimated parasitics are not recorded in the "database", so - // save it for deletion after the drvr pin delay calc is finished. - if (parasitic) - unsaved_parasitics_.push_back(parasitic); - } - } + if (sdc_->drvrPinHasWireCap(drvr_pin, corner) + || network_->direction(drvr_pin)->isInternal()) + return nullptr; + const ParasiticAnalysisPt *parasitic_ap = dcalc_ap->parasiticAnalysisPt(); + // Prefer PiPoleResidue. + parasitic = parasitics_->findPiPoleResidue(drvr_pin, rf, parasitic_ap); + if (parasitic) + return parasitic; + parasitic = parasitics_->findPiElmore(drvr_pin, rf, parasitic_ap); + if (parasitic) + return parasitic; + Parasitic *parasitic_network = + parasitics_->findParasiticNetwork(drvr_pin, parasitic_ap); + if (parasitic_network) { + parasitic = parasitics_->reduceToPiPoleResidue2(parasitic_network, drvr_pin, rf, + corner, + dcalc_ap->constraintMinMax(), + parasitic_ap); + if (parasitic) + return parasitic; + } + const MinMax *cnst_min_max = dcalc_ap->constraintMinMax(); + Wireload *wireload = sdc_->wireload(cnst_min_max); + if (wireload) { + float pin_cap, wire_cap, fanout; + bool has_wire_cap; + graph_delay_calc_->netCaps(drvr_pin, rf, dcalc_ap, pin_cap, wire_cap, + fanout, has_wire_cap); + parasitic = parasitics_->estimatePiElmore(drvr_pin, rf, wireload, + fanout, pin_cap, corner, + cnst_min_max); } return parasitic; } -ReducedParasiticType -DmpCeffTwoPoleDelayCalc::reducedParasiticType() const -{ - return ReducedParasiticType::pi_pole_residue2; -} - ArcDcalcResult DmpCeffTwoPoleDelayCalc::inputPortDelay(const Pin *, float in_slew, diff --git a/dcalc/GraphDelayCalc.cc b/dcalc/GraphDelayCalc.cc index ba9f1463..da3b40d0 100644 --- a/dcalc/GraphDelayCalc.cc +++ b/dcalc/GraphDelayCalc.cc @@ -365,9 +365,11 @@ GraphDelayCalc::seedNoDrvrCellSlew(Vertex *drvr_vertex, Delay drive_delay = delay_zero; float drive_res; drive->driveResistance(rf, cnst_min_max, drive_res, exists); - Parasitic *parasitic = arc_delay_calc->findParasitic(drvr_pin, rf, dcalc_ap); + const Parasitic *parasitic; + float cap; + parasiticLoad(drvr_pin, rf, dcalc_ap, nullptr, arc_delay_calc, + cap, parasitic); if (exists) { - float cap = loadCap(drvr_pin, parasitic, rf, dcalc_ap); drive_delay = cap * drive_res; slew = cap * drive_res; } @@ -408,7 +410,7 @@ GraphDelayCalc::seedNoDrvrSlew(Vertex *drvr_vertex, load_pin_index_map, dcalc_ap); annotateLoadDelays(drvr_vertex, rf, dcalc_result, load_pin_index_map, delay_zero, false, dcalc_ap); - arc_delay_calc->finishDrvrPin(); + arc_delay_calc_->finishDrvrPin(); } void @@ -500,6 +502,7 @@ GraphDelayCalc::findInputDriverDelay(const LibertyCell *drvr_cell, } } } + arc_delay_calc_->finishDrvrPin(); } // Driving cell delay is the load dependent delay, which is the gate @@ -521,8 +524,10 @@ GraphDelayCalc::findInputArcDelay(const Pin *drvr_pin, const RiseFall *drvr_rf = arc->toEdge()->asRiseFall(); if (drvr_rf) { DcalcAPIndex ap_index = dcalc_ap->index(); - Parasitic *parasitic = arc_delay_calc_->findParasitic(drvr_pin, drvr_rf, dcalc_ap); - float load_cap = loadCap(drvr_pin, parasitic, drvr_rf, dcalc_ap); + const Parasitic *parasitic; + float load_cap; + parasiticLoad(drvr_pin, drvr_rf, dcalc_ap, nullptr, arc_delay_calc_, + load_cap, parasitic); LoadPinIndexMap load_pin_index_map = makeLoadPinIndexMap(drvr_vertex); ArcDcalcResult intrinsic_result = @@ -547,6 +552,7 @@ GraphDelayCalc::findInputArcDelay(const Pin *drvr_pin, graph_->setSlew(drvr_vertex, drvr_rf, ap_index, gate_slew); annotateLoadDelays(drvr_vertex, drvr_rf, gate_result, load_pin_index_map, load_delay, false, dcalc_ap); + arc_delay_calc_->finishDrvrPin(); } } @@ -646,7 +652,7 @@ GraphDelayCalc::findDriverDelays(Vertex *drvr_vertex, initLoadSlews(drvr_vertex); delay_changed |= findDriverDelays1(drvr_vertex, multi_drvr, arc_delay_calc); } - arc_delay_calc->finishDrvrPin(); + arc_delay_calc_->finishDrvrPin(); return delay_changed; } @@ -849,7 +855,6 @@ GraphDelayCalc::findDriverEdgeDelays(Vertex *drvr_vertex, Vertex *from_vertex = edge->from(graph_); const TimingArcSet *arc_set = edge->timingArcSet(); bool delay_changed = false; - PinSeq load_pins = loadPins(drvr_vertex); LoadPinIndexMap load_pin_index_map = makeLoadPinIndexMap(drvr_vertex); for (auto dcalc_ap : corners_->dcalcAnalysisPts()) { for (const TimingArc *arc : arc_set->arcs()) @@ -892,9 +897,11 @@ GraphDelayCalc::findDriverArcDelays(Vertex *drvr_vertex, const RiseFall *drvr_rf = arc->toEdge()->asRiseFall(); if (from_rf && drvr_rf) { const Pin *drvr_pin = drvr_vertex->pin(); - Parasitic *parasitic = arc_delay_calc->findParasitic(drvr_pin, drvr_rf, - dcalc_ap); - float load_cap = loadCap(drvr_pin, parasitic, drvr_rf, dcalc_ap, multi_drvr); + const Parasitic *parasitic; + float load_cap; + parasiticLoad(drvr_pin, drvr_rf, dcalc_ap, multi_drvr, arc_delay_calc, + load_cap, parasitic); + if (multi_drvr && multi_drvr->parallelGates(network_)) { ArcDcalcArgSeq dcalc_args = makeArcDcalcArgs(drvr_vertex, multi_drvr, @@ -921,6 +928,7 @@ GraphDelayCalc::findDriverArcDelays(Vertex *drvr_vertex, delay_changed |= annotateDelaysSlews(edge, arc, dcalc_result, load_pin_index_map, dcalc_ap); } + arc_delay_calc->finishDrvrPin(); } return delay_changed; } @@ -1126,21 +1134,6 @@ GraphDelayCalc::annotateLoadDelays(Vertex *drvr_vertex, } } -PinSeq -GraphDelayCalc::loadPins(Vertex *drvr_vertex) -{ - PinSeq load_pins; - VertexOutEdgeIterator edge_iter(drvr_vertex, graph_); - while (edge_iter.hasNext()) { - Edge *wire_edge = edge_iter.next(); - if (wire_edge->isWire()) { - Vertex *load_vertex = wire_edge->to(graph_); - load_pins.push_back(load_vertex->pin()); - } - } - return load_pins; -} - LoadPinIndexMap GraphDelayCalc::makeLoadPinIndexMap(Vertex *drvr_vertex) { @@ -1159,6 +1152,7 @@ GraphDelayCalc::makeLoadPinIndexMap(Vertex *drvr_vertex) return load_pin_index_map; } +// External float GraphDelayCalc::loadCap(const Pin *drvr_pin, const DcalcAnalysisPt *dcalc_ap) const @@ -1166,92 +1160,104 @@ GraphDelayCalc::loadCap(const Pin *drvr_pin, const MinMax *min_max = dcalc_ap->constraintMinMax(); float load_cap = 0.0; for (auto drvr_rf : RiseFall::range()) { - Parasitic *parasitic = arc_delay_calc_->findParasitic(drvr_pin, drvr_rf, dcalc_ap); - float cap = loadCap(drvr_pin, parasitic, drvr_rf, dcalc_ap, nullptr); - arc_delay_calc_->finishDrvrPin(); + float cap = loadCap(drvr_pin, drvr_rf, dcalc_ap); if (min_max->compare(cap, load_cap)) load_cap = cap; } + arc_delay_calc_->finishDrvrPin(); return load_cap; } +// External float GraphDelayCalc::loadCap(const Pin *drvr_pin, - const RiseFall *drvr_rf, - const DcalcAnalysisPt *dcalc_ap) const -{ - Parasitic *parasitic = arc_delay_calc_->findParasitic(drvr_pin, drvr_rf, - dcalc_ap); - float cap = loadCap(drvr_pin, parasitic, drvr_rf, dcalc_ap, nullptr); - return cap; -} - -float -GraphDelayCalc::loadCap(const Pin *drvr_pin, - const Parasitic *parasitic, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) const -{ - return loadCap(drvr_pin, parasitic, rf, dcalc_ap, nullptr); -} - -float -GraphDelayCalc::loadCap(const Pin *drvr_pin, - const Parasitic *parasitic, - const RiseFall *rf, - const DcalcAnalysisPt *dcalc_ap, - const MultiDrvrNet *multi_drvr) const { float pin_cap, wire_cap; - bool has_net_load; - float fanout; - if (multi_drvr) - multi_drvr->netCaps(rf, dcalc_ap, - pin_cap, wire_cap, fanout, has_net_load); - else - netCaps(drvr_pin, rf, dcalc_ap, - pin_cap, wire_cap, fanout, has_net_load); - loadCap(parasitic, has_net_load, pin_cap, wire_cap); - return wire_cap + pin_cap; + loadCap(drvr_pin, rf, dcalc_ap, pin_cap, wire_cap); + return pin_cap + wire_cap; } +// External void GraphDelayCalc::loadCap(const Pin *drvr_pin, - const Parasitic *parasitic, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap, - // Return values. float &pin_cap, float &wire_cap) const { - bool has_net_load; - float fanout; - // Find pin and external pin/wire capacitance. - netCaps(drvr_pin, rf, dcalc_ap, - pin_cap, wire_cap, fanout, has_net_load); - loadCap(parasitic, has_net_load, pin_cap, wire_cap); + MultiDrvrNet *multi_drvr = nullptr; + if (graph_) { + Vertex *drvr_vertex = graph_->pinDrvrVertex(drvr_pin); + multi_drvr = multiDrvrNet(drvr_vertex); + } + const Parasitic *parasitic; + parasiticLoad(drvr_pin, rf, dcalc_ap, multi_drvr, arc_delay_calc_, + pin_cap, wire_cap, parasitic); + arc_delay_calc_->finishDrvrPin(); +} + +float +GraphDelayCalc::loadCap(const Pin *drvr_pin, + const RiseFall *rf, + const DcalcAnalysisPt *dcalc_ap, + ArcDelayCalc *arc_delay_calc) const +{ + const Parasitic *parasitic; + float pin_cap, wire_cap; + parasiticLoad(drvr_pin, rf, dcalc_ap, nullptr, arc_delay_calc, + pin_cap, wire_cap, parasitic); + return pin_cap + wire_cap; } void -GraphDelayCalc::loadCap(const Parasitic *parasitic, - bool has_net_load, - // Return values. - float &pin_cap, - float &wire_cap) const +GraphDelayCalc::parasiticLoad(const Pin *drvr_pin, + const RiseFall *rf, + const DcalcAnalysisPt *dcalc_ap, + const MultiDrvrNet *multi_drvr, + ArcDelayCalc *arc_delay_calc, + // Return values. + float &load_cap, + const Parasitic *¶sitic) const { + float pin_cap, wire_cap; + parasiticLoad(drvr_pin, rf, dcalc_ap, multi_drvr, arc_delay_calc, + pin_cap, wire_cap, parasitic); + load_cap = pin_cap + wire_cap; +} + +void +GraphDelayCalc::parasiticLoad(const Pin *drvr_pin, + const RiseFall *rf, + const DcalcAnalysisPt *dcalc_ap, + const MultiDrvrNet *multi_drvr, + ArcDelayCalc *arc_delay_calc, + // Return values. + float &pin_cap, + float &wire_cap, + const Parasitic *¶sitic) const +{ + bool has_net_load; + float fanout; + netCaps(drvr_pin, rf, dcalc_ap, multi_drvr, + pin_cap, wire_cap, fanout, has_net_load); + + parasitic = arc_delay_calc->findParasitic(drvr_pin, rf, dcalc_ap); // set_load net has precedence over parasitics. if (!has_net_load && parasitic) { if (parasitics_->isParasiticNetwork(parasitic)) wire_cap += parasitics_->capacitance(parasitic); else { // PiModel includes both pin and external caps. - float cap = parasitics_->capacitance(parasitic); - if (pin_cap > cap) { - pin_cap = 0.0; - wire_cap = cap; + float parasitic_cap = parasitics_->capacitance(parasitic); + if (parasitic_cap >= pin_cap) + wire_cap = parasitic_cap - pin_cap; + else { + wire_cap = 0.0; + // Ignore parasitic if pin cap is greater. + parasitic = nullptr; } - else - wire_cap = cap - pin_cap; } } } @@ -1271,15 +1277,29 @@ GraphDelayCalc::netCaps(const Pin *drvr_pin, Vertex *drvr_vertex = graph_->pinDrvrVertex(drvr_pin); multi_drvr = multiDrvrNet(drvr_vertex); } + netCaps(drvr_pin, rf, dcalc_ap, multi_drvr, + pin_cap, wire_cap, fanout, has_net_load); +} + +void +GraphDelayCalc::netCaps(const Pin *drvr_pin, + const RiseFall *rf, + const DcalcAnalysisPt *dcalc_ap, + const MultiDrvrNet *multi_drvr, + // Return values. + float &pin_cap, + float &wire_cap, + float &fanout, + bool &has_net_load) const +{ if (multi_drvr) multi_drvr->netCaps(rf, dcalc_ap, pin_cap, wire_cap, fanout, has_net_load); else { - const OperatingConditions *op_cond = dcalc_ap->operatingConditions(); const Corner *corner = dcalc_ap->corner(); const MinMax *min_max = dcalc_ap->constraintMinMax(); // Find pin and external pin/wire capacitance. - sdc_->connectedCap(drvr_pin, rf, op_cond, corner, min_max, + sdc_->connectedCap(drvr_pin, rf, corner, min_max, pin_cap, wire_cap, fanout, has_net_load); } } @@ -1405,13 +1425,8 @@ GraphDelayCalc::findCheckEdgeDelays(Edge *edge, delayAsString(from_slew, this), delayAsString(to_slew, this)); float related_out_cap = 0.0; - if (related_out_pin) { - Parasitic *related_out_parasitic = - arc_delay_calc->findParasitic(related_out_pin, to_rf, dcalc_ap); - related_out_cap = loadCap(related_out_pin, - related_out_parasitic, - to_rf, dcalc_ap); - } + if (related_out_pin) + related_out_cap = loadCap(related_out_pin, to_rf,dcalc_ap,arc_delay_calc); ArcDelay check_delay = arc_delay_calc->checkDelay(to_pin, arc, from_slew, to_slew, related_out_cap, dcalc_ap); @@ -1420,6 +1435,7 @@ GraphDelayCalc::findCheckEdgeDelays(Edge *edge, delayAsString(check_delay, this)); graph_->setArcDelay(edge, arc, ap_index, check_delay); delay_changed = true; + arc_delay_calc_->finishDrvrPin(); } } } @@ -1467,12 +1483,8 @@ GraphDelayCalc::reportDelayCalc(const Edge *edge, if (related_out_port) related_out_pin = network_->findPin(inst, related_out_port); float related_out_cap = 0.0; - if (related_out_pin) { - Parasitic *related_out_parasitic = - arc_delay_calc_->findParasitic(related_out_pin, to_rf, dcalc_ap); - related_out_cap = loadCap(related_out_pin, related_out_parasitic, - to_rf, dcalc_ap); - } + if (related_out_pin) + related_out_cap = loadCap(related_out_pin, to_rf, dcalc_ap, arc_delay_calc_); if (role->isTimingCheck()) { const Slew &from_slew = checkEdgeClkSlew(from_vertex, from_rf, dcalc_ap); int slew_index = dcalc_ap->checkDataSlewIndex(); @@ -1484,10 +1496,11 @@ GraphDelayCalc::reportDelayCalc(const Edge *edge, related_out_cap, dcalc_ap, digits); } else { - Parasitic *to_parasitic = - arc_delay_calc_->findParasitic(to_pin, to_rf, dcalc_ap); const Slew &from_slew = edgeFromSlew(from_vertex, from_rf, edge, dcalc_ap); - float load_cap = loadCap(to_pin, to_parasitic, to_rf, dcalc_ap); + const Parasitic *to_parasitic; + float load_cap; + parasiticLoad(to_pin, to_rf, dcalc_ap, nullptr, arc_delay_calc_, + load_cap, to_parasitic); LoadPinIndexMap load_pin_index_map = makeLoadPinIndexMap(to_vertex); result = arc_delay_calc_->reportGateDelay(to_pin, arc, from_slew, load_cap, to_parasitic, load_pin_index_map, @@ -1591,7 +1604,6 @@ MultiDrvrNet::findCaps(const Sdc *sdc) for (auto dcalc_ap : corners->dcalcAnalysisPts()) { DcalcAPIndex ap_index = dcalc_ap->index(); const Corner *corner = dcalc_ap->corner(); - const OperatingConditions *op_cond = dcalc_ap->operatingConditions(); const MinMax *min_max = dcalc_ap->constraintMinMax(); for (auto drvr_rf : RiseFall::range()) { int drvr_rf_index = drvr_rf->index(); @@ -1600,7 +1612,7 @@ MultiDrvrNet::findCaps(const Sdc *sdc) float pin_cap, wire_cap, fanout; bool has_net_load; // Find pin and external pin/wire capacitance. - sdc->connectedCap(drvr_pin, drvr_rf, op_cond, corner, min_max, + sdc->connectedCap(drvr_pin, drvr_rf, corner, min_max, pin_cap, wire_cap, fanout, has_net_load); net_caps.init(pin_cap, wire_cap, fanout, has_net_load); } diff --git a/dcalc/LumpedCapDelayCalc.cc b/dcalc/LumpedCapDelayCalc.cc index 975ca045..67cecec0 100644 --- a/dcalc/LumpedCapDelayCalc.cc +++ b/dcalc/LumpedCapDelayCalc.cc @@ -23,6 +23,7 @@ #include "TimingArc.hh" #include "TimingModel.hh" #include "Liberty.hh" +#include "PortDirection.hh" #include "Network.hh" #include "Sdc.hh" #include "Parasitics.hh" @@ -58,53 +59,46 @@ LumpedCapDelayCalc::findParasitic(const Pin *drvr_pin, Parasitic *parasitic = nullptr; const Corner *corner = dcalc_ap->corner(); // set_load net has precedence over parasitics. - if (!sdc_->drvrPinHasWireCap(drvr_pin, corner)) { - const ParasiticAnalysisPt *parasitic_ap = dcalc_ap->parasiticAnalysisPt(); - if (parasitics_->haveParasitics()) { - // Prefer PiElmore. - parasitic = parasitics_->findPiElmore(drvr_pin, rf, parasitic_ap); - if (parasitic == nullptr) { - Parasitic *parasitic_network = - parasitics_->findParasiticNetwork(drvr_pin, parasitic_ap); - if (parasitic_network) { - parasitics_->reduceToPiElmore(parasitic_network, drvr_pin, - dcalc_ap->operatingConditions(), - corner, - dcalc_ap->constraintMinMax(), - parasitic_ap); - parasitic = parasitics_->findPiElmore(drvr_pin, rf, parasitic_ap); - reduced_parasitic_drvrs_.push_back(drvr_pin); - } - } - } - else { - const MinMax *cnst_min_max = dcalc_ap->constraintMinMax(); - Wireload *wireload = sdc_->wireload(cnst_min_max); - if (wireload) { - float pin_cap, wire_cap, fanout; - bool has_net_load; - graph_delay_calc_->netCaps(drvr_pin, rf, dcalc_ap, - pin_cap, wire_cap, fanout, has_net_load); - parasitic = parasitics_->estimatePiElmore(drvr_pin, rf, wireload, - fanout, pin_cap, - dcalc_ap->operatingConditions(), - corner, - cnst_min_max, - parasitic_ap); - // Estimated parasitics are not recorded in the "database", so save - // it for deletion after the drvr pin delay calc is finished. - if (parasitic) - unsaved_parasitics_.push_back(parasitic); - } - } + if (sdc_->drvrPinHasWireCap(drvr_pin, corner) + || network_->direction(drvr_pin)->isInternal()) + return nullptr; + const ParasiticAnalysisPt *parasitic_ap = dcalc_ap->parasiticAnalysisPt(); + // Prefer PiElmore. + parasitic = parasitics_->findPiElmore(drvr_pin, rf, parasitic_ap); + if (parasitic) + return parasitic; + Parasitic *parasitic_network = parasitics_->findParasiticNetwork(drvr_pin, + parasitic_ap); + if (parasitic_network) { + parasitic = reduceParasitic(parasitic_network, drvr_pin, rf, dcalc_ap); + if (parasitic) + return parasitic; + } + const MinMax *min_max = dcalc_ap->constraintMinMax(); + Wireload *wireload = sdc_->wireload(min_max); + if (wireload) { + float pin_cap, wire_cap, fanout; + bool has_net_load; + graph_delay_calc_->netCaps(drvr_pin, rf, dcalc_ap, + pin_cap, wire_cap, fanout, has_net_load); + parasitic = parasitics_->estimatePiElmore(drvr_pin, rf, wireload, fanout, + pin_cap, corner, min_max); } return parasitic; } -ReducedParasiticType -LumpedCapDelayCalc::reducedParasiticType() const +Parasitic * +LumpedCapDelayCalc::reduceParasitic(const Parasitic *parasitic_network, + const Pin *drvr_pin, + const RiseFall *rf, + const DcalcAnalysisPt *dcalc_ap) + { - return ReducedParasiticType::pi_elmore; + const Corner *corner = dcalc_ap->corner(); + const ParasiticAnalysisPt *parasitic_ap = dcalc_ap->parasiticAnalysisPt(); + return parasitics_->reduceToPiElmore(parasitic_network, drvr_pin, rf, + corner, dcalc_ap->constraintMinMax(), + parasitic_ap); } ArcDcalcResult diff --git a/dcalc/LumpedCapDelayCalc.hh b/dcalc/LumpedCapDelayCalc.hh index 0968c494..b62a2faf 100644 --- a/dcalc/LumpedCapDelayCalc.hh +++ b/dcalc/LumpedCapDelayCalc.hh @@ -30,7 +30,10 @@ public: Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) override; - ReducedParasiticType reducedParasiticType() const override; + Parasitic *reduceParasitic(const Parasitic *parasitic_network, + const Pin *drvr_pin, + const RiseFall *rf, + const DcalcAnalysisPt *dcalc_ap) override; ArcDcalcResult inputPortDelay(const Pin *port_pin, float in_slew, const RiseFall *rf, @@ -59,6 +62,8 @@ protected: ArcDelay gate_delay, Slew drvr_slew, const LoadPinIndexMap &load_pin_index_map); + + using ArcDelayCalc::reduceParasitic; }; ArcDelayCalc * diff --git a/dcalc/UnitDelayCalc.cc b/dcalc/UnitDelayCalc.cc index d9ce6c7a..39c02fb5 100644 --- a/dcalc/UnitDelayCalc.cc +++ b/dcalc/UnitDelayCalc.cc @@ -45,10 +45,21 @@ UnitDelayCalc::findParasitic(const Pin *, return nullptr; } -ReducedParasiticType -UnitDelayCalc::reducedParasiticType() const +Parasitic * +UnitDelayCalc::reduceParasitic(const Parasitic *, + const Pin *, + const RiseFall *, + const DcalcAnalysisPt *) +{ + return nullptr; +} + +void +UnitDelayCalc::reduceParasitic(const Parasitic *, + const Net *, + const Corner *, + const MinMaxAll *) { - return ReducedParasiticType::none; } ArcDcalcResult diff --git a/dcalc/UnitDelayCalc.hh b/dcalc/UnitDelayCalc.hh index 788a3742..8d247f5d 100644 --- a/dcalc/UnitDelayCalc.hh +++ b/dcalc/UnitDelayCalc.hh @@ -29,7 +29,14 @@ public: Parasitic *findParasitic(const Pin *drvr_pin, const RiseFall *rf, const DcalcAnalysisPt *dcalc_ap) override; - ReducedParasiticType reducedParasiticType() const override; + Parasitic *reduceParasitic(const Parasitic *parasitic_network, + const Pin *drvr_pin, + const RiseFall *rf, + const DcalcAnalysisPt *dcalc_ap) override; + void reduceParasitic(const Parasitic *parasitic_network, + const Net *net, + const Corner *corner, + const MinMaxAll *min_max) override; ArcDcalcResult inputPortDelay(const Pin *port_pin, float in_slew, const RiseFall *rf, diff --git a/doc/ChangeLog.txt b/doc/ChangeLog.txt index d6a2e522..f665546c 100644 --- a/doc/ChangeLog.txt +++ b/doc/ChangeLog.txt @@ -10,6 +10,12 @@ The report_net -connections, -verbose and -hier_pins flags are deprecated. The report_instance -connections and -verbose flags are deprecated. The options are now enabled in all cases. +The read_spef parasitic reduction arguments have changed. The +-reduce_to and -delete_after_reduce arguments are deprecated and +replaced with the -reduce flag. With the -reduce flag, the current +delay calculator reduces the parastic network to the appropriate type +and deletes the parasitic network. + Release 2.4.0 2023/01/19 ------------------------- diff --git a/doc/OpenSTA.odt b/doc/OpenSTA.odt index 38c37ccbc4a853bf2eb845bfbcdc61ffa70d71c2..30afc942bfb3925e7e5bdbad91fe93567e9f1fce 100644 GIT binary patch delta 76137 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≥$#8akE;!We6 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%0AxYyD>$rno?C1}le#uGp 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