Merge remote-tracking branch 'upstream/master'

This commit is contained in:
dsengupta0628 2026-03-16 17:50:53 +00:00
commit d213f0fa71
372 changed files with 755 additions and 682 deletions

View File

@ -22,7 +22,7 @@ BreakBeforeBinaryOperators: NonAssignment
BreakBeforeBraces: Custom BreakBeforeBraces: Custom
# fails if all initializers fit on one line # fails if all initializers fit on one line
BreakConstructorInitializers: AfterColon BreakConstructorInitializers: AfterColon
ColumnLimit: 90 ColumnLimit: 85
# fails # fails
ConstructorInitializerIndentWidth: 2 ConstructorInitializerIndentWidth: 2
IncludeBlocks: Preserve IncludeBlocks: Preserve

View File

@ -11,7 +11,7 @@ RUN sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo \
RUN sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo \ RUN sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo \
&& sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo \ && sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo \
&& sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo \ && sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo \
&& yum install -y devtoolset-11 wget cmake3 make eigen3-devel tcl swig3 flex zlib-devel valgrind \ && yum install -y devtoolset-11 git wget cmake3 make eigen3-devel tcl swig3 flex zlib-devel valgrind \
&& yum clean -y all && yum clean -y all
RUN ln -sf /usr/bin/cmake3 /usr/bin/cmake RUN ln -sf /usr/bin/cmake3 /usr/bin/cmake

View File

