@@ -229,6 +229,7 @@ class FastRouteCore
229229 void setCongestionReportIterStep (int congestion_report_iter_step);
230230 void setCongestionReportFile (const char * congestion_file_name);
231231 void setGridMax (int x_max, int y_max);
232+ void setDetourPenalty (int penalty);
232233 void getCongestionNets (std::set<odb::dbNet*>& congestion_nets);
233234 void computeCongestionInformation ();
234235 std::vector<int > getOriginalResources ();
@@ -287,7 +288,7 @@ class FastRouteCore
287288 double dbuToMicrons (int dbu);
288289 odb::Rect globalRoutingToBox (const GSegment& route);
289290 NetRouteMap getRoutes ();
290- void updateSlacks (float percentage = 1 );
291+ void updateSlacks (float percentage = 0.15 );
291292 void preProcessTechLayers ();
292293 odb::dbTechLayer* getTechLayer (int layer, bool is_via);
293294
@@ -383,7 +384,8 @@ class FastRouteCore
383384 std::vector<int *>& points_heap_3D,
384385 multi_array<int , 3 >& dist_3D,
385386 multi_array<Direction, 3 >& directions_3D,
386- multi_array<int , 3 >& corr_edge_3D);
387+ multi_array<int , 3 >& corr_edge_3D,
388+ multi_array<int , 3 >& path_len_3D);
387389 void setupHeap3D (int netID,
388390 int edgeID,
389391 std::vector<int *>& src_heap_3D,
@@ -392,6 +394,7 @@ class FastRouteCore
392394 multi_array<int , 3 >& corr_edge_3D,
393395 multi_array<int , 3 >& d1_3D,
394396 multi_array<int , 3 >& d2_3D,
397+ multi_array<int , 3 >& path_len_3D,
395398 int regionX1,
396399 int regionX2,
397400 int regionY1,
@@ -537,16 +540,24 @@ class FastRouteCore
537540 multi_array<int , 2 >& layer_grid,
538541 int net_cost);
539542 void assignEdge (int netID, int edgeID, bool processDIR);
540- int getLayerResistance (int layer, int length, FrNet* net);
541- int getViaResistance (int from_layer, int to_layer);
542- bool needResistanceAware (int net_id);
543543 void recoverEdge (int netID, int edgeID);
544544 void layerAssignmentV4 ();
545545 void netpinOrderInc ();
546546 void checkRoute3D ();
547547 void StNetOrder ();
548548 float CalculatePartialSlack ();
549549 float getNetSlack (odb::dbNet* net);
550+
551+ // Resistance-aware related functions
552+ float getWireResistance (int layer, int length, FrNet* net);
553+ float getViaResistance (int from_layer, int to_layer);
554+ int getWireCost (int layer, int length, FrNet* net);
555+ int getViaCost (int from_layer, int to_layer);
556+ float getNetResistance (FrNet* net, bool assume_layer = false );
557+ float getResAwareScore (FrNet* net);
558+ void updateWorstMetrics (FrNet* net);
559+ void resetWorstMetrics ();
560+
550561 /* *
551562 * @brief Validates the routing of edges for a specified net.
552563 *
@@ -622,6 +633,10 @@ class FastRouteCore
622633 bool enable_resistance_aware_ = false ;
623634 bool is_3d_step_ = false ;
624635 bool is_incremental_grt_ = false ;
636+ float worst_slack_;
637+ float worst_net_resistance_;
638+ int worst_net_length_;
639+ int worst_fanout_;
625640 int num_adjust_;
626641 int v_capacity_;
627642 int h_capacity_;
@@ -718,6 +733,8 @@ class FastRouteCore
718733 std::vector<int *> dest_heap_3D_;
719734 multi_array<int , 3 > d1_3D_;
720735 multi_array<int , 3 > d2_3D_;
736+ multi_array<int , 3 > path_len_3D_;
737+ int detour_penalty_;
721738};
722739
723740extern const char * getNetName (odb::dbNet* db_net);
0 commit comments