Skip to content

Commit 3bbfc26

Browse files
authored
Merge pull request #7987 from osamahammad21/utl-callback
Implement callback registry to enable inter-module communication throughout openroad.
2 parents 857efe6 + cece467 commit 3bbfc26

File tree

18 files changed

+238
-8
lines changed

18 files changed

+238
-8
lines changed

include/ord/OpenRoad.hh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ class ICeWall;
101101

102102
namespace utl {
103103
class Logger;
104-
}
104+
class CallBackHandler;
105+
} // namespace utl
105106

106107
namespace dst {
107108
class Distributed;
@@ -137,6 +138,7 @@ class OpenRoad
137138

138139
Tcl_Interp* tclInterp() { return tcl_interp_; }
139140
utl::Logger* getLogger() { return logger_; }
141+
utl::CallBackHandler* getCallBackHandler() { return callback_handler_; }
140142
odb::dbDatabase* getDb() { return db_; }
141143
sta::dbSta* getSta() { return sta_; }
142144
sta::dbNetwork* getDbNetwork();
@@ -256,6 +258,7 @@ class OpenRoad
256258
dst::Distributed* distributer_ = nullptr;
257259
stt::SteinerTreeBuilder* stt_builder_ = nullptr;
258260
dft::Dft* dft_ = nullptr;
261+
utl::CallBackHandler* callback_handler_ = nullptr;
259262

260263
int threads_ = 1;
261264

src/OpenRoad.cc

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
#include "tap/MakeTapcell.h"
5555
#include "triton_route/MakeTritonRoute.h"
5656
#include "upf/MakeUpf.h"
57+
#include "utl/CallBackHandler.h"
5758
#include "utl/Logger.h"
5859
#include "utl/MakeLogger.h"
5960
#include "utl/Progress.h"
@@ -116,6 +117,7 @@ OpenRoad::~OpenRoad()
116117
dft::deleteDft(dft_);
117118
delete logger_;
118119
delete verilog_reader_;
120+
delete callback_handler_;
119121
}
120122

