Skip to content

Commit 4e74e18

Browse files
committed
addressing reviews
Signed-off-by: arthurjolo <[email protected]>
1 parent b90e198 commit 4e74e18

File tree

1 file changed

+21
-23
lines changed

1 file changed

+21
-23
lines changed

src/cts/src/LatenciesBalancer.cpp

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -55,25 +55,29 @@ void LatenciesBalancer::initSta()
5555
timingGraph_ = openSta_->graph();
5656
}
5757

58-
sta::ArcDelay LatenciesBalancer::computeBufferDelay(sta::LibertyCell *buffer_cell, float extra_out_cap)
58+
sta::ArcDelay LatenciesBalancer::computeBufferDelay(
59+
sta::LibertyCell* buffer_cell,
60+
float extra_out_cap)
5961
{
6062
sta::ArcDelay max_rise_delay = 0;
6163

6264
sta::LibertyPort *input, *output;
6365
buffer_cell->bufferPorts(input, output);
6466
for (sta::Corner* corner : *openSta_->corners()) {
65-
const sta::DcalcAnalysisPt* dcalc_ap = corner->findDcalcAnalysisPt(sta::MinMax::max());
67+
const sta::DcalcAnalysisPt* dcalc_ap
68+
= corner->findDcalcAnalysisPt(sta::MinMax::max());
6669
const sta::Pvt* pvt = dcalc_ap->operatingConditions();
6770

68-
for (sta::TimingArcSet* arc_set : buffer_cell->timingArcSets(input, output)) {
71+
for (sta::TimingArcSet* arc_set :
72+
buffer_cell->timingArcSets(input, output)) {
6973
for (sta::TimingArc* arc : arc_set->arcs()) {
70-
sta::GateTimingModel* model = dynamic_cast<sta::GateTimingModel*>(arc->model());
74+
sta::GateTimingModel* model
75+
= dynamic_cast<sta::GateTimingModel*>(arc->model());
7176
const sta::RiseFall* in_rf = arc->fromEdge()->asRiseFall();
7277
const sta::RiseFall* out_rf = arc->toEdge()->asRiseFall();
7378
// Only look at rise-rise arcs
74-
if (model != nullptr &&
75-
in_rf == sta::RiseFall::rise() &&
76-
out_rf == sta::RiseFall::rise()) {
79+
if (model != nullptr && in_rf == sta::RiseFall::rise()
80+
&& out_rf == sta::RiseFall::rise()) {
7781
float in_cap = input->capacitance(in_rf, sta::MinMax::max());
7882
float load_cap = in_cap + extra_out_cap;
7983
sta::ArcDelay arc_delay;
@@ -156,11 +160,12 @@ void LatenciesBalancer::buildGraph(odb::dbNet* clkInputNet)
156160
continue;
157161
}
158162

159-
if(isSink(sinkIterm)) {
163+
if (isSink(sinkIterm)) {
160164
sta::Pin* pin = network_->dbToSta(sinkIterm);
161165
if (pin) {
162166
sta::Vertex* sinkVertex = timingGraph_->pinDrvrVertex(pin);
163-
float arrival = getVertexClkArrival(sinkVertex, clkInputNet, sinkIterm);
167+
float arrival
168+
= getVertexClkArrival(sinkVertex, clkInputNet, sinkIterm);
164169
graph_[sinkId].delay = arrival;
165170
}
166171
continue;
@@ -332,8 +337,7 @@ void LatenciesBalancer::balanceLatencies(int nodeId)
332337
"For node {}, isert {:2f} buffers",
333338
node->name,
334339
(worseDelay_ - node->delay) / buffer_delay_);
335-
node->nBuffInsert
336-
= (int) ((worseDelay_ - node->delay) / buffer_delay_);
340+
node->nBuffInsert = (int) ((worseDelay_ - node->delay) / buffer_delay_);
337341
}
338342
return;
339343
}
@@ -398,9 +402,8 @@ odb::dbITerm* LatenciesBalancer::insertDelayBuffers(
398402
const std::vector<odb::dbITerm*>& sinksInput)
399403
{
400404
// get bbox of current load pins without driver output pin
401-
int maxSinkX = 0, maxSinkY = 0;
402-
int minSinkX = std::numeric_limits<int>::max(),
403-
minSinkY = std::numeric_limits<int>::max();
405+
odb::Rect loadPinsBbox = odb::Rect();
406+
loadPinsBbox.mergeInit();
404407
odb::dbNet* drivingNet = nullptr;
405408
debugPrint(logger_,
406409
CTS,
@@ -417,16 +420,11 @@ odb::dbITerm* LatenciesBalancer::insertDelayBuffers(
417420
sinkInput->disconnect();
418421
int sinkX, sinkY;
419422
sinkInput->getAvgXY(&sinkX, &sinkY);
420-
maxSinkX = std::max(maxSinkX, sinkX);
421-
maxSinkY = std::max(maxSinkY, sinkY);
422-
minSinkX = std::min(minSinkX, sinkX);
423-
minSinkY = std::min(minSinkY, sinkY);
423+
loadPinsBbox.merge({sinkX, sinkY});
424424
}
425425

426-
int destX = (maxSinkX + minSinkX) / 2;
427-
int destY = (maxSinkY + minSinkY) / 2;
428-
float offsetX = (float) (destX - srcX) / (numBuffers + 1);
429-
float offsetY = (float) (destY - srcY) / (numBuffers + 1);
426+
float offsetX = (float) (loadPinsBbox.xCenter() - srcX) / (numBuffers + 1);
427+
float offsetY = (float) (loadPinsBbox.yCenter() - srcY) / (numBuffers + 1);
430428
odb::dbInst* returnBuffer = nullptr;
431429
for (int i = 0; i < numBuffers; i++) {
432430
double locX = (double) (srcX + offsetX * (i + 1)) / wireSegmentUnit_;
@@ -546,7 +544,7 @@ bool LatenciesBalancer::isSink(odb::dbITerm* iterm)
546544

547545
void LatenciesBalancer::showGraph()
548546
{
549-
logger_->report("Graph builded:");
547+
logger_->report("Graph built:");
550548
for (const auto& node : graph_) {
551549
odb::dbITerm* inputTerm = node.inputTerm;
552550
logger_->report(" Node {}", node.name);

0 commit comments

Comments
 (0)