Skip to content

Commit 83c82d0

Browse files
committed
Replace the two pass initialization with a single pass.
Previously each tool was created and initialized seperatly. This allowed for cyclic dependencies to be created which is undesirable. It also complicates initialization in c++ unit tests. Ordinary constructors are now used. All dependency cycles were broken previously to enable this. Signed-off-by: Matt Liberty <[email protected]>
1 parent 6dadf2d commit 83c82d0

File tree

168 files changed

+1674
-1904
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

168 files changed

+1674
-1904
lines changed

src/Design.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ std::string Design::evalTclString(const std::string& cmd)
135135
auto openroad = getOpenRoad();
136136
ord::OpenRoad::setOpenRoad(openroad, /* reinit_ok */ true);
137137
Tcl_Interp* tcl_interp = openroad->tclInterp();
138+
sta::Sta::setSta(openroad->getSta());
138139
Tcl_Eval(tcl_interp, cmd.c_str());
139140
return std::string(Tcl_GetStringResult(tcl_interp));
140141
}

src/OpenRoad.cc

Lines changed: 122 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -19,26 +19,36 @@
1919
#include "Python.h"
2020
#endif
2121

22+
#include "ant/AntennaChecker.hh"
2223
#include "ant/MakeAntennaChecker.hh"
24+
#include "cgt/ClockGating.h"
2325
#include "cgt/MakeClockGating.h"
2426
#include "cts/MakeTritoncts.h"
27+
#include "cts/TritonCTS.h"
2528
#include "db_sta/MakeDbSta.hh"
2629
#include "db_sta/dbNetwork.hh"
2730
#include "db_sta/dbReadVerilog.hh"
2831
#include "db_sta/dbSta.hh"
32+
#include "dft/Dft.hh"
2933
#include "dft/MakeDft.hh"
3034
#include "dpl/MakeOpendp.h"
35+
#include "dpl/Opendp.h"
36+
#include "dst/Distributed.h"
3137
#include "dst/MakeDistributed.h"
3238
#include "est/EstimateParasitics.h"
3339
#include "est/MakeEstimateParasitics.h"
3440
#include "exa/MakeExample.h"
41+
#include "exa/example.h"
42+
#include "fin/Finale.h"
3543
#include "fin/MakeFinale.h"
3644
#include "gpl/MakeReplace.h"
45+
#include "gpl/Replace.h"
3746
#include "grt/GlobalRouter.h"
3847
#include "grt/MakeGlobalRouter.h"
3948
#include "gui/MakeGui.h"
4049
#include "ifp/MakeInitFloorplan.hh"
4150
#include "mpl/MakeMacroPlacer.h"
51+
#include "mpl/rtl_mp.h"
4252
#include "odb/3dblox.h"
4353
#include "odb/MakeOdb.h"
4454
#include "odb/cdl.h"
@@ -50,17 +60,26 @@
5060
#include "ord/InitOpenRoad.hh"
5161
#include "pad/MakeICeWall.h"
5262
#include "par/MakePartitionMgr.h"
63+
#include "par/PartitionMgr.h"
5364
#include "pdn/MakePdnGen.hh"
65+
#include "pdn/PdnGen.hh"
66+
#include "ppl/IOPlacer.h"
5467
#include "ppl/MakeIoplacer.h"
5568
#include "psm/MakePDNSim.hh"
69+
#include "psm/pdnsim.h"
5670
#include "rcx/MakeOpenRCX.h"
71+
#include "rcx/ext.h"
5772
#include "rmp/MakeRestructure.h"
73+
#include "rmp/Restructure.h"
5874
#include "rsz/MakeResizer.hh"
75+
#include "rsz/Resizer.hh"
5976
#include "sta/VerilogReader.hh"
6077
#include "sta/VerilogWriter.hh"
6178
#include "stt/MakeSteinerTreeBuilder.h"
6279
#include "tap/MakeTapcell.h"
80+
#include "tap/tapcell.h"
6381
#include "triton_route/MakeTritonRoute.h"
82+
#include "triton_route/TritonRoute.h"
6483
#include "upf/MakeUpf.h"
6584
#include "utl/CallBackHandler.h"
6685
#include "utl/Logger.h"
@@ -97,34 +116,34 @@ OpenRoad::OpenRoad()
97116

