From e6395681410f49673e91c698b8ae5b4be6cc8946 Mon Sep 17 00:00:00 2001 From: andyfox-rushc Date: Tue, 3 Dec 2024 13:57:44 -0800 Subject: [PATCH] Fix for scratchpad creation of buffers in resizer, mark such instances as concrete Signed-off-by: andyfox-rushc --- src/dbSta/src/dbNetwork.cc | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/dbSta/src/dbNetwork.cc b/src/dbSta/src/dbNetwork.cc index 3994b4002ce..39d756fdf27 100644 --- a/src/dbSta/src/dbNetwork.cc +++ b/src/dbSta/src/dbNetwork.cc @@ -1993,6 +1993,20 @@ Instance* dbNetwork::makeInstance(LibertyCell* cell, dbMaster* master = db_->findMaster(cell_name); if (master) { dbInst* inst = dbInst::create(block_, master, name); + // + // Register all liberty cells as being concrete + // Sometimes this method is called by the sta + // to build "test circuits" eg to find the max wire length + // And those cells need to use the external api + // to get timing characteristics, so they have to be + // concrete + Cell* inst_cell = dbToSta(master); + registerConcreteCell(inst_cell); + std::unique_ptr port_iter{portIterator(inst_cell)}; + while (port_iter->hasNext()) { + Port* cur_port = port_iter->next(); + registerConcretePort(cur_port); + } return dbToSta(inst); } } else { @@ -2003,6 +2017,20 @@ Instance* dbNetwork::makeInstance(LibertyCell* cell, dbMaster* master = db_->findMaster(cell_name); dbModule* parent = mod_inst->getMaster(); dbInst* inst = dbInst::create(block_, master, name, false, parent); + Cell* inst_cell = dbToSta(master); + // + // Register all liberty cells as being concrete + // Sometimes this method is called by the sta + // to build "test circuits" eg to find the max wire length + // And those cells need to use the external api + // to get timing characteristics, so they have to be + // concrete + registerConcreteCell(inst_cell); + std::unique_ptr port_iter{portIterator(inst_cell)}; + while (port_iter->hasNext()) { + Port* cur_port = port_iter->next(); + registerConcretePort(cur_port); + } return dbToSta(inst); } }