@@ -130,9 +130,9 @@ void FastRouteCore::netpinOrderInc()
130130 ndr_priority = 0 ; // Higher priority for NDR nets
131131 }
132132
133- float slack = 1 ;
133+ float slack = 0 ;
134134
135- if (resistance_aware_) {
135+ if (resistance_aware_ && nets_[netID]-> getSlack () < 0 ) {
136136 slack = nets_[netID]->getSlack ();
137137 }
138138
@@ -485,8 +485,6 @@ void FastRouteCore::assignEdge(const int netID,
485485 multi_array<int , 2 > layer_grid;
486486 layer_grid.resize (boost::extents[num_layers_][routelen + 1 ]);
487487
488- const int via_scale_factor = 2 ;
489-
490488 for (k = 0 ; k < routelen; k++) {
491489 int best_cost = std::numeric_limits<int >::min ();
492490 if (grids[k].x == grids[k + 1 ].x ) {
@@ -619,8 +617,7 @@ void FastRouteCore::assignEdge(const int netID,
619617 // Calculate via cost with resistance
620618 int via_resistance_cost = 0 ;
621619 if (i != l) {
622- via_resistance_cost
623- = getViaResistance (l, i) * via_scale_factor; // Scale factor
620+ via_resistance_cost = getViaResistance (l, i); // Scale factor
624621 }
625622
626623 int base_via_cost = abs (i - l) * (k == 0 ? 2 : 3 );
@@ -634,8 +631,8 @@ void FastRouteCore::assignEdge(const int netID,
634631 }
635632 for (int l = 0 ; l < num_layers_; l++) {
636633 if (layer_grid[l][k] >= net->getLayerEdgeCost (l)) {
637- gridD[l][k + 1 ] = gridD[l][k] + 1
638- + getLayerResistance (l, tile_size_ * routelen , net);
634+ gridD[l][k + 1 ]
635+ = gridD[l][k] + 1 + getLayerResistance (l, tile_size_, net);
639636 } else if (layer_grid[l][k] == std::numeric_limits<int >::min ()
640637 || l < net->getMinLayer () || l > net->getMaxLayer ()) {
641638 // when the layer orientation doesn't match the edge orientation,
@@ -644,8 +641,7 @@ void FastRouteCore::assignEdge(const int netID,
644641 gridD[l][k + 1 ] = gridD[l][k] + 2 * BIG_INT;
645642 } else {
646643 // Congested case - still include resistance but with higher base cost
647- int wire_resistance
648- = getLayerResistance (l, tile_size_ * routelen, net);
644+ int wire_resistance = getLayerResistance (l, tile_size_, net);
649645 gridD[l][k + 1 ] = gridD[l][k] + BIG_INT + wire_resistance;
650646 }
651647 }
@@ -655,7 +651,7 @@ void FastRouteCore::assignEdge(const int netID,
655651 for (int i = 0 ; i < num_layers_; i++) {
656652 int via_resistance_cost = 0 ;
657653 if (i != l) {
658- via_resistance_cost = getViaResistance (l, i) * via_scale_factor ;
654+ via_resistance_cost = getViaResistance (l, i);
659655 }
660656 int total_cost = abs (i - l) + via_resistance_cost;
661657
@@ -749,8 +745,7 @@ void FastRouteCore::assignEdge(const int netID,
749745 // Calculate via cost with resistance
750746 int via_resistance_cost = 0 ;
751747 if (i != l) {
752- via_resistance_cost
753- = getViaResistance (l, i) * via_scale_factor; // Scale factor
748+ via_resistance_cost = getViaResistance (l, i); // Scale factor
754749 }
755750
756751 int base_via_cost = abs (i - l) * (k == routelen ? 2 : 3 );
@@ -764,8 +759,8 @@ void FastRouteCore::assignEdge(const int netID,
764759 }
765760 for (int l = 0 ; l < num_layers_; l++) {
766761 if (layer_grid[l][k - 1 ] >= net->getLayerEdgeCost (l)) {
767- gridD[l][k - 1 ] = gridD[l][k] + 1
768- + getLayerResistance (l, tile_size_ * routelen , net);
762+ gridD[l][k - 1 ]
763+ = gridD[l][k] + 1 + getLayerResistance (l, tile_size_, net);
769764 } else if (layer_grid[l][k] == std::numeric_limits<int >::min ()
770765 || l < net->getMinLayer () || l > net->getMaxLayer ()) {
771766 // when the layer orientation doesn't match the edge orientation,
@@ -774,8 +769,7 @@ void FastRouteCore::assignEdge(const int netID,
774769 gridD[l][k - 1 ] = gridD[l][k] + 2 * BIG_INT;
775770 } else {
776771 // Congested case - still include resistance but with higher base cost
777- int wire_resistance
778- = getLayerResistance (l, tile_size_ * routelen, net);
772+ int wire_resistance = getLayerResistance (l, tile_size_, net);
779773 gridD[l][k - 1 ] = gridD[l][k] + BIG_INT + wire_resistance;
780774 }
781775 }
@@ -785,7 +779,7 @@ void FastRouteCore::assignEdge(const int netID,
785779 for (int i = 0 ; i < num_layers_; i++) {
786780 int via_resistance_cost = 0 ;
787781 if (i != l) {
788- via_resistance_cost = getViaResistance (l, i) * via_scale_factor ;
782+ via_resistance_cost = getViaResistance (l, i);
789783 }
790784 int total_cost = abs (i - l) + via_resistance_cost;
791785
0 commit comments