@@ -104,12 +104,19 @@ void RepairDesign::repairDesign(double max_wire_length,
104104
105105void RepairDesign::performEarlySizingRound (int & repaired_net_count)
106106{
107+ debugPrint (logger_, RSZ, " early_sizing" , 1 , " Performing early sizing round." );
107108 // keep track of user annotations so we don't remove them
108109 std::set<std::pair<Vertex*, int >> slew_user_annotated;
109110
110111 // We need to override slews in order to get good required time estimates.
111112 for (int i = resizer_->level_drvr_vertices_ .size () - 1 ; i >= 0 ; i--) {
112113 Vertex* drvr = resizer_->level_drvr_vertices_ [i];
114+ debugPrint (logger_,
115+ RSZ,
116+ " early_sizing" ,
117+ 2 ,
118+ " Annotating slew for driver {}" ,
119+ network_->pathName (drvr->pin ()));
113120 for (auto rf : {RiseFall::rise (), RiseFall::fall ()}) {
114121 if (!drvr->slewAnnotated (rf, min_) && !drvr->slewAnnotated (rf, max_)) {
115122 sta_->setAnnotatedSlew (drvr,
@@ -130,30 +137,58 @@ void RepairDesign::performEarlySizingRound(int& repaired_net_count)
130137 for (int i = resizer_->level_drvr_vertices_ .size () - 1 ; i >= 0 ; i--) {
131138 Vertex* drvr = resizer_->level_drvr_vertices_ [i];
132139 Pin* drvr_pin = drvr->pin ();
140+ debugPrint (logger_,
141+ RSZ,
142+ " early_sizing" ,
143+ 2 ,
144+ " Processing driver {}" ,
145+ network_->pathName (drvr_pin));
133146 // Always get the flat net for the top level port.
134147 Net* net = network_->isTopLevelPort (drvr_pin)
135148 ? network_->net (network_->term (drvr_pin))
136149 : db_network_->dbToSta (db_network_->flatNet (drvr_pin));
137150 if (!net) {
138151 continue ;
139152 }
140- dbNet* net_db = db_network_->staToDb (net);
153+
154+ odb::dbNet* net_db = nullptr ;
155+ odb::dbModNet* mod_net_db = nullptr ;
156+ db_network_->staToDb (net, net_db, mod_net_db);
141157 search_->findRequireds (drvr->level () + 1 );
142158
143- if (net && !resizer_->dontTouch (net) && !net_db->isConnectedByAbutment ()
159+ bool not_abut_connection = net_db && !net_db->isConnectedByAbutment ();
160+ if (net && !resizer_->dontTouch (net) && not_abut_connection
144161 && !sta_->isClock (drvr_pin)
145162 // Exclude tie hi/low cells and supply nets.
146163 && !drvr->isConstant ()) {
164+ debugPrint (logger_,
165+ RSZ,
166+ " early_sizing" ,
167+ 2 ,
168+ " Net {} is eligible for repair." ,
169+ network_->pathName (net));
147170 float fanout, max_fanout, fanout_slack;
148171 sta_->checkFanout (drvr_pin, max_, fanout, max_fanout, fanout_slack);
149172
150173 bool repaired_net = false ;
151174
152175 if (performGainBuffering (net, drvr_pin, max_fanout)) {
176+ debugPrint (logger_,
177+ RSZ,
178+ " early_sizing" ,
179+ 2 ,
180+ " Gain buffering applied to net {}." ,
181+ network_->pathName (net));
153182 repaired_net = true ;
154183 }
155184
156185 if (resizer_->resizeToCapRatio (drvr_pin, false )) {
186+ debugPrint (logger_,
187+ RSZ,
188+ " early_sizing" ,
189+ 2 ,
190+ " Resized driver {}." ,
191+ network_->pathName (drvr_pin));
157192 repaired_net = true ;
158193 }
159194
@@ -172,6 +207,7 @@ void RepairDesign::performEarlySizingRound(int& repaired_net_count)
172207 }
173208 }
174209 }
210+ debugPrint (logger_, RSZ, " early_sizing" , 1 , " Early sizing round finished." );
175211
176212 resizer_->level_drvr_vertices_valid_ = false ;
177213 resizer_->ensureLevelDrvrVertices ();
0 commit comments