Skip to content

Commit f03c470

Browse files
committed
grt: remove scale factor and fix slack priority and wire length
Signed-off-by: Jonas Gava <jfgava@precisioninno.com>
1 parent f539be4 commit f03c470

File tree

2 files changed

+16
-23
lines changed

2 files changed

+16
-23
lines changed

src/grt/src/fastroute/src/maze3D.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -664,19 +664,18 @@ float FastRouteCore::getMazeRouteCost3D(const int net_id,
664664
{
665665
FrNet* net = nets_[net_id];
666666
float base_cost = 1.0;
667-
const int via_scale_factor = 2; // A to B to A
668667

669668
if (is_via) {
670669
// Via transition cost
671670
base_cost = via_cost_;
672-
float via_resistance = getViaResistance(from_layer, to_layer);
671+
const int via_resistance = getViaResistance(from_layer, to_layer);
673672

674-
return base_cost + via_resistance * via_scale_factor;
673+
return base_cost + via_resistance;
675674
}
676675

677676
// Wire segment cost
678-
float length = abs(to_x - from_x) + abs(to_y - from_y);
679-
float wire_resistance
677+
const float length = abs(to_x - from_x) + abs(to_y - from_y);
678+
const float wire_resistance
680679
= getLayerResistance(from_layer, length * tile_size_, net);
681680

682681
// Check congestion

src/grt/src/fastroute/src/utility.cpp

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)