Skip to content

Commit 7ee2469

Browse files
committed
Tried to minimize QoR impact 3
1. Do not remove unused buffer 2. Do not consider input port for survivor net decision 2A. Survivor modnet is fixed as buf_in_net 3. Disconnect first, and mergeNet Signed-off-by: Jaehyun Kim <jhkim@precisioninno.com>
1 parent ca999b6 commit 7ee2469

1 file changed

Lines changed: 38 additions & 27 deletions

File tree

src/rsz/src/UnbufferMove.cc

Lines changed: 38 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -402,11 +402,8 @@ void UnbufferMove::removeBuffer(Instance* buffer)
402402
lib_cell->name(),
403403
db_network_->name(out_net));
404404

405-
// Disconnect buffer input/output pins
406405
odb::dbNet* db_survivor = db_network_->staToDb(survivor);
407406
odb::dbNet* db_removed = db_network_->staToDb(removed);
408-
sta_->disconnectPin(in_pin);
409-
sta_->disconnectPin(out_pin);
410407

411408
// If removed net name is higher in hierarchy, rename survivor with it.
412409
// This must be done before mergeNet because db_removed is destroyed inside
@@ -420,31 +417,45 @@ void UnbufferMove::removeBuffer(Instance* buffer)
420417
}
421418
}
422419

423-
// Merge hier net
424-
// - mergeModNet() should be done before mergeNet() because
425-
// mergeNet() can involve the hierarchical net traversal during the merge
426-
// operation.
427-
if (survivor_modnet != nullptr && removed_modnet != nullptr) {
428-
// Merge two hier nets
429-
survivor_modnet->mergeModNet(removed_modnet);
430-
} else if (survivor_modnet != nullptr) {
431-
// If there is a single modnet, copy terminals of the flat net to be removed
432-
survivor_modnet->connectTermsOf(db_removed);
433-
} else if (removed_modnet != nullptr) {
434-
// If there is a single modnet, it should survive.
435-
survivor_modnet = removed_modnet;
436-
removed_modnet = nullptr;
437-
438-
// Copy terminals of the survivor flat net
439-
survivor_modnet->connectTermsOf(db_survivor);
440-
441-
// survivor_modnet should be renamed later.
442-
new_modnet_name
443-
= db_survivor->getBlock()->getBaseName(db_survivor->getName().c_str());
444-
}
420+
// jk: behavior change point3
421+
if (db_network_->hasHierarchy() == false) {
422+
if (db_removed) {
423+
db_survivor->mergeNet(db_removed);
424+
}
425+
sta_->disconnectPin(in_pin);
426+
sta_->disconnectPin(out_pin);
427+
} else {
428+
// Disconnect buffer input/output pins
429+
sta_->disconnectPin(in_pin);
430+
sta_->disconnectPin(out_pin);
431+
432+
// Merge hier net
433+
// - mergeModNet() should be done before mergeNet() because
434+
// mergeNet() can involve the hierarchical net traversal during the merge
435+
// operation.
436+
if (survivor_modnet != nullptr && removed_modnet != nullptr) {
437+
// Merge two hier nets
438+
survivor_modnet->mergeModNet(removed_modnet);
439+
} else if (survivor_modnet != nullptr) {
440+
// If there is a single modnet, copy terminals of the flat net to be
441+
// removed
442+
survivor_modnet->connectTermsOf(db_removed);
443+
} else if (removed_modnet != nullptr) {
444+
// If there is a single modnet, it should survive.
445+
survivor_modnet = removed_modnet;
446+
removed_modnet = nullptr;
447+
448+
// Copy terminals of the survivor flat net
449+
survivor_modnet->connectTermsOf(db_survivor);
450+
451+
// survivor_modnet should be renamed later.
452+
new_modnet_name = db_survivor->getBlock()->getBaseName(
453+
db_survivor->getName().c_str());
454+
}
445455

446-
// Merge flat net
447-
db_survivor->mergeNet(db_removed);
456+
// Merge flat net
457+
db_survivor->mergeNet(db_removed);
458+
}
448459

449460
// Remove buffer
450461
sta_->deleteInstance(buffer);

0 commit comments

Comments
 (0)