aboutsummaryrefslogtreecommitdiffstats
path: root/ecp5/globals.cc
diff options
context:
space:
mode:
authorDavid Shah <davey1576@gmail.com>2019-02-25 12:46:06 +0000
committerGitHub <noreply@github.com>2019-02-25 12:46:06 +0000
commit031725c80eb6c2c0f922b6fa5be57c42330a8a3b (patch)
tree49215217265802745407465c41f9b493e74f47b1 /ecp5/globals.cc
parente87fb696653262bea08caa100f0a5d4d31d2a310 (diff)
parentdf79d94944b4d92207be7ddedc6424b7c931f313 (diff)
downloadnextpnr-031725c80eb6c2c0f922b6fa5be57c42330a8a3b.tar.gz
nextpnr-031725c80eb6c2c0f922b6fa5be57c42330a8a3b.tar.bz2
nextpnr-031725c80eb6c2c0f922b6fa5be57c42330a8a3b.zip
Merge pull request #242 from YosysHQ/ecp5next
ecp5: Fixes and QoR improvements
Diffstat (limited to 'ecp5/globals.cc')
-rw-r--r--ecp5/globals.cc19
1 files changed, 12 insertions, 7 deletions
diff --git a/ecp5/globals.cc b/ecp5/globals.cc
index 49947b20..fae2c683 100644
--- a/ecp5/globals.cc
+++ b/ecp5/globals.cc
@@ -448,6 +448,8 @@ class Ecp5GlobalRouter
if (i < 8)
fab_globals.insert(i);
}
+ std::vector<std::pair<PortRef *, int>> toroute;
+ std::unordered_map<int, NetInfo *> clocks;
for (auto cell : sorted(ctx->cells)) {
CellInfo *ci = cell.second;
if (ci->type == id_DCCA) {
@@ -472,15 +474,18 @@ class Ecp5GlobalRouter
NPNR_ASSERT(routed);
// WCK must have routing priority
- auto sorted_users = clock->users;
- std::sort(sorted_users.begin(), sorted_users.end(), [this](const PortRef &a, const PortRef &b) {
- return global_route_priority(a) < global_route_priority(b);
- });
- for (const auto &user : sorted_users) {
- route_logic_tile_global(clock, glbid, user);
- }
+ for (auto &user : clock->users)
+ toroute.emplace_back(&user, glbid);
+ clocks[glbid] = clock;
}
}
+ std::sort(toroute.begin(), toroute.end(),
+ [this](const std::pair<PortRef *, int> &a, const std::pair<PortRef *, int> &b) {
+ return global_route_priority(*a.first) < global_route_priority(*b.first);
+ });
+ for (const auto &user : toroute) {
+ route_logic_tile_global(clocks.at(user.second), user.second, *user.first);
+ }
}
};
void promote_ecp5_globals(Context *ctx) { Ecp5GlobalRouter(ctx).promote_globals(); }