Skip to content

Commit 9ee8732

Browse files
committed
misc: clear multiple tools when reloading the odb file
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
1 parent 6ed3bd9 commit 9ee8732

19 files changed

Lines changed: 173 additions & 4 deletions

File tree

src/OpenRoad.cc

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -570,8 +570,9 @@ void OpenRoad::readDb(std::istream& stream)
570570
db_->triggerPreDbClear();
571571

572572
// Clear tool-specific cached state to ensure reproducibility
573-
global_router_->clear();
574-
detailed_router_->clearDesign();
573+
global_router_->clearForReload();
574+
opendp_->clearForReload();
575+
detailed_router_->clearForReload();
575576
replace_->reset();
576577
tritonCts_->clear();
577578
macro_placer_->clear();
@@ -580,6 +581,10 @@ void OpenRoad::readDb(std::istream& stream)
580581
pdngen_->reset();
581582
pdnsim_->clearSolvers();
582583
antenna_checker_->clear();
584+
resizer_->clear();
585+
extractor_->clear();
586+
estimate_parasitics_->clear();
587+
verilog_network_->clear();
583588

584589
db_->clear();
585590
}

src/cts/include/cts/TritonCTS.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ class TritonCTS
221221
sta::dbSta* openSta_ = nullptr;
222222
sta::dbNetwork* network_ = nullptr;
223223
utl::Logger* logger_ = nullptr;
224+
stt::SteinerTreeBuilder* st_builder_ = nullptr;
224225
CtsOptions* options_ = nullptr;
225226
std::unique_ptr<TechChar> techChar_;
226227
rsz::Resizer* resizer_ = nullptr;

src/cts/src/TritonCTS.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,11 @@ TritonCTS::TritonCTS(utl::Logger* logger,
7171
db_ = db;
7272
network_ = network;
7373
openSta_ = sta;
74+
st_builder_ = st_builder;
7475
resizer_ = resizer;
7576
estimate_parasitics_ = estimate_parasitics;
7677

77-
options_ = new CtsOptions(logger_, st_builder);
78+
options_ = new CtsOptions(logger_, st_builder_);
7879
}
7980

8081
TritonCTS::~TritonCTS()
@@ -84,12 +85,19 @@ TritonCTS::~TritonCTS()
8485

8586
void TritonCTS::clear()
8687
{
88+
techChar_.reset();
8789
builders_.clear();
8890
staClockNets_.clear();
8991
visitedClockNets_.clear();
9092
inst2clkbuf_.clear();
9193
driver2subnet_.clear();
9294
net2builder_.clear();
95+
rootBuffers_.clear();
96+
sinkBuffers_.clear();
97+
// Recreate options to reset all Tcl-settable CTS configuration
98+
// (buffer list, cap/slew ranges, clustering, etc.)
99+
delete options_;
100+
options_ = new CtsOptions(logger_, st_builder_);
93101
block_ = nullptr;
94102
numberOfClocks_ = 0;
95103
numClkNets_ = 0;

src/dpl/include/dpl/Opendp.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ class Opendp
9595
public:
9696
Opendp(odb::dbDatabase* db, utl::Logger* logger);
9797
~Opendp();
98+
void clearForReload();
9899

99100
Opendp(const Opendp&) = delete;
100101
Opendp& operator=(const Opendp&) = delete;

src/dpl/src/Opendp.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,16 @@ Opendp::Opendp(odb::dbDatabase* db, utl::Logger* logger)
6565

6666
Opendp::~Opendp() = default;
6767

68+
void Opendp::clearForReload()
69+
{
70+
importClear();
71+
padding_ = std::make_shared<Padding>();
72+
decap_masters_.clear();
73+
disallow_one_site_gaps_ = false;
74+
extra_dpl_enabled_ = false;
75+
global_swap_params_ = GlobalSwapParams();
76+
}
77+
6878
void Opendp::setPaddingGlobal(const int left, const int right)
6979
{
7080
padding_->setPaddingGlobal(GridX{left}, GridX{right});

src/drt/include/drt/TritonRoute.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ class TritonRoute : public PinAccessService
157157
void updateGlobals(const char* file_name);
158158
void resetDb(const char* file_name);
159159
void clearDesign();
160+
void clearForReload();
160161
void updateDesign(const std::vector<std::string>& updates, int num_threads);
161162
void updateDesign(const std::string& path, int num_threads);
162163
void addWorkerResults(

src/drt/src/TritonRoute.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,25 @@ void TritonRoute::clearDesign()
371371
design_ = std::make_unique<frDesign>(logger_, router_cfg_.get());
372372
}
373373

374+
void TritonRoute::clearForReload()
375+
{
376+
router_cfg_ = std::make_unique<RouterConfiguration>();
377+
design_ = std::make_unique<frDesign>(logger_, router_cfg_.get());
378+
dr_.reset();
379+
pa_.reset();
380+
// Block destructor will remove this callback; just detach so it can
381+
// re-register on the new block via initDesign().
382+
db_callback_->removeOwner();
383+
num_drvs_ = -1;
384+
distributed_ = false;
385+
dist_ip_.clear();
386+
dist_port_ = 0;
387+
shared_volume_.clear();
388+
workers_results_.clear();
389+
results_sz_ = 0;
390+
cloud_sz_ = 0;
391+
}
392+
374393
static void deserializeUpdate(frDesign* design,
375394
const std::string& updateStr,
376395
std::vector<drUpdate>& updates)

src/est/include/est/EstimateParasitics.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ class EstimateParasitics : public sta::dbStaState, public ParasiticsService
8080
stt::SteinerTreeBuilder* stt_builder,
8181
grt::GlobalRouter* global_router);
8282
~EstimateParasitics() override;
83+
void clear();
8384

8485
void estimateAllGlobalRouteParasitics() override;
8586
void initSteinerRenderer(

src/est/src/EstimateParasitics.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,23 @@ EstimateParasitics::~EstimateParasitics()
9090
service_registry_->withdraw<ParasiticsService>(this);
9191
}
9292

93+
void EstimateParasitics::clear()
94+
{
95+
block_ = nullptr;
96+
signal_layers_.clear();
97+
clk_layers_.clear();
98+
layer_res_.clear();
99+
layer_cap_.clear();
100+
wire_signal_res_.clear();
101+
wire_signal_cap_.clear();
102+
wire_clk_res_.clear();
103+
wire_clk_cap_.clear();
104+
parasitics_src_ = ParasiticsSrc::kNone;
105+
parasitics_invalid_.clear();
106+
dbu_ = 0;
107+
incremental_parasitics_enabled_ = false;
108+
}
109+
93110
void EstimateParasitics::estimateAllGlobalRouteParasitics()
94111
{
95112
clearParasitics();

src/gpl/src/replace.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ void Replace::reset()
6262

6363
tb_.reset();
6464
rb_.reset();
65+
66+
clusters_.clear();
6567
}
6668

6769
void Replace::addPlacementCluster(const Cluster& cluster)

0 commit comments

Comments
 (0)