Merge remote-tracking branch 'parallax/master'

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
This commit is contained in:
Matt Liberty 2024-06-12 09:51:56 -07:00
commit ee21333caa
8 changed files with 49 additions and 28 deletions

View File

@ -469,15 +469,14 @@ private:
class ReceiverModel
{
public:
ReceiverModel();
~ReceiverModel();
void setCapacitanceModel(TableModel *table_model,
int index,
size_t segment,
RiseFall *rf);
static bool checkAxes(TablePtr table);
private:
TableModel *capacitance_models_[2][RiseFall::index_count];
std::vector<TableModel*> capacitance_models_;
};
// Two dimensional (slew/cap) table of one dimensional time/current tables.

View File

@ -478,10 +478,19 @@ LibertyReader::defineVisitors()
defineAttrVisitor("pg_type", &LibertyReader::visitPgType);
defineAttrVisitor("voltage_name", &LibertyReader::visitVoltageName);
// ccs receiver
// ccs receiver capacitance
defineGroupVisitor("receiver_capacitance",
&LibertyReader::beginReceiverCapacitance,
&LibertyReader::endReceiverCapacitance);
defineGroupVisitor("receiver_capacitance_rise",
&LibertyReader::beginReceiverCapacitance1Rise,
&LibertyReader::endReceiverCapacitanceRiseFall);
defineGroupVisitor("receiver_capacitance_fall",
&LibertyReader::beginReceiverCapacitance1Fall,
&LibertyReader::endReceiverCapacitanceRiseFall);
defineAttrVisitor("segment", &LibertyReader::visitSegement);
defineGroupVisitor("receiver_capacitance1_rise",
&LibertyReader::beginReceiverCapacitance1Rise,
&LibertyReader::endReceiverCapacitanceRiseFall);
@ -2448,10 +2457,10 @@ LibertyReader::makeTimingArcs(LibertyPort *to_port,
////////////////////////////////////////////////////////////////
// Group that encloses receiver_capacitance1/2 etc groups.
void
LibertyReader::beginReceiverCapacitance(LibertyGroup *)
{
receiver_model_ = make_shared<ReceiverModel>();
}
@ -2465,6 +2474,20 @@ LibertyReader::endReceiverCapacitance(LibertyGroup *)
receiver_model_ = nullptr;
}
// For receiver_capacitance groups with mulitiple segments this
// overrides the index passed in beginReceiverCapacitance1Rise/Fall.
void
LibertyReader::visitSegement(LibertyAttr *attr)
{
if (receiver_model_) {
int segment;
bool exists;
getAttrInt(attr, segment, exists);
if (exists)
index_ = segment;
}
}
void
LibertyReader::beginReceiverCapacitance1Rise(LibertyGroup *group)
{

View File

@ -424,9 +424,12 @@ public:
virtual void visitPgType(LibertyAttr *attr);
virtual void visitVoltageName(LibertyAttr *attr);
// ccs receiver
// ccs receiver capacitance
virtual void beginReceiverCapacitance(LibertyGroup *group);
virtual void endReceiverCapacitance(LibertyGroup *group);
virtual void visitSegement(LibertyAttr *attr);
virtual void beginReceiverCapacitance1Rise(LibertyGroup *group);
virtual void endReceiverCapacitanceRiseFall(LibertyGroup *group);
virtual void beginReceiverCapacitance1Fall(LibertyGroup *group);

View File

@ -355,25 +355,21 @@ GateTableModel::checkAxis(const TableAxis *axis)
////////////////////////////////////////////////////////////////
ReceiverModel::ReceiverModel() :
capacitance_models_{{nullptr, nullptr}, {nullptr, nullptr}}
{
}
ReceiverModel::~ReceiverModel()
{
for (int index = 0; index < 2; index++) {
for (auto rf_index : RiseFall::rangeIndex())
delete capacitance_models_[index][rf_index];
}
for (TableModel *model : capacitance_models_)
delete model;
}
void
ReceiverModel::setCapacitanceModel(TableModel *table_model,
int index,
size_t segment,
RiseFall *rf)
{
capacitance_models_[index][rf->index()] = table_model;
if ((segment + 1) * RiseFall::index_count > capacitance_models_.size())
capacitance_models_.resize((segment + 1) * RiseFall::index_count);
size_t idx = segment * RiseFall::index_count + rf->index();
capacitance_models_[idx] = table_model;
}
bool

View File

@ -24,7 +24,7 @@ define_cmd_args "read_spef" \
[-pin_cap_included]\
[-keep_capacitive_coupling]\
[-coupling_reduction_factor factor]\
[-reduce_to pi_elmore|pi_pole_residue2]\
[-reduce]\
[-delete_after_reduce]\
filename}

View File

@ -2687,7 +2687,7 @@ Search::setVertexArrivals(Vertex *vertex,
tag_bldr->copyArrivals(tag_group, prev_arrivals, prev_paths);
vertex->setTagGroupIndex(tag_group->index());
if (tag_group->hasFilterTag()) {
LockGuard lock(this->filtered_arrivals_lock_);
LockGuard lock(filtered_arrivals_lock_);
filtered_arrivals_->insert(vertex);
}
@ -2715,7 +2715,7 @@ Search::setVertexArrivals(Vertex *vertex,
vertex->setTagGroupIndex(tag_group->index());
if (tag_group->hasFilterTag()) {
LockGuard lock(this->filtered_arrivals_lock_);
LockGuard lock(filtered_arrivals_lock_);
filtered_arrivals_->insert(vertex);
}
}

View File

@ -2,11 +2,11 @@ Warning: gcd_sky130hd.v line 527, module sky130_fd_sc_hd__tapvpwrvgnd_1 not foun
Group Internal Switching Leakage Total
Power Power Power Power (Watts)
----------------------------------------------------------------
Sequential 3.32e-04 8.62e-05 2.96e-10 4.19e-04 35.1%
Combinational 2.61e-04 3.46e-04 6.95e-10 6.07e-04 50.9%
Clock 4.68e-05 1.20e-04 2.30e-11 1.67e-04 14.0%
Sequential 3.07e-04 4.75e-05 2.96e-10 3.54e-04 40.1%
Combinational 1.58e-04 2.04e-04 6.86e-10 3.62e-04 41.0%
Clock 4.68e-05 1.20e-04 2.30e-11 1.67e-04 18.9%
Macro 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
Pad 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
----------------------------------------------------------------
Total 6.41e-04 5.53e-04 1.01e-09 1.19e-03 100.0%
53.7% 46.3% 0.0%
Total 5.11e-04 3.72e-04 1.00e-09 8.84e-04 100.0%
57.9% 42.1% 0.0%

View File

@ -3,11 +3,11 @@ Annotated 937 pin activities.
Group Internal Switching Leakage Total
Power Power Power Power (Watts)
----------------------------------------------------------------
Sequential 3.05e-04 3.84e-05 2.92e-10 3.44e-04 44.6%
Combinational 9.95e-05 1.59e-04 6.76e-10 2.58e-04 33.5%
Sequential 3.05e-04 3.85e-05 2.92e-10 3.44e-04 44.6%
Combinational 9.90e-05 1.59e-04 6.76e-10 2.58e-04 33.5%
Clock 4.82e-05 1.20e-04 2.30e-11 1.69e-04 21.9%
Macro 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
Pad 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
----------------------------------------------------------------
Total 4.53e-04 3.18e-04 9.91e-10 7.71e-04 100.0%
58.8% 41.2% 0.0%
58.7% 41.3% 0.0%