From 3c60ea383d988937c45559fcc2f387b3c187287f Mon Sep 17 00:00:00 2001 From: David Shah Date: Thu, 14 May 2020 13:12:30 +0100 Subject: ecp5: Improve global routing robustness Signed-off-by: David Shah --- ecp5/globals.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'ecp5') diff --git a/ecp5/globals.cc b/ecp5/globals.cc index 28061e1a..550af615 100644 --- a/ecp5/globals.cc +++ b/ecp5/globals.cc @@ -63,6 +63,13 @@ class Ecp5GlobalRouter return false; } + bool is_logic_port(const PortRef &user) + { + if (user.cell->type == id_TRELLIS_SLICE && user.port != id_CLK && user.port != id_WCK) + return true; + return false; + } + std::vector get_clocks() { std::unordered_map clockCount; @@ -162,6 +169,8 @@ class Ecp5GlobalRouter if (ctx->checkWireAvail(next)) { for (auto pip : ctx->getPipsUphill(next)) { WireId src = ctx->getPipSrcWire(pip); + if (backtrace.count(src)) + continue; backtrace[src] = pip; upstream.push(src); } @@ -414,6 +423,8 @@ class Ecp5GlobalRouter keep_users.push_back(user); } else if (net->driver.cell->type == id_EXTREFB && user.cell->type == id_DCUA) { keep_users.push_back(user); + } else if (is_logic_port(user)) { + keep_users.push_back(user); } else { glbnet->users.push_back(user); user.cell->ports.at(user.port).net = glbnet.get(); -- cgit v1.2.3