2018-09-28 17:54:21 +02:00
|
|
|
// OpenSTA, Static Timing Analyzer
|
2020-03-07 03:50:37 +01:00
|
|
|
// Copyright (c) 2020, Parallax Software, Inc.
|
2018-09-28 17:54:21 +02:00
|
|
|
//
|
|
|
|
|
// This 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 <https://www.gnu.org/licenses/>.
|
|
|
|
|
|
2020-04-05 23:53:44 +02:00
|
|
|
#include "NullParasitics.hh"
|
2018-09-28 17:54:21 +02:00
|
|
|
|
|
|
|
|
namespace sta {
|
|
|
|
|
|
|
|
|
|
NullParasitics::NullParasitics(StaState *sta) :
|
|
|
|
|
Parasitics(sta)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2019-04-19 03:01:10 +02:00
|
|
|
bool
|
|
|
|
|
NullParasitics::haveParasitics()
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-28 17:54:21 +02:00
|
|
|
void
|
|
|
|
|
NullParasitics::clear()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
NullParasitics::save()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
NullParasitics::deleteParasitics()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2018-11-26 18:15:52 +01:00
|
|
|
NullParasitics::deleteParasitics(const Net *,
|
|
|
|
|
const ParasiticAnalysisPt *)
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
NullParasitics::deleteParasitics(const Pin *, const ParasiticAnalysisPt *)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2019-04-11 05:36:48 +02:00
|
|
|
NullParasitics::deleteUnsavedParasitic(Parasitic *)
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2019-04-11 05:36:48 +02:00
|
|
|
NullParasitics::deleteDrvrReducedParasitics(const Pin *)
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2019-04-11 05:36:48 +02:00
|
|
|
float
|
|
|
|
|
NullParasitics::capacitance(Parasitic *) const
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
2019-04-11 05:36:48 +02:00
|
|
|
return 0.0;
|
2018-09-28 17:54:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Parasitic *
|
|
|
|
|
NullParasitics::findPiElmore(const Pin *,
|
2019-11-11 23:30:19 +01:00
|
|
|
const RiseFall *,
|
2018-09-28 17:54:21 +02:00
|
|
|
const ParasiticAnalysisPt *) const
|
|
|
|
|
{
|
2019-03-13 01:25:53 +01:00
|
|
|
return nullptr;
|
2018-09-28 17:54:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Parasitic *
|
|
|
|
|
NullParasitics::makePiElmore(const Pin *,
|
2019-11-11 23:30:19 +01:00
|
|
|
const RiseFall *,
|
2018-09-28 17:54:21 +02:00
|
|
|
const ParasiticAnalysisPt *,
|
2018-11-26 18:15:52 +01:00
|
|
|
float,
|
|
|
|
|
float,
|
|
|
|
|
float)
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
2019-03-13 01:25:53 +01:00
|
|
|
return nullptr;
|
2018-09-28 17:54:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
NullParasitics::isPiElmore(Parasitic *) const
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
NullParasitics::isReducedParasiticNetwork(Parasitic *) const
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2018-11-26 18:15:52 +01:00
|
|
|
NullParasitics::setIsReducedParasiticNetwork(Parasitic *,
|
|
|
|
|
bool)
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2018-11-26 18:15:52 +01:00
|
|
|
NullParasitics::piModel(Parasitic *,
|
|
|
|
|
float &,
|
|
|
|
|
float &,
|
|
|
|
|
float &) const
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2018-11-26 18:15:52 +01:00
|
|
|
NullParasitics::setPiModel(Parasitic *,
|
|
|
|
|
float,
|
|
|
|
|
float,
|
|
|
|
|
float)
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2018-11-26 18:15:52 +01:00
|
|
|
NullParasitics::findElmore(Parasitic *,
|
|
|
|
|
const Pin *,
|
|
|
|
|
float &,
|
|
|
|
|
bool &) const
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2018-11-26 18:15:52 +01:00
|
|
|
NullParasitics::setElmore(Parasitic *,
|
|
|
|
|
const Pin *,
|
|
|
|
|
float)
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
NullParasitics::isPiModel(Parasitic*) const
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
NullParasitics::isPiPoleResidue(Parasitic* ) const
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Parasitic *
|
|
|
|
|
NullParasitics::findPiPoleResidue(const Pin *,
|
2019-11-11 23:30:19 +01:00
|
|
|
const RiseFall *,
|
2018-09-28 17:54:21 +02:00
|
|
|
const ParasiticAnalysisPt *) const
|
|
|
|
|
{
|
2019-03-13 01:25:53 +01:00
|
|
|
return nullptr;
|
2018-09-28 17:54:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Parasitic *
|
|
|
|
|
NullParasitics::makePiPoleResidue(const Pin *,
|
2019-11-11 23:30:19 +01:00
|
|
|
const RiseFall *,
|
2018-09-28 17:54:21 +02:00
|
|
|
const ParasiticAnalysisPt *,
|
2018-11-26 18:15:52 +01:00
|
|
|
float,
|
|
|
|
|
float,
|
|
|
|
|
float)
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
2019-03-13 01:25:53 +01:00
|
|
|
return nullptr;
|
2018-09-28 17:54:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Parasitic *
|
|
|
|
|
NullParasitics::findPoleResidue(const Parasitic *,
|
|
|
|
|
const Pin *) const
|
|
|
|
|
{
|
2019-03-13 01:25:53 +01:00
|
|
|
return nullptr;
|
2018-09-28 17:54:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2018-11-26 18:15:52 +01:00
|
|
|
NullParasitics::setPoleResidue(Parasitic *,
|
|
|
|
|
const Pin *,
|
|
|
|
|
ComplexFloatSeq *,
|
|
|
|
|
ComplexFloatSeq *)
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
NullParasitics::isPoleResidue(const Parasitic *) const
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
size_t
|
|
|
|
|
NullParasitics::poleResidueCount(const Parasitic *) const
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2018-11-26 18:15:52 +01:00
|
|
|
NullParasitics::poleResidue(const Parasitic *,
|
|
|
|
|
int,
|
|
|
|
|
ComplexFloat &,
|
|
|
|
|
ComplexFloat &) const
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool
|
2019-04-11 05:36:48 +02:00
|
|
|
NullParasitics::isParasiticNetwork(Parasitic *) const
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Parasitic *
|
2019-04-11 05:36:48 +02:00
|
|
|
NullParasitics::findParasiticNetwork(const Net *,
|
2018-09-28 17:54:21 +02:00
|
|
|
const ParasiticAnalysisPt *) const
|
|
|
|
|
{
|
2019-03-13 01:25:53 +01:00
|
|
|
return nullptr;
|
2018-09-28 17:54:21 +02:00
|
|
|
}
|
|
|
|
|
|
2019-04-11 05:36:48 +02:00
|
|
|
Parasitic *
|
|
|
|
|
NullParasitics::findParasiticNetwork(const Pin *,
|
|
|
|
|
const ParasiticAnalysisPt *) const
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
2019-04-11 05:36:48 +02:00
|
|
|
return nullptr;
|
2018-09-28 17:54:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Parasitic *
|
2019-04-11 05:36:48 +02:00
|
|
|
NullParasitics::makeParasiticNetwork(const Net *,
|
2018-11-26 18:15:52 +01:00
|
|
|
bool,
|
|
|
|
|
const ParasiticAnalysisPt *)
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
2019-03-13 01:25:53 +01:00
|
|
|
return nullptr;
|
2018-09-28 17:54:21 +02:00
|
|
|
}
|
|
|
|
|
|
2018-11-26 18:15:52 +01:00
|
|
|
bool
|
|
|
|
|
NullParasitics::includesPinCaps(Parasitic *) const
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-28 17:54:21 +02:00
|
|
|
void
|
|
|
|
|
NullParasitics::deleteParasiticNetwork(const Net *,
|
|
|
|
|
const ParasiticAnalysisPt *)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ParasiticNode *
|
2018-11-26 18:15:52 +01:00
|
|
|
NullParasitics::ensureParasiticNode(Parasitic *,
|
2019-06-02 23:58:09 +02:00
|
|
|
const Net *,
|
2018-11-26 18:15:52 +01:00
|
|
|
int)
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
2019-03-13 01:25:53 +01:00
|
|
|
return nullptr;
|
2018-09-28 17:54:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ParasiticNode *
|
2018-11-26 18:15:52 +01:00
|
|
|
NullParasitics::ensureParasiticNode(Parasitic *,
|
|
|
|
|
const Pin *)
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
2019-03-13 01:25:53 +01:00
|
|
|
return nullptr;
|
2018-09-28 17:54:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2018-11-26 18:15:52 +01:00
|
|
|
NullParasitics::incrCap(ParasiticNode *,
|
|
|
|
|
float,
|
2018-09-28 17:54:21 +02:00
|
|
|
const ParasiticAnalysisPt *)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2018-11-26 18:15:52 +01:00
|
|
|
NullParasitics::makeCouplingCap(const char *,
|
|
|
|
|
ParasiticNode *,
|
|
|
|
|
ParasiticNode *,
|
|
|
|
|
float,
|
2018-09-28 17:54:21 +02:00
|
|
|
const ParasiticAnalysisPt *)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2018-11-26 18:15:52 +01:00
|
|
|
void NullParasitics::makeCouplingCap(const char *,
|
|
|
|
|
ParasiticNode *,
|
|
|
|
|
Net *,
|
|
|
|
|
int,
|
|
|
|
|
float,
|
|
|
|
|
const ParasiticAnalysisPt *)
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2018-11-26 18:15:52 +01:00
|
|
|
NullParasitics::makeCouplingCap(const char *,
|
|
|
|
|
ParasiticNode *,
|
|
|
|
|
Pin *,
|
|
|
|
|
float,
|
|
|
|
|
const ParasiticAnalysisPt *)
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2018-11-26 18:15:52 +01:00
|
|
|
NullParasitics::makeResistor(const char *,
|
|
|
|
|
ParasiticNode *,
|
|
|
|
|
ParasiticNode *,
|
|
|
|
|
float,
|
2018-09-28 17:54:21 +02:00
|
|
|
const ParasiticAnalysisPt *)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const char *
|
|
|
|
|
NullParasitics::name(const ParasiticNode *)
|
|
|
|
|
{
|
2019-03-13 01:25:53 +01:00
|
|
|
return nullptr;
|
2018-09-28 17:54:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const Pin *
|
|
|
|
|
NullParasitics::connectionPin(const ParasiticNode *) const
|
|
|
|
|
{
|
2019-03-13 01:25:53 +01:00
|
|
|
return nullptr;
|
2018-09-28 17:54:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ParasiticNode *
|
2018-11-26 18:15:52 +01:00
|
|
|
NullParasitics::findNode(Parasitic *,
|
|
|
|
|
const Pin *) const
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
2019-03-13 01:25:53 +01:00
|
|
|
return nullptr;
|
2018-09-28 17:54:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float
|
|
|
|
|
NullParasitics::nodeGndCap(const ParasiticNode *,
|
|
|
|
|
const ParasiticAnalysisPt *) const
|
|
|
|
|
{
|
|
|
|
|
return 0.0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ParasiticDeviceIterator *
|
|
|
|
|
NullParasitics::deviceIterator(ParasiticNode *) const
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
NullParasitics::isResistor(const ParasiticDevice *) const
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool
|
|
|
|
|
NullParasitics::isCouplingCap(const ParasiticDevice *) const
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const char *
|
|
|
|
|
NullParasitics::name(const ParasiticDevice *) const
|
|
|
|
|
{
|
2019-03-13 01:25:53 +01:00
|
|
|
return nullptr;
|
2018-09-28 17:54:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float
|
|
|
|
|
NullParasitics::value(const ParasiticDevice *,
|
|
|
|
|
const ParasiticAnalysisPt *) const
|
|
|
|
|
{
|
|
|
|
|
return 0.0;
|
|
|
|
|
}
|
|
|
|
|
|
2019-01-06 01:09:27 +01:00
|
|
|
ParasiticNode *
|
|
|
|
|
NullParasitics::node1(const ParasiticDevice *) const
|
|
|
|
|
{
|
2019-03-13 01:25:53 +01:00
|
|
|
return nullptr;
|
2019-01-06 01:09:27 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ParasiticNode *
|
|
|
|
|
NullParasitics::node2(const ParasiticDevice *) const
|
2019-01-04 01:14:15 +01:00
|
|
|
{
|
2019-03-13 01:25:53 +01:00
|
|
|
return nullptr;
|
2019-01-04 01:14:15 +01:00
|
|
|
}
|
|
|
|
|
|
2018-09-28 17:54:21 +02:00
|
|
|
ParasiticNode *
|
2018-11-26 18:15:52 +01:00
|
|
|
NullParasitics::otherNode(const ParasiticDevice *,
|
|
|
|
|
ParasiticNode *) const
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
2019-03-13 01:25:53 +01:00
|
|
|
return nullptr;
|
2018-09-28 17:54:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2018-11-26 18:15:52 +01:00
|
|
|
NullParasitics::reduceTo(Parasitic *,
|
|
|
|
|
const Net *,
|
2020-12-01 03:25:27 +01:00
|
|
|
ReducedParasiticType ,
|
2018-09-28 17:54:21 +02:00
|
|
|
const OperatingConditions *,
|
|
|
|
|
const Corner *,
|
|
|
|
|
const MinMax *,
|
|
|
|
|
const ParasiticAnalysisPt *)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2018-11-26 18:15:52 +01:00
|
|
|
NullParasitics::reduceToPiElmore(Parasitic *,
|
|
|
|
|
const Net *,
|
2018-09-28 17:54:21 +02:00
|
|
|
const OperatingConditions *,
|
|
|
|
|
const Corner *,
|
|
|
|
|
const MinMax *,
|
|
|
|
|
const ParasiticAnalysisPt *)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2019-04-11 05:36:48 +02:00
|
|
|
void
|
2018-09-28 17:54:21 +02:00
|
|
|
NullParasitics::reduceToPiElmore(Parasitic *,
|
|
|
|
|
const Pin *,
|
|
|
|
|
const OperatingConditions *,
|
|
|
|
|
const Corner *,
|
|
|
|
|
const MinMax *,
|
|
|
|
|
const ParasiticAnalysisPt *)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
NullParasitics::reduceToPiPoleResidue2(Parasitic *, const Net *,
|
2018-11-26 18:15:52 +01:00
|
|
|
const OperatingConditions *,
|
2018-09-28 17:54:21 +02:00
|
|
|
const Corner *,
|
2018-11-26 18:15:52 +01:00
|
|
|
const MinMax *,
|
|
|
|
|
const ParasiticAnalysisPt *)
|
2018-09-28 17:54:21 +02:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2019-04-11 05:36:48 +02:00
|
|
|
void
|
2018-09-28 17:54:21 +02:00
|
|
|
NullParasitics::reduceToPiPoleResidue2(Parasitic *,
|
|
|
|
|
const Pin *,
|
|
|
|
|
const OperatingConditions *,
|
|
|
|
|
const Corner *,
|
|
|
|
|
const MinMax *,
|
|
|
|
|
const ParasiticAnalysisPt *)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Parasitic *
|
|
|
|
|
NullParasitics::estimatePiElmore(const Pin *,
|
2019-11-11 23:30:19 +01:00
|
|
|
const RiseFall *,
|
2018-09-28 17:54:21 +02:00
|
|
|
const Wireload *,
|
|
|
|
|
float,
|
|
|
|
|
float,
|
|
|
|
|
const OperatingConditions *,
|
|
|
|
|
const Corner *,
|
|
|
|
|
const MinMax *,
|
|
|
|
|
const ParasiticAnalysisPt *)
|
|
|
|
|
{
|
2019-03-13 01:25:53 +01:00
|
|
|
return nullptr;
|
2018-09-28 17:54:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
NullParasitics::disconnectPinBefore(const Pin *)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2019-04-11 05:36:48 +02:00
|
|
|
void
|
|
|
|
|
NullParasitics::loadPinCapacitanceChanged(const Pin *)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-28 17:54:21 +02:00
|
|
|
} // namespace
|