121123
sta::dbNetwork* OpenRoad::getDbNetwork()
@@ -160,6 +162,7 @@ void OpenRoad::init(Tcl_Interp* tcl_interp,
160162
// Make components.
161163
utl::Progress::setBatchMode(batch_mode);
162164
logger_ = utl::makeLogger(log_filename, metrics_filename);
165+
callback_handler_ = new utl::CallBackHandler(logger_);
163166
db_->setLogger(logger_);
164167
sta_ = sta::makeDbSta();
165168
verilog_network_ = makeDbVerilogNetwork();
@@ -219,6 +222,7 @@ void OpenRoad::init(Tcl_Interp* tcl_interp,
219222
opendp_,
220223
stt_builder_,
221224
logger_,
225+
callback_handler_,
222226
tcl_interp);
223227
initTritonCts(tritonCts_,
224228
db_,
@@ -240,8 +244,13 @@ void OpenRoad::init(Tcl_Interp* tcl_interp,
240244
initOpenRCX(extractor_, db_, logger_, getVersion(), tcl_interp);
241245
initICeWall(icewall_, db_, logger_, tcl_interp);
242246
initRestructure(restructure_, logger_, sta_, db_, resizer_, tcl_interp);
243-
initTritonRoute(
244-
detailed_router_, db_, logger_, distributer_, stt_builder_, tcl_interp);
247+
initTritonRoute(detailed_router_,
248+
db_,
249+
logger_,
250+
callback_handler_,
251+
distributer_,
252+
stt_builder_,
253+
tcl_interp);
245254
initPDNSim(pdnsim_, logger_, db_, sta_, resizer_, opendp_, tcl_interp);
246255
initAntennaChecker(antenna_checker_, db_, logger_, tcl_interp);
247256
initPartitionMgr(

src/drt/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ cc_library(
8686
"src/AbstractGraphicsFactory.h",
8787
"src/DesignCallBack.cpp",
8888
"src/DesignCallBack.h",
89+
"src/PACallBack.h",
8990
"src/TritonRoute.cpp",
9091
"src/db/drObj/drAccessPattern.cpp",
9192
"src/db/drObj/drNet.cpp",

src/drt/include/triton_route/MakeTritonRoute.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ class dbDatabase;
1111

1212
namespace utl {
1313
class Logger;
14-
}
14+
class CallBackHandler;
15+
} // namespace utl
1516

1617
namespace dst {
1718
class Distributed;
@@ -32,6 +33,7 @@ void deleteTritonRoute(drt::TritonRoute* router);
3233
void initTritonRoute(drt::TritonRoute* router,
3334
odb::dbDatabase* db,
3435
utl::Logger* logger,
36+
utl::CallBackHandler* callback_handler,
3537
dst::Distributed* dist,
3638
stt::SteinerTreeBuilder* stt_builder,
3739
Tcl_Interp* tcl_interp);

src/drt/include/triton_route/TritonRoute.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ class dbWire;
2626

2727
namespace utl {
2828
class Logger;
29-
}
29+
class CallBackHandler;
30+
} // namespace utl
3031

3132
namespace stt {
3233
class SteinerTreeBuilder;
@@ -41,6 +42,7 @@ namespace drt {
4142
class frDesign;
4243
class frInst;
4344
class DesignCallBack;
45+
class PACallBack;
4446
class FlexDR;
4547
class FlexPA;
4648
class FlexTA;
@@ -84,6 +86,7 @@ class TritonRoute
8486
~TritonRoute();
8587
void init(odb::dbDatabase* db,
8688
utl::Logger* logger,
89+
utl::CallBackHandler* callback_handler,
8790
dst::Distributed* dist,
8891
stt::SteinerTreeBuilder* stt_builder,
8992
std::unique_ptr<AbstractGraphicsFactory> graphics_factory);
@@ -185,6 +188,7 @@ class TritonRoute
185188
std::unique_ptr<frDesign> design_;
186189
std::unique_ptr<frDebugSettings> debug_;
187190
std::unique_ptr<DesignCallBack> db_callback_;
191+
std::unique_ptr<PACallBack> pa_callback_;
188192
std::unique_ptr<RouterConfiguration> router_cfg_;
189193
odb::dbDatabase* db_{nullptr};
190194
utl::Logger* logger_{nullptr};

src/drt/src/MakeTritonRoute.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ void deleteTritonRoute(drt::TritonRoute* router)
3535
void initTritonRoute(drt::TritonRoute* router,
3636
odb::dbDatabase* db,
3737
utl::Logger* logger,
38+
utl::CallBackHandler* callback_handler,
3839
dst::Distributed* dist,
3940
stt::SteinerTreeBuilder* stt_builder,
4041
Tcl_Interp* tcl_interp)
@@ -46,7 +47,12 @@ void initTritonRoute(drt::TritonRoute* router,
4647
std::unique_ptr<drt::AbstractGraphicsFactory> graphics_factory
4748
= std::make_unique<drt::GraphicsFactory>();
4849

49-
router->init(db, logger, dist, stt_builder, std::move(graphics_factory));
50+
router->init(db,
51+
logger,
52+
callback_handler,
53+
dist,
54+
stt_builder,
55+
std::move(graphics_factory));
5056
}
5157

5258
} // namespace drt

src/drt/src/PACallBack.h

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// SPDX-License-Identifier: BSD-3-Clause
2+
// Copyright (c) 2025-2025, The OpenROAD Authors
3+
4+
#pragma once
5+
6+
#include "triton_route/TritonRoute.h"
7+
#include "utl/CallBack.h"
8+
#include "utl/Logger.h"
9+
10+
namespace drt {
11+
12+
class frDesign;
13+
class FlexPA;
14+
15+
class PACallBack : public utl::CallBack
16+
{
17+
public:
18+
PACallBack(TritonRoute* router) : router_(router) {}
19+
20+
~PACallBack() override = default;
21+
22+
void onPinAccessUpdateRequired() override
23+
{
24+
// TODO: Implement
25+
}
26+
27+
private:
28+
TritonRoute* router_;
29+
};
30+
31+
} // namespace drt

src/drt/src/TritonRoute.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
#include "AbstractGraphicsFactory.h"
2020
#include "DesignCallBack.h"
21+
#include "PACallBack.h"
2122
#include "db/tech/frTechObject.h"
2223
#include "distributed/PinAccessJobDescription.h"
2324
#include "distributed/RoutingCallBack.h"
@@ -41,13 +42,15 @@
4142
#include "stt/SteinerTreeBuilder.h"
4243
#include "ta/AbstractTAGraphics.h"
4344
#include "ta/FlexTA.h"
45+
#include "utl/CallBackHandler.h"
4446
#include "utl/ScopedTemporaryFile.h"
4547

4648
namespace drt {
4749

4850
TritonRoute::TritonRoute()
4951
: debug_(std::make_unique<frDebugSettings>()),
5052
db_callback_(std::make_unique<DesignCallBack>(this)),
53+
pa_callback_(std::make_unique<PACallBack>(this)),
5154
router_cfg_(std::make_unique<RouterConfiguration>())
5255
{
5356
if (distributed_) {
@@ -526,6 +529,7 @@ void TritonRoute::applyUpdates(
526529
void TritonRoute::init(
527530
odb::dbDatabase* db,
528531
Logger* logger,
532+
utl::CallBackHandler* callback_handler,
529533
dst::Distributed* dist,
530534
stt::SteinerTreeBuilder* stt_builder,
531535
std::unique_ptr<AbstractGraphicsFactory> graphics_factory)
@@ -537,6 +541,7 @@ void TritonRoute::init(
537541
design_ = std::make_unique<frDesign>(logger_, router_cfg_.get());
538542
dist->addCallBack(new RoutingCallBack(this, dist, logger));
539543
graphics_factory_ = std::move(graphics_factory);
544+
pa_callback_->setOwner(callback_handler);
540545
}
541546

542547
bool TritonRoute::initGuide()

src/grt/include/grt/GlobalRouter.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ using AdjacencyList = std::vector<std::vector<int>>;
2222

2323
namespace utl {
2424
class Logger;
25-
}
25+
class CallBackHandler;
26+
} // namespace utl
2627

2728
namespace odb {
2829
class dbDatabase;
@@ -114,6 +115,7 @@ class GlobalRouter
114115
~GlobalRouter();
115116

116117
void init(utl::Logger* logger,
118+
utl::CallBackHandler* callback_handler,
117119
stt::SteinerTreeBuilder* stt_builder,
118120
odb::dbDatabase* db,
119121
sta::dbSta* sta,
@@ -446,6 +448,7 @@ class GlobalRouter
446448
void configFastRoute();
447449

448450
utl::Logger* logger_;
451+
utl::CallBackHandler* callback_handler_;
449452
stt::SteinerTreeBuilder* stt_builder_;
450453
ant::AntennaChecker* antenna_checker_;
451454
dpl::Opendp* opendp_;

src/grt/include/grt/MakeGlobalRouter.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ class SteinerTreeBuilder;
3131

3232
namespace utl {
3333
class Logger;
34-
}
34+
class CallBackHandler;
35+
} // namespace utl
3536

3637
namespace grt {
3738

@@ -47,6 +48,7 @@ void initGlobalRouter(grt::GlobalRouter* grt,
4748
dpl::Opendp* dpl,
4849
stt::SteinerTreeBuilder* stt_builder,
4950
utl::Logger* logger,
51+
utl::CallBackHandler* callback_handler,
5052
Tcl_Interp* tcl_interp);
5153

5254
void deleteGlobalRouter(grt::GlobalRouter* global_router);

0 commit comments

Comments
 (0)