LibertyLibrary::inverters()

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2023-05-18 07:52:22 -07:00
parent 358fb135a5
commit 9b4315eb64
2 changed files with 20 additions and 0 deletions

View File

@ -137,6 +137,7 @@ public:
LibertyCellSeq findLibertyCellsMatching(PatternMatch *pattern); LibertyCellSeq findLibertyCellsMatching(PatternMatch *pattern);
// Liberty cells that are buffers. // Liberty cells that are buffers.
LibertyCellSeq *buffers(); LibertyCellSeq *buffers();
LibertyCellSeq *inverters();
DelayModelType delayModelType() const { return delay_model_type_; } DelayModelType delayModelType() const { return delay_model_type_; }
void setDelayModelType(DelayModelType type); void setDelayModelType(DelayModelType type);
@ -369,6 +370,7 @@ protected:
OcvDerateMap ocv_derate_map_; OcvDerateMap ocv_derate_map_;
SupplyVoltageMap supply_voltage_map_; SupplyVoltageMap supply_voltage_map_;
LibertyCellSeq *buffers_; LibertyCellSeq *buffers_;
LibertyCellSeq *inverters_;
DriverWaveformMap driver_waveform_map_; DriverWaveformMap driver_waveform_map_;
// Unnamed driver waveform. // Unnamed driver waveform.
DriverWaveform *driver_waveform_default_; DriverWaveform *driver_waveform_default_;

View File

@ -83,6 +83,7 @@ LibertyLibrary::LibertyLibrary(const char *name,
ocv_arc_depth_(0.0), ocv_arc_depth_(0.0),
default_ocv_derate_(nullptr), default_ocv_derate_(nullptr),
buffers_(nullptr), buffers_(nullptr),
inverters_(nullptr),
driver_waveform_default_(nullptr) driver_waveform_default_(nullptr)
{ {
// Scalar templates are builtin. // Scalar templates are builtin.
@ -125,6 +126,7 @@ LibertyLibrary::~LibertyLibrary()
stringDelete(supply_name); stringDelete(supply_name);
} }
delete buffers_; delete buffers_;
delete inverters_;
driver_waveform_map_.deleteContents(); driver_waveform_map_.deleteContents();
delete driver_waveform_default_; delete driver_waveform_default_;
} }
@ -148,6 +150,22 @@ LibertyLibrary::findLibertyCellsMatching(PatternMatch *pattern)
return matches; return matches;
} }
LibertyCellSeq *
LibertyLibrary::inverters()
{
if (inverters_ == nullptr) {
inverters_ = new LibertyCellSeq;
LibertyCellIterator cell_iter(this);
while (cell_iter.hasNext()) {
LibertyCell *cell = cell_iter.next();
if (!cell->dontUse()
&& cell->isInverter())
inverters_->push_back(cell);
}
}
return inverters_;
}
LibertyCellSeq * LibertyCellSeq *
LibertyLibrary::buffers() LibertyLibrary::buffers()
{ {