55
66#include " drt/TritonRoute.h"
77#include " frDesign.h"
8+ #include " io/io.h"
89#include " odb/db.h"
910
1011namespace drt {
1112
13+ void DesignCallBack::inDbInstCreate (odb::dbInst* db_inst)
14+ {
15+ auto design = router_->getDesign ();
16+ if (design == nullptr || design->getTopBlock () == nullptr ) {
17+ return ;
18+ }
19+ io::Parser parser (router_->getDb (),
20+ design,
21+ router_->getLogger (),
22+ router_->getRouterConfiguration ());
23+
24+ parser.setInst (db_inst);
25+ }
26+
27+ void DesignCallBack::inDbInstCreate (odb::dbInst* db_inst,
28+ odb::dbRegion* db_region)
29+ {
30+ inDbInstCreate (db_inst);
31+ }
32+
1233void DesignCallBack::inDbPreMoveInst (odb::dbInst* db_inst)
1334{
1435 auto design = router_->getDesign ();
@@ -19,10 +40,10 @@ void DesignCallBack::inDbPreMoveInst(odb::dbInst* db_inst)
1940 if (inst == nullptr ) {
2041 return ;
2142 }
22- router_->deleteInstancePAData (inst);
2343 if (design->getRegionQuery () != nullptr ) {
2444 design->getRegionQuery ()->removeBlockObj (inst);
2545 }
46+ router_->deleteInstancePAData (inst, false );
2647}
2748
2849void DesignCallBack::inDbPostMoveInst (odb::dbInst* db_inst)
@@ -55,11 +76,93 @@ void DesignCallBack::inDbInstDestroy(odb::dbInst* db_inst)
5576 if (inst == nullptr ) {
5677 return ;
5778 }
58- router_->deleteInstancePAData (inst);
5979 if (design->getRegionQuery () != nullptr ) {
6080 design->getRegionQuery ()->removeBlockObj (inst);
6181 }
6282 design->getTopBlock ()->removeInst (inst);
83+ router_->deleteInstancePAData (inst, true );
84+ }
85+
86+ void DesignCallBack::inDbInstSwapMasterBefore (odb::dbInst* db_inst,
87+ odb::dbMaster* db_master)
88+ {
89+ inDbInstDestroy (db_inst);
90+ }
91+
92+ void DesignCallBack::inDbInstSwapMasterAfter (odb::dbInst* db_inst)
93+ {
94+ inDbInstCreate (db_inst);
95+ inDbPostMoveInst (db_inst);
96+ for (auto inst_term : db_inst->getITerms ()) {
97+ if (inst_term->getNet ()) {
98+ inDbITermPostConnect (inst_term);
99+ }
100+ }
101+ }
102+ void DesignCallBack::inDbNetCreate (odb::dbNet* db_net)
103+ {
104+ auto design = router_->getDesign ();
105+ if (design == nullptr || design->getTopBlock () == nullptr ) {
106+ return ;
107+ }
108+ io::Parser parser (router_->getDb (),
109+ design,
110+ router_->getLogger (),
111+ router_->getRouterConfiguration ());
112+ parser.addNet (db_net);
113+ }
114+
115+ void DesignCallBack::inDbNetDestroy (odb::dbNet* db_net)
116+ {
117+ auto design = router_->getDesign ();
118+ if (design == nullptr || design->getTopBlock () == nullptr ) {
119+ return ;
120+ }
121+ auto net = design->getTopBlock ()->findNet (db_net->getName ());
122+ if (net == nullptr ) {
123+ return ;
124+ }
125+ design->getTopBlock ()->removeNet (net);
126+ }
127+
128+ void DesignCallBack::inDbITermPostDisconnect (odb::dbITerm* db_iterm,
129+ odb::dbNet* db_net)
130+ {
131+ auto design = router_->getDesign ();
132+ if (design == nullptr || design->getTopBlock () == nullptr ) {
133+ return ;
134+ }
135+ auto inst = design->getTopBlock ()->findInst (db_iterm->getInst ());
136+ auto net = design->getTopBlock ()->findNet (db_net->getName ());
137+ if (inst == nullptr || net == nullptr ) {
138+ return ;
139+ }
140+ auto inst_term = inst->getInstTerm (db_iterm->getMTerm ()->getIndex ());
141+ if (inst_term == nullptr ) {
142+ return ;
143+ }
144+ net->removeInstTerm (inst_term);
145+ inst_term->addToNet (nullptr );
146+ }
147+
148+ void DesignCallBack::inDbITermPostConnect (odb::dbITerm* db_iterm)
149+ {
150+ auto design = router_->getDesign ();
151+ if (design == nullptr || design->getTopBlock () == nullptr ) {
152+ return ;
153+ }
154+ auto inst = design->getTopBlock ()->findInst (db_iterm->getInst ());
155+ auto net = design->getTopBlock ()->findNet (db_iterm->getNet ()->getName ());
156+ if (inst == nullptr || net == nullptr ) {
157+ return ;
158+ }
159+ auto inst_term = inst->getInstTerm (db_iterm->getMTerm ()->getIndex ());
160+ if (inst_term == nullptr ) {
161+ return ;
162+ }
163+ inst_term->addToNet (net);
164+ net->addInstTerm (inst_term);
165+ router_->addInstancePAData (inst);
63166}
64167
65168} // namespace drt
0 commit comments