diff options
author | David Shah <davey1576@gmail.com> | 2019-02-25 12:46:06 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-25 12:46:06 +0000 |
commit | 031725c80eb6c2c0f922b6fa5be57c42330a8a3b (patch) | |
tree | 49215217265802745407465c41f9b493e74f47b1 /ecp5/globals.cc | |
parent | e87fb696653262bea08caa100f0a5d4d31d2a310 (diff) | |
parent | df79d94944b4d92207be7ddedc6424b7c931f313 (diff) | |
download | nextpnr-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.cc | 19 |
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(); } |