read_spef dspef delete reduced parasitics
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
bdc07bb6a3
commit
1c88a1a8d4
|
|
@ -60,6 +60,8 @@ public:
|
|||
virtual void deleteParasitics(const Pin *pin,
|
||||
const ParasiticAnalysisPt *ap) = 0;
|
||||
virtual void deleteUnsavedParasitic(Parasitic *parasitic) = 0;
|
||||
virtual void deleteReducedParasitics(const Net *net,
|
||||
const ParasiticAnalysisPt *ap) = 0;
|
||||
virtual void deleteDrvrReducedParasitics(const Pin *drvr_pin) = 0;
|
||||
|
||||
virtual bool isReducedParasiticNetwork(Parasitic *parasitic) const = 0;
|
||||
|
|
|
|||
|
|
@ -999,6 +999,19 @@ ConcreteParasitics::loadPinCapacitanceChanged(const Pin *pin)
|
|||
deleteReducedParasitics(pin);
|
||||
}
|
||||
|
||||
void
|
||||
ConcreteParasitics::deleteReducedParasitics(const Net *net,
|
||||
const ParasiticAnalysisPt *ap)
|
||||
{
|
||||
if (!drvr_parasitic_map_.empty()) {
|
||||
PinSet *drivers = network_->drivers(net);
|
||||
if (drivers) {
|
||||
for (auto drvr_pin : *drivers)
|
||||
deleteDrvrReducedParasitics(drvr_pin, ap);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Delete reduced models on pin's net.
|
||||
void
|
||||
ConcreteParasitics::deleteReducedParasitics(const Pin *pin)
|
||||
|
|
@ -1027,6 +1040,19 @@ ConcreteParasitics::deleteDrvrReducedParasitics(const Pin *drvr_pin)
|
|||
drvr_parasitic_map_[drvr_pin] = nullptr;
|
||||
}
|
||||
|
||||
void
|
||||
ConcreteParasitics::deleteDrvrReducedParasitics(const Pin *drvr_pin,
|
||||
const ParasiticAnalysisPt *ap)
|
||||
{
|
||||
UniqueLock lock(lock_);
|
||||
ConcreteParasitic **parasitics = drvr_parasitic_map_[drvr_pin];
|
||||
if (parasitics) {
|
||||
int ap_index = ap->index();
|
||||
delete parasitics[ap_index];
|
||||
parasitics[ap_index] = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
bool
|
||||
|
|
|
|||
|
|
@ -193,6 +193,8 @@ public:
|
|||
const Corner *corner,
|
||||
const MinMax *cnst_min_max,
|
||||
const ParasiticAnalysisPt *ap);
|
||||
void deleteReducedParasitics(const Net *net,
|
||||
const ParasiticAnalysisPt *ap);
|
||||
virtual void deleteDrvrReducedParasitics(const Pin *drvr_pin);
|
||||
|
||||
protected:
|
||||
|
|
@ -201,6 +203,8 @@ protected:
|
|||
Parasitic *ensureRspf(const Pin *drvr_pin);
|
||||
void makeAnalysisPtAfter();
|
||||
void deleteReducedParasitics(const Pin *pin);
|
||||
void deleteDrvrReducedParasitics(const Pin *drvr_pin,
|
||||
const ParasiticAnalysisPt *ap);
|
||||
|
||||
// Driver pin to array of parasitics indexed by analysis pt index
|
||||
// and transition.
|
||||
|
|
|
|||
|
|
@ -448,9 +448,11 @@ SpefReader::dspfBegin(Net *net,
|
|||
if (increment_
|
||||
&& parasitics_->findParasiticNetwork(net, ap_))
|
||||
parasitic_ = nullptr;
|
||||
else
|
||||
else {
|
||||
parasitics_->deleteReducedParasitics(net, ap_);
|
||||
parasitic_ = parasitics_->makeParasiticNetwork(net, pin_cap_included_,
|
||||
ap_);
|
||||
ap_);
|
||||
}
|
||||
net_ = net;
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
Loading…
Reference in New Issue