@ -184,13 +184,23 @@ files in the build directory.
## Build with Docker ## Build with Docker
An alternative way to build and run OpenSTA is with AN alternative way to build and run OpenSTA is with
[Docker](https://www.docker.com). After installing Docker, the [Docker](https://www.docker.com). After installing Docker, the
following command builds a Docker image. following command builds a Docker image.
``` ```
cd OpenSTA cd OpenSTA
docker build --file Dockerfile.ubuntu22.04 --tag opensta_ubuntu22.04 . docker build --file Dockerfile.ubuntu22.04 --tag opensta_ubuntu22.04 .
or
docker build --file Dockerfile.centos7 --tag opensta_centos7 .
```
The centos7 build on mac/OsX with ARM processorts requires the platform
to be specified.
```
docker build --file Dockerfile.centos7 --platform=linux/amd64 --tag opensta_centos7 .
``` ```
To run a docker container using the OpenSTA image, use the -v option To run a docker container using the OpenSTA image, use the -v option

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by
@ -119,7 +119,7 @@ class ArnoldiDelayCalc : public LumpedCapDelayCalc
{ {
public: public:
ArnoldiDelayCalc(StaState *sta); ArnoldiDelayCalc(StaState *sta);
virtual ~ArnoldiDelayCalc(); ~ArnoldiDelayCalc() override;
ArcDelayCalc *copy() override; ArcDelayCalc *copy() override;
const char *name() const override { return "arnoldi"; } const char *name() const override { return "arnoldi"; }
Parasitic *findParasitic(const Pin *drvr_pin, Parasitic *findParasitic(const Pin *drvr_pin,

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by
@ -340,8 +340,8 @@ CcsCeffDelayCalc::loadDelaySlew(const Pin *load_pin,
ArcDelay &wire_delay, ArcDelay &wire_delay,
Slew &load_slew) Slew &load_slew)
{ {
ArcDelay wire_delay1 = 0.0; wire_delay = 0.0;
Slew load_slew1 = drvr_slew; load_slew = drvr_slew;
bool elmore_exists = false; bool elmore_exists = false;
float elmore = 0.0; float elmore = 0.0;
if (parasitic_ if (parasitic_
@ -352,15 +352,13 @@ CcsCeffDelayCalc::loadDelaySlew(const Pin *load_pin,
(elmore == 0.0 (elmore == 0.0
// Elmore delay is small compared to driver slew. // Elmore delay is small compared to driver slew.
|| elmore < delayAsFloat(drvr_slew) * 1e-3)) { || elmore < delayAsFloat(drvr_slew) * 1e-3)) {
wire_delay1 = elmore; wire_delay = elmore;
load_slew1 = drvr_slew; load_slew = drvr_slew;
} }
else else
loadDelaySlew(load_pin, drvr_slew, elmore, wire_delay1, load_slew1); loadDelaySlew(load_pin, drvr_slew, elmore, wire_delay, load_slew);
thresholdAdjust(load_pin, drvr_library, rf, wire_delay, load_slew); thresholdAdjust(load_pin, drvr_library, rf, wire_delay, load_slew);
wire_delay = wire_delay1;
load_slew = load_slew1;
} }
void void

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
# OpenSTA, Static Timing Analyzer # OpenSTA, Static Timing Analyzer
# Copyright (c) 2025, Parallax Software, Inc. # Copyright (c) 2026, Parallax Software, Inc.
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by
@ -77,7 +77,6 @@ class DmpError : public Exception
{ {
public: public:
DmpError(const char *what); DmpError(const char *what);
virtual ~DmpError() {}
virtual const char *what() const noexcept { return what_; } virtual const char *what() const noexcept { return what_; }
private: private:

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by
@ -107,7 +107,7 @@ public:
int &bidirect_count, int &bidirect_count,
int &load_count, int &load_count,
const Network *network); const Network *network);
virtual void operator()(const Pin *pin); void operator()(const Pin *pin) override;
protected: protected:
Pin *drvr_pin_; Pin *drvr_pin_;
@ -345,8 +345,8 @@ public:
MakeEdgesThruHierPin(Graph *graph); MakeEdgesThruHierPin(Graph *graph);
private: private:
virtual void visit(const Pin *drvr, void visit(const Pin *drvr,
const Pin *load); const Pin *load) override;
Graph *graph_; Graph *graph_;
}; };
@ -1483,8 +1483,8 @@ class FindEdgesThruHierPinVisitor : public HierPinThruVisitor
public: public:
FindEdgesThruHierPinVisitor(EdgeSet &edges, FindEdgesThruHierPinVisitor(EdgeSet &edges,
Graph *graph); Graph *graph);
virtual void visit(const Pin *drvr, void visit(const Pin *drvr,
const Pin *load); const Pin *load) override;
protected: protected:
EdgeSet &edges_; EdgeSet &edges_;

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
# OpenSTA, Static Timing Analyzer # OpenSTA, Static Timing Analyzer
# Copyright (c) 2025, Parallax Software, Inc. # Copyright (c) 2026, Parallax Software, Inc.
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by
@ -27,6 +27,7 @@
#include <vector> #include <vector>
#include <algorithm> #include <algorithm>
#include <functional> #include <functional>
#include <optional>
namespace sta { namespace sta {
@ -118,13 +119,14 @@ public:
// If the heap is not full, the element is added. // If the heap is not full, the element is added.
// If the heap is full and the new element is better than the worst element, // If the heap is full and the new element is better than the worst element,
// the worst element is replaced. Otherwise, the element is ignored. // the worst element is replaced. Otherwise, the element is ignored.
// Returns true if the element was inserted, false if it was ignored. // Returns (inserted, displaced): inserted is true if the element was inserted,
bool // displaced is set when an element was pushed out (caller must handle ownership).
std::pair<bool, std::optional<T>>
insert(const T& value) { insert(const T& value) {
if (heap_.size() < max_size_) { if (heap_.size() < max_size_) {
heap_.push_back(value); heap_.push_back(value);
std::push_heap(heap_.begin(), heap_.end(), min_heap_comp_); std::push_heap(heap_.begin(), heap_.end(), min_heap_comp_);
return true; return {true, std::nullopt};
} }
else if (!heap_.empty()) { else if (!heap_.empty()) {
// When keeping N worst (smallest) values: if new value is smaller than worst, // When keeping N worst (smallest) values: if new value is smaller than worst,
@ -134,23 +136,25 @@ public:
if (comp_(value, heap_.front())) { if (comp_(value, heap_.front())) {
// New value is smaller than worst - find and replace the largest element // New value is smaller than worst - find and replace the largest element
auto max_it = std::max_element(heap_.begin(), heap_.end(), comp_); auto max_it = std::max_element(heap_.begin(), heap_.end(), comp_);
T displaced = std::move(*max_it);
*max_it = value; *max_it = value;
// Rebuild heap since we modified an internal element // Rebuild heap since we modified an internal element
std::make_heap(heap_.begin(), heap_.end(), min_heap_comp_); std::make_heap(heap_.begin(), heap_.end(), min_heap_comp_);
return true; return {true, std::move(displaced)};
} }
// Otherwise, new value is >= worst, so we already have worse values - reject it // Otherwise, new value is >= worst, so we already have worse values - reject it
} }
return false; return {false, std::nullopt};
} }
// Insert an element using move semantics // Insert an element using move semantics
bool insert(T&& value) std::pair<bool, std::optional<T>>
insert(T&& value)
{ {
if (heap_.size() < max_size_) { if (heap_.size() < max_size_) {
heap_.push_back(std::move(value)); heap_.push_back(std::move(value));
std::push_heap(heap_.begin(), heap_.end(), min_heap_comp_); std::push_heap(heap_.begin(), heap_.end(), min_heap_comp_);
return true; return {true, std::nullopt};
} }
else if (!heap_.empty()) { else if (!heap_.empty()) {
// When keeping N worst (smallest) values: if new value is smaller than worst, // When keeping N worst (smallest) values: if new value is smaller than worst,
@ -160,14 +164,15 @@ public:
if (comp_(value, heap_.front())) { if (comp_(value, heap_.front())) {
// New value is smaller than worst - find and replace the largest element // New value is smaller than worst - find and replace the largest element
auto max_it = std::max_element(heap_.begin(), heap_.end(), comp_); auto max_it = std::max_element(heap_.begin(), heap_.end(), comp_);
T displaced = std::move(*max_it);
*max_it = std::move(value); *max_it = std::move(value);
// Rebuild heap since we modified an internal element // Rebuild heap since we modified an internal element
std::make_heap(heap_.begin(), heap_.end(), min_heap_comp_); std::make_heap(heap_.begin(), heap_.end(), min_heap_comp_);
return true; return {true, std::move(displaced)};
} }
// Otherwise, new value is >= worst, so we already have worse values - reject it // Otherwise, new value is >= worst, so we already have worse values - reject it
} }
return false; return {false, std::nullopt};
} }
// Extract all elements sorted from best to worst. // Extract all elements sorted from best to worst.

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by
@ -164,17 +164,17 @@ public:
bool own_pts, bool own_pts,
int priority, int priority,
const char *comment); const char *comment);
virtual ExceptionPath *clone(ExceptionFrom *from, ExceptionPath *clone(ExceptionFrom *from,
ExceptionThruSeq *thrus, ExceptionThruSeq *thrus,
ExceptionTo *to, ExceptionTo *to,
bool own_pts); bool own_pts) override;
virtual bool isFalse() const { return true; } bool isFalse() const override { return true; }
virtual ExceptionPathType type() const { return ExceptionPathType::false_path; } ExceptionPathType type() const override { return ExceptionPathType::false_path; }
virtual const char *typeString() const; const char *typeString() const override;
virtual bool mergeable(ExceptionPath *exception) const; bool mergeable(ExceptionPath *exception) const override;
virtual bool overrides(ExceptionPath *exception) const; bool overrides(ExceptionPath *exception) const override;
virtual int typePriority() const; int typePriority() const override;
virtual bool tighterThan(ExceptionPath *exception) const; bool tighterThan(ExceptionPath *exception) const override;
}; };
// Loop paths are false paths used to disable paths around // Loop paths are false paths used to disable paths around
@ -184,10 +184,10 @@ class LoopPath : public FalsePath
public: public:
LoopPath(ExceptionThruSeq *thrus, LoopPath(ExceptionThruSeq *thrus,
bool own_pts); bool own_pts);
virtual bool isLoop() const { return true; } bool isLoop() const override { return true; }
virtual ExceptionPathType type() const { return ExceptionPathType::loop; } ExceptionPathType type() const override { return ExceptionPathType::loop; }
virtual const char *typeString() const; const char *typeString() const override;
virtual bool mergeable(ExceptionPath *exception) const; bool mergeable(ExceptionPath *exception) const override;
}; };
// set_max_delay/set_min_delay // set_max_delay/set_min_delay
@ -203,21 +203,21 @@ public:
float delay, float delay,
bool own_pts, bool own_pts,
const char *comment); const char *comment);
virtual ExceptionPath *clone(ExceptionFrom *from, ExceptionPath *clone(ExceptionFrom *from,
ExceptionThruSeq *thrus, ExceptionThruSeq *thrus,
ExceptionTo *to, ExceptionTo *to,
bool own_pts); bool own_pts) override;
virtual bool isPathDelay() const { return true; } bool isPathDelay() const override { return true; }
virtual ExceptionPathType type() const { return ExceptionPathType::path_delay; } ExceptionPathType type() const override { return ExceptionPathType::path_delay; }
virtual const char *asString(const Network *network) const; const char *asString(const Network *network) const override;
virtual const char *typeString() const; const char *typeString() const override;
virtual bool mergeable(ExceptionPath *exception) const; bool mergeable(ExceptionPath *exception) const override;
virtual bool overrides(ExceptionPath *exception) const; bool overrides(ExceptionPath *exception) const override;
virtual float delay() const { return delay_; } float delay() const override { return delay_; }
virtual int typePriority() const; int typePriority() const override;
virtual bool tighterThan(ExceptionPath *exception) const; bool tighterThan(ExceptionPath *exception) const override;
virtual bool ignoreClkLatency() const { return ignore_clk_latency_; } bool ignoreClkLatency() const override { return ignore_clk_latency_; }
virtual bool breakPath() const { return break_path_; } bool breakPath() const override { return break_path_; }
protected: protected:
bool ignore_clk_latency_; bool ignore_clk_latency_;
@ -237,24 +237,24 @@ public:
int path_multiplier, int path_multiplier,
bool own_pts, bool own_pts,
const char *comment); const char *comment);
virtual ExceptionPath *clone(ExceptionFrom *from, ExceptionPath *clone(ExceptionFrom *from,
ExceptionThruSeq *thrus, ExceptionThruSeq *thrus,
ExceptionTo *to, ExceptionTo *to,
bool own_pts); bool own_pts) override;
virtual bool isMultiCycle() const { return true; } bool isMultiCycle() const override { return true; }
virtual ExceptionPathType type() const { return ExceptionPathType::multi_cycle; } ExceptionPathType type() const override { return ExceptionPathType::multi_cycle; }
virtual bool matches(const MinMax *min_max, bool matches(const MinMax *min_max,
bool exactly) const; bool exactly) const override;
virtual const char *asString(const Network *network) const; const char *asString(const Network *network) const override;
virtual const char *typeString() const; const char *typeString() const override;
virtual bool mergeable(ExceptionPath *exception) const; bool mergeable(ExceptionPath *exception) const override;
virtual bool overrides(ExceptionPath *exception) const; bool overrides(ExceptionPath *exception) const override;
virtual bool useEndClk() const { return use_end_clk_; } bool useEndClk() const override { return use_end_clk_; }
virtual int pathMultiplier(const MinMax *min_max) const; int pathMultiplier(const MinMax *min_max) const; // overload, not override
virtual int pathMultiplier() const { return path_multiplier_; } int pathMultiplier() const override { return path_multiplier_; }
virtual int priority(const MinMax *min_max) const; int priority(const MinMax *min_max) const override;
virtual int typePriority() const; int typePriority() const override;
virtual bool tighterThan(ExceptionPath *exception) const; bool tighterThan(ExceptionPath *exception) const override;
using ExceptionPath::priority; using ExceptionPath::priority;
@ -271,22 +271,22 @@ public:
ExceptionThruSeq *thrus, ExceptionThruSeq *thrus,
ExceptionTo *to, ExceptionTo *to,
bool own_pts); bool own_pts);
virtual ExceptionPath *clone(ExceptionFrom *from, ExceptionPath *clone(ExceptionFrom *from,
ExceptionThruSeq *thrus, ExceptionThruSeq *thrus,
ExceptionTo *to, ExceptionTo *to,
bool own_pts); bool own_pts) override;
virtual bool isFilter() const { return true; } bool isFilter() const override { return true; }
virtual ExceptionPathType type() const { return ExceptionPathType::filter; } ExceptionPathType type() const override { return ExceptionPathType::filter; }
virtual const char *typeString() const; const char *typeString() const override;
virtual bool mergeable(ExceptionPath *exception) const; bool mergeable(ExceptionPath *exception) const override;
virtual bool overrides(ExceptionPath *exception) const; bool overrides(ExceptionPath *exception) const override;
virtual bool resetMatch(ExceptionFrom *from, bool resetMatch(ExceptionFrom *from,
ExceptionThruSeq *thrus, ExceptionThruSeq *thrus,
ExceptionTo *to, ExceptionTo *to,
const MinMaxAll *min_max, const MinMaxAll *min_max,
const Network *network); const Network *network) override;
virtual int typePriority() const; int typePriority() const override;
virtual bool tighterThan(ExceptionPath *exception) const; bool tighterThan(ExceptionPath *exception) const override;
}; };
class GroupPath : public ExceptionPath class GroupPath : public ExceptionPath
@ -299,20 +299,20 @@ public:
ExceptionTo *to, ExceptionTo *to,
bool own_pts, bool own_pts,
const char *comment); const char *comment);
virtual ~GroupPath(); ~GroupPath() override;
virtual ExceptionPath *clone(ExceptionFrom *from, ExceptionPath *clone(ExceptionFrom *from,
ExceptionThruSeq *thrus, ExceptionThruSeq *thrus,
ExceptionTo *to, ExceptionTo *to,
bool own_pts); bool own_pts) override;
virtual bool isGroupPath() const { return true; } bool isGroupPath() const override { return true; }
virtual ExceptionPathType type() const { return ExceptionPathType::group_path; } ExceptionPathType type() const override { return ExceptionPathType::group_path; }
virtual const char *typeString() const; const char *typeString() const override;
virtual bool mergeable(ExceptionPath *exception) const; bool mergeable(ExceptionPath *exception) const override;
virtual bool overrides(ExceptionPath *exception) const; bool overrides(ExceptionPath *exception) const override;
virtual int typePriority() const; int typePriority() const override;
virtual bool tighterThan(ExceptionPath *exception) const; bool tighterThan(ExceptionPath *exception) const override;
virtual const char *name() const { return name_; } const char *name() const override { return name_; }
virtual bool isDefault() const { return is_default_; } bool isDefault() const override { return is_default_; }
protected: protected:
const char *name_; const char *name_;
@ -385,39 +385,39 @@ public:
bool own_pts, bool own_pts,
const Network *network); const Network *network);
~ExceptionFromTo(); ~ExceptionFromTo();
virtual PinSet *pins() { return pins_; } PinSet *pins() override { return pins_; }
bool hasPins() const; bool hasPins() const;
ClockSet *clks() { return clks_; } ClockSet *clks() override { return clks_; }
bool hasClocks() const; bool hasClocks() const;
InstanceSet *instances() { return insts_; } InstanceSet *instances() override { return insts_; }
bool hasInstances() const; bool hasInstances() const;
virtual NetSet *nets() { return nullptr; } NetSet *nets() override { return nullptr; }
virtual EdgePinsSet *edges() { return nullptr; } EdgePinsSet *edges() override { return nullptr; }
bool hasObjects() const; bool hasObjects() const;
void deleteObjects(ExceptionFromTo *pt, void deleteObjects(ExceptionFromTo *pt,
const Network *network); const Network *network);
virtual PinSet allPins(const Network *network); PinSet allPins(const Network *network) override;
bool equal(ExceptionFromTo *from_to) const; bool equal(ExceptionFromTo *from_to) const;
virtual int compare(ExceptionPt *pt, int compare(ExceptionPt *pt,
const Network *network) const; const Network *network) const override;
virtual void mergeInto(ExceptionPt *pt, void mergeInto(ExceptionPt *pt,
const Network *network); const Network *network) override;
virtual const char *asString(const Network *network) const; const char *asString(const Network *network) const override;
virtual size_t objectCount() const; size_t objectCount() const override;
void deleteClock(Clock *clk); void deleteClock(Clock *clk);
virtual void addPin(const Pin *pin, void addPin(const Pin *pin,
const Network *network); const Network *network) override;
virtual void addClock(Clock *clk); void addClock(Clock *clk) override;
virtual void addInstance(const Instance *inst, void addInstance(const Instance *inst,
const Network *network); const Network *network) override;
virtual void addNet(const Net *, void addNet(const Net *,
const Network *) {} const Network *) override {}
virtual void addEdge(const EdgePins &, void addEdge(const EdgePins &,
const Network *) {} const Network *) override {}
virtual void connectPinAfter(PinSet *, void connectPinAfter(PinSet *,
Network *) {} Network *) override {}
virtual void deletePinBefore(const Pin *, void deletePinBefore(const Pin *,
Network *); Network *) override;
void deleteInstance(const Instance *inst, void deleteInstance(const Instance *inst,
const Network *network); const Network *network);
@ -443,14 +443,14 @@ public:
bool own_pts, bool own_pts,
const Network *network); const Network *network);
ExceptionFrom *clone(const Network *network); ExceptionFrom *clone(const Network *network);
virtual bool isFrom() const { return true; } bool isFrom() const override { return true; }
bool intersectsPts(ExceptionFrom *from, bool intersectsPts(ExceptionFrom *from,
const Network *network) const; const Network *network) const;
virtual int typePriority() const { return 0; } int typePriority() const override { return 0; }
protected: protected:
virtual const char *cmdKeyword() const; const char *cmdKeyword() const override;
virtual void findHash(const Network *network); void findHash(const Network *network) override;
}; };
class ExceptionTo : public ExceptionFromTo class ExceptionTo : public ExceptionFromTo
@ -466,12 +466,12 @@ public:
bool own_pts, bool own_pts,
const Network *network); const Network *network);
ExceptionTo *clone(const Network *network); ExceptionTo *clone(const Network *network);
virtual bool isTo() const { return true; } bool isTo() const override { return true; }
const char *asString(const Network *network) const; const char *asString(const Network *network) const override;
const RiseFallBoth *endTransition() { return end_rf_; } const RiseFallBoth *endTransition() { return end_rf_; }
bool intersectsPts(ExceptionTo *to, bool intersectsPts(ExceptionTo *to,
const Network *network) const; const Network *network) const;
virtual int typePriority() const { return 1; } int typePriority() const override { return 1; }
bool matches(const Pin *pin, bool matches(const Pin *pin,
const ClockEdge *clk_edge, const ClockEdge *clk_edge,
const RiseFall *end_rf, const RiseFall *end_rf,
@ -486,8 +486,8 @@ public:
const ClockEdge *clk_edge, const ClockEdge *clk_edge,
const RiseFall *end_rf, const RiseFall *end_rf,
const Network *network) const; const Network *network) const;
virtual int compare(ExceptionPt *pt, int compare(ExceptionPt *pt,
const Network *network) const; const Network *network) const override;
protected: protected:
bool matches(const Pin *pin, bool matches(const Pin *pin,
@ -495,7 +495,7 @@ protected:
const RiseFall *end_rf, const RiseFall *end_rf,
bool inst_matches_reg_clk_pin, bool inst_matches_reg_clk_pin,
const Network *network) const; const Network *network) const;
virtual const char *cmdKeyword() const; const char *cmdKeyword() const override;
// -rise|-fall endpoint transition. // -rise|-fall endpoint transition.
const RiseFallBoth *end_rf_; const RiseFallBoth *end_rf_;
@ -512,48 +512,48 @@ public:
const Network *network); const Network *network);
~ExceptionThru(); ~ExceptionThru();
ExceptionThru *clone(const Network *network); ExceptionThru *clone(const Network *network);
virtual const char *asString(const Network *network) const; const char *asString(const Network *network) const override;
virtual bool isThru() const { return true; } bool isThru() const override { return true; }
PinSet *pins() { return pins_; } PinSet *pins() override { return pins_; }
EdgePinsSet *edges() { return edges_; } EdgePinsSet *edges() override { return edges_; }
NetSet *nets() { return nets_; } NetSet *nets() override { return nets_; }
InstanceSet *instances() { return insts_; } InstanceSet *instances() override { return insts_; }
virtual ClockSet *clks() { return nullptr; } ClockSet *clks() override { return nullptr; }
bool hasObjects() const; bool hasObjects() const;
void deleteObjects(ExceptionThru *pt, void deleteObjects(ExceptionThru *pt,
const Network *network); const Network *network);
virtual PinSet allPins(const Network *network); PinSet allPins(const Network *network) override;
bool matches(const Pin *from_pin, bool matches(const Pin *from_pin,
const Pin *to_pin, const Pin *to_pin,
const RiseFall *to_rf, const RiseFall *to_rf,
const Network *network); const Network *network);
bool equal(ExceptionThru *thru) const; bool equal(ExceptionThru *thru) const;
virtual int compare(ExceptionPt *pt, int compare(ExceptionPt *pt,
const Network *network) const; const Network *network) const override;
virtual void mergeInto(ExceptionPt *pt, void mergeInto(ExceptionPt *pt,
const Network *network); const Network *network) override;
bool intersectsPts(ExceptionThru *thru, bool intersectsPts(ExceptionThru *thru,
const Network *network) const; const Network *network) const;
virtual int typePriority() const { return 2; } int typePriority() const override { return 2; }
virtual size_t objectCount() const; size_t objectCount() const override;
virtual void connectPinAfter(PinSet *drvrs, void connectPinAfter(PinSet *drvrs,
Network *network); Network *network) override;
virtual void deletePinBefore(const Pin *pin, void deletePinBefore(const Pin *pin,
Network *network); Network *network) override;
void deleteInstance(const Instance *inst, void deleteInstance(const Instance *inst,
const Network *network); const Network *network);
protected: protected:
void findHash(const Network *network); void findHash(const Network *network);
virtual void addPin(const Pin *pin, void addPin(const Pin *pin,
const Network *network); const Network *network) override;
virtual void addEdge(const EdgePins &edge, void addEdge(const EdgePins &edge,
const Network *network); const Network *network) override;
virtual void addNet(const Net *net, void addNet(const Net *net,
const Network *network); const Network *network) override;
virtual void addInstance(const Instance *inst, void addInstance(const Instance *inst,
const Network *network); const Network *network) override;
virtual void addClock(Clock *) {} void addClock(Clock *) override {}
void deletePin(const Pin *pin, void deletePin(const Pin *pin,
const Network *network); const Network *network);
void deleteEdge(const EdgePins &edge); void deleteEdge(const EdgePins &edge);

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by
@ -520,10 +520,6 @@ public:
virtual Pin *connect(Instance *inst, virtual Pin *connect(Instance *inst,
LibertyPort *port, LibertyPort *port,
Net *net) = 0; Net *net) = 0;
// makePin/connectPin replaced by connect.
// deprecated 2018-09-28
virtual void connectPin(Pin *pin,
Net *net) __attribute__ ((deprecated));
// Disconnect pin from net. // Disconnect pin from net.
virtual void disconnectPin(Pin *pin) = 0; virtual void disconnectPin(Pin *pin) = 0;
virtual void deletePin(Pin *pin) = 0; virtual void deletePin(Pin *pin) = 0;

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

View File

@ -1,5 +1,5 @@
// OpenSTA, Static Timing Analyzer // OpenSTA, Static Timing Analyzer
// Copyright (c) 2025, Parallax Software, Inc. // Copyright (c) 2026, Parallax Software, Inc.
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by

Some files were not shown because too many files have changed in this diff Show More