98117
OpenRoad::~OpenRoad()
99118
{
100-
deleteDbVerilogNetwork(verilog_network_);
119+
delete verilog_network_;
101120
// Temporarily removed until a crash can be resolved
102121
// deleteDbSta(sta_);
103122
// sta::deleteAllMemory();
104-
deleteIoplacer(ioPlacer_);
105-
deleteResizer(resizer_);
106-
deleteOpendp(opendp_);
107-
deleteGlobalRouter(global_router_);
108-
deleteRestructure(restructure_);
109-
deleteClockGating(clock_gating_);
110-
deleteTritonCts(tritonCts_);
111-
deleteTapcell(tapcell_);
112-
deleteMacroPlacer(macro_placer_);
113-
deleteExample(example_);
114-
deleteOpenRCX(extractor_);
115-
deleteTritonRoute(detailed_router_);
116-
deleteReplace(replace_);
117-
deletePDNSim(pdnsim_);
118-
deleteFinale(finale_);
119-
deleteAntennaChecker(antenna_checker_);
123+
delete ioPlacer_;
124+
delete resizer_;
125+
delete opendp_;
126+
delete global_router_;
127+
delete restructure_;
128+
delete clock_gating_;
129+
delete tritonCts_;
130+
delete tapcell_;
131+
delete macro_placer_;
132+
delete example_;
133+
delete extractor_;
134+
delete detailed_router_;
135+
delete replace_;
136+
delete pdnsim_;
137+
delete finale_;
138+
delete antenna_checker_;
120139
odb::dbDatabase::destroy(db_);
121-
deletePartitionMgr(partitionMgr_);
122-
deletePdnGen(pdngen_);
123-
deleteICeWall(icewall_);
124-
deleteDistributed(distributer_);
125-
deleteSteinerTreeBuilder(stt_builder_);
126-
dft::deleteDft(dft_);
127-
est::deleteEstimateParasitics(estimate_parasitics_);
140+
delete partitionMgr_;
141+
delete pdngen_;
142+
delete icewall_;
143+
delete distributer_;
144+
delete stt_builder_;
145+
delete dft_;
146+
delete estimate_parasitics_;
128147
delete logger_;
129148
delete verilog_reader_;
130149
delete callback_handler_;
@@ -171,123 +190,98 @@ void OpenRoad::init(Tcl_Interp* tcl_interp,
171190

172191
// Make components.
173192
utl::Progress::setBatchMode(batch_mode);
174-
logger_ = utl::makeLogger(log_filename, metrics_filename);
193+
logger_ = new utl::Logger(log_filename, metrics_filename);
175194
callback_handler_ = new utl::CallBackHandler(logger_);
176195
db_->setLogger(logger_);
177-
sta_ = sta::makeDbSta();
178-
verilog_network_ = makeDbVerilogNetwork();
179-
ioPlacer_ = ppl::makeIoplacer();
180-
resizer_ = rsz::makeResizer();
181-
opendp_ = dpl::makeOpendp();
182-
finale_ = fin::makeFinale();
183-
global_router_ = grt::makeGlobalRouter();
184-
restructure_ = rmp::makeRestructure();
185-
clock_gating_ = cgt::makeClockGating();
186-
tritonCts_ = cts::makeTritonCts();
187-
tapcell_ = tap::makeTapcell();
188-
macro_placer_ = mpl::makeMacroPlacer();
189-
example_ = exa::makeExample();
190-
extractor_ = rcx::makeOpenRCX();
191-
detailed_router_ = drt::makeTritonRoute();
192-
replace_ = gpl::makeReplace();
193-
pdnsim_ = psm::makePDNSim();
194-
antenna_checker_ = ant::makeAntennaChecker();
195-
partitionMgr_ = par::makePartitionMgr();
196-
pdngen_ = pdn::makePdnGen();
197-
icewall_ = pad::makeICeWall();
198-
distributer_ = dst::makeDistributed();
199-
stt_builder_ = stt::makeSteinerTreeBuilder();
200-
dft_ = dft::makeDft();
201-
estimate_parasitics_ = est::makeEstimateParasitics();
196+
sta_ = new sta::dbSta(tcl_interp, db_, logger_);
197+
verilog_network_ = new dbVerilogNetwork(sta_);
198+
ioPlacer_ = new ppl::IOPlacer(db_, logger_);
199+
stt_builder_ = new stt::SteinerTreeBuilder(db_, logger_);
200+
antenna_checker_ = new ant::AntennaChecker(db_, logger_);
201+
opendp_ = new dpl::Opendp(db_, logger_);
202+
global_router_ = new grt::GlobalRouter(logger_,
203+
callback_handler_,
204+
stt_builder_,
205+
db_,
206+
sta_,
207+
antenna_checker_,
208+
opendp_);
209+
grt::initGui(global_router_, db_, logger_);
210+
211+
estimate_parasitics_ = new est::EstimateParasitics(
212+
logger_, callback_handler_, db_, sta_, stt_builder_, global_router_);
213+
est::initGui(estimate_parasitics_);
214+
215+
resizer_ = new rsz::Resizer(logger_,
216+
db_,
217+
sta_,
218+
stt_builder_,
219+
global_router_,
220+
opendp_,
221+
estimate_parasitics_);
222+
finale_ = new fin::Finale(db_, logger_);
223+
restructure_ = new rmp::Restructure(
224+
logger_, sta_, db_, resizer_, estimate_parasitics_);
225+
clock_gating_ = new cgt::ClockGating(logger_, sta_);
226+
tritonCts_ = new cts::TritonCTS(logger_,
227+
db_,
228+
getDbNetwork(),
229+
sta_,
230+
stt_builder_,
231+
resizer_,
232+
estimate_parasitics_);
233+
tapcell_ = new tap::Tapcell(db_, logger_);
234+
partitionMgr_ = new par::PartitionMgr(db_, getDbNetwork(), sta_, logger_);
235+
macro_placer_
236+
= new mpl::MacroPlacer(getDbNetwork(), db_, sta_, logger_, partitionMgr_);
237+
extractor_ = new rcx::Ext(db_, logger_, getVersion());
238+
distributer_ = new dst::Distributed(logger_);
239+
detailed_router_ = new drt::TritonRoute(
240+
db_, logger_, callback_handler_, distributer_, stt_builder_);
241+
drt::initGui(detailed_router_);
242+
243+
replace_ = new gpl::Replace(db_, sta_, resizer_, global_router_, logger_);
244+
pdnsim_ = new psm::PDNSim(logger_, db_, sta_, estimate_parasitics_, opendp_);
245+
pdngen_ = new pdn::PdnGen(db_, logger_);
246+
icewall_ = new pad::ICeWall(db_, logger_);
247+
dft_ = new dft::Dft(db_, sta_, logger_);
248+
example_ = new exa::Example(db_, logger_);
202249

203250
// Init components.
204251
Ord_Init(tcl_interp);
205252
// Import TCL scripts.
206253
utl::evalTclInit(tcl_interp, ord::ord_tcl_inits);
207254

208-
initLogger(logger_, tcl_interp);
255+
utl::initLogger(tcl_interp);
209256
// GUI first so we can register our sink with the logger
210257
gui::initGui(tcl_interp, db_, sta_, logger_);
211258
odb::initOdb(tcl_interp);
212259
upf::initUpf(tcl_interp);
213260
ifp::initInitFloorplan(tcl_interp);
214-
initDbSta(sta_, logger_, tcl_interp, db_);
215-
initResizer(resizer_,
216-
tcl_interp,
217-
logger_,
218-
db_,
219-
sta_,
220-
stt_builder_,
221-
global_router_,
222-
opendp_,
223-
estimate_parasitics_);
224-
initDbVerilogNetwork(verilog_network_, sta_);
225-
initIoplacer(ioPlacer_, db_, logger_, tcl_interp);
226-
initReplace(
227-
replace_, db_, sta_, resizer_, global_router_, logger_, tcl_interp);
228-
initOpendp(opendp_, db_, logger_, tcl_interp);
229-
initFinale(finale_, db_, logger_, tcl_interp);
230-
initGlobalRouter(global_router_,
231-
db_,
232-
sta_,
233-
antenna_checker_,
234-
opendp_,
235-
stt_builder_,
236-
logger_,
237-
callback_handler_,
238-
tcl_interp);
239-
initTritonCts(tritonCts_,
240-
db_,
241-
getDbNetwork(),
242-
sta_,
243-
stt_builder_,
244-
resizer_,
245-
estimate_parasitics_,
246-
logger_,
247-
tcl_interp);
248-
initTapcell(tapcell_, db_, logger_, tcl_interp);
249-
initMacroPlacer(macro_placer_,
250-
getDbNetwork(),
251-
db_,
252-
sta_,
253-
logger_,
254-
partitionMgr_,
255-
tcl_interp);
256-
initExample(example_, db_, logger_, tcl_interp);
257-
initOpenRCX(extractor_, db_, logger_, getVersion(), tcl_interp);
258-
initICeWall(icewall_, db_, logger_, tcl_interp);
259-
initRestructure(restructure_,
260-
logger_,
261-
sta_,
262-
db_,
263-
resizer_,
264-
estimate_parasitics_,
265-
tcl_interp);
266-
cgt::initClockGating(clock_gating_, tcl_interp, logger_, sta_);
267-
initTritonRoute(detailed_router_,
268-
db_,
269-
logger_,
270-
callback_handler_,
271-
distributer_,
272-
stt_builder_,
273-
tcl_interp);
274-
initPDNSim(
275-
pdnsim_, logger_, db_, sta_, estimate_parasitics_, opendp_, tcl_interp);
276-
initAntennaChecker(antenna_checker_, db_, logger_, tcl_interp);
277-
initPartitionMgr(
278-
partitionMgr_, db_, getDbNetwork(), sta_, logger_, tcl_interp);
279-
initPdnGen(pdngen_, db_, logger_, tcl_interp);
280-
initDistributed(distributer_, logger_, tcl_interp);
281-
initSteinerTreeBuilder(stt_builder_, db_, logger_, tcl_interp);
282-
dft::initDft(dft_, db_, sta_, logger_, tcl_interp);
283-
initEstimateParasitics(estimate_parasitics_,
284-
tcl_interp,
285-
logger_,
286-
callback_handler_,
287-
db_,
288-
sta_,
289-
stt_builder_,
290-
global_router_);
261+
sta::initDbSta(tcl_interp);
262+
rsz::initResizer(tcl_interp);
263+
ppl::initIoplacer(tcl_interp);
264+
gpl::initReplace(tcl_interp);
265+
dpl::initOpendp(tcl_interp);
266+
fin::initFinale(tcl_interp);
267+
grt::initTcl(tcl_interp);
268+
cts::initTritonCts(tcl_interp);
269+
tap::initTapcell(tcl_interp);
270+
mpl::initMacroPlacer(tcl_interp);
271+
exa::initExample(tcl_interp);
272+
rcx::initOpenRCX(tcl_interp);
273+
pad::initICeWall(tcl_interp);
274+
rmp::initRestructure(tcl_interp);
275+
cgt::initClockGating(tcl_interp);
276+
drt::initTcl(tcl_interp);
277+
psm::initPDNSim(tcl_interp);
278+
ant::initAntennaChecker(tcl_interp);
279+
par::initPartitionMgr(tcl_interp);
280+
pdn::initPdnGen(tcl_interp);
281+
dst::initDistributed(tcl_interp);
282+
stt::initSteinerTreeBuilder(tcl_interp);
283+
dft::initDft(tcl_interp);
284+
est::initTcl(tcl_interp);
291285

292286
// Import exported commands to global namespace.
293287
Tcl_Eval(tcl_interp, "sta::define_sta_cmds");

src/ant/include/ant/AntennaChecker.hh

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,9 @@ using GateToViolationLayers
106106
class AntennaChecker
107107
{
108108
public:
109-
AntennaChecker();
109+
AntennaChecker(odb::dbDatabase* db, utl::Logger* logger);
110110
~AntennaChecker();
111111

112-
void init(odb::dbDatabase* db, utl::Logger* logger);
113-
114112
// net nullptr -> check all nets
115113
int checkAntennas(odb::dbNet* net = nullptr,
116114
int num_threads = 1,

src/ant/include/ant/MakeAntennaChecker.hh

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,8 @@
55

66
#include <tcl.h>
77

8-
namespace odb {
9-
class dbDatabase;
10-
}
11-
12-
namespace utl {
13-
class Logger;
14-
}
15-
168
namespace ant {
179

18-
class AntennaChecker;
19-
20-
AntennaChecker* makeAntennaChecker();
21-
22-
void deleteAntennaChecker(ant::AntennaChecker* antennachecker);
23-
24-
void initAntennaChecker(ant::AntennaChecker* antenna_checker,
25-
odb::dbDatabase* db,
26-
utl::Logger* logger,
27-
Tcl_Interp* tcl_interp);
10+
void initAntennaChecker(Tcl_Interp* tcl_interp);
2811

2912
} // namespace ant

src/ant/src/AntennaChecker.cc

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,13 @@ struct AntennaModel
5555
double diff_metal_reduce_factor;
5656
};
5757

58-
AntennaChecker::AntennaChecker() = default;
59-
AntennaChecker::~AntennaChecker() = default;
60-
61-
void AntennaChecker::init(odb::dbDatabase* db, utl::Logger* logger)
58+
AntennaChecker::AntennaChecker(odb::dbDatabase* db, utl::Logger* logger)
59+
: db_(db), logger_(logger)
6260
{
63-
db_ = db;
64-
logger_ = logger;
6561
}
6662

63+
AntennaChecker::~AntennaChecker() = default;
64+
6765
void AntennaChecker::initAntennaRules()
6866
{
6967
block_ = db_->getChip()->getBlock();

0 commit comments

Comments
 (0)