Skip to content

Commit af8d3fb

Browse files
committed
grt: fix odb AP use with CUGR
Signed-off-by: rafaelmoresco <[email protected]>
1 parent f2a207e commit af8d3fb

17 files changed

+16777
-24731
lines changed

src/grt/src/cugr/src/GridGraph.cpp

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
#include "GRNet.h"
2222
#include "GRTree.h"
2323
#include "geo.h"
24-
#include "odb/dbTransform.h"
24+
#include "odb/db.h"
2525
#include "robin_hood.h"
2626
#include "utl/Logger.h"
2727

@@ -37,8 +37,8 @@ GridGraph::GridGraph(const Design* design,
3737
num_layers_(design->getNumLayers()),
3838
x_size_(gridlines_[0].size() - 1),
3939
y_size_(gridlines_[1].size() - 1),
40-
constants_(constants),
41-
design_(design)
40+
design_(design),
41+
constants_(constants)
4242
{
4343
grid_centers_.resize(2);
4444
for (int dimension = 0; dimension <= 1; dimension++) {
@@ -381,13 +381,16 @@ bool GridGraph::findODBAccessPoints(
381381
const std::vector<odb::dbAccessPoint*>& bpin_pas
382382
= bpin->getAccessPoints();
383383
// Iterates per each AP and converts to CUGR structures
384+
access_points.insert(
385+
access_points.begin(), bpin_pas.begin(), bpin_pas.end());
384386
for (auto ap : bpin_pas) {
385387
auto point = ap->getPoint();
386388
auto layer = ap->getLayer();
387389
const PointT selected_point = PointT(point.getX() / amount_per_x,
388390
point.getY() / amount_per_y);
389-
const IntervalT selected_layer = IntervalT(layer->getNumber());
390-
const AccessPoint ap_new{selected_point, selected_layer};
391+
const IntervalT selected_layer = IntervalT(layer->getNumber() - 2);
392+
const AccessPoint ap_new{.point = selected_point,
393+
.layers = selected_layer};
391394
selected_access_points.emplace(ap_new).first;
392395
}
393396
}
@@ -396,6 +399,9 @@ bool GridGraph::findODBAccessPoints(
396399
for (auto iterms : db_net->getITerms()) {
397400
auto pref_access_points = iterms->getPrefAccessPoints();
398401
if (!pref_access_points.empty()) {
402+
access_points.insert(access_points.end(),
403+
pref_access_points.begin(),
404+
pref_access_points.end());
399405
// Iterates in ITerm prefered APs and convert to CUGR strucutres
400406
for (auto ap : pref_access_points) {
401407
int x, y;
@@ -405,8 +411,9 @@ bool GridGraph::findODBAccessPoints(
405411
const PointT selected_point
406412
= PointT((point.getX() + x) / amount_per_x,
407413
(point.getY() + y) / amount_per_y);
408-
const IntervalT selected_layer = IntervalT(layer->getNumber());
409-
const AccessPoint ap_new{selected_point, selected_layer};
414+
const IntervalT selected_layer = IntervalT(layer->getNumber() - 2);
415+
const AccessPoint ap_new{.point = selected_point,
416+
.layers = selected_layer};
410417
selected_access_points.emplace(ap_new).first;
411418
}
412419
}
@@ -416,17 +423,6 @@ bool GridGraph::findODBAccessPoints(
416423
if (access_points.empty()) {
417424
return false;
418425
}
419-
// Update layers for each AP
420-
for (auto& selected_point : selected_access_points) {
421-
auto it = selected_access_points.find(selected_point);
422-
IntervalT& fixedLayerInterval = it->layers;
423-
for (const auto& point : selected_access_points) {
424-
if (point.point.x() == selected_point.point.x()
425-
&& point.point.y() == selected_point.point.y()) {
426-
fixedLayerInterval.Update(point.layers.high());
427-
}
428-
}
429-
}
430426
return true;
431427
}
432428

@@ -440,7 +436,6 @@ AccessPointSet GridGraph::selectAccessPoints(const GRNet* net) const
440436
const PointT netCenter(boundingBox.cx(), boundingBox.cy());
441437
if (findODBAccessPoints(net, selected_access_points)) {
442438
// Skips calculations if DRT already created APs in ODB
443-
logger_->report("Found ODB accesspoint for net {} \n", net->getName());
444439
} else {
445440
for (const std::vector<GRPoint>& accessPoints : net->getPinAccessPoints()) {
446441
std::pair<int, int> bestAccessDist = {0, std::numeric_limits<int>::max()};
@@ -494,11 +489,11 @@ AccessPointSet GridGraph::selectAccessPoints(const GRNet* net) const
494489
}
495490
}
496491
}
497-
// Extend the fixed layers to 2 layers higher to facilitate track switching
492+
// TODO: Removing this part is causing issues, but it shouldnt
498493
for (auto& accessPoint : selected_access_points) {
499494
IntervalT& fixedLayers = accessPoint.layers;
500495
fixedLayers.SetHigh(
501-
std::min(fixedLayers.high() + 2, (int) getNumLayers() - 1));
496+
std::min(fixedLayers.high() + 0, (int) getNumLayers() - 1));
502497
}
503498
return selected_access_points;
504499
}

src/grt/test/clock_route_cugr.guideok

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
clk
22
(
3-
0 201600 7200 208800 met3
4-
0 151200 7200 208800 met4
5-
0 201600 7200 208800 met4
6-
0 151200 7200 158400 met3
7-
0 151200 136800 158400 met3
3+
0 201600 136800 208800 met3
4+
129600 201600 136800 208800 met3
5+
129600 151200 136800 208800 met4
86
129600 151200 136800 158400 li1
97
129600 151200 136800 158400 met1
108
129600 151200 136800 158400 met2
9+
129600 151200 136800 158400 met3
1110
)
1211
clknet_0_clk
1312
(
@@ -272,7 +271,6 @@ net56
272271
129600 122400 136800 129600 met2
273272
115200 122400 122400 144000 met2
274273
115200 136800 122400 144000 met1
275-
115200 136800 122400 144000 met2
276274
)
277275
net57
278276
(
@@ -289,22 +287,16 @@ net58
289287
108000 172800 115200 180000 met1
290288
108000 172800 115200 187200 met2
291289
108000 180000 115200 187200 met1
292-
108000 180000 115200 187200 met2
293290
)
294291
net59
295292
(
296293
108000 194400 115200 201600 li1
297294
108000 194400 115200 201600 met1
298-
108000 194400 115200 201600 met1
299-
108000 194400 115200 201600 met2
300-
108000 194400 115200 201600 met2
301-
108000 194400 115200 201600 met3
302295
)
303296
net60
304297
(
305298
115200 194400 122400 201600 met1
306299
115200 194400 122400 208800 met2
307-
115200 194400 122400 201600 met2
308300
115200 201600 122400 208800 li1
309301
115200 201600 122400 208800 met1
310302
)
@@ -314,7 +306,6 @@ net61
314306
122400 187200 129600 194400 met1
315307
122400 187200 129600 201600 met2
316308
122400 194400 129600 201600 met1
317-
122400 194400 129600 201600 met2
318309
)
319310
net62
320311
(
@@ -330,7 +321,6 @@ net63
330321
(
331322
129600 187200 136800 194400 met1
332323
129600 187200 136800 201600 met2
333-
129600 187200 136800 194400 met2
334324
129600 194400 136800 208800 met2
335325
129600 194400 136800 201600 li1
336326
129600 194400 136800 201600 met1

src/grt/test/clock_route_cugr.ok

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ stage 1: pattern routing
2929
0 / 15 nets have overflow.
3030
routing statistics
3131
wire length (metric): 2918
32-
total via count: 211
32+
total via count: 203
3333
total wire overflow: 0
3434
min resource: 2
3535
bottleneck: (5, 0, 0)

src/grt/test/clock_route_cugr2.guideok

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
clk
22
(
33
0 201600 136800 208800 met3
4-
0 201600 7200 208800 met3
5-
0 201600 7200 208800 met4
64
129600 201600 136800 208800 met3
75
129600 151200 136800 208800 met4
86
129600 151200 136800 158400 li1
@@ -274,7 +272,6 @@ net56
274272
129600 122400 136800 129600 met2
275273
115200 122400 122400 144000 met2
276274
115200 136800 122400 144000 met1
277-
115200 136800 122400 144000 met2
278275
)
279276
net57
280277
(
@@ -291,22 +288,16 @@ net58
291288
108000 172800 115200 180000 met1
292289
108000 172800 115200 187200 met2
293290
108000 180000 115200 187200 met1
294-
108000 180000 115200 187200 met2
295291
)
296292
net59
297293
(
298294
108000 194400 115200 201600 li1
299295
108000 194400 115200 201600 met1
300-
108000 194400 115200 201600 met1
301-
108000 194400 115200 201600 met2
302-
108000 194400 115200 201600 met2
303-
108000 194400 115200 201600 met3
304296
)
305297
net60
306298
(
307299
115200 194400 122400 201600 met1
308300
115200 194400 122400 208800 met2
309-
115200 194400 122400 201600 met2
310301
115200 201600 122400 208800 li1
311302
115200 201600 122400 208800 met1
312303
)
@@ -316,7 +307,6 @@ net61
316307
122400 187200 129600 194400 met1
317308
122400 187200 129600 201600 met2
318309
122400 194400 129600 201600 met1
319-
122400 194400 129600 201600 met2
320310
)
321311
net62
322312
(
@@ -332,7 +322,6 @@ net63
332322
(
333323
129600 187200 136800 194400 met1
334324
129600 187200 136800 201600 met2
335-
129600 187200 136800 194400 met2
336325
129600 194400 136800 208800 met2
337326
129600 194400 136800 201600 li1
338327
129600 194400 136800 201600 met1

src/grt/test/clock_route_cugr2.ok

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ stage 1: pattern routing
2929
0 / 15 nets have overflow.
3030
routing statistics
3131
wire length (metric): 2918
32-
total via count: 213
32+
total via count: 204
3333
total wire overflow: 0
3434
min resource: 1
3535
bottleneck: (5, 0, 0)

0 commit comments

Comments
 (0)