Skip to content

Commit

Permalink
fix for case when out_net unassigned
Browse files Browse the repository at this point in the history
Signed-off-by: andyfox-rushc <[email protected]>
  • Loading branch information
andyfox-rushc committed Feb 2, 2025
1 parent 76d83e8 commit 11fa82a
Showing 1 changed file with 15 additions and 15 deletions.
30 changes: 15 additions & 15 deletions src/rsz/src/RepairDesign.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1787,6 +1787,7 @@ void RepairDesign::makeRepeater(const char* reason,
LibertyPort *buffer_input_port, *buffer_output_port;
buffer_cell->bufferPorts(buffer_input_port, buffer_output_port);
string buffer_name = resizer_->makeUniqueInstName(reason);

debugPrint(logger_,
RSZ,
"repair_net",
Expand Down Expand Up @@ -1843,7 +1844,7 @@ void RepairDesign::makeRepeater(const char* reason,
// Make the buffer in the root module in case or primary input connections

Instance* parent = nullptr;
if (top_primary_input || top_primary_output) {
if (top_primary_input || top_primary_output || !db_network_->hasHierarchy()) {
parent = db_network_->topInstance();
} else {
odb::dbModule* parent_module = db_network_->getNetDriverParentModule(net);
Expand All @@ -1864,10 +1865,6 @@ void RepairDesign::makeRepeater(const char* reason,
= resizer_->makeBuffer(buffer_cell, buffer_name.c_str(), parent, buf_loc);
inserted_buffer_count_++;

Pin* buffer_ip_pin = nullptr;
Pin* buffer_op_pin = nullptr;
resizer_->getBufferPins(buffer, buffer_ip_pin, buffer_op_pin);

// make sure any nets created are scoped within hierarchy
// backwards compatible. new naming only used for hierarchy code.
std::string net_name = db_network_->hasHierarchy()
Expand Down Expand Up @@ -1896,25 +1893,29 @@ void RepairDesign::makeRepeater(const char* reason,
dbNet* ip_net_db = db_network_->staToDb(net);
dbNet* op_net_db = db_network_->staToDb(new_net);
op_net_db->setSigType(ip_net_db->getSigType());
Net* op_net = new_net;
out_net = new_net;

buffer_op_net = new_net;
buffer_ip_net = net;

for (const Pin* pin : load_pins) {
Port* port = network_->port(pin);
Instance* inst = network_->instance(pin);
if (resizer_->dontTouch(inst)) {
continue;
}
// preserve any hierarchical connection
odb::dbModNet* mod_net = db_network_->hierNet(pin);
sta_->disconnectPin(const_cast<Pin*>(pin));
sta_->connectPin(inst, port, op_net);
sta_->connectPin(inst, port, buffer_op_net);

if (mod_net) {
db_network_->connectPin(const_cast<Pin*>(pin),
db_network_->dbToSta(mod_net));
}
}
db_network_->connectPin(buffer_ip_pin, buffer_ip_net);
db_network_->connectPin(buffer_op_pin, buffer_op_net);
sta_->connectPin(buffer, buffer_input_port, buffer_ip_net);
sta_->connectPin(buffer, buffer_output_port, buffer_op_net);
} else {
//
// case 2. One of the loads is a primary output
Expand All @@ -1926,13 +1927,12 @@ void RepairDesign::makeRepeater(const char* reason,
//
// Copy signal type to new net.
//
Net* op_net = net;
out_net = net;
Net* ip_net = new_net;
dbNet* op_net_db = db_network_->staToDb(net);
dbNet* ip_net_db = db_network_->staToDb(new_net);
ip_net_db->setSigType(op_net_db->getSigType());

Net* ip_net = new_net;

buffer_ip_net = new_net;
buffer_op_net = net;

Expand All @@ -1943,7 +1943,7 @@ void RepairDesign::makeRepeater(const char* reason,

// put non repeater loads from op net onto ip net, preserving
// any hierarchical connection
NetPinIterator* pin_iter = network_->pinIterator(op_net);
NetPinIterator* pin_iter = network_->pinIterator(net);
while (pin_iter->hasNext()) {
const Pin* pin = pin_iter->next();
if (!repeater_load_pins.hasKey(pin)) {
Expand All @@ -1959,8 +1959,8 @@ void RepairDesign::makeRepeater(const char* reason,
}
}
}
db_network_->connectPin(buffer_ip_pin, buffer_ip_net);
db_network_->connectPin(buffer_op_pin, buffer_op_net);
sta_->connectPin(buffer, buffer_input_port, buffer_ip_net);
sta_->connectPin(buffer, buffer_output_port, buffer_op_net);
}

resizer_->parasiticsInvalid(buffer_ip_net);
Expand Down

0 comments on commit 11fa82a

Please sign in to comment.